refactor: fold bazel-specific code into main files (#2358)
This removes most of the `*_bazel.bzl` files and either renames them or
folds them
into the "regular" files. (common_bazel.bzl and py_executable_bazel.bzl
turned out
to be a bit more involved, so are left for a future change).
This is part of simplifying the implementation and removing the
complicated/convoluted
"plugin" style design that was inherited from the original Bazel code to
accommodate
various Google changes.
diff --git a/docs/BUILD.bazel b/docs/BUILD.bazel
index d16a27e..a4b6a5a 100644
--- a/docs/BUILD.bazel
+++ b/docs/BUILD.bazel
@@ -97,11 +97,11 @@
"//python/cc:py_cc_toolchain_bzl",
"//python/cc:py_cc_toolchain_info_bzl",
"//python/entry_points:py_console_script_binary_bzl",
- "//python/private:py_binary_rule_bazel_bzl",
+ "//python/private:py_binary_rule_bzl",
"//python/private:py_cc_toolchain_rule_bzl",
- "//python/private:py_library_rule_bazel_bzl",
+ "//python/private:py_library_rule_bzl",
"//python/private:py_runtime_rule_bzl",
- "//python/private:py_test_rule_bazel_bzl",
+ "//python/private:py_test_rule_bzl",
"//python/private/api:py_common_api_bzl",
] + ([
# Bazel 6 + Stardoc isn't able to parse something about the python bzlmod extension
diff --git a/docs/conf.py b/docs/conf.py
index 9d33782..4c8e4a2 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -69,9 +69,9 @@
"api/python/defs": "/api/rules_python/python/defs.html",
"api/python/index": "/api/rules_python/python/index.html",
"api/python/py_runtime_info": "/api/rules_python/python/py_runtime_info.html",
- "api/python/private/common/py_library_rule_bazel": "/api/rules_python/python/private/py_library_rule_bazel.html",
+ "api/python/private/common/py_library_rule_bazel": "/api/rules_python/python/private/py_library_rule.html",
"api/python/private/common/py_test_rule_bazel": "/api/rules_python/python/private/py_test_rule_bazel.html",
- "api/python/private/common/py_binary_rule_bazel": "/api/rules_python/python/private/py_binary_rule_bazel.html",
+ "api/python/private/common/py_binary_rule_bazel": "/api/rules_python/python/private/py_binary_rule.html",
"api/python/private/common/py_runtime_rule": "/api/rules_python/python/private/py_runtime_rule.html",
"api/python/extensions/pip": "/api/rules_python/python/extensions/pip.html",
"api/python/extensions/python": "/api/rules_python/python/extensions/python.html",
diff --git a/python/BUILD.bazel b/python/BUILD.bazel
index f2f3374..f3b5b13 100644
--- a/python/BUILD.bazel
+++ b/python/BUILD.bazel
@@ -124,7 +124,7 @@
name = "py_binary_bzl",
srcs = ["py_binary.bzl"],
deps = [
- "//python/private:py_binary_macro_bazel_bzl",
+ "//python/private:py_binary_macro_bzl",
"//python/private:register_extension_info_bzl",
"//python/private:util_bzl",
"@rules_python_internal//:rules_python_config_bzl",
@@ -178,7 +178,7 @@
name = "py_library_bzl",
srcs = ["py_library.bzl"],
deps = [
- "//python/private:py_library_macro_bazel_bzl",
+ "//python/private:py_library_macro_bzl",
"//python/private:register_extension_info_bzl",
"//python/private:util_bzl",
"@rules_python_internal//:rules_python_config_bzl",
@@ -219,7 +219,7 @@
name = "py_test_bzl",
srcs = ["py_test.bzl"],
deps = [
- "//python/private:py_test_macro_bazel_bzl",
+ "//python/private:py_test_macro_bzl",
"//python/private:register_extension_info_bzl",
"//python/private:util_bzl",
"@rules_python_internal//:rules_python_config_bzl",
diff --git a/python/private/BUILD.bazel b/python/private/BUILD.bazel
index d3b9bf4..7741e55 100644
--- a/python/private/BUILD.bazel
+++ b/python/private/BUILD.bazel
@@ -52,12 +52,6 @@
)
bzl_library(
- name = "attributes_bazel_bzl",
- srcs = ["attributes_bazel.bzl"],
- deps = ["//python/private:rules_cc_srcs_bzl"],
-)
-
-bzl_library(
name = "attributes_bzl",
srcs = ["attributes.bzl"],
deps = [
@@ -260,17 +254,17 @@
)
bzl_library(
- name = "py_binary_macro_bazel_bzl",
- srcs = ["py_binary_macro_bazel.bzl"],
+ name = "py_binary_macro_bzl",
+ srcs = ["py_binary_macro.bzl"],
deps = [
":common_bzl",
- ":py_binary_rule_bazel_bzl",
+ ":py_binary_rule_bzl",
],
)
bzl_library(
- name = "py_binary_rule_bazel_bzl",
- srcs = ["py_binary_rule_bazel.bzl"],
+ name = "py_binary_rule_bzl",
+ srcs = ["py_binary_rule.bzl"],
deps = [
":attributes_bzl",
":py_executable_bazel_bzl",
@@ -345,7 +339,7 @@
name = "py_executable_bazel_bzl",
srcs = ["py_executable_bazel.bzl"],
deps = [
- ":attributes_bazel_bzl",
+ ":attributes_bzl",
":common_bazel_bzl",
":common_bzl",
":py_executable_bzl",
@@ -420,16 +414,15 @@
)
bzl_library(
- name = "py_library_macro_bazel_bzl",
- srcs = ["py_library_macro_bazel.bzl"],
- deps = [":py_library_rule_bazel_bzl"],
+ name = "py_library_macro_bzl",
+ srcs = ["py_library_macro.bzl"],
+ deps = [":py_library_rule_bzl"],
)
bzl_library(
- name = "py_library_rule_bazel_bzl",
- srcs = ["py_library_rule_bazel.bzl"],
+ name = "py_library_rule_bzl",
+ srcs = ["py_library_rule.bzl"],
deps = [
- ":attributes_bazel_bzl",
":common_bazel_bzl",
":common_bzl",
":py_library_bzl",
@@ -502,17 +495,17 @@
)
bzl_library(
- name = "py_test_macro_bazel_bzl",
- srcs = ["py_test_macro_bazel.bzl"],
+ name = "py_test_macro_bzl",
+ srcs = ["py_test_macro.bzl"],
deps = [
":common_bazel_bzl",
- ":py_test_rule_bazel_bzl",
+ ":py_test_rule_bzl",
],
)
bzl_library(
- name = "py_test_rule_bazel_bzl",
- srcs = ["py_test_rule_bazel.bzl"],
+ name = "py_test_rule_bzl",
+ srcs = ["py_test_rule.bzl"],
deps = [
":attributes_bzl",
":common_bzl",
diff --git a/python/private/attributes.bzl b/python/private/attributes.bzl
index 424a2c5..a863e19 100644
--- a/python/private/attributes.bzl
+++ b/python/private/attributes.bzl
@@ -270,6 +270,22 @@
allow_none = True,
)
+IMPORTS_ATTRS = {
+ "imports": attr.string_list(
+ doc = """
+List of import directories to be added to the PYTHONPATH.
+
+Subject to "Make variable" substitution. These import directories will be added
+for this rule and all rules that depend on it (note: not the rules this rule
+depends on. Each directory will be added to `PYTHONPATH` by `py_binary` rules
+that depend on this rule. The strings are repo-runfiles-root relative,
+
+Absolute paths (paths that start with `/`) and paths that references a path
+above the execution root are not allowed and will result in an error.
+""",
+ ),
+}
+
_MaybeBuiltinPyInfo = [[BuiltinPyInfo]] if BuiltinPyInfo != None else []
# Attributes common to rules accepting Python sources and deps.
diff --git a/python/private/attributes_bazel.bzl b/python/private/attributes_bazel.bzl
deleted file mode 100644
index f87245d..0000000
--- a/python/private/attributes_bazel.bzl
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright 2022 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-"""Attributes specific to the Bazel implementation of the Python rules."""
-
-IMPORTS_ATTRS = {
- "imports": attr.string_list(
- doc = """
-List of import directories to be added to the PYTHONPATH.
-
-Subject to "Make variable" substitution. These import directories will be added
-for this rule and all rules that depend on it (note: not the rules this rule
-depends on. Each directory will be added to `PYTHONPATH` by `py_binary` rules
-that depend on this rule. The strings are repo-runfiles-root relative,
-
-Absolute paths (paths that start with `/`) and paths that references a path
-above the execution root are not allowed and will result in an error.
-""",
- ),
-}
diff --git a/python/private/py_binary_macro_bazel.bzl b/python/private/py_binary_macro.bzl
similarity index 92%
rename from python/private/py_binary_macro_bazel.bzl
rename to python/private/py_binary_macro.bzl
index a6c4e97..83b3c18 100644
--- a/python/private/py_binary_macro_bazel.bzl
+++ b/python/private/py_binary_macro.bzl
@@ -14,7 +14,7 @@
"""Implementation of macro-half of py_binary rule."""
load(":common_bazel.bzl", "convert_legacy_create_init_to_int")
-load(":py_binary_rule_bazel.bzl", py_binary_rule = "py_binary")
+load(":py_binary_rule.bzl", py_binary_rule = "py_binary")
def py_binary(**kwargs):
convert_legacy_create_init_to_int(kwargs)
diff --git a/python/private/py_binary_rule_bazel.bzl b/python/private/py_binary_rule.bzl
similarity index 100%
rename from python/private/py_binary_rule_bazel.bzl
rename to python/private/py_binary_rule.bzl
diff --git a/python/private/py_executable_bazel.bzl b/python/private/py_executable_bazel.bzl
index 53206bd..6f9c094 100644
--- a/python/private/py_executable_bazel.bzl
+++ b/python/private/py_executable_bazel.bzl
@@ -15,7 +15,7 @@
load("@bazel_skylib//lib:dicts.bzl", "dicts")
load("@bazel_skylib//lib:paths.bzl", "paths")
-load(":attributes_bazel.bzl", "IMPORTS_ATTRS")
+load(":attributes.bzl", "IMPORTS_ATTRS")
load(
":common.bzl",
"create_binary_semantics_struct",
diff --git a/python/private/py_library.bzl b/python/private/py_library.bzl
index 1bc96b5..6a65038 100644
--- a/python/private/py_library.bzl
+++ b/python/private/py_library.bzl
@@ -11,13 +11,14 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-"""Implementation of py_library rule."""
+"""Common code for implementing py_library rules."""
load("@bazel_skylib//lib:dicts.bzl", "dicts")
load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo")
load(
":attributes.bzl",
"COMMON_ATTRS",
+ "IMPORTS_ATTRS",
"PY_SRCS_ATTRS",
"PrecompileAttr",
"REQUIRED_EXEC_GROUPS",
@@ -50,6 +51,7 @@
LIBRARY_ATTRS = union_attrs(
COMMON_ATTRS,
PY_SRCS_ATTRS,
+ IMPORTS_ATTRS,
create_srcs_version_attr(values = SRCS_VERSION_ALL_VALUES),
create_srcs_attr(mandatory = False),
{
diff --git a/python/private/py_library_macro_bazel.bzl b/python/private/py_library_macro.bzl
similarity index 77%
rename from python/private/py_library_macro_bazel.bzl
rename to python/private/py_library_macro.bzl
index b4f51ef..981253d 100644
--- a/python/private/py_library_macro_bazel.bzl
+++ b/python/private/py_library_macro.bzl
@@ -13,7 +13,9 @@
# limitations under the License.
"""Implementation of macro-half of py_library rule."""
-load(":py_library_rule_bazel.bzl", py_library_rule = "py_library")
+load(":py_library_rule.bzl", py_library_rule = "py_library")
+# A wrapper macro is used to avoid any user-observable changes between a
+# rule and macro. It also makes generator_function look as expected.
def py_library(**kwargs):
py_library_rule(**kwargs)
diff --git a/python/private/py_library_rule.bzl b/python/private/py_library_rule.bzl
new file mode 100644
index 0000000..ed64716
--- /dev/null
+++ b/python/private/py_library_rule.bzl
@@ -0,0 +1,32 @@
+# Copyright 2022 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Implementation of py_library rule."""
+
+load(":common.bzl", "create_library_semantics_struct")
+load(":common_bazel.bzl", "collect_cc_info", "get_imports", "maybe_precompile")
+load(":py_library.bzl", "create_py_library_rule", "py_library_impl")
+
+def _py_library_impl_with_semantics(ctx):
+ return py_library_impl(
+ ctx,
+ semantics = create_library_semantics_struct(
+ get_imports = get_imports,
+ maybe_precompile = maybe_precompile,
+ get_cc_info_for_library = collect_cc_info,
+ ),
+ )
+
+py_library = create_py_library_rule(
+ implementation = _py_library_impl_with_semantics,
+)
diff --git a/python/private/py_library_rule_bazel.bzl b/python/private/py_library_rule_bazel.bzl
deleted file mode 100644
index 453abcb..0000000
--- a/python/private/py_library_rule_bazel.bzl
+++ /dev/null
@@ -1,47 +0,0 @@
-# Copyright 2022 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-"""Implementation of py_library for Bazel."""
-
-load(":attributes_bazel.bzl", "IMPORTS_ATTRS")
-load(":common.bzl", "create_library_semantics_struct", "union_attrs")
-load(":common_bazel.bzl", "collect_cc_info", "get_imports", "maybe_precompile")
-load(
- ":py_library.bzl",
- "LIBRARY_ATTRS",
- "create_py_library_rule",
- bazel_py_library_impl = "py_library_impl",
-)
-
-_BAZEL_LIBRARY_ATTRS = union_attrs(
- LIBRARY_ATTRS,
- IMPORTS_ATTRS,
-)
-
-def create_library_semantics_bazel():
- return create_library_semantics_struct(
- get_imports = get_imports,
- maybe_precompile = maybe_precompile,
- get_cc_info_for_library = collect_cc_info,
- )
-
-def _py_library_impl(ctx):
- return bazel_py_library_impl(
- ctx,
- semantics = create_library_semantics_bazel(),
- )
-
-py_library = create_py_library_rule(
- implementation = _py_library_impl,
- attrs = _BAZEL_LIBRARY_ATTRS,
-)
diff --git a/python/private/py_test_macro_bazel.bzl b/python/private/py_test_macro.bzl
similarity index 92%
rename from python/private/py_test_macro_bazel.bzl
rename to python/private/py_test_macro.bzl
index 24b78fe..1f9330f 100644
--- a/python/private/py_test_macro_bazel.bzl
+++ b/python/private/py_test_macro.bzl
@@ -14,7 +14,7 @@
"""Implementation of macro-half of py_test rule."""
load(":common_bazel.bzl", "convert_legacy_create_init_to_int")
-load(":py_test_rule_bazel.bzl", py_test_rule = "py_test")
+load(":py_test_rule.bzl", py_test_rule = "py_test")
def py_test(**kwargs):
convert_legacy_create_init_to_int(kwargs)
diff --git a/python/private/py_test_rule_bazel.bzl b/python/private/py_test_rule.bzl
similarity index 97%
rename from python/private/py_test_rule_bazel.bzl
rename to python/private/py_test_rule.bzl
index 369360d..64d5f21 100644
--- a/python/private/py_test_rule_bazel.bzl
+++ b/python/private/py_test_rule.bzl
@@ -11,7 +11,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-"""Rule implementation of py_test for Bazel."""
+"""Implementation of py_test rule."""
load("@bazel_skylib//lib:dicts.bzl", "dicts")
load(":attributes.bzl", "AGNOSTIC_TEST_ATTRS")
diff --git a/python/py_binary.bzl b/python/py_binary.bzl
index 3496108..c7d57da 100644
--- a/python/py_binary.bzl
+++ b/python/py_binary.bzl
@@ -15,7 +15,7 @@
"""Public entry point for py_binary."""
load("@rules_python_internal//:rules_python_config.bzl", "config")
-load("//python/private:py_binary_macro_bazel.bzl", _starlark_py_binary = "py_binary")
+load("//python/private:py_binary_macro.bzl", _starlark_py_binary = "py_binary")
load("//python/private:register_extension_info.bzl", "register_extension_info")
load("//python/private:util.bzl", "add_migration_tag")
diff --git a/python/py_library.bzl b/python/py_library.bzl
index 4ec1da4..12354a7 100644
--- a/python/py_library.bzl
+++ b/python/py_library.bzl
@@ -15,7 +15,7 @@
"""Public entry point for py_library."""
load("@rules_python_internal//:rules_python_config.bzl", "config")
-load("//python/private:py_library_macro_bazel.bzl", _starlark_py_library = "py_library")
+load("//python/private:py_library_macro.bzl", _starlark_py_library = "py_library")
load("//python/private:register_extension_info.bzl", "register_extension_info")
load("//python/private:util.bzl", "add_migration_tag")
diff --git a/python/py_test.bzl b/python/py_test.bzl
index 2aa93ff..7f6626e 100644
--- a/python/py_test.bzl
+++ b/python/py_test.bzl
@@ -15,7 +15,7 @@
"""Public entry point for py_test."""
load("@rules_python_internal//:rules_python_config.bzl", "config")
-load("//python/private:py_test_macro_bazel.bzl", _starlark_py_test = "py_test")
+load("//python/private:py_test_macro.bzl", _starlark_py_test = "py_test")
load("//python/private:register_extension_info.bzl", "register_extension_info")
load("//python/private:util.bzl", "add_migration_tag")