• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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