aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/python
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/python')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/python/PythonConfigurationLoader.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/python/PythonOptions.java11
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;
}
}