diff --git a/CHANGELOG.md b/CHANGELOG.md index 387b55b0c9..ee71951b44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,8 @@ A brief description of the categories of changes: ### Changed * (gazelle): Update error messages when unable to resolve a dependency to be more human-friendly. +* (flags) The {obj}`--python_version` flag now also returns + {obj}`config_common.FeatureFlagInfo`. ### Fixed * (whl_library): Remove `--no-index` and add `--no-build-isolation` to the diff --git a/python/private/config_settings.bzl b/python/private/config_settings.bzl index 0537655a47..99b8b94adf 100644 --- a/python/private/config_settings.bzl +++ b/python/private/config_settings.bzl @@ -16,7 +16,7 @@ """ load("@bazel_skylib//lib:selects.bzl", "selects") -load("@bazel_skylib//rules:common_settings.bzl", "string_flag") +load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo") load("//python:versions.bzl", "MINOR_MAPPING", "TOOL_VERSIONS") _PYTHON_VERSION_FLAG = str(Label("//python/config_settings:python_version")) @@ -170,7 +170,7 @@ def construct_config_settings(name = None): # buildifier: disable=function-docs Args: name(str): A dummy name value that is no-op for now. """ - string_flag( + _python_version_flag( name = "python_version", # TODO: The default here should somehow match the MODULE config. Until # then, use the empty string to indicate an unknown version. This @@ -200,3 +200,35 @@ def construct_config_settings(name = None): # buildifier: disable=function-docs }, visibility = ["//visibility:public"], ) + +def _python_version_flag_impl(ctx): + value = ctx.build_setting_value + if value not in ctx.attr.values: + fail(( + "Invalid --python_version value: {actual}\nAllowed values {allowed}" + ).format( + actual = value, + allowed = ", ".join(sorted(ctx.attr.values)), + )) + + return [ + # BuildSettingInfo is the original provider returned, so continue to + # return it for compatibility + BuildSettingInfo(value = value), + # FeatureFlagInfo is returned so that config_setting respects the value + # as returned by this rule instead of as originally seen on the command + # line. + # It is also for Google compatibility, which expects the FeatureFlagInfo + # provider. + config_common.FeatureFlagInfo(value = value), + ] + +_python_version_flag = rule( + implementation = _python_version_flag_impl, + build_setting = config.string(flag = True), + attrs = { + "values": attr.string_list( + doc = "Allowed values.", + ), + }, +) diff --git a/sphinxdocs/inventories/bazel_inventory.txt b/sphinxdocs/inventories/bazel_inventory.txt index 445f0f71f4..caf5866d8a 100644 --- a/sphinxdocs/inventories/bazel_inventory.txt +++ b/sphinxdocs/inventories/bazel_inventory.txt @@ -7,6 +7,8 @@ File bzl:type 1 rules/lib/File - Label bzl:type 1 rules/lib/Label - Target bzl:type 1 rules/lib/builtins/Target - bool bzl:type 1 rules/lib/bool - +config_common.FeatureFlagInfo bzl:type 1 rules/lib/toplevel/config_common#FeatureFlagInfo - +config_common.toolchain_type bzl:function 1 rules/lib/toplevel/config_common#toolchain_type - ctx.actions bzl:obj 1 rules/lib/builtins/ctx#actions - ctx.aspect_ids bzl:obj 1 rules/lib/builtins/ctx#aspect_ids - ctx.attr bzl:obj 1 rules/lib/builtins/ctx#attr - @@ -65,6 +67,7 @@ native.repo_name bzl:function 1 rules/lib/toplevel/native#repo_name - native.repository_name bzl:function 1 rules/lib/toplevel/native#repository_name - str bzl:type 1 rules/lib/string - struct bzl:type 1 rules/lib/builtins/struct - +toolchain_type bzl:type 1 ules/lib/builtins/toolchain_type.html - Name bzl:type 1 concepts/labels#target-names - CcInfo bzl:provider 1 rules/lib/providers/CcInfo - CcInfo.linking_context bzl:provider-field 1 rules/lib/providers/CcInfo#linking_context -