aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2015-10-08 12:19:53 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2015-10-09 14:39:33 +0000
commitcffd001a0ecf1dd5a0d058d8d285d21fb021dbcd (patch)
tree53497ab253175fc87715a78e305a619564f188e4 /src/main
parentaff46bc2f0e59cb9b59f6db982ddd490cf1d2b3c (diff)
Add a __workspace_dir__ variable alongside of __embedded_dir__ in the namespace of the WORKSPACE file.
-- MOS_MIGRATED_REVID=104952808
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java33
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java8
4 files changed, 48 insertions, 13 deletions
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 b3256aeb24..59060c7154 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
@@ -152,13 +152,21 @@ public final class PackageFactory {
/**
* Update the global environment with the identifiers this extension contributes.
*/
- void update(Environment environment, Label buildFileLabel);
+ void update(Environment environment);
+
+ /**
+ * Update the global environment of WORKSPACE files.
+ */
+ void updateWorkspace(Environment environment);
/**
* Returns the extra functions needed to be added to the Skylark native module.
*/
ImmutableList<BaseFunction> nativeModuleFunctions();
+ /**
+ * Returns the extra arguments to the {@code package()} statement.
+ */
Iterable<PackageArgument<?>> getPackageArguments();
}
@@ -426,6 +434,10 @@ public final class PackageFactory {
return ruleClassProvider;
}
+ public ImmutableList<EnvironmentExtension> getEnvironmentExtensions() {
+ return environmentExtensions;
+ }
+
/**
* Creates the list of arguments for the 'package' function.
*/
@@ -1229,7 +1241,7 @@ public final class PackageFactory {
}
for (EnvironmentExtension extension : environmentExtensions) {
- extension.update(pkgEnv, context.pkgBuilder.getBuildFileLabel());
+ extension.update(pkgEnv);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
index 244d501969..4527f5edba 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.packages;
import static com.google.devtools.build.lib.syntax.Runtime.NONE;
+import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.LabelValidator;
@@ -23,6 +24,7 @@ import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.events.StoredEventHandler;
import com.google.devtools.build.lib.packages.Package.Builder;
+import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension;
import com.google.devtools.build.lib.syntax.BaseFunction;
import com.google.devtools.build.lib.syntax.BuildFileAST;
import com.google.devtools.build.lib.syntax.BuiltinFunction;
@@ -32,6 +34,7 @@ import com.google.devtools.build.lib.syntax.FuncallExpression;
import com.google.devtools.build.lib.syntax.FunctionSignature;
import com.google.devtools.build.lib.syntax.Mutability;
import com.google.devtools.build.lib.syntax.ParserInputSource;
+import com.google.devtools.build.lib.vfs.Path;
import java.io.File;
import java.util.Map;
@@ -51,24 +54,30 @@ public class WorkspaceFactory {
* @param mutability the Mutability for the current evaluation context
*/
public WorkspaceFactory(
- Builder builder, RuleClassProvider ruleClassProvider, Mutability mutability) {
- this(builder, ruleClassProvider, mutability, null);
+ Builder builder, RuleClassProvider ruleClassProvider,
+ ImmutableList<EnvironmentExtension> environmentExtensions, Mutability mutability) {
+ this(builder, ruleClassProvider, environmentExtensions, mutability, null, null);
}
// TODO(bazel-team): document installDir
/**
* @param builder a builder for the Workspace
* @param ruleClassProvider a provider for known rule classes
+ * @param environmentExtensions the Skylark environment extensions
* @param mutability the Mutability for the current evaluation context
- * @param installDir an optional directory into which to install software
+ * @param installDir the install directory
+ * @param workspaceDir the workspace directory
*/
public WorkspaceFactory(
Builder builder,
RuleClassProvider ruleClassProvider,
+ ImmutableList<EnvironmentExtension> environmentExtensions,
Mutability mutability,
- @Nullable String installDir) {
+ @Nullable Path installDir,
+ @Nullable Path workspaceDir) {
this.builder = builder;
- this.environment = createWorkspaceEnv(builder, ruleClassProvider, mutability, installDir);
+ this.environment = createWorkspaceEnv(builder, ruleClassProvider, environmentExtensions,
+ mutability, installDir, workspaceDir);
}
public void parse(ParserInputSource source)
@@ -169,8 +178,10 @@ public class WorkspaceFactory {
private Environment createWorkspaceEnv(
Builder builder,
RuleClassProvider ruleClassProvider,
+ ImmutableList<EnvironmentExtension> environmentExtensions,
Mutability mutability,
- String installDir) {
+ Path installDir,
+ Path workspaceDir) {
Environment workspaceEnv = Environment.builder(mutability)
.setGlobals(Environment.BUILD)
.setLoadingPhase()
@@ -182,12 +193,20 @@ public class WorkspaceFactory {
workspaceEnv.update(ruleClass, ruleFunction);
}
if (installDir != null) {
- workspaceEnv.update("__embedded_dir__", installDir);
+ workspaceEnv.update("__embedded_dir__", installDir.getPathString());
+ }
+ if (workspaceDir != null) {
+ workspaceEnv.update("__workspace_dir__", workspaceDir.getPathString());
}
File jreDirectory = new File(System.getProperty("java.home"));
workspaceEnv.update("DEFAULT_SERVER_JAVABASE", jreDirectory.getParentFile().toString());
workspaceEnv.update("bind", newBindFunction(ruleFactory, builder));
workspaceEnv.update("workspace", newWorkspaceNameFunction(builder));
+
+ for (EnvironmentExtension extension : environmentExtensions) {
+ extension.updateWorkspace(workspaceEnv);
+ }
+
return workspaceEnv;
} catch (EvalException e) {
throw new AssertionError(e);
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
index f5520fc794..a1708668fa 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
@@ -370,9 +370,11 @@ public abstract class BlazeModule {
public PackageFactory.EnvironmentExtension getPackageEnvironmentExtension() {
return new PackageFactory.EnvironmentExtension() {
@Override
- public void update(Environment environment, Label buildFileLabel) {}
+ public void update(Environment environment) {}
@Override
+ public void updateWorkspace(Environment environment) {}
+ @Override
public Iterable<PackageArgument<?>> getPackageArguments() {
return ImmutableList.of();
}
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 184e9561c1..0f73697fa5 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
@@ -39,7 +39,7 @@ import java.io.IOException;
public class WorkspaceFileFunction implements SkyFunction {
private final PackageFactory packageFactory;
- private final Path installDir;
+ private final BlazeDirectories directories;
private final RuleClassProvider ruleClassProvider;
public WorkspaceFileFunction(
@@ -47,7 +47,7 @@ public class WorkspaceFileFunction implements SkyFunction {
PackageFactory packageFactory,
BlazeDirectories directories) {
this.packageFactory = packageFactory;
- this.installDir = directories.getEmbeddedBinariesRoot();
+ this.directories = directories;
this.ruleClassProvider = ruleClassProvider;
}
@@ -69,8 +69,10 @@ public class WorkspaceFileFunction implements SkyFunction {
new WorkspaceFactory(
builder,
packageFactory.getRuleClassProvider(),
+ packageFactory.getEnvironmentExtensions(),
mutability,
- installDir.getPathString());
+ directories.getEmbeddedBinariesRoot(),
+ directories.getWorkspace());
parser.parse(
ParserInputSource.create(
ruleClassProvider.getDefaultWorkspaceFile(), new PathFragment("DEFAULT.WORKSPACE")));