diff --git a/Makefile b/Makefile index ce8690cf5..614b73dd0 100644 --- a/Makefile +++ b/Makefile @@ -456,7 +456,7 @@ install: infer $(INFER_MANUALS_GZIPPED) ifeq ($(BUILD_C_ANALYZERS),yes) test -d '$(DESTDIR)$(libdir)/infer/facebook-clang-plugins/libtooling/build/' || \ $(MKDIR_P) '$(DESTDIR)$(libdir)/infer/facebook-clang-plugins/libtooling/build/' - find facebook-clang-plugins/clang/install -type d -print0 | xargs -0 -n 1 \ + find -L facebook-clang-plugins/clang/install -type d -print0 | xargs -0 -n 1 \ $(SHELL) -x -c "test -d '$(DESTDIR)$(libdir)'/infer/\$$1 || \ $(MKDIR_P) '$(DESTDIR)$(libdir)'/infer/\$$1" -- test -d '$(DESTDIR)$(libdir)/infer/infer/lib/clang_wrappers/' || \ @@ -491,7 +491,7 @@ endif ifeq ($(BUILD_C_ANALYZERS),yes) $(INSTALL_DATA) -C 'facebook-clang-plugins/libtooling/build/FacebookClangPlugin.dylib' \ '$(DESTDIR)$(libdir)/infer/facebook-clang-plugins/libtooling/build/FacebookClangPlugin.dylib' - find facebook-clang-plugins/clang/install -not -type d -not -name '*.a' -print0 \ + find -L facebook-clang-plugins/clang/install -not -type d -not -name '*.a' -print0 \ | xargs -0 -I \{\} $(INSTALL_PROGRAM) -C \{\} '$(DESTDIR)$(libdir)'/infer/\{\} find infer/lib/clang_wrappers/* -print0 | xargs -0 -I \{\} \ $(INSTALL_PROGRAM) -C \{\} '$(DESTDIR)$(libdir)'/infer/\{\} diff --git a/scripts/create_binary_release.sh b/scripts/create_binary_release.sh new file mode 100755 index 000000000..de6322123 --- /dev/null +++ b/scripts/create_binary_release.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +# Copyright (c) 2013-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. + +set -e +set -o pipefail +set -u +set -x + +if [ "$#" != "1" ]; then + set +x + echo "Usage: $0 version_tag" 1>&2 + echo 1>&2 + echo "Example: $0 v0.11.0" 1>&2 + exit 1 +fi + +VERSION=$1 + +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +ROOT_DIR="$SCRIPT_DIR"/.. +NCPUS="$(getconf _NPROCESSORS_ONLN 2>/dev/null || echo 2)" +PLATFORM=$(uname) +if [ "$PLATFORM" == 'Darwin' ]; then + RELEASE_NAME=infer-osx-"$VERSION" +else + RELEASE_NAME=infer-linux64-"$VERSION" +fi +RELEASE_TARBALL="$RELEASE_NAME".tar.xz + +# configurable stuff +DRYRUN=${DRYRUN:-no} +JOBS=${JOBS:-$NCPUS} + +pushd "$ROOT_DIR" +rm -fr "$RELEASE_NAME" + +./build-infer.sh --only-setup-opam +eval $(opam config env) +./autogen.sh +./configure --prefix="/$RELEASE_NAME" +BUILD_MODE=opt make -j "$JOBS" install DESTDIR="$ROOT_DIR" libdir_relative_to_bindir=../lib +popd + +if [ "$DRYRUN" = "no" ]; then + installed_version="$(./"$RELEASE_NAME"/bin/infer --version | head -1 | cut -d ' ' -f 3)" + if [ "$installed_version" != "$VERSION" ]; then + set +x + printf "Infer reports the wrong version number: got '%s' but expected '%s'\n" \ + "$installed_version" "$VERSION" 1>&2 + exit 1 + fi + + # trick so that the String-Who-Must-Not-Be-Named doesn't appear verbatim in the script + FBDASHONLY=$(printf "%s%s" 'FB-O' 'NLY') + if grep -Ir "$FBDASHONLY" "$RELEASE_NAME"; then + set +x + echo "Found files marked $FBDASHONLY" 1>&2 + exit 1 + fi +fi + +tar cJf "$RELEASE_TARBALL" "$RELEASE_NAME" +rm -fr "$RELEASE_NAME" + +echo "$ROOT_DIR/$RELEASE_NAME" diff --git a/scripts/package_infer_source_with_clang_binaries.sh b/scripts/package_infer_source_with_clang_binaries.sh deleted file mode 100755 index eef516657..000000000 --- a/scripts/package_infer_source_with_clang_binaries.sh +++ /dev/null @@ -1,94 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2013-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. - -set -x -set -e - -VERSION=$1 - -if [ "$#" != "1" ]; then - echo "Usage: $0 version_tag" - echo - echo "Example: $0 v0.11.0" - exit 1 -fi - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -SCRIPT_NAME="$(basename "${BASH_SOURCE[0]}")" -ROOT_INFER_DIR="$SCRIPT_DIR"/.. -CLANG_PLUGIN_DIR="$ROOT_INFER_DIR"/facebook-clang-plugins -CLANG_PREFIX="$CLANG_PLUGIN_DIR"/clang/install -PLATFORM=`uname` -INFER_SOURCE="$ROOT_INFER_DIR"/infer-source - -if [ "$PLATFORM" == 'Darwin' ]; then - RELEASE_NAME=infer-osx-"$VERSION" -else - RELEASE_NAME=infer-linux64-"$VERSION" -fi -RELEASE_TARBALL="$RELEASE_NAME".tar.xz -PKG_DIR="$ROOT_INFER_DIR"/"$RELEASE_NAME" -PKG_PLUGIN_DIR="$PKG_DIR"/facebook-clang-plugins -PKG_CLANG_PREFIX="$PKG_PLUGIN_DIR"/clang/install - - -# Build infer and facebook-clang-plugins -cd "$ROOT_INFER_DIR" -# This assumes the current commit is the one with the release bump -./build-infer.sh --yes -find "$CLANG_PREFIX"/{bin,lib} -type f -print0 | xargs -0 strip -x || true - -# Get a copy of the github repo -if ! git -C "$INFER_SOURCE" status > /dev/null; then - git clone https://github.com/facebook/infer.git "$INFER_SOURCE" -fi -pushd "$INFER_SOURCE" -# fetch new tags -git tag -d "$VERSION" || true -git fetch origin -# update master -git checkout "$VERSION" || exit 1 -git submodule update --init -git clean -xfd -popd - -# Copy infer source -rm -fr "$PKG_DIR" -mkdir -p "$PKG_DIR" -rsync -a \ - --exclude="**/.git" \ - --exclude="**/.gitmodules" \ - --exclude="**/.gitignore" \ - --exclude="facebook-clang-plugins/clang/src/clang-*.tar.*" \ - "$INFER_SOURCE"/ "$PKG_DIR"/ -touch "$PKG_DIR"/.release -rsync -a "$ROOT_INFER_DIR"/configure "$PKG_DIR"/configure - -mkdir -pv "$PKG_CLANG_PREFIX"/{bin,lib,include} -mkdir -pv "$PKG_PLUGIN_DIR"/libtooling/build -mkdir -pv "$PKG_PLUGIN_DIR"/clang-ocaml/build -rsync -a "$CLANG_PLUGIN_DIR"/{CONTRIBUTING.md,LICENSE,LLVM-LICENSE,README.md} "$PKG_PLUGIN_DIR" -rsync -a "$CLANG_PREFIX"/bin/clang* "$PKG_CLANG_PREFIX"/bin/ -rsync -a --exclude '*.a' "$CLANG_PREFIX"/lib/ "$PKG_CLANG_PREFIX"/lib/ -rsync -a "$CLANG_PREFIX"/include/ "$PKG_CLANG_PREFIX"/include/ -rsync -a "$CLANG_PLUGIN_DIR"/libtooling/build/ "$PKG_PLUGIN_DIR"/libtooling/build/ -rsync -a "$CLANG_PLUGIN_DIR"/clang-ocaml/build/ "$PKG_PLUGIN_DIR"/clang-ocaml/build/ - -# no clang source in release versions, so remove the corresponding -# checksum check -grep -v -e '\bsrc/clang-.*\.tar\.*' \ - < "$CLANG_PLUGIN_DIR"/clang/installed.version \ - > "$PKG_PLUGIN_DIR"/clang/installed.version - -# trick so that the String-Who-Must-Not-Be-Named doesn't appear verbatim in the script -FBDASHONLY=$(printf "%s%s" 'FB-O' 'NLY') -if grep -Ir "$FBDASHONLY" "$PKG_DIR"; then - echo "Found files marked $FBONLY" - exit 1 -fi - -cd "$ROOT_INFER_DIR" && tar cJf "$RELEASE_TARBALL" "$RELEASE_NAME"