Inject the default runfiles prefix from the rule class provider. -- MOS_MIGRATED_REVID=102341264
diff --git a/src/main/java/com/google/devtools/build/lib/Constants.java b/src/main/java/com/google/devtools/build/lib/Constants.java index 1925876..2db7d32 100644 --- a/src/main/java/com/google/devtools/build/lib/Constants.java +++ b/src/main/java/com/google/devtools/build/lib/Constants.java
@@ -31,7 +31,6 @@ public static final String MAIN_RULE_CLASS_PROVIDER = "com.google.devtools.build.lib.bazel.rules.BazelRuleClassProvider"; public static final ImmutableList<String> IGNORED_TEST_WARNING_PREFIXES = ImmutableList.of(); - public static final String DEFAULT_RUNFILES_PREFIX = ""; public static final String NATIVE_DEPS_LIB_SUFFIX = "_nativedeps";
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 8f048f7..18d605d 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
@@ -80,6 +80,7 @@ public static class Builder implements RuleDefinitionEnvironment { private final StringBuilder defaultWorkspaceFile = new StringBuilder(); private PathFragment preludePath; + private String runfilesPrefix; private final List<ConfigurationFragmentFactory> configurationFragments = new ArrayList<>(); private final List<BuildInfoFactory> buildInfoFactories = new ArrayList<>(); private final List<Class<? extends FragmentOptions>> configurationOptions = new ArrayList<>(); @@ -110,6 +111,11 @@ return this; } + public Builder setRunfilesPrefix(String runfilesPrefix) { + this.runfilesPrefix = runfilesPrefix; + return this; + } + public Builder setPrerequisiteValidator(PrerequisiteValidator prerequisiteValidator) { this.prerequisiteValidator = prerequisiteValidator; return this; @@ -219,6 +225,7 @@ return new ConfiguredRuleClassProvider( preludePath, + runfilesPrefix, ImmutableMap.copyOf(ruleClassMap), ImmutableMap.copyOf(ruleDefinitionMap), ImmutableMap.copyOf(aspectFactoryMap), @@ -265,6 +272,11 @@ private final PathFragment preludePath; /** + * The default runfiles prefix. + */ + private final String runfilesPrefix; + + /** * Maps rule class name to the metaclass instance for that rule. */ private final ImmutableMap<String, RuleClass> ruleClassMap; @@ -304,6 +316,7 @@ public ConfiguredRuleClassProvider( PathFragment preludePath, + String runfilesPrefix, ImmutableMap<String, RuleClass> ruleClassMap, ImmutableMap<String, Class<? extends RuleDefinition>> ruleDefinitionMap, ImmutableMap<String, Class<? extends AspectFactory<?, ?, ?>>> aspectFactoryMap, @@ -315,6 +328,7 @@ PrerequisiteValidator prerequisiteValidator, ImmutableMap<String, SkylarkType> skylarkAccessibleJavaClasses) { this.preludePath = preludePath; + this.runfilesPrefix = runfilesPrefix; this.ruleClassMap = ruleClassMap; this.ruleDefinitionMap = ruleDefinitionMap; this.aspectFactoryMap = aspectFactoryMap; @@ -340,6 +354,11 @@ } @Override + public String getRunfilesPrefix() { + return runfilesPrefix; + } + + @Override public Map<String, RuleClass> getRuleClassMap() { return ruleClassMap; }
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 2133bd5..605a15d 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
@@ -227,6 +227,7 @@ .addBuildInfoFactory(new ObjcBuildInfoFactory()) .setConfigurationCollectionFactory(new BazelConfigurationCollection()) .setPrelude("tools/build_rules/prelude_bazel") + .setRunfilesPrefix("") .setPrerequisiteValidator(new BazelPrerequisiteValidator()); for (Class<? extends FragmentOptions> fragmentOptions : BUILD_OPTIONS) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java b/src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java index 2e429ff..fda1a83 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java +++ b/src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java
@@ -41,8 +41,8 @@ private Map<RepositoryName, Rule> repositoryMap; - ExternalPackage() { - super(PACKAGE_IDENTIFIER); + ExternalPackage(String runfilesPrefix) { + super(PACKAGE_IDENTIFIER, runfilesPrefix); } /** @@ -59,8 +59,8 @@ public static class Builder extends Package.Builder { private Map<RepositoryName, Rule> repositoryMap = Maps.newLinkedHashMap(); - public Builder(Path workspacePath) { - super(new ExternalPackage()); + public Builder(Path workspacePath, String runfilesPrefix) { + super(new ExternalPackage(runfilesPrefix)); setFilename(workspacePath); setMakeEnv(new MakeEnvironment.Builder()); }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java index 92a24fb..2a6945c 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/Package.java +++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java
@@ -24,7 +24,6 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import com.google.devtools.build.lib.Constants; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.collect.CollectionUtils; import com.google.devtools.build.lib.collect.ImmutableSortedKeyMap; @@ -107,7 +106,7 @@ * The name of the workspace this package is in. Used as a prefix for the runfiles directory. * This can be set in the WORKSPACE file. This must be a valid target name. */ - protected String workspaceName = Constants.DEFAULT_RUNFILES_PREFIX; + protected String workspaceName; /** * The root of the source tree in which this package was found. It is an invariant that @@ -226,8 +225,9 @@ * @precondition {@code name} must be a suffix of * {@code filename.getParentDirectory())}. */ - protected Package(PackageIdentifier packageId) { + protected Package(PackageIdentifier packageId, String runfilesPrefix) { this.packageIdentifier = packageId; + this.workspaceName = runfilesPrefix; this.nameFragment = Canonicalizer.fragments().intern(packageId.getPackageFragment()); this.name = nameFragment.getPathString(); } @@ -723,11 +723,10 @@ * <p>Despite its name, this is the normal builder used when parsing BUILD files. */ public static class LegacyBuilder extends Builder { - private Globber globber = null; - LegacyBuilder(PackageIdentifier packageId) { - super(packageId); + LegacyBuilder(PackageIdentifier packageId, String runfilesPrefix) { + super(packageId, runfilesPrefix); } /** @@ -761,8 +760,8 @@ } static class Builder { - protected static Package newPackage(PackageIdentifier packageId) { - return new Package(packageId); + protected static Package newPackage(PackageIdentifier packageId, String runfilesPrefix) { + return new Package(packageId, runfilesPrefix); } /** @@ -826,8 +825,8 @@ } } - Builder(PackageIdentifier id) { - this(newPackage(id)); + Builder(PackageIdentifier id, String runfilesPrefix) { + this(newPackage(id, runfilesPrefix)); } protected PackageIdentifier getPackageIdentifier() {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java b/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java index ad335aa..e0ee192 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java +++ b/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java
@@ -482,7 +482,8 @@ Package.Builder builder; try { builder = new Package.Builder( - new PackageIdentifier(packagePb.getRepository(), new PathFragment(packagePb.getName()))); + new PackageIdentifier(packagePb.getRepository(), new PathFragment(packagePb.getName())), + null); } catch (TargetParsingException e) { throw new PackageDeserializationException(e); }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java index 2122d42..ffea0bd 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java +++ b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
@@ -1055,7 +1055,8 @@ Preprocessor.Result preprocessingResult = preprocess(packageId, buildFile, inputSource, globber, localReporter); ExternalPackage externalPkg = - new ExternalPackage.Builder(buildFile.getRelative("WORKSPACE")).build(); + new ExternalPackage.Builder( + buildFile.getRelative("WORKSPACE"), ruleClassProvider.getRunfilesPrefix()).build(); Package result = createPackageFromPreprocessingResult( @@ -1261,7 +1262,8 @@ Environment pkgEnv = new Environment(globalEnv, eventHandler); pkgEnv.setLoadingPhase(); - Package.LegacyBuilder pkgBuilder = new Package.LegacyBuilder(packageId); + Package.LegacyBuilder pkgBuilder = new Package.LegacyBuilder( + packageId, ruleClassProvider.getRunfilesPrefix()); pkgBuilder.setGlobber(globber) .setFilename(buildFilePath) @@ -1331,7 +1333,8 @@ Environment pkgEnv = new Environment(); pkgEnv.setLoadingPhase(); - Package.LegacyBuilder pkgBuilder = new Package.LegacyBuilder(packageId); + Package.LegacyBuilder pkgBuilder = new Package.LegacyBuilder(packageId, + ruleClassProvider.getRunfilesPrefix()); pkgBuilder.setFilename(buildFilePath) .setMakeEnv(pkgMakeEnv)
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 d153fa1..958d88a 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
@@ -32,6 +32,11 @@ PathFragment getPreludePath(); /** + * The default runfiles prefix (may be overwritten by the WORKSPACE file). + */ + String getRunfilesPrefix(); + + /** * Returns a map from rule names to rule class objects. */ Map<String, RuleClass> getRuleClassMap();
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java index 945ce42..30f0c6a 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
@@ -60,7 +60,8 @@ } Path repoWorkspace = workspaceRoot.getRoot().getRelative(workspaceRoot.getRelativePath()); - Builder builder = new Builder(repoWorkspace); + Builder builder = new Builder(repoWorkspace, + packageFactory.getRuleClassProvider().getRunfilesPrefix()); WorkspaceFactory parser = new WorkspaceFactory( builder, packageFactory.getRuleClassProvider(), installDir.getPathString()); parser.parse(ParserInputSource.create(
diff --git a/src/main/java/com/google/devtools/build/workspace/Resolver.java b/src/main/java/com/google/devtools/build/workspace/Resolver.java index 3527d1c..2fd1ffe 100644 --- a/src/main/java/com/google/devtools/build/workspace/Resolver.java +++ b/src/main/java/com/google/devtools/build/workspace/Resolver.java
@@ -67,7 +67,8 @@ */ public ExternalPackage parse(Path workspacePath) { resolver.addHeader(workspacePath.getPathString()); - ExternalPackage.Builder builder = new ExternalPackage.Builder(workspacePath); + ExternalPackage.Builder builder = new ExternalPackage.Builder(workspacePath, + ruleClassProvider.getRunfilesPrefix()); WorkspaceFactory parser = new WorkspaceFactory(builder, ruleClassProvider); try { parser.parse(ParserInputSource.create(workspacePath));
diff --git a/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java b/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java index 8b1a198..8923373 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java
@@ -205,7 +205,7 @@ } private Package.Builder createDummyPackageBuilder() { - return new Builder(PackageIdentifier.createInDefaultRepo(TEST_PACKAGE_NAME)) + return new Builder(PackageIdentifier.createInDefaultRepo(TEST_PACKAGE_NAME), "TESTING") .setFilename(testBuildfilePath) .setMakeEnv(new MakeEnvironment.Builder()); }
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java index 84c401d..24ac455 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java +++ b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java
@@ -129,8 +129,8 @@ GlobCache globCache = new GlobCache( buildFile.getParentDirectory(), packageId, locator, null, TestUtils.getPool()); LegacyGlobber globber = new LegacyGlobber(globCache); - ExternalPackage externalPkg = (new ExternalPackage.Builder( - buildFile.getParentDirectory().getRelative("WORKSPACE"))).build(); + ExternalPackage externalPkg = new ExternalPackage.Builder( + buildFile.getParentDirectory().getRelative("WORKSPACE"), "TESTING").build(); LegacyBuilder resultBuilder = factory.evaluateBuildFile( externalPkg, packageId, buildFileAST, buildFile, globber, ImmutableList.<Event>of(), ConstantRuleVisibility.PUBLIC, false, false,