diff --git a/cibuildwheel/linux.py b/cibuildwheel/linux.py index 1a1f71037..ae10d499d 100644 --- a/cibuildwheel/linux.py +++ b/cibuildwheel/linux.py @@ -16,6 +16,7 @@ from .util import ( AlreadyBuiltWheelError, BuildSelector, + build_frontend_or_default, NonPlatformWheelError, find_compatible_wheel, get_build_verbosity_extra_flags, @@ -143,6 +144,7 @@ def build_in_container( container_package_dir: PurePath, ) -> None: container_output_dir = PurePosixPath("/output") + build_frontend = build_frontend_or_default(options.build_frontend, "pip") check_all_python_exist(platform_configs=platform_configs, container=container) @@ -242,10 +244,10 @@ def build_in_container( verbosity_flags = get_build_verbosity_extra_flags(build_options.build_verbosity) extra_flags = split_config_settings( - build_options.config_settings, build_options.build_frontend + build_options.config_settings, build_frontend ) - if build_options.build_frontend == "pip": + if build_frontend == "pip": extra_flags += verbosity_flags container.call( [ @@ -260,7 +262,7 @@ def build_in_container( ], env=env, ) - elif build_options.build_frontend == "build": + elif build_frontend == "build": verbosity_setting = " ".join(verbosity_flags) extra_flags += (f"--config-setting={verbosity_setting}",) container.call( @@ -276,7 +278,7 @@ def build_in_container( env=env, ) else: - assert_never(build_options.build_frontend) + assert_never(build_frontend) built_wheel = container.glob(built_wheel_dir, "*.whl")[0] diff --git a/cibuildwheel/macos.py b/cibuildwheel/macos.py index 6047b1eea..caa2c2137 100644 --- a/cibuildwheel/macos.py +++ b/cibuildwheel/macos.py @@ -25,6 +25,7 @@ AlreadyBuiltWheelError, BuildFrontend, BuildSelector, + build_frontend_or_default, NonPlatformWheelError, call, detect_ci_provider, @@ -311,6 +312,9 @@ def build(options: Options, tmp_path: Path) -> None: options.globals.build_selector, options.globals.architectures ) + build_frontend = build_frontend_or_default(options.build_frontend, "pip") + + if not python_configurations: return @@ -353,7 +357,7 @@ def build(options: Options, tmp_path: Path) -> None: config, dependency_constraint_flags, build_options.environment, - build_options.build_frontend, + build_frontend, ) compatible_wheel = find_compatible_wheel(built_wheels, config.identifier) @@ -376,10 +380,10 @@ def build(options: Options, tmp_path: Path) -> None: verbosity_flags = get_build_verbosity_extra_flags(build_options.build_verbosity) extra_flags = split_config_settings( - build_options.config_settings, build_options.build_frontend + build_options.config_settings, build_frontend ) - if build_options.build_frontend == "pip": + if build_frontend == "pip": extra_flags += verbosity_flags # Path.resolve() is needed. Without it pip wheel may try to fetch package from pypi.org # see https://github.com/pypa/cibuildwheel/pull/369 @@ -394,7 +398,7 @@ def build(options: Options, tmp_path: Path) -> None: *extra_flags, env=env, ) - elif build_options.build_frontend == "build": + elif build_frontend == "build": verbosity_setting = " ".join(verbosity_flags) extra_flags += (f"--config-setting={verbosity_setting}",) build_env = env.copy() @@ -417,7 +421,7 @@ def build(options: Options, tmp_path: Path) -> None: env=build_env, ) else: - assert_never(build_options.build_frontend) + assert_never(build_frontend) built_wheel = next(built_wheel_dir.glob("*.whl")) diff --git a/cibuildwheel/options.py b/cibuildwheel/options.py index 9380077ea..3469dce89 100644 --- a/cibuildwheel/options.py +++ b/cibuildwheel/options.py @@ -94,7 +94,7 @@ class BuildOptions: test_requires: list[str] test_extras: str build_verbosity: int - build_frontend: BuildFrontend + build_frontend: BuildFrontend | Literal["default"] config_settings: str @property @@ -499,11 +499,13 @@ def build_options(self, identifier: str | None) -> BuildOptions: test_extras = self.reader.get("test-extras", sep=",") build_verbosity_str = self.reader.get("build-verbosity") - build_frontend: BuildFrontend + build_frontend: BuildFrontend | Literal["default"] if build_frontend_str == "build": build_frontend = "build" elif build_frontend_str == "pip": build_frontend = "pip" + elif build_frontend_str == "default": + build_frontend = "default" else: msg = f"cibuildwheel: Unrecognised build frontend {build_frontend_str!r}, only 'pip' and 'build' are supported" print(msg, file=sys.stderr) diff --git a/cibuildwheel/resources/defaults.toml b/cibuildwheel/resources/defaults.toml index d16a31471..40b42f6ee 100644 --- a/cibuildwheel/resources/defaults.toml +++ b/cibuildwheel/resources/defaults.toml @@ -4,7 +4,7 @@ skip = "" test-skip = "" archs = ["auto"] -build-frontend = "pip" +build-frontend = "default" config-settings = {} dependency-versions = "pinned" environment = {} diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py index 72cff3260..389e11a96 100644 --- a/cibuildwheel/util.py +++ b/cibuildwheel/util.py @@ -71,6 +71,11 @@ BuildFrontend = Literal["pip", "build"] +def build_frontend_or_default(setting: BuildFrontend | Literal["default"], default: BuildFrontend) -> BuildFrontend: + if setting == "default": + return default + return setting + MANYLINUX_ARCHS: Final[tuple[str, ...]] = ( "x86_64", "i686", diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py index e0f16d815..b5d153903 100644 --- a/cibuildwheel/windows.py +++ b/cibuildwheel/windows.py @@ -26,6 +26,7 @@ AlreadyBuiltWheelError, BuildFrontend, BuildSelector, + build_frontend_or_default, NonPlatformWheelError, call, download, @@ -347,6 +348,7 @@ def build(options: Options, tmp_path: Path) -> None: python_configurations = get_python_configurations( options.globals.build_selector, options.globals.architectures ) + build_frontend = build_frontend_or_default(options.build_frontend, "pip") if not python_configurations: return @@ -387,7 +389,7 @@ def build(options: Options, tmp_path: Path) -> None: config, dependency_constraint_flags, build_options.environment, - build_options.build_frontend, + build_frontend, ) compatible_wheel = find_compatible_wheel(built_wheels, config.identifier) @@ -413,10 +415,10 @@ def build(options: Options, tmp_path: Path) -> None: verbosity_flags = get_build_verbosity_extra_flags(build_options.build_verbosity) extra_flags = split_config_settings( - build_options.config_settings, build_options.build_frontend + build_options.config_settings, build_frontend ) - if build_options.build_frontend == "pip": + if build_frontend == "pip": extra_flags += verbosity_flags # Path.resolve() is needed. Without it pip wheel may try to fetch package from pypi.org # see https://github.com/pypa/cibuildwheel/pull/369 @@ -431,7 +433,7 @@ def build(options: Options, tmp_path: Path) -> None: *extra_flags, env=env, ) - elif build_options.build_frontend == "build": + elif build_frontend == "build": verbosity_setting = " ".join(verbosity_flags) extra_flags += (f"--config-setting={verbosity_setting}",) build_env = env.copy() @@ -464,7 +466,7 @@ def build(options: Options, tmp_path: Path) -> None: env=build_env, ) else: - assert_never(build_options.build_frontend) + assert_never(build_frontend) built_wheel = next(built_wheel_dir.glob("*.whl"))