[build] add conf-sqlite3 and fix minor script issue

Summary:
Users missing the development package for libsqlite3 would see only a failure to install "sqlite3". Adding conf-sqlite3 to the dependencies does not improve things that much but there is a bit more information in the console:

```
[ERROR] The compilation of conf-sqlite3 failed at "pkg-config sqlite3".
[ERROR] The compilation of sqlite3 failed at "jbuilder build -p sqlite3 -j 4".

#=== ERROR while installing conf-sqlite3.1 ====================================#
# opam-version         1.2.2
# os                   linux
# command              pkg-config sqlite3
# path                 /home/jul/.opam/infer-4.06.1+flambda/build/conf-sqlite3.1
# compiler             4.06.1+flambda
# exit-code            1
# env-file             /home/jul/.opam/infer-4.06.1+flambda/build/conf-sqlite3.1/conf-sqlite3-7504-7afd23.env
# stdout-file          /home/jul/.opam/infer-4.06.1+flambda/build/conf-sqlite3.1/conf-sqlite3-7504-7afd23.out
# stderr-file          /home/jul/.opam/infer-4.06.1+flambda/build/conf-sqlite3.1/conf-sqlite3-7504-7afd23.err

#=== ERROR while installing sqlite3.4.3.2 =====================================#
# opam-version         1.2.2
# os                   linux
# command              jbuilder build -p sqlite3 -j 4
# path                 /home/jul/.opam/infer-4.06.1+flambda/build/sqlite3.4.3.2
# compiler             4.06.1+flambda
# exit-code            1
# env-file             /home/jul/.opam/infer-4.06.1+flambda/build/sqlite3.4.3.2/sqlite3-7504-d2c37b.env
# stdout-file          /home/jul/.opam/infer-4.06.1+flambda/build/sqlite3.4.3.2/sqlite3-7504-d2c37b.out
# stderr-file          /home/jul/.opam/infer-4.06.1+flambda/build/sqlite3.4.3.2/sqlite3-7504-d2c37b.err
### stderr ###
# -> stdout:
# [...]
#  | ast_impl_magic_number: Caml1999M022
#  | ast_intf_magic_number: Caml1999N022
#  | cmxs_magic_number: Caml1999D022
#  | cmt_magic_number: Caml1999T022
# -> stderr:
# Fatal error: exception End_of_file
# Raised at file "src/import0.ml" (inlined), line 351, characters 22-32
# Called from file "src/configurator.ml", line 511, characters 13-22
# Called from file "src/config/discover.ml", line 42, characters 2-1023

Exception:
Reqs_error
 (Process_error
   ("opam install -y ANSITerminal.0.8 atd.1.12.0 atdgen.1.12.0 base.v0.11.0 base64.2.2.0 bin_prot.v0.11.0 biniou.1.2.0 camlp4.4.06+1 camlzip.1.07 cmdliner.1.0.2 conf-aclocal.1.0.0 conf-autoconf.0.1 conf-m4.1 conf-pkg-config.1.0 conf-sqlite3.1 conf-which.1 conf-zlib.1 configurator.v0.11.0 core.v0.11.0 "... (* string length 1469; truncated *),
   Unix.WEXITED 4)).
```

Also fix some issues with `build-infer.sh`:
- fix a problem where `SCRIPT_PATH` should be `SCRIPT_DIR`
- add `set -u` and `set -o pipefail` to make sure we don't miss errors in the future
- add quotes everywhere
- make number of `JOBS` user-configurable instead of hardcoding `$NCPU`

Reviewed By: mbouaziz

Differential Revision: D8201849

fbshipit-source-id: 19b7c77
master
Jules Villard 7 years ago committed by Facebook Github Bot
parent 6ad971c875
commit 41953d48fb

@ -10,15 +10,17 @@
# of patent rights can be found in the PATENTS file in the same directory.
set -e
set -o pipefail
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=${OCAML_VERSION:-"4.06.1+flambda"}
OPAM_LOCK_URL=${OPAM_LOCK_URL:-"https://github.com/rgrinberg/opam-lock"}
INFER_OPAM_SWITCH_DEFAULT=infer-"$OCAML_VERSION"
OCAML_VERSION_DEFAULT="4.06.1+flambda"
INFER_OPAM_SWITCH_DEFAULT=infer-"$OCAML_VERSION_DEFAULT"
function usage() {
echo "Usage: $0 [-y] [targets]"
@ -44,10 +46,15 @@ function usage() {
# arguments
BUILD_CLANG=${BUILD_CLANG:-no}
BUILD_JAVA=${BUILD_JAVA:-no}
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}
INFER_OPAM_SWITCH=${INFER_OPAM_SWITCH:-$INFER_OPAM_SWITCH_DEFAULT}
OPAM_LOCK_URL=${OPAM_LOCK_URL:-https://github.com/rgrinberg/opam-lock}
USE_OPAM_LOCK=${USE_OPAM_LOCK:-yes}
ORIG_ARGS="$*"
while [[ $# > 0 ]]; do
@ -117,9 +124,9 @@ fi
export OPAMYES=1
check_installed () {
local cmd=$1
if ! which $cmd >/dev/null 2>&1; then
echo "dependency not found: $cmd" >&2
local cmd="$1"
if ! which "$cmd" >/dev/null 2>&1; then
echo "dependency not found: '$cmd'" >&2
exit 1
fi
}
@ -139,11 +146,11 @@ opam_retry () {
}
setup_opam () {
opam_retry opam init --compiler=$OCAML_VERSION -j $NCPU --no-setup
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 $NCPU "$INFER_OPAM_SWITCH" --alias-of $OCAML_VERSION
opam_retry opam switch set -j "$JOBS" "$INFER_OPAM_SWITCH" --alias-of "$OCAML_VERSION"
else
opam_retry opam switch set -j $NCPU "$INFER_OPAM_SWITCH"
opam_retry opam switch set -j "$JOBS" "$INFER_OPAM_SWITCH"
fi
}
@ -153,12 +160,12 @@ setup_opam () {
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_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 $NCPU --deps-only "$INFER_TMP_PACKAGE_NAME"
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
@ -186,7 +193,7 @@ install_opam_deps() {
echo "initializing opam... " >&2
check_installed opam
setup_opam
eval $(SHELL=bash opam config env --switch=$INFER_OPAM_SWITCH)
eval $(SHELL=bash opam config env --switch="$INFER_OPAM_SWITCH")
echo >&2
echo "installing infer dependencies; this can take up to 30 minutes... " >&2
opam_retry install_opam_deps
@ -244,17 +251,17 @@ if [ "$BUILD_CLANG" = "yes" ] && ! facebook-clang-plugins/clang/setup.sh --only-
fi
fi
make -j $NCPU || (
make -j "$JOBS" || (
echo >&2
echo ' compilation failure; you can try running' >&2
echo >&2
echo ' make clean' >&2
echo " $0 $ORIG_ARGS" >&2
echo " '$0' $ORIG_ARGS" >&2
echo >&2
exit 1)
echo
echo "*** Success! Infer is now built in '$SCRIPT_PATH/infer/bin/'."
echo "*** Success! Infer is now built in '$SCRIPT_DIR/infer/bin/'."
echo '*** Install infer on your system with `make install`.'
echo
echo '*** If you plan to hack on infer, check out CONTRIBUTING.md to setup your dev environment.'

@ -32,6 +32,7 @@ depends: [
"cmdliner" {>="1.0.0"}
"core"
"conf-autoconf" {build}
"conf-sqlite3" {build}
"conf-zlib" {build}
"ctypes" {>="0.9.2"}
"extlib-compat"

@ -12,6 +12,7 @@ conf-aclocal = 1.0.0
conf-autoconf = 0.1
conf-m4 = 1
conf-pkg-config = 1.0
conf-sqlite3 = 1
conf-which = 1
conf-zlib = 1
configurator = v0.11.0

Loading…
Cancel
Save