diff options
Diffstat (limited to 'src/main/java/com')
3 files changed, 37 insertions, 20 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPyRuleClasses.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPyRuleClasses.java index 77e7e42007..43091e86fb 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPyRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPyRuleClasses.java @@ -18,6 +18,7 @@ import static com.google.devtools.build.lib.packages.Attribute.attr; import static com.google.devtools.build.lib.packages.BuildType.LABEL; import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST; import static com.google.devtools.build.lib.packages.BuildType.TRISTATE; +import static com.google.devtools.build.lib.syntax.Type.BOOLEAN; import static com.google.devtools.build.lib.syntax.Type.STRING; import static com.google.devtools.build.lib.syntax.Type.STRING_LIST; @@ -135,14 +136,14 @@ public final class BazelPyRuleClasses { @Override public RuleClass build(RuleClass.Builder builder, final RuleDefinitionEnvironment env) { return builder - /* <!-- #BLAZE_RULE($base_py_binary).ATTRIBUTE(data) --> - The list of files needed by this binary at runtime. - See general comments about <code>data</code> at - <a href="${link common-definitions#common-attributes}"> - Attributes common to all build rules</a>. - Also see the <a href="${link py_library.data}"><code>data</code></a> argument of - the <a href="${link py_library}"><code>py_library</code></a> rule for details. - <!-- #END_BLAZE_RULE.ATTRIBUTE --> */ + /* <!-- #BLAZE_RULE($base_py_binary).ATTRIBUTE(data) --> + The list of files needed by this binary at runtime. + See general comments about <code>data</code> at + <a href="${link common-definitions#common-attributes}"> + Attributes common to all build rules</a>. + Also see the <a href="${link py_library.data}"><code>data</code></a> argument of + the <a href="${link py_library}"><code>py_library</code></a> rule for details. + <!-- #END_BLAZE_RULE.ATTRIBUTE --> */ /* <!-- #BLAZE_RULE($base_py_binary).ATTRIBUTE(main) --> The name of the source file that is the main entry point of the application. @@ -157,11 +158,13 @@ public final class BazelPyRuleClasses { Valid values are <code>"PY2"</code> (default) or <code>"PY3"</code>. Python 3 support is experimental. <!-- #END_BLAZE_RULE.ATTRIBUTE --> */ - .add(attr("default_python_version", STRING) - .value(PythonVersion.defaultTargetPythonVersion().toString()) - .allowedValues(new AllowedValueSet(PythonVersion.getTargetPythonValues())) - .nonconfigurable("read by PythonUtils.getNewPythonVersion, which doesn't have access" - + " to configuration keys")) + .add( + attr("default_python_version", STRING) + .value(PythonVersion.defaultTargetPythonVersion().toString()) + .allowedValues(new AllowedValueSet(PythonVersion.getTargetPythonValues())) + .nonconfigurable( + "read by PythonUtils.getNewPythonVersion, which doesn't have access" + + " to configuration keys")) /* <!-- #BLAZE_RULE($base_py_binary).ATTRIBUTE(srcs) --> The list of source files that are processed to create the target. This includes all your checked-in code and any @@ -170,11 +173,21 @@ public final class BazelPyRuleClasses { probably belong in <code>srcs</code> and library targets probably belong in <code>deps</code>, but don't worry about it too much. <!-- #END_BLAZE_RULE.ATTRIBUTE --> */ - .add(attr("srcs", LABEL_LIST) - .mandatory() - .allowedFileTypes(PYTHON_SOURCE) - .direct_compile_time_input() - .allowedFileTypes(BazelPyRuleClasses.PYTHON_SOURCE)) + .add( + attr("srcs", LABEL_LIST) + .mandatory() + .allowedFileTypes(PYTHON_SOURCE) + .direct_compile_time_input() + .allowedFileTypes(BazelPyRuleClasses.PYTHON_SOURCE)) + /* <!-- #BLAZE_RULE($base_py_binary).ATTRIBUTE(legacy_create_init) --> + Whether to implicitly create empty __init__.py files in the runfiles tree. + These are created in every directory containing Python source code or + shared libraries, and every parent directory of those directories. + Default is true for backward compatibility. If false, the user is responsible + for creating __init__.py files (empty or not) and adding them to `srcs` or `deps` + of Python targets as required. + <!-- #END_BLAZE_RULE.ATTRIBUTE --> */ + .add(attr("legacy_create_init", BOOLEAN).value(true)) /* <!-- #BLAZE_RULE($base_py_binary).ATTRIBUTE(stamp) --> Enable link stamping. Whether to encode build information into the binary. Possible values: 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 e0706923f2..b2ef88db97 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 @@ -27,6 +27,7 @@ import com.google.devtools.build.lib.rules.cpp.CcCommon.CcFlagsSupplier; import com.google.devtools.build.lib.rules.cpp.CcLinkParams; import com.google.devtools.build.lib.rules.cpp.CcLinkParamsInfo; import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore; +import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.ArrayList; import java.util.List; @@ -140,7 +141,11 @@ public abstract class PyBinary implements RuleConfiguredTargetFactory { } semantics.collectDefaultRunfiles(ruleContext, builder); builder.add(ruleContext, PythonRunfilesProvider.TO_RUNFILES); - builder.setEmptyFilesSupplier(PythonUtils.GET_INIT_PY_FILES); + + if (!ruleContext.attributes().has("legacy_create_init", Type.BOOLEAN) + || ruleContext.attributes().get("legacy_create_init", Type.BOOLEAN)) { + builder.setEmptyFilesSupplier(PythonUtils.GET_INIT_PY_FILES); + } semantics.collectRunfilesForBinary(ruleContext, builder, common); return builder.build(); } 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 adc0ccae37..f41d99baca 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 @@ -83,7 +83,6 @@ public abstract class PyLibrary implements RuleConfiguredTargetFactory { } else { runfilesBuilder.addTransitiveArtifacts(filesToBuild); } - runfilesBuilder.setEmptyFilesSupplier(PythonUtils.GET_INIT_PY_FILES); runfilesBuilder.add(ruleContext, PythonRunfilesProvider.TO_RUNFILES); runfilesBuilder.addRunfiles(ruleContext, RunfilesProvider.DEFAULT_RUNFILES); |