#!/bin/bash -exu
#
-# Copyright (C) 2015 - Jonathan Rajotte-Julien <jonathan.rajotte-julien@efficios.com>
-# 2016 - Michael Jeanson <mjeanson@efficios.com>
+# Copyright (C) 2015 Jonathan Rajotte-Julien <jonathan.rajotte-julien@efficios.com>
+# 2016-2019 Michael Jeanson <mjeanson@efficios.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
[ "$res" -ne "0" ]
}
-# Required parameters
+# Required variables
+WORKSPACE=${WORKSPACE:-}
+
arch=${arch:-}
conf=${conf:-}
build=${build:-}
cc=${cc:-}
-bt2_mode=${bt2_mode:-}
SRCDIR="$WORKSPACE/src/babeltrace"
TMPDIR="$WORKSPACE/tmp"
-PREFIX="$WORKSPACE/build"
+PREFIX="/build"
-# Create build and tmp directories
-rm -rf "$PREFIX" "$TMPDIR"
-mkdir -p "$PREFIX" "$TMPDIR"
+# Create tmp directory
+rm -rf "$TMPDIR"
+mkdir -p "$TMPDIR"
export TMPDIR
export CFLAGS="-g -O2"
export MAKE=gmake
export TAR=gtar
export NPROC=gnproc
- export BISON=bison
- export YACC="$BISON -y"
export PATH="/opt/csw/bin:/usr/ccs/bin:$PATH"
export CPPFLAGS="-I/opt/csw/include"
export LDFLAGS="-L/opt/csw/lib -R/opt/csw/lib"
export PKG_CONFIG_PATH="/opt/csw/lib/pkgconfig"
+ export PYTHON="python3"
+ export PYTHON_CONFIG="python3-config"
;;
+
sol11-i386)
export MAKE=gmake
export TAR=gtar
export NPROC=nproc
- export PATH="$PATH:/usr/perl5/bin"
+ export PATH="/opt/csw/bin:$PATH:/usr/perl5/bin"
export LD_ALTEXEC=/usr/bin/gld
export LD=/usr/bin/gld
+ export PYTHON="python3"
+ export PYTHON_CONFIG="python3-config"
+ export PKG_CONFIG_PATH="/usr/lib/pkgconfig"
;;
+
macosx)
export MAKE=make
export TAR=tar
export NPROC="getconf _NPROCESSORS_ONLN"
- export BISON="bison"
- export YACC="$BISON -y"
export PATH="/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
- export CFLAGS="$CFLAGS -I/opt/local/include"
+ export CPPFLAGS="-I/opt/local/include"
export LDFLAGS="-L/opt/local/lib"
+ export PYTHON="python3"
+ export PYTHON_CONFIG="python3-config"
;;
+
+cygwin)
+ export MAKE=make
+ export TAR=tar
+ export NPROC=nproc
+ export PYTHON="python3"
+ export PYTHON_CONFIG="python3-config"
+ rebase_dll=1
+ ;;
+
*)
export MAKE=make
export TAR=tar
export NPROC=nproc
+ export PYTHON="python3"
+ export PYTHON_CONFIG="python3-config"
;;
esac
# Get source version from configure script
eval "$(grep '^PACKAGE_VERSION=' ./configure)"
+PACKAGE_VERSION=${PACKAGE_VERSION//\-pre*/}
# Enable dev mode by default for BT 2.0 builds
-case "$bt2_mode" in
-dev)
- echo "Developer mode"
- export BABELTRACE_DEBUG_MODE=1
- export BABELTRACE_DEV_MODE=1
- export BABELTRACE_MINIMAL_LOG_LEVEL=VERBOSE
- ;;
-*)
- echo "Production mode (Default)"
- export BABELTRACE_MINIMAL_LOG_LEVEL=INFO
- ;;
-esac
+export BABELTRACE_DEBUG_MODE=1
+export BABELTRACE_DEV_MODE=1
+export BABELTRACE_MINIMAL_LOG_LEVEL=TRACE
-# Set configure options for each build configuration
-CONF_OPTS=""
+# Set configure options and environment variables for each build
+# configuration.
+CONF_OPTS=("--prefix=$PREFIX")
case "$conf" in
static)
- echo "Static build"
- CONF_OPTS="--enable-static --disable-shared"
+ echo "Static lib only configuration"
+
+ CONF_OPTS+=("--enable-static" "--disable-shared")
+
if vergte "$PACKAGE_VERSION" "2.0"; then
- CONF_OPTS="${CONF_OPTS} --enable-built-in-plugins"
+ CONF_OPTS+=("--enable-built-in-plugins")
fi
;;
+
python-bindings)
- echo "Build with python bindings"
- # We only support bindings built with Python 3
- export PYTHON="python3"
- export PYTHON_CONFIG="/usr/bin/python3-config"
- CONF_OPTS="--enable-python-bindings"
+ echo "Python bindings configuration"
+
+ CONF_OPTS+=("--enable-python-bindings")
if vergte "$PACKAGE_VERSION" "2.0"; then
- CONF_OPTS="${CONF_OPTS} --enable-python-bindings-doc --enable-python-plugins"
+ CONF_OPTS+=("--enable-python-bindings-doc" "--enable-python-plugins")
fi
;;
+
+prod)
+ echo "Production configuration"
+
+ # Unset the developper variables
+ unset BABELTRACE_DEBUG_MODE
+ unset BABELTRACE_DEV_MODE
+ unset BABELTRACE_MINIMAL_LOG_LEVEL
+
+ # Enable the python bindings
+ CONF_OPTS+=("--enable-python-bindings" "--enable-python-bindings-doc" "--enable-python-plugins")
+ ;;
+
+min)
+ echo "Minimal configuration"
+ ;;
+
*)
- echo "Standard build"
- CONF_OPTS=""
+ echo "Standard configuration"
+
+ # Enable the python bindings / plugins by default with babeltrace2,
+ # the test suite is mostly useless without it.
+ if vergte "$PACKAGE_VERSION" "2.0"; then
+ CONF_OPTS+=("--enable-python-bindings" "--enable-python-plugins")
+ fi
;;
esac
# Build type
-# oot : out-of-tree build
-# dist: build via make dist
-# * : normal tree build
+# oot : out-of-tree build
+# dist : build via make dist
+# oot-dist: build via make dist out-of-tree
+# * : normal tree build
#
-# Make sure to move to the build_path and configure
-# before continuing
-BUILD_PATH="$SRCDIR"
+# Make sure to move to the build directory and run configure
+# before continuing.
case "$build" in
- oot)
- echo "Out of tree build"
- BUILD_PATH="$WORKSPACE/oot"
- mkdir -p "$BUILD_PATH"
- cd "$BUILD_PATH"
- "$SRCDIR/configure" --prefix="$PREFIX" $CONF_OPTS
- ;;
-
- dist)
- echo "Distribution out of tree build"
- BUILD_PATH="$(mktemp -d)"
-
- # Initial configure and generate tarball
- "$SRCDIR/configure"
- $MAKE dist
-
- mkdir -p "$BUILD_PATH"
- cp ./*.tar.* "$BUILD_PATH/"
- cd "$BUILD_PATH"
-
- # Ignore level 1 of tar
- $TAR xvf ./*.tar.* --strip 1
-
- "$BUILD_PATH/configure" --prefix="$PREFIX" $CONF_OPTS
- ;;
-
- *)
- echo "Standard in-tree build"
- "$SRCDIR/configure" --prefix="$PREFIX" $CONF_OPTS
- ;;
+oot)
+ echo "Out of tree build"
+
+ # Create and enter a temporary build directory
+ builddir=$(mktemp -d)
+ cd "$builddir"
+
+ "$SRCDIR/configure" "${CONF_OPTS[@]}"
+ ;;
+
+dist)
+ echo "Distribution in-tree build"
+
+ # Run configure and generate the tar file
+ # in the source directory
+ ./configure
+ $MAKE dist
+
+ # Create and enter a temporary build directory
+ builddir=$(mktemp -d)
+ cd "$builddir"
+
+ # Extract the distribution tar in the build directory,
+ # ignore the first directory level
+ $TAR xvf "$SRCDIR"/*.tar.* --strip 1
+
+ # Build in extracted source tree
+ ./configure "${CONF_OPTS[@]}"
+ ;;
+
+oot-dist)
+ echo "Distribution out of tree build"
+
+ # Create and enter a temporary build directory
+ builddir=$(mktemp -d)
+ cd "$builddir"
+
+ # Run configure out of tree and generate the tar file
+ "$SRCDIR/configure"
+ $MAKE dist
+
+ dist_srcdir="$(mktemp -d)"
+ cd "$dist_srcdir"
+
+ # Extract the distribution tar in the new source directory,
+ # ignore the first directory level
+ $TAR xvf "$builddir"/*.tar.* --strip 1
+
+ # Create and enter a second temporary build directory
+ builddir="$(mktemp -d)"
+ cd "$builddir"
+
+ # Run configure from the extracted distribution tar,
+ # out of the source tree
+ "$dist_srcdir/configure" "${CONF_OPTS[@]}"
+ ;;
+
+*)
+ echo "Standard in-tree build"
+ ./configure "${CONF_OPTS[@]}"
+ ;;
esac
+# We are now inside a configured build directory
+
# BUILD!
$MAKE -j "$($NPROC)" V=1
-$MAKE install
-# Run tests
-$MAKE --keep-going check
+# Force rebase DLL address mapping
+if [ "${rebase_dll:-}" == "1" ]; then
+ find . -name "*.dll" -print0 | xargs -0 rebase -O -v
+fi
+
+# Install in the workspace
+$MAKE install DESTDIR="$WORKSPACE"
+
+# Run tests, don't fail now, we want to run the archiving steps
+failed_tests=0
+$MAKE --keep-going check || failed_tests=1
-# Copy tap logs for the jenkins tap parser
+# Copy tap logs for the jenkins tap parser before cleaning the build dir
rsync -a --exclude 'test-suite.log' --include '*/' --include '*.log' --exclude='*' tests/ "$WORKSPACE/tap"
+# The test suite prior to 1.5 did not produce TAP logs
+if verlt "$PACKAGE_VERSION" "1.5"; then
+ mkdir -p "$WORKSPACE/tap/no-log"
+ echo "1..1" > "$WORKSPACE/tap/no-log/tests.log"
+ echo "ok 1 - Test suite doesn't support logging" >> "$WORKSPACE/tap/no-log/tests.log"
+fi
+
# Clean the build directory
$MAKE clean
# Cleanup rpath in executables and shared libraries
-find "$PREFIX/bin" -type f -perm -0500 -exec chrpath --delete {} \;
-find "$PREFIX/lib" -name "*.so" -exec chrpath --delete {} \;
+find "$WORKSPACE/$PREFIX/bin" -type f -perm -0500 -exec chrpath --delete {} \;
+find "$WORKSPACE/$PREFIX/lib" -name "*.so" -exec chrpath --delete {} \;
# Remove libtool .la files
-find "$PREFIX/lib" -name "*.la" -exec rm -f {} \;
+find "$WORKSPACE/$PREFIX/lib" -name "*.la" -exec rm -f {} \;
-# Clean temp dir for dist build
-if [ "$build" = "dist" ]; then
- cd "$SRCDIR"
- rm -rf "$BUILD_PATH"
-fi
+# Exit with failure if any of the tests failed
+exit $failed_tests
# EOF