aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules
diff options
context:
space:
mode:
authorGravatar lberki <lberki@google.com>2017-10-05 12:39:59 +0200
committerGravatar Klaus Aehlig <aehlig@google.com>2017-10-06 19:46:40 +0200
commiteffc4671ea2e023db74a00674252ae6581ec1141 (patch)
tree91b28277978a78e41feaedd046c7b0eb9861faae /src/main/java/com/google/devtools/build/lib/rules
parent8a2f09c0290fd39d612390d2ccec1cc2d770f0ea (diff)
Add a flag to remove Java Make variables from Jvm.
These depend on package loading and thus must be gone. RELNOTES: None. PiperOrigin-RevId: 171132297
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java18
3 files changed, 28 insertions, 12 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
index a6662b2a65..dfc01bd953 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
@@ -527,6 +527,18 @@ public class JavaOptions extends FragmentOptions {
)
public boolean disableAbsoluteJavabase;
+ @Option(
+ name = "experimental_enable_jvm_configuration_make_variables",
+ defaultValue = "true",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE},
+ help = "If enabled, the Java configuration fragment supplies the JAVA and JAVABASE "
+ + "Make variables. This option is used in the migration to remove them in favor of "
+ + "requiring an explicit dependency on the Java runtime for rules that use them."
+ )
+ public boolean enableMakeVariables;
+
// Plugins are built using the host config. To avoid cycles we just don't propagate
// this option to the host config. If one day we decide to use plugins when building
// host tools, we can improve this by (for example) creating a compiler configuration that is
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 1b7e4ac280..b582e9d5a5 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
@@ -41,6 +41,7 @@ public final class Jvm extends BuildConfiguration.Fragment {
private final PathFragment javaHome;
private final Label jvmLabel;
private final PathFragment java;
+ private final boolean enableMakeVariables;
public static final String BIN_JAVA = "bin/java" + OsUtils.executableExtension();
@@ -49,11 +50,12 @@ public final class Jvm extends BuildConfiguration.Fragment {
* and/or the {@code jvmLabel} parameter must be non-null. Only the
* {@code jvmLabel} is optional.
*/
- public Jvm(PathFragment javaHome, Label jvmLabel) {
+ public Jvm(PathFragment javaHome, Label jvmLabel, boolean enableMakeVariables) {
Preconditions.checkArgument(javaHome.isAbsolute() || jvmLabel != null);
this.javaHome = javaHome;
this.jvmLabel = jvmLabel;
this.java = javaHome.getRelative(BIN_JAVA);
+ this.enableMakeVariables = enableMakeVariables;
}
/**
@@ -86,7 +88,9 @@ public final class Jvm extends BuildConfiguration.Fragment {
@Override
public void addGlobalMakeVariables(Builder<String, String> globalMakeEnvBuilder) {
- globalMakeEnvBuilder.put("JAVABASE", javaHome.getPathString());
- globalMakeEnvBuilder.put("JAVA", java.getPathString());
+ if (enableMakeVariables) {
+ globalMakeEnvBuilder.put("JAVABASE", javaHome.getPathString());
+ globalMakeEnvBuilder.put("JAVA", java.getPathString());
+ }
}
}
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 cfe8791b92..a43088ce9c 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
@@ -61,7 +61,7 @@ public final class JvmConfigurationLoader implements ConfigurationFragmentFactor
String cpu = buildOptions.get(BuildConfiguration.Options.class).cpu;
try {
- return createFromJavaRuntimeSuite(env, javaHome, cpu);
+ return createFromJavaRuntimeSuite(env, javaHome, cpu, javaOptions.enableMakeVariables);
} catch (LabelSyntaxException e) {
// Try again with legacy
}
@@ -70,7 +70,7 @@ public final class JvmConfigurationLoader implements ConfigurationFragmentFactor
throw new InvalidConfigurationException("Absolute --javabase is disabled");
}
- return createFromAbsoluteJavabase(javaHome);
+ return createFromAbsoluteJavabase(javaHome, javaOptions.enableMakeVariables);
}
@Override
@@ -85,7 +85,7 @@ public final class JvmConfigurationLoader implements ConfigurationFragmentFactor
@Nullable
private static Jvm createFromJavaRuntimeSuite(
- ConfigurationEnvironment lookup, String javaHome, String cpu)
+ ConfigurationEnvironment lookup, String javaHome, String cpu, boolean enableMakeVariables)
throws InvalidConfigurationException, LabelSyntaxException, InterruptedException {
try {
Label label = Label.parseAbsolute(javaHome);
@@ -101,7 +101,7 @@ public final class JvmConfigurationLoader implements ConfigurationFragmentFactor
+ ((Rule) javaHomeTarget).getRuleClass()
+ "'. Expected java_runtime_suite");
}
- return createFromRuntimeSuite(lookup, (Rule) javaHomeTarget, cpu);
+ return createFromRuntimeSuite(lookup, (Rule) javaHomeTarget, cpu, enableMakeVariables);
}
throw new InvalidConfigurationException(
"No JVM target found under " + javaHome + " that would work for " + cpu);
@@ -113,8 +113,8 @@ public final class JvmConfigurationLoader implements ConfigurationFragmentFactor
// TODO(b/34175492): eventually the Jvm fragement will containg only the label of a java_runtime
// rule, and all of the configuration will be accessed using JavaRuntimeInfo.
- private static Jvm createFromRuntimeSuite(
- ConfigurationEnvironment lookup, Rule javaRuntimeSuite, String cpu)
+ private static Jvm createFromRuntimeSuite(ConfigurationEnvironment lookup, Rule javaRuntimeSuite,
+ String cpu, boolean enableMakeVariables)
throws InvalidConfigurationException, InterruptedException, NoSuchTargetException,
NoSuchPackageException {
Label javaRuntimeLabel = selectRuntime(javaRuntimeSuite, cpu);
@@ -144,7 +144,7 @@ public final class JvmConfigurationLoader implements ConfigurationFragmentFactor
javaHomePath, srcs.toString()));
}
}
- return new Jvm(javaHomePath, javaRuntimeSuite.getLabel());
+ return new Jvm(javaHomePath, javaRuntimeSuite.getLabel(), enableMakeVariables);
}
private static Label selectRuntime(Rule javaRuntimeSuite, String cpu)
@@ -161,13 +161,13 @@ public final class JvmConfigurationLoader implements ConfigurationFragmentFactor
"No JVM target found under " + javaRuntimeSuite + " that would work for " + cpu);
}
- private static Jvm createFromAbsoluteJavabase(String javaHome)
+ private static Jvm createFromAbsoluteJavabase(String javaHome, boolean enableMakeVariables)
throws InvalidConfigurationException {
PathFragment javaHomePathFrag = PathFragment.create(javaHome);
if (!javaHomePathFrag.isAbsolute()) {
throw new InvalidConfigurationException(
"Illegal javabase value '" + javaHome + "', javabase must be an absolute path or label");
}
- return new Jvm(javaHomePathFrag, null);
+ return new Jvm(javaHomePathFrag, null, enableMakeVariables);
}
}