diff options
Diffstat (limited to 'src')
5 files changed, 27 insertions, 9 deletions
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 a0ed7a479c..a99bed80a8 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 @@ -107,7 +107,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { ImmutableList.<Class<?>>builder().addAll(SkylarkModules.MODULES); private ImmutableBiMap<String, Class<? extends TransitiveInfoProvider>> registeredSkylarkProviders = ImmutableBiMap.of(); - + public void addWorkspaceFilePrefix(String contents) { defaultWorkspaceFilePrefix.append(contents); @@ -299,6 +299,11 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { public Label getToolsLabel(String labelValue) { return getLabel(toolsRepository + labelValue); } + + @Override + public String getToolsRepository() { + return toolsRepository; + } } /** @@ -528,7 +533,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { getRegisteredSkylarkProviders() { return this.registeredSkylarkProviders; } - + /** * Creates a BuildOptions class for the given options taken from an optionsProvider. */ 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 45200fb8a5..5880e954dd 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 @@ -32,4 +32,9 @@ public interface RuleDefinitionEnvironment { * using {@link RuleDefinitionEnvironment#getLabel} */ Label getToolsLabel(String labelValue); + + /** + * Returns the tools repository prefix. + */ + 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 01a2c15dd3..7692978e47 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 @@ -14,6 +14,8 @@ package com.google.devtools.build.lib.bazel.rules; +import static com.google.common.base.Preconditions.checkNotNull; + import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Functions; import com.google.common.collect.ImmutableBiMap; @@ -160,6 +162,7 @@ public class BazelRuleClassProvider { public static ConfiguredRuleClassProvider create() { ConfiguredRuleClassProvider.Builder builder = new ConfiguredRuleClassProvider.Builder(); + builder.setToolsRepository(TOOLS_REPOSITORY); setup(builder); return builder.build(); } @@ -264,6 +267,8 @@ public class BazelRuleClassProvider { ObjcProvider.OBJC_SKYLARK_PROVIDER_NAME, ObjcProvider.class); public static void setup(ConfiguredRuleClassProvider.Builder builder) { + // The tools repository prefix must be set before calling this method. + String toolsRepository = checkNotNull(builder.getToolsRepository()); builder .addBuildInfoFactory(new BazelJavaBuildInfoFactory()) .addBuildInfoFactory(new CppBuildInfo()) @@ -271,7 +276,6 @@ public class BazelRuleClassProvider { .setConfigurationCollectionFactory(new BazelConfigurationCollection()) .setPrelude("//tools/build_rules:prelude_bazel") .setRunfilesPrefix(Label.DEFAULT_REPOSITORY_DIRECTORY) - .setToolsRepository(TOOLS_REPOSITORY) .setPrerequisiteValidator(new BazelPrerequisiteValidator()) .setSkylarkAccessibleTopLevels(SKYLARK_BUILT_IN_JAVA_OBJECTS) .setSkylarkProviderRegistry(SKYLARK_PROVIDERS_TO_REGISTER); @@ -279,12 +283,12 @@ public class BazelRuleClassProvider { builder.addConfigurationOptions(BUILD_OPTIONS); AndroidNeverlinkAspect androidNeverlinkAspect = new AndroidNeverlinkAspect(); - DexArchiveAspect dexArchiveAspect = new DexArchiveAspect(TOOLS_REPOSITORY); - JackAspect jackAspect = new JackAspect(TOOLS_REPOSITORY); - BazelJ2ObjcProtoAspect bazelJ2ObjcProtoAspect = new BazelJ2ObjcProtoAspect(TOOLS_REPOSITORY); - J2ObjcAspect j2ObjcAspect = new J2ObjcAspect(TOOLS_REPOSITORY, bazelJ2ObjcProtoAspect); + DexArchiveAspect dexArchiveAspect = new DexArchiveAspect(toolsRepository); + JackAspect jackAspect = new JackAspect(toolsRepository); + BazelJ2ObjcProtoAspect bazelJ2ObjcProtoAspect = new BazelJ2ObjcProtoAspect(toolsRepository); + J2ObjcAspect j2ObjcAspect = new J2ObjcAspect(toolsRepository, bazelJ2ObjcProtoAspect); AndroidStudioInfoAspect androidStudioInfoAspect = - new AndroidStudioInfoAspect(TOOLS_REPOSITORY, new BazelAndroidStudioInfoSemantics()); + new AndroidStudioInfoAspect(toolsRepository, new BazelAndroidStudioInfoSemantics()); ObjcProtoAspect objcProtoAspect = new ObjcProtoAspect(); builder.addNativeAspectClass(androidNeverlinkAspect); @@ -410,7 +414,7 @@ public class BazelRuleClassProvider { builder.addRuleDefinition(new ObjcRuleClasses.WatchExtensionBundleRule()); builder.addRuleDefinition(new ObjcRuleClasses.WatchApplicationBundleRule()); builder.addRuleDefinition(new ObjcRuleClasses.CrosstoolRule()); - builder.addRuleDefinition(new AppleToolchain.RequiresXcodeConfigRule(TOOLS_REPOSITORY)); + builder.addRuleDefinition(new AppleToolchain.RequiresXcodeConfigRule(toolsRepository)); builder.addRuleDefinition(new AppleWatch1ExtensionRule()); builder.addRuleDefinition(new AppleWatchExtensionBinaryRule()); builder.addRuleDefinition(new IosApplicationRule()); diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java index 0e6b8accc2..e5fb01ad7c 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java @@ -177,6 +177,7 @@ public class BazelRulesModule extends BlazeModule { @Override public void initializeRuleClasses(ConfiguredRuleClassProvider.Builder builder) { + builder.setToolsRepository(BazelRuleClassProvider.TOOLS_REPOSITORY); BazelRuleClassProvider.setup(builder); try { // Load auto-configuration files, it is made outside of the rule class provider so that it diff --git a/src/test/java/com/google/devtools/build/lib/testutil/TestRuleClassProvider.java b/src/test/java/com/google/devtools/build/lib/testutil/TestRuleClassProvider.java index 60faf47474..aa8bfb78c1 100644 --- a/src/test/java/com/google/devtools/build/lib/testutil/TestRuleClassProvider.java +++ b/src/test/java/com/google/devtools/build/lib/testutil/TestRuleClassProvider.java @@ -43,6 +43,9 @@ public class TestRuleClassProvider { public static void addStandardRules(ConfiguredRuleClassProvider.Builder builder) { try { Class<?> providerClass = Class.forName(TestConstants.TEST_RULE_CLASS_PROVIDER); + // The method setup in the rule class provider requires the tools repository to be set + // beforehand. + builder.setToolsRepository(TestConstants.TOOLS_REPOSITORY); Method setupMethod = providerClass.getMethod("setup", ConfiguredRuleClassProvider.Builder.class); setupMethod.invoke(null, builder); |