aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/Constants.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/Package.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java3
-rw-r--r--src/main/java/com/google/devtools/build/workspace/Resolver.java3
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));