diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/packages')
3 files changed, 27 insertions, 9 deletions
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 9132208b0e..4ec65dd3b0 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 @@ -207,13 +207,9 @@ public class Package { * @precondition {@code name} must be a suffix of * {@code filename.getParentDirectory())}. */ - protected Package(PackageIdentifier packageId, String workspaceName) { - this.workspaceName = workspaceName; - if (workspaceName.equals(packageId.getRepository().strippedName())) { - this.packageIdentifier = PackageIdentifier.createInMainRepo(packageId.getPackageFragment()); - } else { - this.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(); } @@ -304,6 +300,7 @@ public class Package { throw new IllegalArgumentException( "Invalid BUILD file name for package '" + packageIdentifier + "': " + filename); } + this.makeEnv = builder.makeEnv.build(); this.targets = ImmutableSortedKeyMap.copyOf(builder.targets); this.defaultVisibility = builder.defaultVisibility; 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 da4d3e3163..cab4a4f6d6 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 @@ -1667,7 +1667,7 @@ public final class PackageFactory { ImmutableList<Label> skylarkFileDependencies) throws InterruptedException { Package.Builder pkgBuilder = new Package.Builder(packageBuilderHelper.createFreshPackage( - packageId, workspaceName)); + packageId, ruleClassProvider.getRunfilesPrefix())); StoredEventHandler eventHandler = new StoredEventHandler(); try (Mutability mutability = Mutability.create("package %s", packageId)) { @@ -1687,7 +1687,8 @@ public final class PackageFactory { // "defaultVisibility" comes from the command line. Let's give the BUILD file a chance to // set default_visibility once, be reseting the PackageBuilder.defaultVisibilitySet flag. .setDefaultVisibilitySet(false) - .setSkylarkFileDependencies(skylarkFileDependencies); + .setSkylarkFileDependencies(skylarkFileDependencies) + .setWorkspaceName(workspaceName); Event.replayEventsOn(eventHandler, pastEvents); for (Postable post : pastPosts) { 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 f1c25777f6..ccb81e1201 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 @@ -28,6 +28,7 @@ import com.google.devtools.build.lib.events.NullEventHandler; import com.google.devtools.build.lib.events.StoredEventHandler; import com.google.devtools.build.lib.packages.Package.NameConflictException; import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension; +import com.google.devtools.build.lib.packages.RuleFactory.InvalidRuleException; import com.google.devtools.build.lib.skylarkinterface.Param; import com.google.devtools.build.lib.skylarkinterface.SkylarkSignature; import com.google.devtools.build.lib.syntax.BaseFunction; @@ -315,6 +316,25 @@ public class WorkspaceFactory { throw new EvalException(ast.getLocation(), errorMessage); } PackageFactory.getContext(env, ast).pkgBuilder.setWorkspaceName(name); + Package.Builder builder = PackageFactory.getContext(env, ast).pkgBuilder; + RuleClass localRepositoryRuleClass = ruleFactory.getRuleClass("local_repository"); + RuleClass bindRuleClass = ruleFactory.getRuleClass("bind"); + Map<String, Object> kwargs = ImmutableMap.<String, Object>of( + "name", name, "path", "."); + try { + // This effectively adds a "local_repository(name = "<ws>", path = ".")" + // definition to the WORKSPACE file. + builder + .externalPackageData() + .createAndAddRepositoryRule( + builder, + localRepositoryRuleClass, + bindRuleClass, + kwargs, + ast); + } catch (InvalidRuleException | NameConflictException | LabelSyntaxException e) { + throw new EvalException(ast.getLocation(), e.getMessage()); + } return NONE; } }; |