Bump to 1.14.0
[platform/upstream/gtest.git] / ci / linux-presubmit.sh
1 #!/bin/bash
2 #
3 # Copyright 2020, Google Inc.
4 # All rights reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions are
8 # met:
9 #
10 #     * Redistributions of source code must retain the above copyright
11 # notice, this list of conditions and the following disclaimer.
12 #     * Redistributions in binary form must reproduce the above
13 # copyright notice, this list of conditions and the following disclaimer
14 # in the documentation and/or other materials provided with the
15 # distribution.
16 #     * Neither the name of Google Inc. nor the names of its
17 # contributors may be used to endorse or promote products derived from
18 # this software without specific prior written permission.
19 #
20 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
32 set -euox pipefail
33
34 readonly LINUX_LATEST_CONTAINER="gcr.io/google.com/absl-177019/linux_hybrid-latest:20230217"
35 readonly LINUX_GCC_FLOOR_CONTAINER="gcr.io/google.com/absl-177019/linux_gcc-floor:20230120"
36
37 if [[ -z ${GTEST_ROOT:-} ]]; then
38   GTEST_ROOT="$(realpath $(dirname ${0})/..)"
39 fi
40
41 if [[ -z ${STD:-} ]]; then
42   STD="c++14 c++17 c++20"
43 fi
44
45 # Test the CMake build
46 for cc in /usr/local/bin/gcc /opt/llvm/clang/bin/clang; do
47   for cmake_off_on in OFF ON; do
48     time docker run \
49       --volume="${GTEST_ROOT}:/src:ro" \
50       --tmpfs="/build:exec" \
51       --workdir="/build" \
52       --rm \
53       --env="CC=${cc}" \
54       --env=CXXFLAGS="-Werror -Wdeprecated" \
55       ${LINUX_LATEST_CONTAINER} \
56       /bin/bash -c "
57         cmake /src \
58           -DCMAKE_CXX_STANDARD=14 \
59           -Dgtest_build_samples=ON \
60           -Dgtest_build_tests=ON \
61           -Dgmock_build_tests=ON \
62           -Dcxx_no_exception=${cmake_off_on} \
63           -Dcxx_no_rtti=${cmake_off_on} && \
64         make -j$(nproc) && \
65         ctest -j$(nproc) --output-on-failure"
66   done
67 done
68
69 # Do one test with an older version of GCC
70 time docker run \
71   --volume="${GTEST_ROOT}:/src:ro" \
72   --workdir="/src" \
73   --rm \
74   --env="CC=/usr/local/bin/gcc" \
75   --env="BAZEL_CXXOPTS=-std=c++14" \
76   ${LINUX_GCC_FLOOR_CONTAINER} \
77     /usr/local/bin/bazel test ... \
78       --copt="-Wall" \
79       --copt="-Werror" \
80       --copt="-Wuninitialized" \
81       --copt="-Wundef" \
82       --copt="-Wno-error=pragmas" \
83       --distdir="/bazel-distdir" \
84       --features=external_include_paths \
85       --keep_going \
86       --show_timestamps \
87       --test_output=errors
88
89 # Test GCC
90 for std in ${STD}; do
91   for absl in 0 1; do
92     time docker run \
93       --volume="${GTEST_ROOT}:/src:ro" \
94       --workdir="/src" \
95       --rm \
96       --env="CC=/usr/local/bin/gcc" \
97       --env="BAZEL_CXXOPTS=-std=${std}" \
98       ${LINUX_LATEST_CONTAINER} \
99       /usr/local/bin/bazel test ... \
100         --copt="-Wall" \
101         --copt="-Werror" \
102         --copt="-Wuninitialized" \
103         --copt="-Wundef" \
104         --define="absl=${absl}" \
105         --distdir="/bazel-distdir" \
106         --features=external_include_paths \
107         --keep_going \
108         --show_timestamps \
109         --test_output=errors
110   done
111 done
112
113 # Test Clang
114 for std in ${STD}; do
115   for absl in 0 1; do
116     time docker run \
117       --volume="${GTEST_ROOT}:/src:ro" \
118       --workdir="/src" \
119       --rm \
120       --env="CC=/opt/llvm/clang/bin/clang" \
121       --env="BAZEL_CXXOPTS=-std=${std}" \
122       ${LINUX_LATEST_CONTAINER} \
123       /usr/local/bin/bazel test ... \
124         --copt="--gcc-toolchain=/usr/local" \
125         --copt="-Wall" \
126         --copt="-Werror" \
127         --copt="-Wuninitialized" \
128         --copt="-Wundef" \
129         --define="absl=${absl}" \
130         --distdir="/bazel-distdir" \
131         --features=external_include_paths \
132         --keep_going \
133         --linkopt="--gcc-toolchain=/usr/local" \
134         --show_timestamps \
135         --test_output=errors
136   done
137 done