Lukacs Berki | 840acb1 | 2017-01-25 14:01:33 +0000 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | # |
| 3 | # Copyright 2016 The Bazel Authors. All rights reserved. |
| 4 | # |
| 5 | # Licensed under the Apache License, Version 2.0 (the "License"); |
| 6 | # you may not use this file except in compliance with the License. |
| 7 | # You may obtain a copy of the License at |
| 8 | # |
| 9 | # http://www.apache.org/licenses/LICENSE-2.0 |
| 10 | # |
| 11 | # Unless required by applicable law or agreed to in writing, software |
| 12 | # distributed under the License is distributed on an "AS IS" BASIS, |
| 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 14 | # See the License for the specific language governing permissions and |
| 15 | # limitations under the License. |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 16 | |
| 17 | # --- begin runfiles.bash initialization --- |
| 18 | # Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash). |
| 19 | set -euo pipefail |
| 20 | if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then |
| 21 | if [[ -f "$0.runfiles_manifest" ]]; then |
| 22 | export RUNFILES_MANIFEST_FILE="$0.runfiles_manifest" |
| 23 | elif [[ -f "$0.runfiles/MANIFEST" ]]; then |
| 24 | export RUNFILES_MANIFEST_FILE="$0.runfiles/MANIFEST" |
| 25 | elif [[ -f "$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then |
| 26 | export RUNFILES_DIR="$0.runfiles" |
| 27 | fi |
| 28 | fi |
| 29 | if [[ -f "${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then |
| 30 | source "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash" |
| 31 | elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then |
| 32 | source "$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \ |
| 33 | "$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)" |
| 34 | else |
| 35 | echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash" |
| 36 | exit 1 |
| 37 | fi |
| 38 | # --- end runfiles.bash initialization --- |
| 39 | |
| 40 | source "$(rlocation "io_bazel/src/test/shell/integration_test_setup.sh")" \ |
Lukacs Berki | 840acb1 | 2017-01-25 14:01:33 +0000 | [diff] [blame] | 41 | || { echo "integration_test_setup.sh not found!" >&2; exit 1; } |
| 42 | |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 43 | case "$(uname -s | tr [:upper:] [:lower:])" in |
| 44 | msys*|mingw*|cygwin*) |
| 45 | declare -r is_windows=true |
| 46 | ;; |
| 47 | *) |
| 48 | declare -r is_windows=false |
| 49 | ;; |
| 50 | esac |
Lukacs Berki | 840acb1 | 2017-01-25 14:01:33 +0000 | [diff] [blame] | 51 | |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 52 | if "$is_windows"; then |
| 53 | export MSYS_NO_PATHCONV=1 |
| 54 | export MSYS2_ARG_CONV_EXCL="*" |
| 55 | fi |
Lukacs Berki | 840acb1 | 2017-01-25 14:01:33 +0000 | [diff] [blame] | 56 | |
Laszlo Csomor | f57c306 | 2019-01-16 05:06:00 -0800 | [diff] [blame] | 57 | if ! type try_with_timeout >&/dev/null; then |
| 58 | # Bazel's testenv.sh defines try_with_timeout but the Google-internal version |
| 59 | # uses a different testenv.sh. |
| 60 | function try_with_timeout() { $* ; } |
| 61 | fi |
| 62 | |
Lukacs Berki | 840acb1 | 2017-01-25 14:01:33 +0000 | [diff] [blame] | 63 | #### TESTS ############################################################# |
| 64 | |
| 65 | function test_no_rebuild_on_irrelevant_header_change() { |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 66 | local -r pkg=$FUNCNAME |
| 67 | mkdir -p $pkg |
| 68 | cat > $pkg/BUILD <<EOF |
Lukacs Berki | 840acb1 | 2017-01-25 14:01:33 +0000 | [diff] [blame] | 69 | cc_binary(name="a", srcs=["a.cc"], deps=["b"]) |
| 70 | cc_library(name="b", srcs=["b1.h", "b2.h"]) |
| 71 | EOF |
| 72 | |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 73 | cat > $pkg/a.cc <<EOF |
| 74 | #include "$pkg/b1.h" |
Lukacs Berki | 840acb1 | 2017-01-25 14:01:33 +0000 | [diff] [blame] | 75 | |
| 76 | int main(void) { |
| 77 | return B_RETURN_VALUE; |
| 78 | } |
| 79 | EOF |
| 80 | |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 81 | cat > $pkg/b1.h <<EOF |
Lukacs Berki | 840acb1 | 2017-01-25 14:01:33 +0000 | [diff] [blame] | 82 | #define B_RETURN_VALUE 31 |
| 83 | EOF |
| 84 | |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 85 | cat > $pkg/b2.h <<EOF |
Lukacs Berki | 840acb1 | 2017-01-25 14:01:33 +0000 | [diff] [blame] | 86 | === BANANA === |
| 87 | EOF |
| 88 | |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 89 | bazel build //$pkg:a || fail "build failed" |
| 90 | echo "CHERRY" > $pkg/b2.h |
| 91 | bazel build //$pkg:a >& $TEST_log || fail "build failed" |
| 92 | expect_not_log "Compiling $pkg/a.cc" |
Lukacs Berki | 840acb1 | 2017-01-25 14:01:33 +0000 | [diff] [blame] | 93 | } |
| 94 | |
| 95 | function test_new_header_is_required() { |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 96 | local -r pkg=$FUNCNAME |
| 97 | mkdir -p $pkg |
| 98 | cat > $pkg/BUILD <<EOF |
Lukacs Berki | 840acb1 | 2017-01-25 14:01:33 +0000 | [diff] [blame] | 99 | cc_binary(name="a", srcs=["a.cc"], deps=[":b"]) |
| 100 | cc_library(name="b", srcs=["b1.h", "b2.h"]) |
| 101 | EOF |
| 102 | |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 103 | cat > $pkg/a.cc << EOF |
| 104 | #include "$pkg/b1.h" |
Lukacs Berki | 840acb1 | 2017-01-25 14:01:33 +0000 | [diff] [blame] | 105 | |
| 106 | int main(void) { |
| 107 | return B1; |
| 108 | } |
| 109 | EOF |
| 110 | |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 111 | cat > $pkg/b1.h <<EOF |
Lukacs Berki | 840acb1 | 2017-01-25 14:01:33 +0000 | [diff] [blame] | 112 | #define B1 3 |
| 113 | EOF |
| 114 | |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 115 | cat > $pkg/b2.h <<EOF |
Lukacs Berki | 840acb1 | 2017-01-25 14:01:33 +0000 | [diff] [blame] | 116 | #define B2 4 |
| 117 | EOF |
| 118 | |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 119 | bazel build //$pkg:a || fail "build failed" |
| 120 | cat > $pkg/a.cc << EOF |
| 121 | #include "$pkg/b1.h" |
| 122 | #include "$pkg/b2.h" |
Lukacs Berki | 840acb1 | 2017-01-25 14:01:33 +0000 | [diff] [blame] | 123 | |
| 124 | int main(void) { |
| 125 | return B1 + B2; |
| 126 | } |
| 127 | EOF |
| 128 | |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 129 | bazel build //$pkg:a || fail "build failled" |
Lukacs Berki | 840acb1 | 2017-01-25 14:01:33 +0000 | [diff] [blame] | 130 | } |
| 131 | |
George Gensure | abc9332 | 2017-02-27 12:16:39 +0000 | [diff] [blame] | 132 | function test_no_recompile_on_shutdown() { |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 133 | local -r pkg=$FUNCNAME |
| 134 | mkdir -p $pkg |
| 135 | cat > $pkg/BUILD <<EOF |
George Gensure | abc9332 | 2017-02-27 12:16:39 +0000 | [diff] [blame] | 136 | cc_binary(name="a", srcs=["a.cc"], deps=["b"]) |
| 137 | cc_library(name="b", includes=["."], hdrs=["b.h"]) |
| 138 | EOF |
| 139 | |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 140 | cat > $pkg/a.cc <<EOF |
George Gensure | abc9332 | 2017-02-27 12:16:39 +0000 | [diff] [blame] | 141 | #include "b.h" |
| 142 | |
| 143 | int main(void) { |
| 144 | return B_RETURN_VALUE; |
| 145 | } |
| 146 | EOF |
| 147 | |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 148 | cat > $pkg/b.h <<EOF |
George Gensure | abc9332 | 2017-02-27 12:16:39 +0000 | [diff] [blame] | 149 | #define B_RETURN_VALUE 31 |
| 150 | EOF |
| 151 | |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 152 | bazel build -s //$pkg:a >& $TEST_log || fail "build failed" |
| 153 | expect_log "Compiling $pkg/a.cc" |
Laszlo Csomor | f57c306 | 2019-01-16 05:06:00 -0800 | [diff] [blame] | 154 | try_with_timeout bazel shutdown || fail "shutdown failed" |
Laszlo Csomor | 6ab4e16 | 2018-08-13 08:31:31 -0700 | [diff] [blame] | 155 | bazel build -s //$pkg:a >& $TEST_log || fail "build failed" |
| 156 | expect_not_log "Compiling $pkg/a.cc" |
George Gensure | abc9332 | 2017-02-27 12:16:39 +0000 | [diff] [blame] | 157 | } |
| 158 | |
Lukacs Berki | 840acb1 | 2017-01-25 14:01:33 +0000 | [diff] [blame] | 159 | run_suite "Tests for Bazel's C++ rules" |