Make include pruning work in Bazel.
Fixes #2372.
--
PiperOrigin-RevId: 145539067
MOS_MIGRATED_REVID=145539067
diff --git a/src/test/shell/integration/BUILD b/src/test/shell/integration/BUILD
index 6f1bb7f..ac8f037 100644
--- a/src/test/shell/integration/BUILD
+++ b/src/test/shell/integration/BUILD
@@ -192,6 +192,13 @@
)
sh_test(
+ name = "cpp_test",
+ size = "large",
+ srcs = ["cpp_test.sh"],
+ data = [":test-deps"],
+)
+
+sh_test(
name = "action_env_test",
size = "large",
srcs = ["action_env_test.sh"],
diff --git a/src/test/shell/integration/cpp_test.sh b/src/test/shell/integration/cpp_test.sh
new file mode 100755
index 0000000..0e8fd3a
--- /dev/null
+++ b/src/test/shell/integration/cpp_test.sh
@@ -0,0 +1,93 @@
+#!/bin/bash
+#
+# Copyright 2016 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Load the test setup defined in the parent directory
+CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+source "${CURRENT_DIR}/../integration_test_setup.sh" \
+ || { echo "integration_test_setup.sh not found!" >&2; exit 1; }
+
+#### SETUP #############################################################
+
+set -e
+
+#### TESTS #############################################################
+
+function test_no_rebuild_on_irrelevant_header_change() {
+ mkdir -p a
+ cat > a/BUILD <<EOF
+cc_binary(name="a", srcs=["a.cc"], deps=["b"])
+cc_library(name="b", srcs=["b1.h", "b2.h"])
+EOF
+
+ cat > a/a.cc <<EOF
+#include "a/b1.h"
+
+int main(void) {
+ return B_RETURN_VALUE;
+}
+EOF
+
+ cat > a/b1.h <<EOF
+#define B_RETURN_VALUE 31
+EOF
+
+ cat > a/b2.h <<EOF
+=== BANANA ===
+EOF
+
+ bazel build //a || fail "build failed"
+ echo "CHERRY" > a/b2.h
+ bazel build //a >& $TEST_log || fail "build failed"
+ expect_not_log "Compiling a/a.cc"
+}
+
+function test_new_header_is_required() {
+ mkdir -p a
+ cat > a/BUILD <<EOF
+cc_binary(name="a", srcs=["a.cc"], deps=[":b"])
+cc_library(name="b", srcs=["b1.h", "b2.h"])
+EOF
+
+ cat > a/a.cc << EOF
+#include "a/b1.h"
+
+int main(void) {
+ return B1;
+}
+EOF
+
+ cat > a/b1.h <<EOF
+#define B1 3
+EOF
+
+ cat > a/b2.h <<EOF
+#define B2 4
+EOF
+
+ bazel build //a || fail "build failed"
+ cat > a/a.cc << EOF
+#include "a/b1.h"
+#include "a/b2.h"
+
+int main(void) {
+ return B1 + B2;
+}
+EOF
+
+ bazel build //a || fail "build failled"
+}
+
+run_suite "Tests for Bazel's C++ rules"