https://gitlab.com/tezos/tezos
Raw File
Tip revision: 3385e4f7b3d2e03c1575c847fad326e416bb90be authored by Raphaël Cauderlier on 21 March 2023, 10:16:18 UTC
Add an alcotezt which fails
Tip revision: 3385e4f
install_build_deps.sh
#!/bin/sh

set -e

script_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)/")"
src_dir="$(dirname "$script_dir")"

#shellcheck source=scripts/version.sh
. "$script_dir"/version.sh

# make sure that this variable is declared
ocaml_version=${ocaml_version:?}
opam_repository=${opam_repository:?}

create_opam_switch() {
    [ -n "$1" ] || { echo "create_opam_switch expects a non-empty argument"; return 1; }
    opam switch create "$1" --repositories=tezos "ocaml-base-compiler.$ocaml_version" --no-install
}

if [ "$1" = "--dev" ]; then
    dev=yes
else
    dev=
fi

# $OPAMSWITCH variable makes the following commands fail if the switch referred
# to by it does not exist. Since we're going to create it later, for now let's
# pretend it's not set.
opamswitch="$OPAMSWITCH"
unset OPAMSWITCH

opam repository set-url tezos --dont-select "$opam_repository" || \
    opam repository add tezos --dont-select "$opam_repository" > /dev/null 2>&1

opam update --repositories --development

OPAMSWITCH="$opamswitch"

# If $OPAMSWITCH is set to a non-existent switch, such a switch should be created.
if [ -n "$OPAMSWITCH" ]; then
    if ! opam env --set-switch > /dev/null; then
        echo "Creating local switch $OPAMSWITCH..."
        create_opam_switch "$OPAMSWITCH"
    else
        echo "$OPAMSWITCH already exists. Installing dependencies."
    fi
    eval "$(opam env --switch="$OPAMSWITCH" --set-switch)"
else
    if [ ! -d "$src_dir/_opam" ] ; then
        create_opam_switch "$src_dir"
    fi

    if [ ! -d "$src_dir/_opam" ] ; then
        echo "Failed to create the opam switch"
        exit 1
    fi
fi

eval "$(opam env --shell=sh)"

# Check if the default opam repo was set in this switch
default_switch=
if opam remote -s | grep -q default ; then
  default_switch=yes
fi

# remove the default repo so install tezos dependencies
opam repository remove default > /dev/null 2>&1

if [ "$(ocaml -vnum)" != "$ocaml_version" ]; then
    # If not removed, automatically installed dependencies would be
    # (tried to be) rebuilt in their old version with the new compiler
    # while they will probably be updated (and at least reinstalled)
    # by the next steps of the script
    opam remove -a --yes
    OPAMCLI=2.0 opam install --yes --unlock-base "ocaml-base-compiler.$ocaml_version"
fi

# Must be done before install_build_deps.raw.sh because install_build_deps.raw.sh installs
# opam packages that depend on Rust.
"$script_dir"/install_build_deps.rust.sh

# Opam < 2.1 requires opam-depext as a plugin, later versions include it
# natively:
case $(opam --version) in
    2.0.* )
        opam install --yes opam-depext ;;
esac

"$script_dir"/install_build_deps.raw.sh "$1"

# add back the default repo if asked to or it was present in the first
# place.  we add the rank here even if it wasn't there just to be on
# the safe side
if [ -n "$default_switch" ] || [ -n "$dev" ]; then
    opam remote add default --rank=-1 > /dev/null 2>&1 || true
fi

# install dev dependencies if asked
if [ -n "$dev" ]; then
    # Note: ocaml-lsp-server.1.6.0 dependencies are not constrained
    # enough (for [ppx_yojson_conv_lib] in particular), so we add a
    # minimal bound to ensure it won’t be picked by opam.
    # utop is constrained to avoid reinstalling in all the times.
    opam install --yes opam/virtual/octez-deps.opam opam/virtual/octez-dev-deps.opam --deps-only --criteria="-changed,-removed"
fi

"$script_dir"/install_sapling_parameters.sh

back to top