diff options
Diffstat (limited to '')
-rwxr-xr-x | src/boost/libs/beast/tools/build-and-test.sh | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/src/boost/libs/beast/tools/build-and-test.sh b/src/boost/libs/beast/tools/build-and-test.sh new file mode 100755 index 00000000..123ed39f --- /dev/null +++ b/src/boost/libs/beast/tools/build-and-test.sh @@ -0,0 +1,161 @@ +#!/usr/bin/env bash + +# add 'x' for command tracing +set -eu + +#------------------------------------------------------------------------------- +# +# Utilities +# + +# For builds not triggered by a pull request TRAVIS_BRANCH is the name of the +# branch currently being built; whereas for builds triggered by a pull request +# it is the name of the branch targeted by the pull request (in many cases this +# will be master). +MAIN_BRANCH="0" +if [[ $TRAVIS_BRANCH == "master" || $TRAVIS_BRANCH == "develop" ]]; then + MAIN_BRANCH="1" +fi + +if [[ "${BEAST_RETRY}" == "true" ]]; then + JOBS=1 +elif [[ "${TRAVIS}" == "true" ]]; then + JOBS="2" +elif [[ $(uname -s) == "Linux" ]]; then + # Physical cores + JOBS=$(lscpu -p | grep -v '^#' | sort -u -t, -k 2,4 | wc -l) +elif [[ $(uname) == "Darwin" ]]; then + # Physical cores + JOBS=$(sysctl -n hw.physicalcpu) +else + JOBS=1 +fi + +# run with a debugger +function debug_run () +{ + if [[ $TRAVIS_OS_NAME == "osx" ]]; then + # -o runs after loading the binary + # -k runs after any crash + # We use a ghetto appromixation of --return-child-result, exiting with + # 1 on a crash + lldb \ + --batch \ + -o 'run' \ + -k 'thread backtrace all' \ + -k 'script import os; os._exit(1)' \ + $@ + else + gdb \ + --silent \ + --batch \ + --return-child-result \ + -ex="set print thread-events off" \ + -ex=run \ + -ex="thread apply all bt full" \ + --args $@ + fi +} + +function valgrind_run () +{ + valgrind \ + --track-origins=yes \ + --max-stackframe=16000000 \ + --suppressions=$BOOST_ROOT/libs/beast/tools/valgrind.supp \ + --error-exitcode=1 \ + $@ +} + +function run_tests_with_debugger () +{ + find "$1" -name "$2" -print0 | while read -d $'\0' f + do + debug_run "$f" + done +} + +function run_tests_with_valgrind () +{ + find "$1" -name "$2" -print0 | while read -d $'\0' f + do + valgrind_run "$f" + done +} + +function run_tests () +{ + find "$1" -name "$2" -print0 | while read -d $'\0' f + do + "$f" + done +} + +#------------------------------------------------------------------------------- + +BIN_DIR="$BOOST_ROOT/bin.v2/libs/beast/test" +LIB_DIR="$BOOST_ROOT/libs/beast" +INC_DIR="$BOOST_ROOT/boost/beast" + +function build_bjam () +{ + if [[ $VARIANT == "beast_coverage" ]] || \ + [[ $VARIANT == "beast_valgrind" ]] || \ + [[ $VARIANT == "beast_ubasan" ]]; then + b2 \ + define=BOOST_COROUTINES_NO_DEPRECATION_WARNING=1 \ + cxxstd=$CXXSTD \ + libs/beast/test/beast/core//fat-tests \ + libs/beast/test/beast/http//fat-tests \ + libs/beast/test/beast/websocket//fat-tests \ + libs/beast/test/beast/zlib//fat-tests \ + toolset=$TOOLSET \ + variant=$VARIANT \ + -j${JOBS} + elif [[ $VARIANT == "debug" ]]; then + b2 \ + define=BOOST_COROUTINES_NO_DEPRECATION_WARNING=1 \ + cxxstd=$CXXSTD \ + libs/beast/test//fat-tests \ + libs/beast/example \ + toolset=$TOOLSET \ + variant=$VARIANT \ + -j${JOBS} + else + b2 \ + define=BOOST_COROUTINES_NO_DEPRECATION_WARNING=1 \ + cxxstd=$CXXSTD \ + libs/beast/test//fat-tests \ + toolset=$TOOLSET \ + variant=$VARIANT \ + -j${JOBS} + fi +} + +build_bjam + +if [[ $VARIANT == "beast_coverage" ]]; then + # for lcov to work effectively, the paths and includes + # passed to the compiler should not contain "." or "..". + # (this runs in $BOOST_ROOT) + lcov --version + find "$BOOST_ROOT" -name "*.gcda" | xargs rm -f + rm -f "$BOOST_ROOT/*.info" + lcov --no-external -c -i -d "$BOOST_ROOT" -o baseline.info > /dev/null + run_tests "$BIN_DIR" fat-tests + # https://bugs.launchpad.net/ubuntu/+source/lcov/+bug/1163758 + lcov --no-external -c -d "$BOOST_ROOT" -o testrun-all.info > /dev/null 2>&1 + lcov -a baseline.info -a testrun-all.info -o lcov-diff.info > /dev/null + lcov -e "lcov-diff.info" "$INC_DIR/*" -o lcov.info > /dev/null + lcov --remove "lcov.info" "$INC_DIR/_experimental/*" -o lcov.info > /dev/null + ~/.local/bin/codecov -X gcov -f lcov.info + find "$BOOST_ROOT" -name "*.gcda" | xargs rm -f + +elif [[ $VARIANT == "beast_valgrind" ]]; then + run_tests_with_valgrind "$BIN_DIR" fat-tests + +else + #run_tests_with_debugger "$BIN_DIR" fat-tests + run_tests "$BIN_DIR" fat-tests + +fi |