aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar Kristina Chodorow <kchodorow@google.com>2015-03-16 17:55:04 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2015-03-18 13:39:47 +0000
commitb5ecdabfef7438cc12cb1fd5738f11a7a6a36f08 (patch)
tree67e9505da4e47a19bb514a96a08e64d6a86e5c84 /src/main/java/com/google/devtools
parentef03359be57475e434f82ab39de4663ca880c035 (diff)
Make JDK not need tools/jdk/jdk symlinked
-- MOS_MIGRATED_REVID=88742425
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/NewLocalRepositoryFunction.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java21
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageLoaderWithValueEnvironment.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java6
5 files changed, 45 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/NewLocalRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/NewLocalRepositoryFunction.java
index 71d0059232..8f03ac4781 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/NewLocalRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/NewLocalRepositoryFunction.java
@@ -114,11 +114,11 @@ public class NewLocalRepositoryFunction extends RepositoryFunction {
// Link x/BUILD to <build_root>/x.BUILD.
PathFragment buildFile = new PathFragment(mapper.get("build_file", Type.STRING));
Path buildFileTarget = getWorkspace().getRelative(buildFile);
- if (buildFile.equals(PathFragment.EMPTY_FRAGMENT) || buildFile.isAbsolute()
- || !buildFileTarget.exists()) {
+ if (!buildFileTarget.exists()) {
throw new RepositoryFunctionException(
new EvalException(rule.getLocation(), "In " + rule
- + " the 'build_file' attribute must specify a relative path to an existing file"),
+ + " the 'build_file' attribute does not specify an existing file ("
+ + buildFile + " does not exist)"),
Transience.PERSISTENT);
}
Path buildFilePath = repositoryDirectory.getRelative("BUILD");
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 572c163fff..3b702ce3ec 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
@@ -33,7 +33,9 @@ import java.util.Map.Entry;
* This creates the //external package, where targets not homed in this repository can be bound.
*/
public class ExternalPackage extends Package {
+ public static final String NAME = "external";
+ private Map<Label, Binding> bindMap;
private Map<RepositoryName, Rule> repositoryMap;
ExternalPackage() {
@@ -49,6 +51,24 @@ public class ExternalPackage extends Package {
}
/**
+ * If the given label is bound, returns the (fully resolved) label it is bound to. Otherwise,
+ * returns null.
+ */
+ public Label getActualLabel(Label label) {
+ if (bindMap.containsKey(label)) {
+ return bindMap.get(label).getActual();
+ }
+ return null;
+ }
+
+ /**
+ * Checks if the given package is //external.
+ */
+ public static boolean isExternal(Package pkg) {
+ return pkg != null && pkg.getName().equals(NAME);
+ }
+
+ /**
* Holder for a binding's actual label and location.
*/
public static class Binding {
@@ -97,6 +117,7 @@ public class ExternalPackage extends Package {
@Override
public ExternalPackage build() {
+ pkg.bindMap = ImmutableMap.copyOf(bindMap);
pkg.repositoryMap = ImmutableMap.copyOf(repositoryMap);
return super.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java b/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java
index 7483f8827e..ec7e926a79 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java
@@ -109,7 +109,14 @@ public final class JvmConfigurationLoader implements ConfigurationFragmentFactor
if (jvmTarget == null) {
return null;
}
- PathFragment javaHomePath = jvmLabel.getPackageFragment();
+
+ PathFragment javaHomePath;
+ if (jvmTarget.getLabel().getPackageIdentifier().getRepository().isDefault()) {
+ javaHomePath = jvmLabel.getPackageFragment();
+ } else {
+ javaHomePath = jvmTarget.getLabel().getPackageFragment();
+ }
+
if ((jvmTarget instanceof Rule) &&
"filegroup".equals(((Rule) jvmTarget).getRuleClass())) {
RawAttributeMapper jvmTargetAttributes = RawAttributeMapper.of((Rule) jvmTarget);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageLoaderWithValueEnvironment.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageLoaderWithValueEnvironment.java
index e467ae09c8..9478dafd2b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageLoaderWithValueEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageLoaderWithValueEnvironment.java
@@ -18,6 +18,7 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
import com.google.devtools.build.lib.analysis.config.PackageProviderForConfigurations;
+import com.google.devtools.build.lib.packages.ExternalPackage;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
import com.google.devtools.build.lib.packages.NoSuchTargetException;
import com.google.devtools.build.lib.packages.Package;
@@ -77,6 +78,12 @@ class SkyframePackageLoaderWithValueEnvironment implements
public Target getLoadedTarget(Label label) throws NoSuchPackageException,
NoSuchTargetException {
Package pkg = getLoadedPackage(label.getPackageIdentifier());
+ if (ExternalPackage.isExternal(pkg)) {
+ label = ((ExternalPackage) pkg).getActualLabel(label);
+ if (label != null) {
+ pkg = getLoadedPackage(label.getPackageIdentifier());
+ }
+ }
return pkg == null ? null : pkg.getTarget(label.getName());
}
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 839a9ea11b..5378af5808 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
@@ -48,6 +48,7 @@ import com.google.devtools.build.skyframe.SkyFunctionException.Transience;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
+import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@@ -212,6 +213,11 @@ public class WorkspaceFileFunction implements SkyFunction {
workspaceEnv.update(ruleClass, ruleFunction);
}
+ workspaceEnv.update("__embedded_dir__", this.installDir.toString());
+ // TODO(kchodorow): Get all the toolchain rules and load this from there.
+ File jreDirectory = new File(System.getProperty("java.home"));
+ workspaceEnv.update("DEFAULT_SERVER_JAVABASE", jreDirectory.getParentFile().toString());
+
workspaceEnv.update(BIND, newBindFunction(builder));
workspaceEnv.update("workspace", newWorkspaceNameFunction(builder));