Set the defualt build_frontend to be "default" (which is still "pip")

Instead of using pip as the default, set it to default. This way
each platform can choose independently what to do as the default
behavior.

This is intended as part of adding Pyodide support. Pyodide cannot
use pip as the build frontend. It always uses a modified pypa/build.
So if the build_frontend is explicitly set to pip we want to raise
an error. But if it's unset, then we should be able to tell and just
do what we want.
This commit is contained in:
Hood Chatham
2023-04-07 15:56:17 -07:00
parent d018570bc4
commit 8a307031a9
6 changed files with 34 additions and 23 deletions
+6 -6
View File
@@ -17,6 +17,7 @@ from .util import (
AlreadyBuiltWheelError,
BuildSelector,
NonPlatformWheelError,
build_frontend_or_default,
find_compatible_wheel,
get_build_verbosity_extra_flags,
prepare_command,
@@ -175,6 +176,7 @@ def build_in_container(
for config in platform_configs:
log.build_start(config.identifier)
build_options = options.build_options(config.identifier)
build_frontend = build_frontend_or_default(build_options.build_frontend, "pip")
dependency_constraint_flags: list[PathOrStr] = []
@@ -241,11 +243,9 @@ def build_in_container(
container.call(["mkdir", "-p", built_wheel_dir])
verbosity_flags = get_build_verbosity_extra_flags(build_options.build_verbosity)
extra_flags = split_config_settings(
build_options.config_settings, build_options.build_frontend
)
extra_flags = split_config_settings(build_options.config_settings, build_frontend)
if build_options.build_frontend == "pip":
if build_frontend == "pip":
extra_flags += verbosity_flags
container.call(
[
@@ -260,7 +260,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 +276,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]
+7 -7
View File
@@ -26,6 +26,7 @@ from .util import (
BuildFrontend,
BuildSelector,
NonPlatformWheelError,
build_frontend_or_default,
call,
detect_ci_provider,
download,
@@ -331,6 +332,7 @@ def build(options: Options, tmp_path: Path) -> None:
for config in python_configurations:
build_options = options.build_options(config.identifier)
build_frontend = build_frontend_or_default(build_options.build_frontend, "pip")
log.build_start(config.identifier)
identifier_tmp_dir = tmp_path / config.identifier
@@ -353,7 +355,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)
@@ -375,11 +377,9 @@ def build(options: Options, tmp_path: Path) -> None:
built_wheel_dir.mkdir()
verbosity_flags = get_build_verbosity_extra_flags(build_options.build_verbosity)
extra_flags = split_config_settings(
build_options.config_settings, build_options.build_frontend
)
extra_flags = split_config_settings(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 +394,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 +417,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"))
+4 -2
View File
@@ -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 @@ class Options:
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)
+1 -1
View File
@@ -4,7 +4,7 @@ skip = ""
test-skip = ""
archs = ["auto"]
build-frontend = "pip"
build-frontend = "default"
config-settings = {}
dependency-versions = "pinned"
environment = {}
+9
View File
@@ -71,6 +71,15 @@ test_fail_cwd_file: Final[Path] = resources_dir / "testing_temp_dir_file.py"
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",
+7 -7
View File
@@ -27,6 +27,7 @@ from .util import (
BuildFrontend,
BuildSelector,
NonPlatformWheelError,
build_frontend_or_default,
call,
download,
find_compatible_wheel,
@@ -367,6 +368,7 @@ def build(options: Options, tmp_path: Path) -> None:
for config in python_configurations:
build_options = options.build_options(config.identifier)
build_frontend = build_frontend_or_default(build_options.build_frontend, "pip")
log.build_start(config.identifier)
identifier_tmp_dir = tmp_path / config.identifier
@@ -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)
@@ -412,11 +414,9 @@ def build(options: Options, tmp_path: Path) -> None:
built_wheel_dir.mkdir()
verbosity_flags = get_build_verbosity_extra_flags(build_options.build_verbosity)
extra_flags = split_config_settings(
build_options.config_settings, build_options.build_frontend
)
extra_flags = split_config_settings(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 +431,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 +464,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"))