diff options
author | 2017-10-05 12:39:59 +0200 | |
---|---|---|
committer | 2017-10-06 19:46:40 +0200 | |
commit | effc4671ea2e023db74a00674252ae6581ec1141 (patch) | |
tree | 91b28277978a78e41feaedd046c7b0eb9861faae /src/main/java/com/google/devtools/build/lib/rules | |
parent | 8a2f09c0290fd39d612390d2ccec1cc2d770f0ea (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')
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); } } |