1#!/bin/bash -x 2 3set -e 4 5# This only exists in OS X, but it doesn't cause issues in Linux (the dir doesn't exist, so it's 6# ignored). 7export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" 8 9case $COMPILER in 10gcc-4.9) 11 export CC=gcc-4.9 12 export CXX=g++-4.9 13 ;; 14 15gcc-5) 16 export CC=gcc-5 17 export CXX=g++-5 18 ;; 19 20gcc-6) 21 export CC=gcc-6 22 export CXX=g++-6 23 ;; 24 25gcc-7) 26 export CC=gcc-7 27 export CXX=g++-7 28 ;; 29 30gcc-8) 31 export CC=gcc-8 32 export CXX=g++-8 33 ;; 34 35gcc-9) 36 export CC=gcc-9 37 export CXX=g++-9 38 ;; 39 40clang-3.5) 41 export CC=clang-3.5 42 export CXX=clang++-3.5 43 ;; 44 45clang-3.6) 46 export CC=clang-3.6 47 export CXX=clang++-3.6 48 ;; 49 50clang-3.7) 51 export CC=clang-3.7 52 export CXX=clang++-3.7 53 ;; 54 55clang-3.8) 56 export CC=clang-3.8 57 export CXX=clang++-3.8 58 ;; 59 60clang-3.9) 61 export CC=clang-3.9 62 export CXX=clang++-3.9 63 ;; 64 65clang-4.0) 66 export CC=clang-4.0 67 export CXX=clang++-4.0 68 ;; 69 70clang-5.0) 71 export CC=clang-5.0 72 export CXX=clang++-5.0 73 ;; 74 75clang-6.0) 76 export CC=clang-6.0 77 export CXX=clang++-6.0 78 ;; 79 80clang-7.0) 81 export CC=clang-7 82 export CXX=clang++-7 83 ;; 84 85clang-8.0) 86 export CC=clang-8 87 export CXX=clang++-8 88 ;; 89 90clang-default) 91 export CC=clang 92 export CXX=clang++ 93 ;; 94 95bazel) 96 ;; 97 98*) 99 echo "Unrecognized value of COMPILER: $COMPILER" 100 exit 1 101esac 102 103run_make() { 104 make -j$N_JOBS 105} 106 107if [[ "${COMPILER}" != "bazel" ]] 108then 109 # This is only needed in OS X but it has no effect on Linux so we can add it unconditionally. 110 BOOST_INCLUDE_FLAG="-I /usr/local/include/boost" 111 COMMON_CXX_FLAGS="$STLARG $BOOST_INCLUDE_FLAG -Werror -pedantic" 112 113 echo CXX version: $($CXX --version) 114 echo C++ Standard library location: $(echo '#include <vector>' | $CXX -x c++ -E - | grep 'vector\"' | awk '{print $3}' | sed 's@/vector@@;s@\"@@g' | head -n 1) 115 echo Normalized C++ Standard library location: $(readlink -f $(echo '#include <vector>' | $CXX -x c++ -E - | grep 'vector\"' | awk '{print $3}' | sed 's@/vector@@;s@\"@@g' | head -n 1)) 116 117 case "$1" in 118 DebugPlain) CMAKE_ARGS=(-DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="$COMMON_CXX_FLAGS -DFRUIT_DEBUG=1 -DFRUIT_EXTRA_DEBUG=1 -D_GLIBCXX_DEBUG=1 -O2") ;; 119 DebugPlainNoPch) CMAKE_ARGS=(-DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="$COMMON_CXX_FLAGS -DFRUIT_DEBUG=1 -DFRUIT_EXTRA_DEBUG=1 -D_GLIBCXX_DEBUG=1 -O2" -DFRUIT_TESTS_USE_PRECOMPILED_HEADERS=OFF) ;; 120 DebugAsan) CMAKE_ARGS=(-DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="$COMMON_CXX_FLAGS -DFRUIT_DEBUG=1 -DFRUIT_EXTRA_DEBUG=1 -D_GLIBCXX_DEBUG=1 -O0 -fsanitize=address") ;; 121 DebugAsanNoPch) CMAKE_ARGS=(-DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="$COMMON_CXX_FLAGS -DFRUIT_DEBUG=1 -DFRUIT_EXTRA_DEBUG=1 -D_GLIBCXX_DEBUG=1 -O0 -fsanitize=address" -DFRUIT_TESTS_USE_PRECOMPILED_HEADERS=OFF) ;; 122 DebugAsanUbsan) CMAKE_ARGS=(-DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="$COMMON_CXX_FLAGS -DFRUIT_DEBUG=1 -DFRUIT_EXTRA_DEBUG=1 -D_GLIBCXX_DEBUG=1 -O0 -fsanitize=address,undefined") ;; 123 DebugAsanUbsanNoPch) CMAKE_ARGS=(-DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="$COMMON_CXX_FLAGS -DFRUIT_DEBUG=1 -DFRUIT_EXTRA_DEBUG=1 -D_GLIBCXX_DEBUG=1 -O0 -fsanitize=address,undefined" -DFRUIT_TESTS_USE_PRECOMPILED_HEADERS=OFF) ;; 124 DebugValgrind) CMAKE_ARGS=(-DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="$COMMON_CXX_FLAGS -DFRUIT_DEBUG=1 -DFRUIT_EXTRA_DEBUG=1 -D_GLIBCXX_DEBUG=1 -O2" -DRUN_TESTS_UNDER_VALGRIND=TRUE) ;; 125 DebugValgrindNoPch) CMAKE_ARGS=(-DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="$COMMON_CXX_FLAGS -DFRUIT_DEBUG=1 -DFRUIT_EXTRA_DEBUG=1 -D_GLIBCXX_DEBUG=1 -O2" -DRUN_TESTS_UNDER_VALGRIND=TRUE -DFRUIT_TESTS_USE_PRECOMPILED_HEADERS=OFF) ;; 126 ReleasePlain) CMAKE_ARGS=(-DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="$COMMON_CXX_FLAGS") ;; 127 ReleasePlainNoPch) CMAKE_ARGS=(-DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="$COMMON_CXX_FLAGS" -DFRUIT_TESTS_USE_PRECOMPILED_HEADERS=OFF) ;; 128 ReleaseValgrind) CMAKE_ARGS=(-DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="$COMMON_CXX_FLAGS" -DRUN_TESTS_UNDER_VALGRIND=TRUE) ;; 129 ReleaseValgrindNoPch) CMAKE_ARGS=(-DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="$COMMON_CXX_FLAGS" -DRUN_TESTS_UNDER_VALGRIND=TRUE -DFRUIT_TESTS_USE_PRECOMPILED_HEADERS=OFF) ;; 130 *) echo "Error: you need to specify one of the supported postsubmit modes (see postsubmit.sh)."; exit 1 ;; 131 esac 132 133 SOURCES_PATH="$PWD" 134 135 # This is not needed on Travis CI, but it's sometimes needed when running postsubmit.sh locally, to avoid "import 136 # file mismatch" errors. 137 rm -rf tests/__pycache__/ tests/*.pyc tests/*/__pycache__/ tests/*/*.pyc 138 139 rm -rf build 140 mkdir build 141 cd build 142 cmake .. "${CMAKE_ARGS[@]}" 143 echo 144 echo "Content of CMakeFiles/CMakeError.log:" 145 if [ -f "CMakeFiles/CMakeError.log" ] 146 then 147 cat CMakeFiles/CMakeError.log 148 fi 149 echo 150 run_make 151 152 cd examples 153 run_make 154 cd .. 155 156 cd tests 157 run_make 158 159 # We specify the path explicitly because old versions of pytest (e.g. the one in Ubuntu 14.04) 160 # don't support the testpaths setting in pytest.ini, so they will ignore it and they would 161 # otherwise run no tests. 162 py.test -n auto -r a "$SOURCES_PATH"/tests 163 cd .. 164 165 make install 166else 167 # COMPILER=bazel 168 169 BAZEL_FLAGS=("--python_path=$(which python3)") 170 case "$1" in 171 DebugPlain) ;; 172 ReleasePlain) BAZEL_FLAGS+=("-c" "opt") ;; 173 *) echo "Error: you need to specify one of the supported postsubmit modes (see postsubmit.sh)."; exit 1 ;; 174 esac 175 176 cd extras/bazel_root/third_party/fruit 177 bazel build "${BAZEL_FLAGS[@]}" :fruit examples/... tests/... 178 bazel test "${BAZEL_FLAGS[@]}" --test_output=errors tests/... 179fi 180