Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -458,3 +458,8 @@ uv_dev = use_extension(
uv_dev.configure(
version = "0.6.2",
)

flag_alias(name = "build_python_zip", starlark_flag = "//python/config_settings:build_python_zip")
flag_alias(name = "incompatible_default_to_explicit_init_py", starlark_flag = "//python/config_settings:incompatible_default_to_explicit_init_py")
flag_alias(name = "python_path", starlark_flag = "//python/config_settings:python_path")
flag_alias(name = "experimental_python_import_all_repositories", starlark_flag = "//python/config_settings:experimental_python_import_all_repositories")
Comment on lines +462 to +465
Copy link
Contributor

@shayanhoshyari shayanhoshyari Jan 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will this work for users of rules_python too?
otherwise I think this issue still stands : #3252 (comment)

Copy link
Contributor

@gregestren gregestren Jan 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That should work today, even before this PR is submitted.

Bazel 9 hard-codes those aliases right now. Once this PR works we'll remove the hard-coded logic from bazel@head.

The intention is users should have a seamless experience regardless of what's going on behind the scenes.

Copy link
Contributor

@shayanhoshyari shayanhoshyari Jan 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! I read https://docs.google.com/document/d/1yOvi4hVV7Ja32ocwVb4lsEUnijftk8nilXPncYm-BH8/edit?tab=t.0#heading=h.mfw8nr4w6amb briefly, and as you say this trickles down to users too, and not just rules_python. Makes sense.

Now another question, by adding this PR, should this code just be removed now?

_POSSIBLY_NATIVE_FLAGS = {
"build_python_zip": (lambda ctx: ctx.fragments.py.build_python_zip, "native"),
"default_to_explicit_init_py": (lambda ctx: ctx.fragments.py.default_to_explicit_init_py, "native"),
"python_import_all_repositories": (lambda ctx: ctx.fragments.bazel_py.python_import_all_repositories, "native"),
"python_path": (lambda ctx: ctx.fragments.bazel_py.python_path, "native"),
}
def read_possibly_native_flag(ctx, flag_name):
"""
Canonical API for reading a Python build flag.
Flags might be defined in Starlark or native-Bazel. This function reasd flags
from tbe correct source based on supporting Bazel version and --incompatible*
flags that disable native references.
Args:
ctx: Rule's configuration context.
flag_name: Name of the flag to read, without preceding "--".
Returns:
The flag's value.
"""
# Bazel 9.0+ can disable these fragments with --incompatible_remove_ctx_py_fragment and
# --incompatible_remove_ctx_bazel_py_fragment. Disabling them means bazel expects
# Python to read Starlark flags.
use_native_def = hasattr(ctx.fragments, "py") and hasattr(ctx.fragments, "bazel_py")
# Developer override to force the Starlark definition for testing.
if _POSSIBLY_NATIVE_FLAGS[flag_name][1] == "starlark":
use_native_def = False
if use_native_def:
return _POSSIBLY_NATIVE_FLAGS[flag_name][0](ctx)
else:
# Starlark definition of "--foo" is assumed to be a label dependency named "_foo".
(from #3290) and just the rules_python config be read instead? Because the flag_alias is already doing (and even a better job) than what this code is trying to do.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That should still be necessary so rules_python remains compatible with bazel 7 and 8, which can't resolve the flag aliases. Whenever rules_python drops support for pre-9 bazel we can remove this code.

2 changes: 1 addition & 1 deletion tests/base_rules/py_executable_base_tests.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ def _test_basic_zip(name, config):
# platforms.
# Pass value to both native and starlark versions of the flag until
# the native one is removed.
"//command_line_option:build_python_zip": "true",
"//python/config_settings:build_python_zip": "true",
labels.BUILD_PYTHON_ZIP: True,
"//command_line_option:cpu": "linux_x86_64",
"//command_line_option:crosstool_top": CROSSTOOL_TOP,
Expand Down
2 changes: 1 addition & 1 deletion tests/config_settings/transition/multi_version_tests.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ def _setup_py_binary_windows(name, *, impl, build_python_zip):
target = name + "_subject",
impl = impl,
config_settings = {
"//command_line_option:build_python_zip": str(build_python_zip),
"//python/config_settings:build_python_zip": str(build_python_zip),
labels.BUILD_PYTHON_ZIP: build_python_zip,
"//command_line_option:extra_toolchains": CC_TOOLCHAIN,
"//command_line_option:platforms": str(platform_targets.WINDOWS_X86_64),
Expand Down