aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar lberki <lberki@google.com>2017-08-25 12:48:17 +0200
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-08-25 12:54:38 +0200
commitf6291af5e330de7fed16257748dab739eb72beb7 (patch)
tree348335d7e7b2d105abd316464477c60331a49958 /src
parent0667b83f40e0b86b15c08513052f1e23ca9c149f (diff)
Add the JAVABASE and JAVA Make variables to java_runtime_alias artifically if --javabase= is an absolute path and thus there is no java_runtime rule to forward them from.
RELNOTES: None. PiperOrigin-RevId: 166459625
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeAlias.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java4
2 files changed, 20 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeAlias.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeAlias.java
index e1eec2ee59..8899d0349b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeAlias.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeAlias.java
@@ -17,6 +17,7 @@ package com.google.devtools.build.lib.rules.java;
import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.BuildType.LABEL;
+import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.FileProvider;
@@ -55,9 +56,22 @@ public class JavaRuntimeAlias implements RuleConfiguredTargetFactory {
.addProvider(MiddlemanProvider.class, runtime.getProvider(MiddlemanProvider.class))
.setFilesToBuild(runtime.getProvider(FileProvider.class).getFilesToBuild());
} else {
+ // This happens when --javabase is an absolute path (as opposed to a label). In this case,
+ // we don't have a java_runtime rule we can proxy, thus we synthesize all its providers.
+ // This can go away once --javabase=<absolute path> is not supported anymore.
+ Jvm jvm = ruleContext.getFragment(Jvm.class);
+ JavaRuntimeInfo runtimeInfo = new JavaRuntimeInfo(
+ NestedSetBuilder.emptySet(Order.STABLE_ORDER),
+ jvm.getJavaHome(),
+ jvm.getJavaExecutable(),
+ jvm.getJavaExecutable());
builder
.setFilesToBuild(NestedSetBuilder.emptySet(Order.STABLE_ORDER))
- .addProvider(RunfilesProvider.class, RunfilesProvider.EMPTY);
+ .addProvider(RunfilesProvider.class, RunfilesProvider.EMPTY)
+ .addNativeDeclaredProvider(runtimeInfo)
+ .addNativeDeclaredProvider(new MakeVariableInfo(ImmutableMap.of(
+ "JAVABASE", jvm.getJavaHome().getPathString(),
+ "JAVA", jvm.getJavaExecutable().getPathString())));
}
return builder.build();
@@ -71,7 +85,7 @@ public class JavaRuntimeAlias implements RuleConfiguredTargetFactory {
@Override
public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment environment) {
return builder
- .requiresConfigurationFragments(JavaConfiguration.class)
+ .requiresConfigurationFragments(JavaConfiguration.class, Jvm.class)
.removeAttribute("licenses")
.removeAttribute("distribs")
.add(attr(":jvm", LABEL).value(JavaSemantics.jvmAttribute(environment)))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java b/src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java
index a5c5ec7170..1b7e4ac280 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java
@@ -80,6 +80,10 @@ public final class Jvm extends BuildConfiguration.Fragment {
return jvmLabel;
}
+ public PathFragment getJavaHome() {
+ return javaHome;
+ }
+
@Override
public void addGlobalMakeVariables(Builder<String, String> globalMakeEnvBuilder) {
globalMakeEnvBuilder.put("JAVABASE", javaHome.getPathString());