prepare-opam.sh 2.93 KB
Newer Older
1 2 3 4 5 6 7 8
## This script installs the build dependencies for CI builds.

# Prepare OPAM configuration
export OPAMROOT="$(pwd)/opamroot"
export OPAMJOBS="$((2*$CPU_CORES))"
export OPAM_EDITOR="$(which false)"

# Make sure we got a good OPAM.
Ralf Jung's avatar
Ralf Jung committed
9
if test -d "$OPAMROOT"; then
Ralf Jung's avatar
Ralf Jung committed
10
    echo_color "$BOLDGREEN" "[prepare-opam] Re-using cached opam root"
Ralf Jung's avatar
Ralf Jung committed
11
else
Ralf Jung's avatar
Ralf Jung committed
12
    echo_color "$BOLDYELLOW" "[prepare-opam] Creating new opam root"
Ralf Jung's avatar
Ralf Jung committed
13 14
    mkdir "$OPAMROOT"
    opam init --no-setup -y
15
    FRESH_OPAM=yes
Ralf Jung's avatar
Ralf Jung committed
16
fi
17 18
eval `opam conf env`

19 20 21 22
if [[ -z "$FRESH_OPAM" ]]; then # skip if this is a fresh opam root
    # Make sure the pin for the builddep package exists and is up-to-date.
    # This avoids opam complaining about pins pointing to a non-existing file.
    make build-dep/opam
23

24 25 26
    # Update repositories
    opam update
fi
27 28

# Make sure we got the right set of repositories registered
29
if echo "$@" | egrep "(dev|beta)" > /dev/null; then
30 31 32 33 34 35 36 37 38 39 40 41 42
    # We are compiling against a dev version of something.  Get ourselves the dev repositories.
    test -d "$OPAMROOT/repo/coq-extra-dev" || opam repo add coq-extra-dev https://coq.inria.fr/opam/extra-dev -p 0
    test -d "$OPAMROOT/repo/coq-core-dev" || opam repo add coq-core-dev https://coq.inria.fr/opam/core-dev -p 5
else
    # No dev version, make sure we do not have the dev repositories.
    test -d "$OPAMROOT/repo/coq-extra-dev" && opam repo remove coq-extra-dev
    test -d "$OPAMROOT/repo/coq-core-dev" && opam repo remove coq-core-dev
fi
test -d "$OPAMROOT/repo/coq-released" || opam repo add coq-released https://coq.inria.fr/opam/released -p 10
test -d "$OPAMROOT/repo/iris-dev" || opam repo add iris-dev https://gitlab.mpi-sws.org/FP/opam-dev.git -p 20
echo

# We really want to run all of the following in one opam transaction, but due to opam limitations,
Ralf Jung's avatar
Ralf Jung committed
43 44
# that is not currently possible.  Once we use opam 2 for CI, we can first do all the pinning (with `-n`)
# followed by `opam upgrade --all build-dep/` (and hope this will also --fixup).
45 46

# Install fixed versions of some dependencies.
Ralf Jung's avatar
Ralf Jung committed
47
echo_color "$BOLDGREEN" "[prepare-opam] Processing pins"
48 49 50 51 52 53 54 55
while (( "$#" )); do # while there are arguments left
    PACKAGE="$1" ; shift
    KIND="$1" ; shift
    VERSION="$1" ; shift

    # Check if the pin is already set
    read -a PIN <<< $(opam pin list | (egrep "^$PACKAGE[. ]"))
    if [[ "${PIN[1]}" == "$KIND" && "${PIN[2]}" == "$VERSION" ]]; then
Ralf Jung's avatar
Ralf Jung committed
56
        echo_color "$BOLDGREEN" "[prepare-opam] $PACKAGE already $KIND-pinned to $VERSION"
57
    else
Ralf Jung's avatar
Ralf Jung committed
58
        echo_color "$BOLDYELLOW" "[prepare-opam] $KIND-pinning $PACKAGE to $VERSION"
59 60 61
        opam pin add -y -k "$KIND" "$PACKAGE" "$VERSION"
    fi
done
Ralf Jung's avatar
Ralf Jung committed
62
echo
63

64 65 66 67 68 69
if [[ -z "$FRESH_OPAM" ]]; then # skip if this is a fresh opam root
    # Upgrade cached things
    echo_color "$BOLDGREEN" "[prepare-opam] Upgrading packages"
    opam upgrade -y --fixup && opam upgrade -y
    echo
fi
70 71

# Install build-dependencies.
Ralf Jung's avatar
Ralf Jung committed
72
echo_color "$BOLDGREEN" "[prepare-opam] Installing build-dependencies"
73
make build-dep OPAMFLAGS=-y
Ralf Jung's avatar
Ralf Jung committed
74
echo
75 76 77 78

# done
echo
coqc -v