diff options
Diffstat (limited to 'src/main')
10 files changed, 50 insertions, 21 deletions
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 1925876000..2db7d323a1 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 class Constants { 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 8f048f7bf1..18d605ddbc 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 class ConfiguredRuleClassProvider implements RuleClassProvider { 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 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { 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 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { return new ConfiguredRuleClassProvider( preludePath, + runfilesPrefix, ImmutableMap.copyOf(ruleClassMap), ImmutableMap.copyOf(ruleDefinitionMap), ImmutableMap.copyOf(aspectFactoryMap), @@ -265,6 +272,11 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { 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 class ConfiguredRuleClassProvider implements RuleClassProvider { 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 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { 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 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { } @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 2133bd5d10..605a15db5f 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 @@ public class BazelRuleClassProvider { .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 2e429ffeb0..fda1a8321c 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 @@ public class ExternalPackage extends Package { private Map<RepositoryName, Rule> repositoryMap; - ExternalPackage() { - super(PACKAGE_IDENTIFIER); + ExternalPackage(String runfilesPrefix) { + super(PACKAGE_IDENTIFIER, runfilesPrefix); } /** @@ -59,8 +59,8 @@ public class ExternalPackage extends Package { 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 92a24fb44e..2a6945c8ce 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.Iterables; 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 @@ public class Package implements Serializable { * 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 @@ public class Package implements Serializable { * @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 @@ public class Package implements Serializable { * <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 @@ public class Package implements Serializable { } 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 @@ public class Package implements Serializable { } } - 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 ad335aaa25..e0ee1924ca 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 @@ public class PackageDeserializer { 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 2122d42a8b..ffea0bddad 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 @@ public final class PackageFactory { 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 @@ public final class PackageFactory { 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 @@ public final class PackageFactory { 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 d153fa1b1a..958d88ac7c 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 @@ public interface RuleClassProvider { 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 945ce4294e..30f0c6a027 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 @@ public class WorkspaceFileFunction implements SkyFunction { } 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 3527d1c4a4..2fd1ffe57c 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 class Resolver { */ 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)); |