Inject the TOOLS_REPOSITORY constant in the RuleClassProvider instead of using Constants.java
It also includes one example on how to use the new mechanism in BazelCppRuleClasses.
This is the first phase for the removal of the TOOLS_REPOSITORY constant.
--
MOS_MIGRATED_REVID=113244399
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
index ab0a534..746eb9e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
@@ -85,6 +85,7 @@
private final StringBuilder defaultWorkspaceFile = new StringBuilder();
private Label preludeLabel;
private String runfilesPrefix;
+ private String toolsRepository;
private final List<ConfigurationFragmentFactory> configurationFragments = new ArrayList<>();
private final List<BuildInfoFactory> buildInfoFactories = new ArrayList<>();
private final List<Class<? extends FragmentOptions>> configurationOptions = new ArrayList<>();
@@ -129,6 +130,11 @@
this.runfilesPrefix = runfilesPrefix;
return this;
}
+
+ public Builder setToolsRepository(String toolsRepository) {
+ this.toolsRepository = toolsRepository;
+ return this;
+ }
public Builder setPrerequisiteValidator(PrerequisiteValidator prerequisiteValidator) {
this.prerequisiteValidator = prerequisiteValidator;
@@ -246,6 +252,7 @@
return new ConfiguredRuleClassProvider(
preludeLabel,
runfilesPrefix,
+ toolsRepository,
ImmutableMap.copyOf(ruleClassMap),
ImmutableMap.copyOf(ruleDefinitionMap),
ImmutableMap.copyOf(aspectFactoryMap),
@@ -264,6 +271,11 @@
public Label getLabel(String labelValue) {
return LABELS.getUnchecked(labelValue);
}
+
+ @Override
+ public String getToolsRepository() {
+ return toolsRepository;
+ }
}
/**
@@ -297,6 +309,11 @@
* The default runfiles prefix.
*/
private final String runfilesPrefix;
+
+ /**
+ * The path to the tools repository.
+ */
+ private final String toolsRepository;
/**
* Maps rule class name to the metaclass instance for that rule.
@@ -345,6 +362,7 @@
private ConfiguredRuleClassProvider(
Label preludeLabel,
String runfilesPrefix,
+ String toolsRepository,
ImmutableMap<String, RuleClass> ruleClassMap,
ImmutableMap<String, Class<? extends RuleDefinition>> ruleDefinitionMap,
ImmutableMap<String, Class<? extends NativeAspectFactory>> aspectFactoryMap,
@@ -359,6 +377,7 @@
List<Class<? extends FragmentOptions>> buildOptions) {
this.preludeLabel = preludeLabel;
this.runfilesPrefix = runfilesPrefix;
+ this.toolsRepository = toolsRepository;
this.ruleClassMap = ruleClassMap;
this.ruleDefinitionMap = ruleDefinitionMap;
this.aspectFactoryMap = aspectFactoryMap;
@@ -386,6 +405,11 @@
public String getRunfilesPrefix() {
return runfilesPrefix;
}
+
+ @Override
+ public String getToolsRepository() {
+ return toolsRepository;
+ }
@Override
public Map<String, RuleClass> getRuleClassMap() {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinitionEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinitionEnvironment.java
index 9a4fb6c2..2eab411 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinitionEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinitionEnvironment.java
@@ -26,4 +26,9 @@
* Label#parseAbsolute}. Throws a {@link IllegalArgumentException} if the parsing fails.
*/
Label getLabel(String labelValue);
+
+ /**
+ * Returns the path to the tools repository. It is different for blaze and bazel.
+ */
+ String getToolsRepository();
}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
index 953ee04..650c556 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
@@ -230,6 +230,7 @@
.setConfigurationCollectionFactory(new BazelConfigurationCollection())
.setPrelude("//tools/build_rules:prelude_bazel")
.setRunfilesPrefix("")
+ .setToolsRepository("@bazel_tools")
.setPrerequisiteValidator(new BazelPrerequisiteValidator());
builder.addBuildOptions(BUILD_OPTIONS);
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java
index 68bc7b1..4a91260 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java
@@ -39,7 +39,6 @@
import static com.google.devtools.build.lib.syntax.Type.STRING_LIST;
import com.google.common.base.Predicates;
-import com.google.devtools.build.lib.Constants;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
@@ -264,7 +263,7 @@
.add(attr("copts", STRING_LIST))
.add(
attr("$stl_default", LABEL)
- .value(env.getLabel(Constants.TOOLS_REPOSITORY + "//tools/cpp:stl")))
+ .value(env.getLabel(env.getToolsRepository() + "//tools/cpp:stl")))
.add(attr(":stl", LABEL).value(STL))
.build();
}
@@ -551,7 +550,7 @@
// sure that the correct headers are used for inclusion.
// The only exception is STL itself,
// to avoid cycles in the dependency graph.
- Label stl = env.getLabel(Constants.TOOLS_REPOSITORY + "//tools/cpp:stl");
+ Label stl = env.getLabel(env.getToolsRepository() + "//tools/cpp:stl");
return rule.getLabel().equals(stl) ? null : stl;
}
}))
@@ -586,7 +585,7 @@
</p>
<!-- #END_BLAZE_RULE.ATTRIBUTE -->*/
.add(attr("malloc", LABEL)
- .value(env.getLabel(Constants.TOOLS_REPOSITORY + "//tools/cpp:malloc"))
+ .value(env.getLabel(env.getToolsRepository() + "//tools/cpp:malloc"))
.allowedFileTypes()
.allowedRuleClasses("cc_library"))
.add(attr(":default_malloc", LABEL).value(DEFAULT_MALLOC))
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java
index f6918cb..f6529a6 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java
@@ -72,4 +72,9 @@
* overwritten in the WORKSPACE file in the actual workspace.
*/
String getDefaultWorkspaceFile();
+
+ /**
+ * Returns the path to the tools repository
+ */
+ String getToolsRepository();
}