aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar shahan <shahan@google.com>2018-08-10 10:02:19 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-08-10 10:04:43 -0700
commit20cf8a6b4ed9d06433ce2a57b91df96d849c546e (patch)
tree4aaf4e6dd76d84f4c2c1f3f6393e32bbcbdbde00
parent44e267980fffd6b0aaee49831fc83441e2000082 (diff)
Adds a flag --experimental_includes_attribute_subpackage_traversal to toggle wildcarding on the presence of an includes attribute.
PiperOrigin-RevId: 208225306
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java12
2 files changed, 20 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index ffcd3fece7..56eaee9fa1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -591,10 +591,14 @@ public final class CcCommon {
.getPathUnderExecRoot();
result.add(rulePackage);
- // Add in any 'includes' attribute values as relative path fragments
- if (ruleContext.getRule().isAttributeValueExplicitlySpecified("includes")) {
- PathFragment packageFragment = ruleContext.getLabel().getPackageIdentifier()
- .getPathUnderExecRoot();
+ if (ruleContext
+ .getConfiguration()
+ .getOptions()
+ .get(CppOptions.class)
+ .experimentalIncludesAttributeSubpackageTraversal
+ && ruleContext.getRule().isAttributeValueExplicitlySpecified("includes")) {
+ PathFragment packageFragment =
+ ruleContext.getLabel().getPackageIdentifier().getPathUnderExecRoot();
// For now, anything with an 'includes' needs a blanket declaration
result.add(packageFragment.getRelative("**"));
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
index e403f3320d..a5b9ebb67e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
@@ -860,6 +860,18 @@ public class CppOptions extends FragmentOptions {
help = "If false, Bazel will not use the CROSSTOOL file to select the cc_toolchain label.")
public boolean enableCcToolchainFromCrosstool;
+ @Option(
+ name = "experimental_includes_attribute_subpackage_traversal",
+ defaultValue = "true",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.EXECUTION},
+ metadataTags = {OptionMetadataTag.EXPERIMENTAL},
+ help =
+ "If a cc target has loose headers checking, disabled layering check and an "
+ + "includes attribute set, it is allowed to include anything under its folder, even "
+ + "across subpackage boundaries.")
+ public boolean experimentalIncludesAttributeSubpackageTraversal;
+
@Override
public FragmentOptions getHost() {
CppOptions host = (CppOptions) getDefault();