From 41953d48fbfbc4f34d7eae59b59381e31aa33298 Mon Sep 17 00:00:00 2001 From: Jules Villard Date: Wed, 30 May 2018 06:34:21 -0700 Subject: [PATCH] [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 --- build-infer.sh | 39 +++++++++++++++++++++++---------------- opam | 1 + opam.lock | 1 + 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/build-infer.sh b/build-infer.sh index 620e95ac1..3dc2bdf68 100755 --- a/build-infer.sh +++ b/build-infer.sh @@ -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.' diff --git a/opam b/opam index b95a8919a..acc5ff454 100644 --- a/opam +++ b/opam @@ -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" diff --git a/opam.lock b/opam.lock index 228e3ae3e..f60868baf 100644 --- a/opam.lock +++ b/opam.lock @@ -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