Introduce --incompatible_disable_nocopts flag
This flag prohibits the use of 'nocopts' attribute in cc_* rules.
Issue #8706
RELNOTES: --incompatible_disable_nocopts flag has been added. See https://github.com/bazelbuild/bazel/issues/8706 for details.
PiperOrigin-RevId: 254781400
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 36ecb13..89413e3 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
@@ -525,6 +525,14 @@
if (Strings.isNullOrEmpty(nocoptsValue)) {
return null;
}
+
+ if (ruleContext.getConfiguration().getFragment(CppConfiguration.class).disableNoCopts()) {
+ ruleContext.attributeError(
+ NO_COPTS_ATTRIBUTE,
+ "This attribute was removed. See https://github.com/bazelbuild/bazel/issues/8706 for"
+ + " details.");
+ }
+
String nocoptsAttr = ruleContext.getExpander().expand(NO_COPTS_ATTRIBUTE, nocoptsValue);
try {
return Pattern.compile(nocoptsAttr);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
index 6d7798e..0fa5904 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
@@ -694,4 +694,8 @@
public boolean useSpecificToolFiles() {
return cppOptions.useSpecificToolFiles;
}
+
+ public boolean disableNoCopts() {
+ return cppOptions.disableNoCopts;
+ }
}
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 eb27d8a..a2b2851 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
@@ -903,6 +903,20 @@
+ "See https://github.com/bazelbuild/bazel/issues/8546.")
public boolean disableStaticCcToolchains;
+ @Option(
+ name = "incompatible_disable_nocopts",
+ defaultValue = "false",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.ACTION_COMMAND_LINES},
+ metadataTags = {
+ OptionMetadataTag.INCOMPATIBLE_CHANGE,
+ OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES,
+ },
+ help =
+ "When enabled, it removes nocopts attribute from C++ rules. See"
+ + " https://github.com/bazelbuild/bazel/issues/8706 for details.")
+ public boolean disableNoCopts;
+
@Override
public FragmentOptions getHost() {
CppOptions host = (CppOptions) getDefault();
@@ -959,6 +973,7 @@
host.useStandaloneLtoIndexingCommandLines = useStandaloneLtoIndexingCommandLines;
host.useSpecificToolFiles = useSpecificToolFiles;
host.disableStaticCcToolchains = disableStaticCcToolchains;
+ host.disableNoCopts = disableNoCopts;
// Save host options for further use.
host.hostCoptList = hostCoptList;
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
index 0d4f1f8..675b84e 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
@@ -1060,4 +1060,15 @@
private String removeOutDirectory(String s) {
return s.replace("blaze-out", "").replace("bazel-out", "");
}
+
+ @Test
+ public void testNoCoptsDisabled() throws Exception {
+ reporter.removeHandler(failFastHandler);
+ scratch.file("x/BUILD", "cc_library(name = 'foo', srcs = ['a.cc'], nocopts = 'abc')");
+ useConfiguration("--incompatible_disable_nocopts");
+ getConfiguredTarget("//x:foo");
+ assertContainsEvent(
+ "This attribute was removed. See https://github.com/bazelbuild/bazel/issues/8706 for"
+ + " details.");
+ }
}