diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
3 files changed, 6 insertions, 68 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyBinary.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyBinary.java index fc30ac04ed..a04a0eda11 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PyBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyBinary.java @@ -22,13 +22,11 @@ import com.google.devtools.build.lib.analysis.Runfiles; import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.analysis.RunfilesSupport; import com.google.devtools.build.lib.collect.nestedset.NestedSet; -import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.rules.cpp.CcLinkParams; import com.google.devtools.build.lib.rules.cpp.CcLinkParamsProvider; import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore; import com.google.devtools.build.lib.vfs.PathFragment; - import java.util.ArrayList; import java.util.List; @@ -62,6 +60,9 @@ public abstract class PyBinary implements RuleConfiguredTargetFactory { List<Artifact> srcs = common.validateSrcs(); List<Artifact> allOutputs = new ArrayList<>(semantics.precompiledPythonFiles(ruleContext, srcs, common)); + if (ruleContext.hasErrors()) { + return null; + } common.initBinary(allOutputs); semantics.validate(ruleContext, common); 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 ab3f3210f3..f5875fa48c 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 @@ -20,7 +20,6 @@ import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Action; import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.actions.ResourceSet; import com.google.devtools.build.lib.actions.extra.ExtraActionInfo; import com.google.devtools.build.lib.actions.extra.PythonInfo; import com.google.devtools.build.lib.analysis.AnalysisEnvironment; @@ -34,9 +33,7 @@ import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.SkylarkProviders; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.Util; -import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; @@ -468,67 +465,6 @@ public final class PyCommon { } } - protected static final ResourceSet PY_COMPILE_RESOURCE_SET = - ResourceSet.createWithRamCpuIo(10 /* MB */, 1 /* CPU */, 0.0 /* IO */); - - /** - * Utility function to compile multiple .py files to .pyc files. - */ - public Collection<Artifact> createPycFiles( - Iterable<Artifact> sources, PathFragment pythonBinary, - String pythonPrecompileAttribute, String hostPython2RuntimeAttribute) { - List<Artifact> pycFiles = new ArrayList<>(); - for (Artifact source : sources) { - Artifact pycFile = createPycFile(source, pythonBinary, pythonPrecompileAttribute, - hostPython2RuntimeAttribute); - if (pycFile != null) { - pycFiles.add(pycFile); - } - } - return ImmutableList.copyOf(pycFiles); - } - - /** - * Given a single .py source artifact generate a .pyc file. - * @param pythonPrecompileAttribute e.g., "$python_precompile". - * @param hostPython2RuntimeAttribute e.g., ":host_python2_runtime". - */ - public Artifact createPycFile( - Artifact source, PathFragment pythonBinary, - String pythonPrecompileAttribute, String hostPython2RuntimeAttribute) { - PackageIdentifier packageId = ruleContext.getLabel().getPackageIdentifier(); - PackageIdentifier itemPackageId = source.getOwner().getPackageIdentifier(); - if (!itemPackageId.equals(packageId)) { - // This will produce an error, so we skip this element. - return null; - } - - Artifact output = - ruleContext.getRelatedArtifact(source.getRootRelativePath(), ".pyc"); - - // TODO(nnorwitz): Consider adding PYTHONHASHSEED=0 to the environment. - // This will make the .pyc more stable, though it will still be non-deterministic. - // The timestamp is zeroed out above. - SpawnAction.Builder builder = new SpawnAction.Builder() - .setResources(PY_COMPILE_RESOURCE_SET) - .setExecutable(pythonBinary) - .setProgressMessage("Compiling Python " + source.prettyPrint()) - .addInputArgument( - ruleContext.getPrerequisiteArtifact(pythonPrecompileAttribute, Mode.HOST)) - .setMnemonic("PyCompile"); - - TransitiveInfoCollection pythonTarget = - ruleContext.getPrerequisite(hostPython2RuntimeAttribute, Mode.HOST); - if (pythonTarget != null) { - builder.addTransitiveInputs(pythonTarget.getProvider(FileProvider.class).getFilesToBuild()); - } - - builder.addInputArgument(source); - builder.addOutputArgument(output); - ruleContext.registerAction(builder.build(ruleContext)); - return output; - } - /** * Returns true if this target has an .so file in its transitive dependency closure. diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyLibrary.java index ef1d40f9c3..8d20b9657b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PyLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyLibrary.java @@ -23,13 +23,11 @@ import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; -import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.rules.cpp.CcLinkParams; import com.google.devtools.build.lib.rules.cpp.CcLinkParamsProvider; import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore; import com.google.devtools.build.lib.vfs.PathFragment; - import java.util.ArrayList; import java.util.List; @@ -55,6 +53,9 @@ public abstract class PyLibrary implements RuleConfiguredTargetFactory { List<Artifact> srcs = common.validateSrcs(); List<Artifact> allOutputs = new ArrayList<>(semantics.precompiledPythonFiles(ruleContext, srcs, common)); + if (ruleContext.hasErrors()) { + return null; + } NestedSet<Artifact> filesToBuild = NestedSetBuilder.wrap(Order.STABLE_ORDER, allOutputs); |