diff options
author | 2015-10-08 12:19:53 +0000 | |
---|---|---|
committer | 2015-10-09 14:39:33 +0000 | |
commit | cffd001a0ecf1dd5a0d058d8d285d21fb021dbcd (patch) | |
tree | 53497ab253175fc87715a78e305a619564f188e4 /src/main | |
parent | aff46bc2f0e59cb9b59f6db982ddd490cf1d2b3c (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')
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"))); |