@@ -19,6 +19,7 @@ settings for rules to later use.
1919"""
2020
2121load (":repo_utils.bzl" , "repo_utils" )
22+ load ("//python/private:text_util.bzl" , "render" )
2223
2324_ENABLE_PIPSTAR_ENVVAR_NAME = "RULES_PYTHON_ENABLE_PIPSTAR"
2425_ENABLE_PIPSTAR_DEFAULT = "0"
@@ -27,7 +28,7 @@ _ENABLE_PYSTAR_DEFAULT = "1"
2728_ENABLE_DEPRECATION_WARNINGS_ENVVAR_NAME = "RULES_PYTHON_DEPRECATION_WARNINGS"
2829_ENABLE_DEPRECATION_WARNINGS_DEFAULT = "0"
2930
30- _CONFIG_TEMPLATE = """\
31+ _CONFIG_TEMPLATE = """
3132config = struct(
3233 enable_pystar = {enable_pystar},
3334 enable_pipstar = {enable_pipstar},
@@ -40,12 +41,12 @@ config = struct(
4041
4142# The py_internal symbol is only accessible from within @rules_python, so we have to
4243# load it from there and re-export it so that rules_python can later load it.
43- _PY_INTERNAL_SHIM = """\
44+ _PY_INTERNAL_SHIM = """
4445load("@rules_python//tools/build_defs/python/private:py_internal_renamed.bzl", "py_internal_renamed")
4546py_internal_impl = py_internal_renamed
4647"""
4748
48- ROOT_BUILD_TEMPLATE = """\
49+ ROOT_BUILD_TEMPLATE = """
4950load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
5051
5152package(
@@ -64,6 +65,26 @@ bzl_library(
6465 srcs = ["py_internal.bzl"],
6566 deps = [{py_internal_dep}],
6667)
68+
69+ bzl_library(
70+ name = "extra_transition_settings_bzl",
71+ srcs = ["extra_transition_settings.bzl"],
72+ )
73+ """
74+
75+ _EXTRA_TRANSITIONS_TEMPLATE = """
76+ # Generated by @rules_python//python/private:internal_config_repo.bzl
77+ #
78+ # For a list of what modules added what labels, see
79+ # transition_settings_debug.txt
80+
81+ EXTRA_TRANSITION_SETTINGS = {labels}
82+ """
83+
84+ _TRANSITION_SETTINGS_DEBUG_TEMPLATE = """
85+ # Generated by @rules_python//python/private:internal_config_repo.bzl
86+
87+ {lines}
6788"""
6889
6990def _internal_config_repo_impl (rctx ):
@@ -113,13 +134,33 @@ def _internal_config_repo_impl(rctx):
113134 visibility = visibility ,
114135 ))
115136 rctx .file ("py_internal.bzl" , shim_content )
137+
138+ rctx .file (
139+ "extra_transition_settings.bzl" ,
140+ _EXTRA_TRANSITIONS_TEMPLATE .format (
141+ labels = render .list (rctx .attr .transition_settings ),
142+ ),
143+ )
144+ debug_lines = [
145+ "{} added by modules: {}" .format (setting , ", " .join (sorted (requesters )))
146+ for setting , requesters in rctx .attr .transition_setting_generators .items ()
147+ ]
148+ rctx .file (
149+ "transition_settings_debug.txt" ,
150+ _TRANSITION_SETTINGS_DEBUG_TEMPLATE .format (lines = "\n " .join (debug_lines )),
151+ )
152+
116153 return None
117154
118155internal_config_repo = repository_rule (
119156 implementation = _internal_config_repo_impl ,
120157 configure = True ,
121158 environ = [_ENABLE_PYSTAR_ENVVAR_NAME ],
159+ attrs = {
160+ "transition_setting_generators" : attr .string_list_dict (),
161+ "transition_settings" : attr .string_list (),
162+ },
122163)
123164
124165def _bool_from_environ (rctx , key , default ):
125- return bool (int (repo_utils .getenv (rctx , key , default )))
166+ return bool (int (repo_utils .getenv (rctx , key , default )))
0 commit comments