Report error when accessing cc configuration without fragment
Closes #10392
Closes #10823.
PiperOrigin-RevId: 296202475
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
index 87a30f4..b0003d0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
@@ -142,6 +142,13 @@
+ "Please add 'ctx' as a named parameter. See "
+ "https://github.com/bazelbuild/bazel/issues/7793 for details.");
}
+ if (ruleContext != null
+ && !ruleContext.getRuleContext().isLegalFragment(CppConfiguration.class)) {
+ throw Starlark.errorf(
+ "%s must declare '%s' as a required configuration fragment to access it.",
+ ruleContext.getRuleContext().getRuleClassNameForLogging(),
+ CppConfiguration.class.getSimpleName());
+ }
CppConfiguration cppConfiguration =
ruleContext == null
? toolchain.getCppConfigurationEvenThoughItCanBeDifferentThanWhatTargetHas()
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
index 932c0d6..3d3fec0 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
@@ -74,7 +74,7 @@
@SkylarkCallable(
name = "configure_features",
- doc = "Creates a feature_configuration instance.",
+ doc = "Creates a feature_configuration instance. Requires the cpp configuration fragment.",
parameters = {
@Param(
name = "ctx",