[setup] opam 2

Summary:
Switches from opam 1 to opam 2.

Opam2 has some cool new features that simplify some of the scripting.

Notable changes:
1. Use the new `opam lock` *plugin* from https://github.com/AltGr/opam-lock/ instead of https://github.com/rgrinberg/opam-lock. This has a simpler interface for our purposes.
2. Change the way `./build-infer.sh` can be called to use an already existing switch: simply pass `--user-opam-switch` to the script and it won't attempt to create/set the current switch. This can be used to build infer in a local switch for instance.
3. Take advantage of automatic pinning where possible, eg to install infer deps without using opam.locked.

Reviewed By: ngorogiannis

Differential Revision: D13167863

fbshipit-source-id: 1a667c270
master
Jules Villard 6 years ago committed by Facebook Github Bot
parent 94e723bc82
commit c00b076a05

1
.gitignore vendored

@ -16,7 +16,6 @@
/_build
/_build_logs
/infer/tests/codetoanalyze/java/*/codetoanalyze
/dependencies/infer-deps-*
_build_infer
*.exp.test*
*.test.dot

@ -2,6 +2,7 @@ sudo: required
language: c
os:
- linux
- osx
services: docker
osx_image: xcode7.3
before_install:
@ -11,10 +12,9 @@ before_install:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew unlink python; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install opam; fi
install:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then travis_wait 60 ./build-infer.sh --yes java --opam-switch 4.06.1 --only-setup-opam; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then eval `opam config env`; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then opam pin add -y --no-action -k git infer .; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then opam install -y infer; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then travis_wait 60 ./build-infer.sh --yes java --user-opam-switch --only-setup-opam; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then eval `opam env`; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then opam install --yes infer .; fi
script:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./.travis/local_install_tests.sh; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./.travis/docker_tests.sh; fi

@ -233,13 +233,13 @@ $ infer --debug -- clang -c examples/hello.c
$ firefox infer-out/captured/hello.c.*.html
```
## Updating opam and opam.lock
## Updating opam and opam.locked
tl; dr: Run `make opam.lock`.
tl; dr: Run `make opam.locked`.
opam.lock records fixed versions of the opam dependencies known to work with infer and to respect
opam.locked records fixed versions of the opam dependencies known to work with infer and to respect
the constraints in opam. This prevents unpredictable breakages of infer or its dependencies,
especially for infer releases, for which it is more difficult to change their package constraints
after the fact.
To add an opam package or update its version constraints, edit 'opam' then run `make opam.lock`.
To add an opam package or update its version constraints, edit 'opam' then run `make opam.locked`.

@ -14,7 +14,7 @@ page to install Infer.
Here are the prerequisites to be able to compile Infer on MacOSX. This
is required to compile everything from source.
- opam 1.2.2 (instructions [here](https://opam.ocaml.org/doc/Install.html#OSX))
- opam >= 2.0.0 (instructions [here](https://opam.ocaml.org/doc/Install.html#OSX))
- Python 2.7
- sqlite
- pkg-config
@ -41,7 +41,7 @@ brew cask install java
Here are the prerequisites to be able to compile Infer on Linux. This
is required to compile everything from source.
- opam 1.2.2
- opam >= 2.0.0
- Python 2.7
- pkg-config
- Java (only needed for the Java analysis)

@ -689,33 +689,20 @@ conf-clean: clean
$(REMOVE_DIR) $(MODELS_DIR)/objc/out/
# opam package to hold infer dependencies
INFER_PKG_OPAMLOCK=infer-lock-deps
# phony because it depends on opam's internal state
.PHONY: opam.lock
opam.lock: opam
$(QUIET)if test x"$$(git status --porcelain -- opam)" != "x"; then \
echo "ERROR: Changes to 'opam' detected." 1>&2; \
echo "ERROR: Please commit or revert your changes before updating opam.lock." 1>&2; \
echo "ERROR: This is because opam.lock is generated from the HEAD commit." 1>&2; \
exit 1; \
fi
.PHONY: opam.locked
opam.locked: opam
# allow users to not force a run of opam update since it's very slow
ifeq ($(NO_OPAM_UPDATE),)
$(QUIET)$(call silent_on_success,opam update,$(OPAM) update)
endif
$(QUIET)$(call silent_on_success,installing dependencies $(INFER_PKG_OPAMLOCK) opam package,\
OPAMSWITCH=$(OPAMSWITCH); \
$(OPAM) pin add --yes --no-action -k git $(INFER_PKG_OPAMLOCK) .#HEAD; \
$(OPAM) install --deps-only --yes $(INFER_PKG_OPAMLOCK))
$(QUIET)$(call silent_on_success,generating opam.lock,\
$(OPAM) lock --pkg $(INFER_PKG_OPAMLOCK) > opam.lock)
$(QUIET)$(call silent_on_success,generating opam.locked,\
$(OPAM) lock .)
# This is a magical version number that doesn't reinstall the world when added on top of what we
# have in opam.lock. To upgrade this version number, manually try to install several utop versions
# have in opam.locked. To upgrade this version number, manually try to install several utop versions
# until you find one that doesn't recompile the world. TODO(t20828442): get rid of magic
OPAM_DEV_DEPS = ocp-indent merlin utop.2.2.0 webbrowser
OPAM_DEV_DEPS = ocamlformat.0.8 ocp-indent merlin utop.2.2.0 webbrowser
ifneq ($(EMACS),no)
OPAM_DEV_DEPS += tuareg
@ -726,10 +713,6 @@ devsetup: Makefile.autoconf
$(QUIET)[ $(OPAM) != "no" ] || (echo 'No `opam` found, aborting setup.' >&2; exit 1)
$(QUIET)$(call silent_on_success,installing $(OPAM_DEV_DEPS),\
OPAMSWITCH=$(OPAMSWITCH); $(OPAM) install --yes --no-checksum user-setup $(OPAM_DEV_DEPS))
$(QUIET)echo '$(TERM_INFO)*** Running `opam config setup -a`$(TERM_RESET)' >&2
$(QUIET)OPAMSWITCH=$(OPAMSWITCH); $(OPAM) config --yes setup -a
$(QUIET)$(call silent_on_success,installing ocamlformat,\
OPAMSWITCH=$(OPAMSWITCH); $(OPAM) pin add --yes ocamlformat.$$(grep version .ocamlformat | cut -d ' ' -f 3) https://github.com/ocaml-ppx/ocamlformat.git#$$(grep version .ocamlformat | cut -d ' ' -f 3)-opam1)
$(QUIET)echo '$(TERM_INFO)*** Running `opam user-setup`$(TERM_RESET)' >&2
$(QUIET)OPAMSWITCH=$(OPAMSWITCH); OPAMYES=1; $(OPAM) user-setup install
$(QUIET)if [ "$(PLATFORM)" = "Darwin" ] && [ x"$(GNU_SED)" = x"no" ]; then \
@ -791,7 +774,7 @@ devsetup: Makefile.autoconf
echo '$(TERM_INFO)*** NOTE: The current shell is not set up for the right opam switch.$(TERM_RESET)' >&2; \
echo '$(TERM_INFO)*** NOTE: Please run:$(TERM_RESET)' >&2; \
echo >&2; \
echo "$(TERM_INFO) eval \$$($(OPAM) config env)$(TERM_RESET)" >&2; \
echo "$(TERM_INFO) eval \$$($(OPAM) env)$(TERM_RESET)" >&2; \
fi
GHPAGES ?= no

@ -13,12 +13,10 @@ set -u
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
INFER_ROOT="$SCRIPT_DIR"
INFER_DEPS_DIR="$INFER_ROOT/dependencies/infer-deps"
PLATFORM="$(uname)"
NCPU="$(getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1)"
OCAML_VERSION_DEFAULT="4.06.1+flambda"
INFER_OPAM_SWITCH_DEFAULT=infer-"$OCAML_VERSION_DEFAULT"
INFER_OPAM_DEFAULT_SWITCH="ocaml-variants.4.06.1+flambda"
INFER_OPAM_SWITCH=${INFER_OPAM_SWITCH:-$INFER_OPAM_DEFAULT_SWITCH}
function usage() {
echo "Usage: $0 [-y] [targets]"
@ -30,9 +28,9 @@ function usage() {
echo
echo " options:"
echo " -h,--help show this message"
echo " --no-opam-lock do not use the opam.lock file and let opam resolve dependencies"
echo " --no-opam-lock do not use the opam.locked file and let opam resolve dependencies"
echo " --only-setup-opam initialize opam, install the opam dependencies of infer, and exit"
echo " --opam-switch specify the opam switch where to install infer (default: $INFER_OPAM_SWITCH_DEFAULT)"
echo " --user-opam-switch use the current opam switch to install infer (default: $INFER_OPAM_DEFAULT_SWITCH)"
echo " -y,--yes automatically agree to everything"
echo
echo " examples:"
@ -48,10 +46,9 @@ INFER_CONFIGURE_OPTS=${INFER_CONFIGURE_OPTS:-""}
INFER_OPAM_SWITCH=${INFER_OPAM_SWITCH:-$INFER_OPAM_SWITCH_DEFAULT}
INTERACTIVE=${INTERACTIVE:-yes}
JOBS=${JOBS:-$NCPU}
OCAML_VERSION=${OCAML_VERSION:-$OCAML_VERSION_DEFAULT}
ONLY_SETUP_OPAM=${ONLY_SETUP_OPAM:-no}
OPAM_LOCK_URL=${OPAM_LOCK_URL:-https://github.com/rgrinberg/opam-lock}
USE_OPAM_LOCK=${USE_OPAM_LOCK:-yes}
USER_OPAM_SWITCH=no
ORIG_ARGS="$*"
@ -83,10 +80,8 @@ while [[ $# > 0 ]]; do
shift
continue
;;
--opam-switch)
shift
[[ $# > 0 ]] || (usage; exit 1)
INFER_OPAM_SWITCH="$1"
--user-opam-switch)
USER_OPAM_SWITCH=yes
shift
continue
;;
@ -108,115 +103,90 @@ while [[ $# > 0 ]]; do
done
# if no arguments then build both clang and Java
if [ "$BUILD_CLANG" = "no" ] && [ "$BUILD_JAVA" = "no" ]; then
if [ "$BUILD_CLANG" == "no" ] && [ "$BUILD_JAVA" == "no" ]; then
BUILD_CLANG=yes
BUILD_JAVA=yes
fi
# enable --yes option for some commands in non-interactive mode
YES=
if [ "$INTERACTIVE" = "no" ]; then
if [ "$INTERACTIVE" == "no" ]; then
YES=--yes
fi
# --yes by default for opam commands
export OPAMYES=1
check_installed () {
local cmd="$1"
if ! which "$cmd" >/dev/null 2>&1; then
echo "dependency not found: '$cmd'" >&2
exit 1
fi
}
opam_retry () {
"$@" || ( \
echo >&2; \
printf '*** `%s` failed\n' "$*" >&2; \
echo '*** Updating opam then retrying' >&2; \
opam update && \
"$@" || ( \
echo >&2; \
printf '*** ERROR: `%s` failed\n' "$*" >&2; \
exit 1 \
) \
) \
}
# --yes by default for opam commands except if we are using the user's opam switch
if [ "$INTERACTIVE" == "no" ] || [ "$USER_OPAM_SWITCH" == "no" ]; then
export OPAMYES=true
fi
setup_opam () {
opam_retry opam init --compiler="$OCAML_VERSION" -j "$JOBS" --no-setup
if [ "$INFER_OPAM_SWITCH" = "$INFER_OPAM_SWITCH_DEFAULT" ]; then
opam_retry opam switch set -j "$JOBS" "$INFER_OPAM_SWITCH" --alias-of "$OCAML_VERSION"
else
opam_retry opam switch set -j "$JOBS" "$INFER_OPAM_SWITCH"
fi
opam var root 1>/dev/null 2>/dev/null || opam init --reinit --bare --no-setup
opam_switch_create_if_needed "$INFER_OPAM_SWITCH"
opam switch set "$INFER_OPAM_SWITCH"
}
# Install and record the infer dependencies in opam. The main trick is to install the
# $INFER_DEPS_DIR directory instead of the much larger infer repository. That directory contains
# just enough to pretend it installs infer.
install_infer-deps () {
# remove previous infer-deps pin, which might have conflicting dependencies
opam pin remove infer-deps --no-action
INFER_TMP_DEPS_DIR="$(mktemp -d "$INFER_ROOT"/dependencies/infer-deps-XXXX)"
INFER_TMP_PACKAGE_NAME="$(basename "$INFER_TMP_DEPS_DIR")"
cp -a "$INFER_DEPS_DIR"/* "$INFER_TMP_DEPS_DIR"
# give unique name to the package to force opam to recheck the dependencies are all installed
opam pin add --no-action "$INFER_TMP_PACKAGE_NAME" "$INFER_TMP_DEPS_DIR"
opam install -j "$JOBS" --deps-only "$INFER_TMP_PACKAGE_NAME"
opam pin remove "$INFER_TMP_PACKAGE_NAME"
rm -fr "$INFER_TMP_DEPS_DIR"
# pin infer so that opam doesn't violate its package constraints when the user does
# "opam upgrade"
opam pin add infer-deps "$INFER_DEPS_DIR"
}
install_locked_deps() {
if ! opam lock 2> /dev/null; then
echo "opam-lock not found in the current switch, installing from '$OPAM_LOCK_URL'..." >&2
opam pin add -k git lock "$OPAM_LOCK_URL"
install_opam_deps () {
local locked=
if [ "$USE_OPAM_LOCK" == yes ]; then
locked=--locked
fi
opam lock --install < "$INFER_ROOT"/opam.lock
opam install --deps-only $locked infer "$INFER_ROOT"
}
install_opam_deps() {
if [ "$USE_OPAM_LOCK" = yes ]; then
install_locked_deps
else
install_infer-deps
fi
# temporary
# https://github.com/ocaml/opam-repository/issues/13040
warn_javalib_sandbox () {
echo "*** Did opam just fail to install javalib? If so you need to disable sandboxing." >&2
echo "*** Delete the following lines in $(opam var root)/config:" >&2
echo >&2
echo ' wrap-build-commands:' >&2
echo ' ["%{hooks}%/sandbox.sh" "build"] {os = "linux" | os = "macos"}' >&2
echo ' wrap-install-commands:' >&2
echo ' ["%{hooks}%/sandbox.sh" "install"] {os = "linux" | os = "macos"}' >&2
echo ' wrap-remove-commands:' >&2
echo ' ["%{hooks}%/sandbox.sh" "remove"] {os = "linux" | os = "macos"}' >&2
echo >&2
echo "*** once you are done don't forget to enable sandboxing again with" >&2
echo >&2
echo " opam init --reinit -ni" >&2
exit 1
}
echo "initializing opam... " >&2
check_installed opam
setup_opam
eval $(SHELL=bash opam config env --switch="$INFER_OPAM_SWITCH")
. "$INFER_ROOT"/scripts/opam_utils.sh
# workaround bug in opam regarding symlinks
# https://github.com/ocaml/opam/issues/3622
OPAMROOT=${OPAMROOT:-"$HOME"/.opam}
OPAMROOT=$(realpath "$OPAMROOT")
export OPAMROOT
if [ "$USER_OPAM_SWITCH" == "no" ]; then
setup_opam
fi
eval $(SHELL=bash opam env)
echo >&2
echo "installing infer dependencies; this can take up to 30 minutes... " >&2
opam_retry install_opam_deps
opam_retry install_opam_deps || warn_javalib_sandbox
if [ "$ONLY_SETUP_OPAM" = "yes" ]; then
if [ "$ONLY_SETUP_OPAM" == "yes" ]; then
exit 0
fi
echo "preparing build... " >&2
if [ "$BUILD_CLANG" = "no" ]; then
if [ "$BUILD_CLANG" == "no" ]; then
SKIP_SUBMODULES=true ./autogen.sh > /dev/null
else
./autogen.sh > /dev/null
fi
if [ "$BUILD_CLANG" = "no" ]; then
if [ "$BUILD_CLANG" == "no" ]; then
INFER_CONFIGURE_OPTS+=" --disable-c-analyzers"
fi
if [ "$BUILD_JAVA" = "no" ]; then
if [ "$BUILD_JAVA" == "no" ]; then
INFER_CONFIGURE_OPTS+=" --disable-java-analyzers"
fi
./configure $INFER_CONFIGURE_OPTS
if [ "$BUILD_CLANG" = "yes" ] && ! facebook-clang-plugins/clang/setup.sh --only-check-install; then
if [ "$BUILD_CLANG" == "yes" ] && ! facebook-clang-plugins/clang/setup.sh --only-check-install; then
echo ""
echo " Warning: you are not using a release of Infer. The C and"
echo " Objective-C analyses require a custom clang to be compiled"
@ -235,7 +205,7 @@ if [ "$BUILD_CLANG" = "yes" ] && ! facebook-clang-plugins/clang/setup.sh --only-
confirm="n"
printf "Are you sure you want to compile clang? (y/N) "
if [ "$INTERACTIVE" = "no" ]; then
if [ "$INTERACTIVE" == "no" ]; then
confirm="y"
echo "$confirm"
else

@ -189,7 +189,7 @@ AC_ASSERT_OCAML_PKG([atdgen], [], [])
AC_ASSERT_OCAML_PKG([biniou])
AC_ASSERT_OCAML_PKG([camlzip], [zip])
AC_ASSERT_OCAML_PKG([easy-format])
AC_ASSERT_OCAML_PKG([oUnit], [], [2.0.0])
AC_ASSERT_OCAML_PKG([oUnit], [], [2.0.5])
AC_CHECK_TOOL([UTOP], [utop], [no])
AC_ASSERT_OCAML_PKG([yojson])
@ -202,6 +202,12 @@ AC_ARG_VAR([OPAMSWITCH], [Opam switch used for building infer.])
AC_CHECK_TOOL([OPAM], [opam], [no])
AS_IF([test "$OPAM" != "no"], [
AC_MSG_CHECKING([opam version])
opam_version=$(opam --version)
case $opam_version in
2.*) AC_MSG_RESULT([$opam_version]); break;;
*) AC_MSG_ERROR([opam version $opam_version is not supported, please install opam version 2 instead]); break;;
esac
AC_MSG_CHECKING([current opam root])
OPAMROOT=$("$OPAM" config var root)
AC_MSG_RESULT([$OPAMROOT])
@ -222,7 +228,6 @@ if test "x$enable_java_analyzers" = "xyes"; then
AC_ASSERT_PROG([java], [$JAVA])
AC_ASSERT_OCAML_PKG([javalib], [], [2.3.3])
AC_ASSERT_OCAML_PKG([sawja], [], [1.5.2])
AC_ASSERT_OCAML_PKG([ptrees])
AC_MSG_CHECKING([for JAVA_HOME])
cat - <<_ACEOF >conftest.java

@ -1,10 +0,0 @@
# Copyright (c) 2017-present, Facebook, Inc.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
# This file exists to make opam happy, it should not do anything useful besides that.
.PHONY: install uninstall
install uninstall:
@:

@ -1,8 +0,0 @@
#!/bin/bash
# Copyright (c) 2017-present, Facebook, Inc.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
# This file exists just to make opam happy, it should not do anything useful besides that.

@ -1,8 +0,0 @@
#!/bin/bash
# Copyright (c) 2017-present, Facebook, Inc.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
# This file exists just to make opam happy, it should not do anything useful besides that.

@ -1 +0,0 @@
../../opam

@ -57,7 +57,7 @@ let common_cflags =
let common_optflags = match build_mode with Opt -> ["-O3"] | Default | Test -> []
let common_libraries =
(if java then ["javalib"; "ptrees"; "sawja"] else [])
(if java then ["javalib"; "sawja"] else [])
@ [ "ANSITerminal"
; "apron"
; "apron.octMPQ"

@ -15,6 +15,6 @@ AC_DEFUN([AC_ASSERT_OCAML_MIN_VERSION],
m4_newline([ Please upgrade to OCaml >= $1. If you are using opam, you can run])
m4_newline([dnl
opam switch $1
eval \$(opam config env)])
eval \$(opam env)])
])])])
])

@ -38,7 +38,6 @@ AC_DEFUN([AC_ASSERT_OCAML_PKG],
If you are using opam, please run
opam update
opam pin add --yes --no-action infer .
opam install --deps-only infer])
opam install --deps-only infer .])
])
])

20
opam

@ -1,30 +1,23 @@
opam-version: "1.2"
opam-version: "2.0"
name: "infer"
version: "0.15.0"
maintainer: "opam-devel@lists.ocaml.org"
synopsis: "A static analyzer for Java, C, C++, and Objective-C"
maintainer: "the infer team"
authors: "Facebook"
homepage: "https://github.com/facebook/infer"
bug-reports: "https://github.com/facebook/infer/issues"
dev-repo: "https://github.com/facebook/infer.git"
dev-repo: "git://github.com/facebook/infer.git"
license: "MIT"
build: [
["./autogen.sh"]
["./configure"
"--disable-c-analyzers"
"--prefix=%{prefix}%"]
["make" "-j%{jobs}%"]
[make "-j%{jobs}%"]
]
install: [
["make" "install"]
[make "install"]
]
remove: [
["./autogen.sh"]
["./configure"
"--disable-c-analyzers"
"--prefix=%{prefix}%"]
["make" "uninstall"]
]
ocaml-version: [ >= "4.04.2" ]
depends: [
"ANSITerminal" {>="0.7"}
"apron"
@ -42,6 +35,7 @@ depends: [
"elina" {>="1.1"}
"javalib" {>="2.3.5"}
"mtime"
"ocaml" {>="4.06.0"}
"ocamlfind" {build}
"ocamlgraph"
"ounit" {="2.0.5"}

@ -1,95 +0,0 @@
ANSITerminal = 0.8
apron = 20160125
atd = 2.0.0
atdgen = 2.0.0
atdgen-runtime = 2.0.0
base = v0.11.0
base64 = 2.2.0
bin_prot = v0.11.0
biniou = 1.2.0
camlidl = 1.05
camlp4 = 4.06+1
camlzip = 1.07
camomile = 1.0.1
cmdliner = 1.0.2
conf-autoconf = 0.1
conf-gmp = 1
conf-m4 = 1
conf-mpfr = 1
conf-perl = 1
conf-pkg-config = 1.0
conf-sqlite3 = 1
conf-which = 1
conf-zlib = 1
configurator = v0.11.0
core = v0.11.2
core_kernel = v0.11.1
cppo = 1.6.4
cppo_ocamlbuild = 1.6.0
ctypes = 0.14.0
dune = 1.1.1
easy-format = 1.3.1
elina = 1.1
extlib = 1.7.5
fieldslib = v0.11.0
integers = 0.2.2
jane-street-headers = v0.11.0
javalib = 2.3.5
jbuilder = transition
menhir = 20180703
mlgmpidl = 1.2.7
mtime = 1.1.0
num = 1.1
ocaml-compiler-libs = v0.11.0
ocaml-migrate-parsetree = 1.0.11
ocamlbuild = 0.12.0
ocamlfind = 1.8.0
ocamlgraph = 1.8.8
octavius = 1.2.0
ounit = 2.0.5
parmap = 1.0-rc10
parsexp = v0.11.0
ppx_assert = v0.11.0
ppx_base = v0.11.0
ppx_bench = v0.11.0
ppx_bin_prot = v0.11.0
ppx_compare = v0.11.0
ppx_custom_printf = v0.11.0
ppx_derivers = 1.0
ppx_deriving = 4.2.1
ppx_enumerate = v0.11.0
ppx_expect = v0.11.0
ppx_fail = v0.11.0
ppx_fields_conv = v0.11.0
ppx_hash = v0.11.0
ppx_here = v0.11.0
ppx_inline_test = v0.11.0
ppx_jane = v0.11.0
ppx_js_style = v0.11.0
ppx_let = v0.11.0
ppx_optcomp = v0.11.0
ppx_optional = v0.11.0
ppx_pipebang = v0.11.0
ppx_sexp_conv = v0.11.1
ppx_sexp_message = v0.11.0
ppx_sexp_value = v0.11.0
ppx_tools = 5.1+4.06.0
ppx_typerep_conv = v0.11.0
ppx_variants_conv = v0.11.0
ppxlib = 0.2.1
re = 1.8.0
result = 1.3
sawja = 1.5.4
seq = 0.1
sexplib = v0.11.0
sexplib0 = v0.11.0
spawn = v0.12.0
splittable_random = v0.11.0
sqlite3 = 4.4.0
stdio = v0.11.0
topkg = 0.9.1
typerep = v0.11.0
variantslib = v0.11.0
xmlm = 1.3.0
yojson = 1.4.1
zarith = 1.7

@ -0,0 +1,127 @@
opam-version: "2.0"
name: "infer"
version: "0.15.0"
synopsis: "A static analyzer for Java, C, C++, and Objective-C"
maintainer: "the infer team"
authors: "Facebook"
homepage: "https://github.com/facebook/infer"
bug-reports: "https://github.com/facebook/infer/issues"
dev-repo: "git://github.com/facebook/infer.git"
license: "MIT"
build: [
["./autogen.sh"]
["./configure"
"--disable-c-analyzers"
"--prefix=%{prefix}%"]
[make "-j%{jobs}%"]
]
install: [
[make "install"]
]
depends: [
"ANSITerminal" {= "0.8"}
"apron" {= "20160125"}
"atd" {= "2.0.0"}
"atdgen" {= "2.0.0"}
"atdgen-runtime" {= "2.0.0"}
"base" {= "v0.11.0"}
"base-bytes" {= "base"}
"base-threads" {= "base"}
"base-unix" {= "base"}
"base64" {= "2.2.0"}
"bin_prot" {= "v0.11.0"}
"biniou" {= "1.2.0"}
"camlidl" {= "1.05"}
"camlp4" {= "4.06+1"}
"camlzip" {= "1.07"}
"camomile" {= "1.0.1"}
"cmdliner" {= "1.0.2"}
"conf-autoconf" {= "0.1"}
"conf-gmp" {= "1"}
"conf-m4" {= "1"}
"conf-mpfr" {= "1"}
"conf-perl" {= "1"}
"conf-pkg-config" {= "1.0"}
"conf-sqlite3" {= "1"}
"conf-which" {= "1"}
"conf-zlib" {= "1"}
"configurator" {= "v0.11.0"}
"core" {= "v0.11.2"}
"core_kernel" {= "v0.11.1"}
"cppo" {= "1.6.4"}
"cppo_ocamlbuild" {= "1.6.0"}
"ctypes" {= "0.14.0"}
"dune" {= "1.1.1"}
"easy-format" {= "1.3.1"}
"elina" {= "1.1"}
"extlib" {= "1.7.5"}
"fieldslib" {= "v0.11.0"}
"integers" {= "0.2.2"}
"jane-street-headers" {= "v0.11.0"}
"javalib" {= "2.3.5"}
"jbuilder" {= "transition"}
"menhir" {= "20180703"}
"mlgmpidl" {= "1.2.7"}
"mtime" {= "1.1.0"}
"num" {= "1.1"}
"ocaml" {= "4.06.1"}
"ocaml-compiler-libs" {= "v0.11.0"}
"ocaml-migrate-parsetree" {= "1.0.11"}
"ocamlbuild" {= "0.12.0"}
"ocamlfind" {= "1.8.0"}
"ocamlgraph" {= "1.8.8"}
"octavius" {= "1.2.0"}
"ounit" {= "2.0.5"}
"parmap" {= "1.0-rc10"}
"parsexp" {= "v0.11.0"}
"ppx_assert" {= "v0.11.0"}
"ppx_base" {= "v0.11.0"}
"ppx_bench" {= "v0.11.0"}
"ppx_bin_prot" {= "v0.11.0"}
"ppx_compare" {= "v0.11.0"}
"ppx_custom_printf" {= "v0.11.0"}
"ppx_derivers" {= "1.0"}
"ppx_deriving" {= "4.2.1"}
"ppx_enumerate" {= "v0.11.0"}
"ppx_expect" {= "v0.11.0"}
"ppx_fail" {= "v0.11.0"}
"ppx_fields_conv" {= "v0.11.0"}
"ppx_hash" {= "v0.11.0"}
"ppx_here" {= "v0.11.0"}
"ppx_inline_test" {= "v0.11.0"}
"ppx_jane" {= "v0.11.0"}
"ppx_js_style" {= "v0.11.0"}
"ppx_let" {= "v0.11.0"}
"ppx_optcomp" {= "v0.11.0"}
"ppx_optional" {= "v0.11.0"}
"ppx_pipebang" {= "v0.11.0"}
"ppx_sexp_conv" {= "v0.11.1"}
"ppx_sexp_message" {= "v0.11.0"}
"ppx_sexp_value" {= "v0.11.0"}
"ppx_tools" {= "5.1+4.06.0"}
"ppx_typerep_conv" {= "v0.11.0"}
"ppx_variants_conv" {= "v0.11.0"}
"ppxlib" {= "0.2.1"}
"re" {= "1.8.0"}
"result" {= "1.3"}
"sawja" {= "1.5.4"}
"seq" {= "0.1"}
"sexplib" {= "v0.11.0"}
"sexplib0" {= "v0.11.0"}
"spawn" {= "v0.12.0"}
"splittable_random" {= "v0.11.0"}
"sqlite3" {= "4.4.0"}
"stdio" {= "v0.11.0"}
"topkg" {= "0.9.1"}
"typerep" {= "v0.11.0"}
"variantslib" {= "v0.11.0"}
"xmlm" {= "1.3.0"}
"yojson" {= "1.4.1"}
"zarith" {= "1.7"}
]
depexts: [
[ ["ubuntu"] ["python2.7-dev"] ]
[ ["debian"] ["python2.7-dev"] ]
[ ["ubuntu"] ["default-jdk"] ]
[ ["debian"] ["default-jdk"] ]
]

@ -39,7 +39,7 @@ pushd "$ROOT_DIR"
rm -fr "$RELEASE_NAME"
./build-infer.sh --only-setup-opam
eval $(opam config env)
eval $(opam env)
touch .release
./autogen.sh
./configure --prefix="/$RELEASE_NAME"

@ -0,0 +1,65 @@
#!/bin/bash
# Copyright (c) 2018-present, Facebook, Inc.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
# source this script to import its utility functions
opam_retry () {
"$@" || ( \
echo >&2; \
printf '*** `%s` failed\n' "$*" >&2; \
echo '*** Updating opam then retrying' >&2; \
opam update && \
"$@" || ( \
echo >&2; \
printf '*** ERROR: `%s` failed\n' "$*" >&2; \
exit 1 \
) \
)
}
opam_failed () {
local command=$1
echo
printf '*** ERROR: %s failed\n' "$command" >&2
printf "*** ERROR: Try running \$(opam update) then running this script again\n" >&2
exit 1
}
opam_require_version_2 () {
local status=0
local version=0
{ version=$(opam --version 2>/dev/null); status=$?; }
if [ "$status" != 0 ]; then
printf '*** ERROR: `opam --version` failed, please install opam version 2\n' >&2
env >&2
exit 1
fi
case $version in
2*) ;;
*)
printf '*** ERROR: opam version "%s" is not supported, please install opam version 2\n' "$version" >&2
printf '*** NOTE: opam is "%s"\n' "$(which opam)" >&2
env >&2
exit 1
esac
}
# assumes opam is available and initialized
opam_switch_create_if_needed () {
local switch=$1
local switch_exists=no
for installed_switch in $(opam switch list --short); do
if [ "$installed_switch" == "$switch" ]; then
switch_exists=yes
break
fi
done
if [ "$switch_exists" = "no" ]; then
opam switch create "$switch"
fi
}
opam_require_version_2
Loading…
Cancel
Save