Skip to content

Commit

Permalink
Install OCaml
Browse files Browse the repository at this point in the history
  • Loading branch information
koba-e964 committed Dec 13, 2019
1 parent 3fbf38f commit 065cd03
Show file tree
Hide file tree
Showing 2 changed files with 341 additions and 0 deletions.
337 changes: 337 additions & 0 deletions .travis-ocaml.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,337 @@
## basic OCaml and opam installation

full_apt_version () {
package=$1
version=$2
case "${version}" in
latest) echo -n "${package}" ;;
*) echo -n "${package}="
apt-cache show "$package" \
| sed -n "s/^Version: \(${version}\)/\1/p" \
| head -1
esac
}

set -uex


# the ocaml version to test
OCAML_VERSION=${OCAML_VERSION:-latest}
SYS_OCAML_VERSION=4.02
# Default opam is the latest release of opam 2
OPAM_VERSION=${OPAM_VERSION:-2}
OPAM_INIT=${OPAM_INIT:-true}

OPAM_LATEST_RELEASE=2.0.5

case $OPAM_VERSION in
2|2.0) OPAM_VERSION=$OPAM_LATEST_RELEASE;;
esac

if [ "$TRAVIS_OS_NAME" = "osx" ] ; then
brew update &> /dev/null
BREW_OPAM_VERSION=$(brew info opam --json=v1 | sed -e 's/.*"versions":{[^}]*"stable":"//' -e 's/".*//')
if [ "$OPAM_VERSION" != "$BREW_OPAM_VERSION" ] ; then
set +x
echo -e "[\e[0;31mWARNING\e[0m] Ignored OPAM_VERSION=$OPAM_VERSION; interpreted as \"$BREW_OPAM_VERSION\"" >&2
echo -e "[\e[0;31mWARNING\e[0m] opam 2 is installed via Homebrew" >&2
set -x
fi
OPAM_VERSION="$BREW_OPAM_VERSION"
fi

if [ "$OPAM_VERSION" != "$OPAM_LATEST_RELEASE" ] ; then
set +x
echo -e "[\e[0;31mWARNING\e[0m] Out-of-date opam $OPAM_VERSION requested" >&2
echo -e "[\e[0;31mWARNING\e[0m] Latest release is $OPAM_LATEST_RELEASE" >&2
set -x
fi

if [ "${INSTALL_LOCAL+x}" = x ] ; then
if [ "$TRAVIS_OS_NAME" = osx ] ; then
echo INSTALL_LOCAL not permitted for macOS targets
exit 1
fi

case ${OPAM_VERSION} in
2*)
if [ "${OPAM_SWITCH:=ocaml-system}" != ocaml-system ] ; then
echo "INSTALL_LOCAL requires OPAM_SWITCH=ocaml-system (or unset/null)"
exit 1
fi ;;
*)
if [ "${OPAM_SWITCH:=system}" != system ] ; then
echo "INSTALL_LOCAL requires OPAM_SWITCH=system (or unset/null)"
exit 1
fi ;;
esac
fi

# the base opam repository to use for bootstrapping and catch-all namespace
case $OPAM_VERSION in
2*) BASE_REMOTE=${BASE_REMOTE:-git://github.com/ocaml/opam-repository} ;;
*) BASE_REMOTE=${BASE_REMOTE:-git://github.com/ocaml/opam-repository#1.2} ;;
esac

# whether we need a new gcc and binutils
UPDATE_GCC_BINUTILS=${UPDATE_GCC_BINUTILS:-"0"}

# Install Trusty remotes
UBUNTU_TRUSTY=${UBUNTU_TRUSTY:-"0"}

# Install XQuartz on OSX
INSTALL_XQUARTZ=${INSTALL_XQUARTZ:-"false"}

APT_UPDATED=0

add_ppa () {
if [ "$TRAVIS_OS_NAME" = "linux" ] ; then
APT_UPDATED=0
sudo add-apt-repository --yes ppa:$1
fi
}

apt_install () {
if [ "$TRAVIS_OS_NAME" = "linux" ] ; then
if [ "$APT_UPDATED" -eq 0 ] ; then
APT_UPDATED=1
sudo apt-get update -qq
fi
sudo apt-get install --no-install-recommends -y "$@"
fi
}

install_ocaml () {
apt_install \
ocaml ocaml-base ocaml-native-compilers ocaml-compiler-libs \
ocaml-interp ocaml-base-nox ocaml-nox
}

install_opam2 () {
case $TRAVIS_OS_NAME in
linux)
case $TRAVIS_DIST in
precise|trusty|xenial)
add_ppa ansible/bubblewrap ;;
esac
if [ "${INSTALL_LOCAL:=0}" = 0 ] ; then
install_ocaml
fi
apt_install bubblewrap
sudo wget https://github.com/ocaml/opam/releases/download/$OPAM_VERSION/opam-$OPAM_VERSION-x86_64-linux -O /usr/local/bin/opam
sudo chmod +x /usr/local/bin/opam ;;
osx)
if [ "${INSTALL_LOCAL:=0}" = 0 ] ; then
brew install ocaml
fi
sudo curl -fsSL https://github.com/ocaml/opam/releases/download/$OPAM_VERSION/opam-$OPAM_VERSION-x86_64-macos -o /usr/local/bin/opam
sudo chmod +x /usr/local/bin/opam ;;
esac
}

install_ppa () {
add_ppa $1
if [ "${INSTALL_LOCAL:=0}" = 0 ] ; then
sudo apt-get -qq update
APT_UPDATED=1
apt_install \
"$(full_apt_version ocaml $SYS_OCAML_VERSION)" \
"$(full_apt_version ocaml-base $SYS_OCAML_VERSION)" \
"$(full_apt_version ocaml-native-compilers $SYS_OCAML_VERSION)" \
"$(full_apt_version ocaml-compiler-libs $SYS_OCAML_VERSION)" \
"$(full_apt_version ocaml-interp $SYS_OCAML_VERSION)" \
"$(full_apt_version ocaml-base-nox $SYS_OCAML_VERSION)" \
"$(full_apt_version ocaml-nox $SYS_OCAML_VERSION)"
fi
apt_install opam
}

install_on_linux () {
case "$OCAML_VERSION,$OPAM_VERSION" in
3.12,1.2.2)
OCAML_FULL_VERSION=3.12.1
install_ppa avsm/ocaml42+opam12 ;;
3.12,2*)
OCAML_FULL_VERSION=3.12.1
install_opam2 ;;
4.00,1.2.2)
OCAML_FULL_VERSION=4.00.1
install_ppa avsm/ocaml42+opam12 ;;
4.00,2*)
OCAML_FULL_VERSION=4.00.1
install_opam2 ;;
4.01,1.2.2)
OCAML_FULL_VERSION=4.01.0
install_ppa avsm/ocaml42+opam12 ;;
4.01,2*)
OCAML_FULL_VERSION=4.01.0
install_opam2 ;;
4.02,1.1.2)
OCAML_FULL_VERSION=4.02.3
OPAM_SWITCH=${OPAM_SWITCH:-system}
install_ppa avsm/ocaml42+opam11 ;;
4.02,1.2.0)
OCAML_FULL_VERSION=4.02.3
OPAM_SWITCH=${OPAM_SWITCH:-system}
install_ppa avsm/ocaml42+opam120 ;;
4.02,1.2.1)
OCAML_FULL_VERSION=4.02.3
OPAM_SWITCH=${OPAM_SWITCH:-system}
install_ppa avsm/ocaml42+opam121 ;;
4.02,1.2.2)
OCAML_FULL_VERSION=4.02.3
OPAM_SWITCH=${OPAM_SWITCH:-system}
install_ppa avsm/ocaml42+opam12 ;;
4.02,2*)
OCAML_FULL_VERSION=4.02.3
install_opam2 ;;
4.03,1.2.2)
OCAML_FULL_VERSION=4.03.0
install_ppa avsm/ocaml42+opam12 ;;
4.03,2*)
OCAML_FULL_VERSION=4.03.0
install_opam2 ;;
4.04,1.2.2)
OCAML_FULL_VERSION=4.04.2
install_ppa avsm/ocaml42+opam12 ;;
4.04,2*)
OCAML_FULL_VERSION=4.04.2
install_opam2 ;;
4.05,1.2.2)
OCAML_FULL_VERSION=4.05.0
install_ppa avsm/ocaml42+opam12 ;;
4.05,2*)
OCAML_FULL_VERSION=4.05.0
install_opam2 ;;
4.06,1.2.2)
OCAML_FULL_VERSION=4.06.1
install_ppa avsm/ocaml42+opam12 ;;
4.06,2*)
OCAML_FULL_VERSION=4.06.1
install_opam2 ;;
4.07,1.2.2)
OCAML_FULL_VERSION=4.07.1
install_ppa avsm/ocaml42+opam12 ;;
4.07,2*)
OCAML_FULL_VERSION=4.07.1
install_opam2 ;;
4.08,1.2.2)
OCAML_FULL_VERSION=4.08.1
install_ppa avsm/ocaml42+opam12 ;;
4.08,2*)
OCAML_FULL_VERSION=4.08.1
install_opam2 ;;
4.09,1.2.2)
OCAML_FULL_VERSION=4.09.0
install_ppa avsm/ocaml42+opam12 ;;
4.09,2*)
OCAML_FULL_VERSION=4.09.0
install_opam2 ;;
*) echo "Unknown OCAML_VERSION=$OCAML_VERSION OPAM_VERSION=$OPAM_VERSION"
echo "(An unset OCAML_VERSION used to default to \"latest\", but you must now specify it."
echo "Try something like \"OCAML_VERSION=3.12\", \"OCAML_VERSION=4.09\", or see README-travis.md at https://github.com/ocaml/ocaml-ci-scripts )"
exit 1 ;;
esac

TRUSTY="deb mirror://mirrors.ubuntu.com/mirrors.txt trusty main restricted universe"

if [ "$UPDATE_GCC_BINUTILS" != "0" ] ; then
echo "installing a recent gcc and binutils (mainly to get mirage-entropy-xen working!)"
sudo add-apt-repository "${TRUSTY}"
sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test
sudo apt-get -qq update
sudo apt-get install -y gcc-4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 90
sudo add-apt-repository -r "${TRUSTY}"
fi

if [ "$UBUNTU_TRUSTY" != "0" ] ; then
echo "Adding Ubuntu Trusty mirrors"
sudo add-apt-repository "${TRUSTY}"
sudo apt-get -qq update
APT_UPDATED=1
fi

if [ "${INSTALL_LOCAL:=0}" != 0 ] ; then
echo -en "travis_fold:start:build.ocaml\r"
echo "Building a local OCaml; this may take a few minutes..."
wget "http://caml.inria.fr/pub/distrib/ocaml-${OCAML_FULL_VERSION%.*}/ocaml-$OCAML_FULL_VERSION.tar.gz"
tar -xzf "ocaml-$OCAML_FULL_VERSION.tar.gz"
cd "ocaml-$OCAML_FULL_VERSION"
./configure -prefix /usr/local ${OCAML_CONFIGURE_ARGS:=--with-debug-runtime}
make world.opt
sudo make install
cd ..
echo -en "travis_fold:end:build.ocaml\r"
fi
}

install_on_osx () {
case $INSTALL_XQUARTZ in
true)
curl -OL "http://xquartz.macosforge.org/downloads/SL/XQuartz-2.7.6.dmg"
sudo hdiutil attach XQuartz-2.7.6.dmg
sudo installer -verbose -pkg /Volumes/XQuartz-2.7.6/XQuartz.pkg -target /
;;
esac
case "$OCAML_VERSION,$OPAM_VERSION" in
3.12,1.2.2) OCAML_FULL_VERSION=3.12.1; brew install opam ;;
3.12,2*) OCAML_FULL_VERSION=3.12.1; install_opam2 ;;
4.00,1.2.2) OCAML_FULL_VERSION=4.00.1; brew install opam ;;
4.00,2*) OCAML_FULL_VERSION=4.00.1; install_opam2 ;;
4.01,1.2.2) OCAML_FULL_VERSION=4.01.0; brew install opam ;;
4.01,2*) OCAML_FULL_VERSION=4.01.0; install_opam2 ;;
4.02,1.2.2) OCAML_FULL_VERSION=4.02.3; brew install opam ;;
4.02,2*) OCAML_FULL_VERSION=4.02.3; install_opam2 ;;
4.03,1.2.2) OCAML_FULL_VERSION=4.03.0; brew install opam ;;
4.03,2*) OCAML_FULL_VERSION=4.03.0; install_opam2 ;;
4.04,1.2.2) OCAML_FULL_VERSION=4.04.2; brew install opam ;;
4.04,2*) OCAML_FULL_VERSION=4.04.2; install_opam2 ;;
4.05,1.2.2) OCAML_FULL_VERSION=4.05.0; brew install opam ;;
4.05,2*) OCAML_FULL_VERSION=4.05.0; install_opam2 ;;
4.06,1.2.2) OCAML_FULL_VERSION=4.06.1; brew install opam ;;
4.06,2*) OCAML_FULL_VERSION=4.06.1; install_opam2 ;;
4.07,1.2.2) OCAML_FULL_VERSION=4.07.1; brew install opam ;;
4.07,2*) OCAML_FULL_VERSION=4.07.1; install_opam2 ;;
4.08,1.2.2) OCAML_FULL_VERSION=4.08.1;
OPAM_SWITCH=${OPAM_SWITCH:-system};
brew install ocaml;
brew install opam ;;
4.08,2*) OCAML_FULL_VERSION=4.08.1;
OPAM_SWITCH=${OPAM_SWITCH:-ocaml-system};
brew install ocaml;
install_opam2 ;;
4.09,1.2.2) OCAML_FULL_VERSION=4.09.0; brew install opam ;;
4.09,2*) OCAML_FULL_VERSION=4.09.0; install_opam2 ;;
*) echo "Unknown OCAML_VERSION=$OCAML_VERSION OPAM_VERSION=$OPAM_VERSION"
exit 1 ;;
esac
}

case $TRAVIS_OS_NAME in
osx) install_on_osx ;;
linux) install_on_linux ;;
esac

OPAM_SWITCH=${OPAM_SWITCH:-ocaml-base-compiler.$OCAML_FULL_VERSION}

export OPAMYES=1

case $OPAM_INIT in
true)
opam init -a "$BASE_REMOTE" --comp="$OPAM_SWITCH"
eval $(opam config env)
;;
esac

echo OCAML_VERSION=$OCAML_VERSION > .travis-ocaml.env
echo OPAM_SWITCH=$OPAM_SWITCH >> .travis-ocaml.env

if [ -x "$(command -v ocaml)" ]; then
ocaml -version
else
echo "OCaml is not yet installed"
fi

opam --version
opam --git-version
4 changes: 4 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
language: rust
matrix:
env:
global:
- OCAML_VERSION=4.02
include:
- rust: stable
env: RUST_CHANNEL=stable
Expand All @@ -10,6 +13,7 @@ matrix:
allow_failures:
- rust: nightly
install:
- bash -ex .travis-ocaml.sh
- cargo install cargo-bloat
- rustup component add clippy rustfmt
- if [ $RUST_CHANNEL == "nightly" ]; then
Expand Down

0 comments on commit 065cd03

Please sign in to comment.