diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/python')
4 files changed, 32 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java index 81b4c564c3..8aad3cc53b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java @@ -135,7 +135,7 @@ public final class PyCommon { NestedSetBuilder<Artifact> filesToBuildBuilder = NestedSetBuilder.<Artifact>stableOrder().addAll(srcs).add(executable); - if (ruleContext.getConfiguration().buildPythonZip()) { + if (ruleContext.getFragment(PythonConfiguration.class).buildPythonZip()) { filesToBuildBuilder.add(getPythonZipArtifact(executable)); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java index f950a585f4..74814cce04 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java @@ -15,6 +15,8 @@ package com.google.devtools.build.lib.rules.python; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.util.OS; +import com.google.devtools.common.options.TriState; /** * The configuration fragment containing information about the various pieces of infrastructure @@ -24,10 +26,13 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; public class PythonConfiguration extends BuildConfiguration.Fragment { private final boolean ignorePythonVersionAttribute; private final PythonVersion defaultPythonVersion; + private final TriState buildPythonZip; - PythonConfiguration(PythonVersion pythonVersion, boolean ignorePythonVersionAttribute) { + PythonConfiguration( + PythonVersion pythonVersion, boolean ignorePythonVersionAttribute, TriState buildPythonZip) { this.ignorePythonVersionAttribute = ignorePythonVersionAttribute; this.defaultPythonVersion = pythonVersion; + this.buildPythonZip = buildPythonZip; } /** @@ -44,5 +49,17 @@ public class PythonConfiguration extends BuildConfiguration.Fragment { public String getOutputDirectoryName() { return (defaultPythonVersion == PythonVersion.PY3) ? "py3" : null; } + + /** Returns whether to build the executable zip file for Python binaries. */ + public boolean buildPythonZip() { + switch (buildPythonZip) { + case YES: + return true; + case NO: + return false; + default: + return OS.getCurrent() == OS.WINDOWS; + } + } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfigurationLoader.java b/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfigurationLoader.java index d85c586412..3895240b1b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfigurationLoader.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfigurationLoader.java @@ -36,7 +36,8 @@ public class PythonConfigurationLoader implements ConfigurationFragmentFactory { PythonOptions pythonOptions = buildOptions.get(PythonOptions.class); boolean ignorePythonVersionAttribute = pythonOptions.forcePython != null; PythonVersion pythonVersion = pythonOptions.getPythonVersion(); - return new PythonConfiguration(pythonVersion, ignorePythonVersionAttribute); + return new PythonConfiguration( + pythonVersion, ignorePythonVersionAttribute, pythonOptions.buildPythonZip); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PythonOptions.java b/src/main/java/com/google/devtools/build/lib/rules/python/PythonOptions.java index fa1b8f700e..517ab3dbfa 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PythonOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PythonOptions.java @@ -18,6 +18,7 @@ import com.google.devtools.common.options.EnumConverter; import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionDocumentationCategory; import com.google.devtools.common.options.OptionEffectTag; +import com.google.devtools.common.options.TriState; /** * Python-related command-line options. @@ -35,6 +36,15 @@ public class PythonOptions extends FragmentOptions { } @Option( + name = "build_python_zip", + defaultValue = "auto", + documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, + effectTags = {OptionEffectTag.UNKNOWN}, + help = "Build python executable zip; on on Windows, off on other platforms" + ) + public TriState buildPythonZip; + + @Option( name = "force_python", defaultValue = "null", category = "version", @@ -70,6 +80,7 @@ public class PythonOptions extends FragmentOptions { } else { hostPythonOpts.forcePython = PythonVersion.PY2; } + hostPythonOpts.buildPythonZip = buildPythonZip; return hostPythonOpts; } } |