File: install.sh

package info (click to toggle)
python-gevent 25.9.1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 22,036 kB
  • sloc: python: 170,894; ansic: 82,360; sh: 6,265; makefile: 1,550; javascript: 108
file content (133 lines) | stat: -rwxr-xr-x 4,174 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/usr/bin/env bash
# GEVENT: Taken from https://raw.githubusercontent.com/DRMacIver/hypothesis/master/scripts/install.sh

# Special license: Take literally anything you want out of this file. I don't
# care. Consider it WTFPL licensed if you like.
# Basically there's a lot of suffering encoded here that I don't want you to
# have to go through and you should feel free to use this to avoid some of
# that suffering in advance.

set -e
set -x


# Where installations go
BASE=${BUILD_RUNTIMES-$PWD/.runtimes}
PYENV=$BASE/pyenv
echo $BASE
mkdir -p $BASE

update_pyenv () {
    VERSION="$1"
    if [ ! -d "$PYENV/.git" ]; then
        rm -rf $PYENV
        git clone https://github.com/pyenv/pyenv.git $BASE/pyenv
    else
        if [ ! -f "$PYENV/plugins/python-build/share/python-build/$VERSION" ]; then
            echo "Updating $PYENV for $VERSION"
            back=$PWD
            cd $PYENV

            git fetch || echo "Fetch failed to complete. Ignoring"
            git reset --hard origin/master
            cd $back
        fi
    fi
}


SNAKEPIT=$BASE/snakepit


##
# install(exact-version, bin-alias, dir-alias)
#
# Produce a python executable at $SNAKEPIT/bin-alias
# having the exact version given as exact-version.
#
# Also produces a $SNAKEPIT/dir-alias/ pointing to the root
# of the python install.
##
install () {

    VERSION="$1"
    ALIAS="$2"
    DIR_ALIAS="$3"

    DESTINATION=$BASE/versions/$VERSION

    mkdir -p $BASE/versions
    mkdir -p $SNAKEPIT

    if [ ! -e "$DESTINATION" ]; then
        mkdir -p $SNAKEPIT
        mkdir -p $BASE/versions
        update_pyenv $VERSION
        # -Ofast makes the build take too long and times out Travis. It also affects
        # process-wide floating-point flags - see: https://github.com/gevent/gevent/pull/1864
        CFLAGS="-O1 -pipe -march=native" $BASE/pyenv/plugins/python-build/bin/python-build $VERSION $DESTINATION
    fi

    # Travis CI doesn't take symlink changes (or creation!) into
    # account on its caching, So we need to write an actual file if we
    # actually changed something. For python version upgrades, this is
    # usually handled automatically (obviously) because we installed
    # python. But if we make changes *just* to symlink locations above,
    # nothing happens. So for every symlink, write a file...with identical contents,
    # so that we don't get *spurious* caching. (Travis doesn't check for mod times,
    # just contents, so echoing each time doesn't cause it to re-cache.)

    # Overwrite an existing alias.
    # For whatever reason, ln -sf on Travis works fine for the ALIAS,
    # but fails for the DIR_ALIAS. No clue why. So we delete an existing one of those
    # manually.
    if [ -L "$SNAKEPIT/$DIR_ALIAS" ]; then
        rm -f $SNAKEPIT/$DIR_ALIAS
    fi
    ln -sfv $DESTINATION/bin/python $SNAKEPIT/$ALIAS
    ln -sfv $DESTINATION $SNAKEPIT/$DIR_ALIAS
    echo $VERSION $ALIAS $DIR_ALIAS > $SNAKEPIT/$ALIAS.installed
    $SNAKEPIT/$ALIAS --version
    $DESTINATION/bin/python --version
    # Set the PATH to include the install's bin directory so pip
    # doesn't nag.
    # Use quiet mode for this; PyPy2 has been seen to output
    # an error:
    #     UnicodeEncodeError: 'ascii' codec can't encode
    #     character u'\u258f' in position 6: ordinal not in range(128)
    # https://travis-ci.org/github/gevent/gevent/jobs/699973435
    PATH="$DESTINATION/bin/:$PATH" $SNAKEPIT/$ALIAS -m pip install -q --upgrade pip wheel virtualenv
    ls -l $SNAKEPIT
    ls -l $BASE/versions

}


for var in "$@"; do
    case "${var}" in
        2.7)
            install 2.7.17 python2.7 2.7.d
            ;;
        3.5)
            install 3.5.9 python3.5 3.5.d
            ;;
        3.6)
            install 3.6.10 python3.6 3.6.d
            ;;
        3.7)
            install 3.7.7 python3.7 3.7.d
            ;;
        3.8)
            install 3.8.2 python3.8 3.8.d
            ;;
        3.9)
            install 3.9.0 python3.9 3.9.d
            ;;
        pypy2.7)
            install pypy2.7-7.3.1 pypy2.7 pypy2.7.d
            ;;
        pypy3.6)
            install pypy3.6-7.3.1 pypy3.6 pypy3.6.d
            ;;
    esac
done