Extend the repository_rule function by a parameter configure
Setting this parameter to True (the default value is False) indicates
to bazel that the repository serves a configure-like purpose, e.g.,
inspecting the host environment searching for compilers or standard
libraries.
Change-Id: I57c97f2ae81b176bb40a06d60d65929585665a68
PiperOrigin-RevId: 257588478
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryFunction.java
index c924714..38f2a9c 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryFunction.java
@@ -245,6 +245,16 @@
}
@Override
+ protected boolean isConfigure(Rule rule) {
+ return (Boolean) rule.getAttributeContainer().getAttr("$configure");
+ }
+
+ public static boolean isConfigurelikeRule(Rule rule) {
+ return rule.getRuleClassObject().isSkylark()
+ && ((Boolean) rule.getAttributeContainer().getAttr("$configure"));
+ }
+
+ @Override
public Class<? extends RuleDefinition> getRuleDefinition() {
return null; // unused so safe to return null
}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryModule.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryModule.java
index f5b9823..2396ce4 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryModule.java
@@ -63,6 +63,7 @@
Object attrs,
Boolean local,
SkylarkList<String> environ,
+ Boolean configure,
String doc,
FuncallExpression ast,
com.google.devtools.build.lib.syntax.Environment funcallEnv)
@@ -72,6 +73,7 @@
RuleClass.Builder builder = new RuleClass.Builder("", RuleClassType.WORKSPACE, true);
builder.addOrOverrideAttribute(attr("$local", BOOLEAN).defaultValue(local).build());
+ builder.addOrOverrideAttribute(attr("$configure", BOOLEAN).defaultValue(configure).build());
builder.addOrOverrideAttribute(
attr("$environ", STRING_LIST).defaultValue(environ).build());
BaseRuleClasses.nameAttribute(builder);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
index 2bab9f5..ad79058 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
@@ -372,6 +372,11 @@
*/
protected abstract boolean isLocal(Rule rule);
+ /** Wheather the rule declares it inspects the local environment for configure purpose. */
+ protected boolean isConfigure(Rule rule) {
+ return false;
+ }
+
/**
* Returns a block of data that must be equal for two Rules for them to be considered the same.
*
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/RepositoryModuleApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/RepositoryModuleApi.java
index 2e138c8..bdf7dd7 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/RepositoryModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/RepositoryModuleApi.java
@@ -42,9 +42,9 @@
type = BaseFunction.class,
named = true,
doc =
- "the function implementing this rule, has to have exactly one parameter: "
- + "<code><a href=\"repository_ctx.html\">repository_ctx</a></code>. The function "
- + "is called during loading phase for each instance of the rule."),
+ "the function implementing this rule, has to have exactly one parameter: <code><a"
+ + " href=\"repository_ctx.html\">repository_ctx</a></code>. The function is"
+ + " called during loading phase for each instance of the rule."),
@Param(
name = "attrs",
type = SkylarkDict.class,
@@ -80,6 +80,13 @@
named = true,
positional = false),
@Param(
+ name = "configure",
+ type = Boolean.class,
+ defaultValue = "False",
+ doc = "Indicate that the repository inspects the system for configuration purpose",
+ named = true,
+ positional = false),
+ @Param(
name = "doc",
type = String.class,
defaultValue = "''",
@@ -96,6 +103,7 @@
Object attrs,
Boolean local,
SkylarkList<String> environ,
+ Boolean configure,
String doc,
FuncallExpression ast,
Environment env)
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java
index 0a1ce19..7c1ab1c 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java
@@ -52,6 +52,7 @@
Object attrs,
Boolean local,
SkylarkList<String> environ,
+ Boolean configure,
String doc,
FuncallExpression ast,
Environment env)