From 20cf8a6b4ed9d06433ce2a57b91df96d849c546e Mon Sep 17 00:00:00 2001 From: shahan Date: Fri, 10 Aug 2018 10:02:19 -0700 Subject: Adds a flag --experimental_includes_attribute_subpackage_traversal to toggle wildcarding on the presence of an includes attribute. PiperOrigin-RevId: 208225306 --- .../com/google/devtools/build/lib/rules/cpp/CcCommon.java | 12 ++++++++---- .../com/google/devtools/build/lib/rules/cpp/CppOptions.java | 12 ++++++++++++ 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(); -- cgit v1.2.3