| load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag") | |
| load("@pythons_hub//:versions.bzl", "DEFAULT_PYTHON_VERSION", "MINOR_MAPPING", "PYTHON_VERSIONS") | |
| load("@rules_python_internal//:rules_python_config.bzl", "config") | |
| load("//python/private:distribution_filegroup.bzl", "distribution_filegroup") | |
| load( | |
| "//python/private:flags.bzl", | |
| "AddSrcsToRunfilesFlag", | |
| "BootstrapImplFlag", | |
| "ExecToolsToolchainFlag", | |
| "FreeThreadedFlag", | |
| "LibcFlag", | |
| "PbsDistributionFlag", | |
| "PrecompileFlag", | |
| "PrecompileSourceRetentionFlag", | |
| "PyiDepsToRunfilesFlag", | |
| "ValidateTestMainFlag", | |
| "VenvsSitePackages", | |
| "VenvsUseDeclareSymlinkFlag", | |
| "pbs_distribution_flag", | |
| rp_string_flag = "string_flag", | |
| ) | |
| load("//python/private:visibility.bzl", "NOT_ACTUALLY_PUBLIC") # buildifier: disable=bzl-visibility | |
| load("//python/private/pypi:flags.bzl", "define_pypi_internal_flags") | |
| load(":config_settings.bzl", "construct_config_settings") | |
| package(default_visibility = ["//:__subpackages__"]) | |
| # We don't generate bzl_library for these because they aren't public targets | |
| # and should be moved | |
| # gazelle:exclude config_settings.bzl | |
| # gazelle:exclude transition.bzl | |
| distribution_filegroup( | |
| name = "distribution", | |
| ) | |
| construct_config_settings( | |
| name = "construct_config_settings", | |
| default_version = DEFAULT_PYTHON_VERSION, | |
| documented_flags = [ | |
| ":pip_whl_osx_version", | |
| ":py_freethreaded", | |
| ":py_linux_libc", | |
| ":py_pbs_distribution", | |
| ], | |
| minor_mapping = MINOR_MAPPING, | |
| versions = PYTHON_VERSIONS, | |
| ) | |
| string_flag( | |
| name = "add_srcs_to_runfiles", | |
| build_setting_default = AddSrcsToRunfilesFlag.AUTO, | |
| values = AddSrcsToRunfilesFlag.flag_values(), | |
| # NOTE: Only public because it is dependency of public rules. | |
| visibility = NOT_ACTUALLY_PUBLIC, | |
| ) | |
| string_flag( | |
| name = "exec_tools_toolchain", | |
| build_setting_default = ExecToolsToolchainFlag.ENABLED, | |
| values = sorted(ExecToolsToolchainFlag.__members__.values()), | |
| # NOTE: Only public because it is used in py_toolchain_suite from toolchain | |
| # repositories | |
| visibility = ["//visibility:private"], | |
| ) | |
| config_setting( | |
| name = "is_exec_tools_toolchain_enabled", | |
| flag_values = { | |
| "exec_tools_toolchain": ExecToolsToolchainFlag.ENABLED, | |
| }, | |
| # NOTE: Only public because it is used in py_toolchain_suite from toolchain | |
| # repositories | |
| visibility = NOT_ACTUALLY_PUBLIC, | |
| ) | |
| string_flag( | |
| name = "precompile", | |
| build_setting_default = PrecompileFlag.AUTO, | |
| values = sorted(PrecompileFlag.__members__.values()), | |
| # NOTE: Only public because it's an implicit dependency | |
| visibility = NOT_ACTUALLY_PUBLIC, | |
| ) | |
| string_flag( | |
| name = "validate_test_main", | |
| build_setting_default = ValidateTestMainFlag.AUTO, | |
| values = ValidateTestMainFlag.flag_values(), | |
| # NOTE: Only public because it's an implicit dependency of py_test. | |
| visibility = NOT_ACTUALLY_PUBLIC, | |
| ) | |
| string_flag( | |
| name = "pyi_deps_to_runfiles", | |
| build_setting_default = PyiDepsToRunfilesFlag.AUTO, | |
| values = PyiDepsToRunfilesFlag.flag_values(), | |
| # NOTE: Only public because it's an implicit dependency | |
| visibility = NOT_ACTUALLY_PUBLIC, | |
| ) | |
| string_flag( | |
| name = "precompile_source_retention", | |
| build_setting_default = PrecompileSourceRetentionFlag.AUTO, | |
| values = sorted(PrecompileSourceRetentionFlag.__members__.values()), | |
| # NOTE: Only public because it's an implicit dependency | |
| visibility = NOT_ACTUALLY_PUBLIC, | |
| ) | |
| rp_string_flag( | |
| name = "bootstrap_impl", | |
| build_setting_default = BootstrapImplFlag.SYSTEM_PYTHON, | |
| override = select({ | |
| # Windows doesn't yet support bootstrap=script, so force disable it | |
| ":_is_windows": BootstrapImplFlag.SYSTEM_PYTHON, | |
| "//conditions:default": "", | |
| }), | |
| values = sorted(BootstrapImplFlag.__members__.values()), | |
| # NOTE: Only public because it's an implicit dependency | |
| visibility = NOT_ACTUALLY_PUBLIC, | |
| ) | |
| label_flag( | |
| name = "debugger", | |
| build_setting_default = "//python/private:empty", | |
| visibility = ["//visibility:public"], | |
| ) | |
| # For some reason, @platforms//os:windows can't be directly used | |
| # in the select() for the flag. But it can be used when put behind | |
| # a config_setting(). | |
| config_setting( | |
| name = "_is_windows", | |
| constraint_values = ["@platforms//os:windows"], | |
| ) | |
| # This is used for pip and hermetic toolchain resolution. | |
| string_flag( | |
| name = "py_linux_libc", | |
| build_setting_default = LibcFlag.GLIBC, | |
| values = LibcFlag.flag_values(), | |
| # NOTE: Only public because it is used in pip hub and toolchain repos. | |
| visibility = NOT_ACTUALLY_PUBLIC, | |
| ) | |
| string_flag( | |
| name = "py_freethreaded", | |
| build_setting_default = FreeThreadedFlag.NO, | |
| values = sorted(FreeThreadedFlag.__members__.values()), | |
| visibility = ["//visibility:public"], | |
| ) | |
| pbs_distribution_flag( | |
| name = "py_pbs_distribution", | |
| build_setting_default = PbsDistributionFlag.AUTO, | |
| visibility = ["//visibility:public"], | |
| ) | |
| alias( | |
| name = "is_py_freethreaded", | |
| actual = ":_is_py_freethreaded_yes", | |
| deprecation = "not actually public, please create your own config_setting using the flag that rules_python exposes", | |
| tags = ["manual"], | |
| visibility = ["//visibility:public"], | |
| ) | |
| alias( | |
| name = "is_py_non_freethreaded", | |
| actual = ":_is_py_freethreaded_no", | |
| deprecation = "not actually public, please create your own config_setting using the flag that rules_python exposes", | |
| tags = ["manual"], | |
| visibility = ["//visibility:public"], | |
| ) | |
| string_flag( | |
| name = "venvs_use_declare_symlink", | |
| build_setting_default = VenvsUseDeclareSymlinkFlag.YES, | |
| values = VenvsUseDeclareSymlinkFlag.flag_values(), | |
| visibility = ["//visibility:public"], | |
| ) | |
| # pip.parse related flags | |
| string_flag( | |
| name = "venv", | |
| build_setting_default = "auto", | |
| # NOTE: Only public because it is used in pip hub repos and executable transitions. | |
| visibility = NOT_ACTUALLY_PUBLIC, | |
| ) | |
| string_flag( | |
| name = "pip_whl_osx_version", | |
| build_setting_default = "", | |
| # NOTE: Only public because it is used in pip hub repos. | |
| visibility = NOT_ACTUALLY_PUBLIC, | |
| ) | |
| string_flag( | |
| name = "venvs_site_packages", | |
| build_setting_default = VenvsSitePackages.NO, | |
| # NOTE: Only public because it is used in pip hub repos. | |
| visibility = NOT_ACTUALLY_PUBLIC, | |
| ) | |
| config_setting( | |
| name = "_is_venvs_site_packages_yes", | |
| flag_values = { | |
| ":venvs_site_packages": VenvsSitePackages.YES, | |
| }, | |
| # NOTE: Only public because it is used in whl_library repos. | |
| visibility = NOT_ACTUALLY_PUBLIC, | |
| ) | |
| define_pypi_internal_flags( | |
| name = "define_pypi_internal_flags", | |
| ) | |
| label_flag( | |
| name = "pip_env_marker_config", | |
| build_setting_default = ":_pip_env_marker_default_config", | |
| # NOTE: Only public because it is used in pip hub repos. | |
| visibility = NOT_ACTUALLY_PUBLIC, | |
| ) | |
| bool_flag( | |
| name = "experimental_python_import_all_repositories", | |
| build_setting_default = True, | |
| scope = "universal", | |
| visibility = ["//visibility:public"], | |
| ) | |
| bool_flag( | |
| name = "build_python_zip", | |
| build_setting_default = config.build_python_zip_default, | |
| help = "Build python executable zip. Defaults to on on Windows, off on other platforms", | |
| scope = "universal", | |
| visibility = ["//visibility:public"], | |
| ) | |
| bool_flag( | |
| name = "incompatible_default_to_explicit_init_py", | |
| build_setting_default = False, | |
| scope = "universal", | |
| visibility = ["//visibility:public"], | |
| ) | |
| string_flag( | |
| name = "python_path", | |
| build_setting_default = "python", | |
| scope = "universal", | |
| visibility = ["//visibility:public"], | |
| ) |