chore: drop deprecated options related to CIBW_ENABLE (#2095)

* chore: drop deprecated options

* Add --enable option

* Fix pyodide tests


---------

Co-authored-by: Joe Rickerby <joerick@mac.com>
This commit is contained in:
Matthieu Darbois
2025-01-21 12:53:01 -05:00
committed by GitHub
co-authored by Joe Rickerby
parent 730b64249f
commit d134edc652
15 changed files with 123 additions and 130 deletions
+7 -7
View File
@@ -2,12 +2,12 @@ from __future__ import annotations
from packaging.specifiers import SpecifierSet
from cibuildwheel.util import BuildSelector, EnableGroups
from cibuildwheel.util import BuildSelector, EnableGroup
def test_build():
build_selector = BuildSelector(
build_config="cp3*-* *-manylinux*", skip_config="", enable=frozenset([EnableGroups.PyPy])
build_config="cp3*-* *-manylinux*", skip_config="", enable=frozenset([EnableGroup.PyPy])
)
assert build_selector("cp36-manylinux_x86_64")
@@ -45,7 +45,7 @@ def test_build_filter_pre():
build_selector = BuildSelector(
build_config="cp3*-* *-manylinux*",
skip_config="",
enable=frozenset([EnableGroups.CPythonPrerelease, EnableGroups.PyPy]),
enable=frozenset([EnableGroup.CPythonPrerelease, EnableGroup.PyPy]),
)
assert build_selector("cp37-manylinux_x86_64")
@@ -59,7 +59,7 @@ def test_skip():
build_selector = BuildSelector(
build_config="*",
skip_config="pp36-* cp3?-manylinux_i686 cp36-win* *-win32",
enable=frozenset([EnableGroups.PyPy]),
enable=frozenset([EnableGroup.PyPy]),
)
assert not build_selector("pp36-manylinux_x86_64")
@@ -85,7 +85,7 @@ def test_build_and_skip():
build_selector = BuildSelector(
build_config="cp36-* cp37-macosx* *-manylinux*",
skip_config="pp37-* cp37-manylinux_i686",
enable=frozenset([EnableGroups.PyPy]),
enable=frozenset([EnableGroup.PyPy]),
)
assert not build_selector("pp37-manylinux_x86_64")
@@ -119,7 +119,7 @@ def test_build_limited_python():
build_config="*",
skip_config="",
requires_python=SpecifierSet(">=3.7"),
enable=frozenset([EnableGroups.PyPy]),
enable=frozenset([EnableGroup.PyPy]),
)
assert not build_selector("cp36-manylinux_x86_64")
@@ -155,7 +155,7 @@ def test_build_limited_python_patch():
def test_build_free_threaded_python():
build_selector = BuildSelector(build_config="*", skip_config="", enable=frozenset(EnableGroups))
build_selector = BuildSelector(build_config="*", skip_config="", enable=frozenset(EnableGroup))
assert build_selector("cp313t-manylinux_x86_64")
+3 -1
View File
@@ -8,7 +8,7 @@ from pathlib import Path
import pytest
from cibuildwheel import linux, macos, util, windows
from cibuildwheel import linux, macos, pyodide, util, windows
class ArgsInterceptor:
@@ -42,6 +42,7 @@ def mock_protection(monkeypatch):
monkeypatch.setattr(windows, "build", fail_on_call)
monkeypatch.setattr(linux, "build", fail_on_call)
monkeypatch.setattr(macos, "build", fail_on_call)
monkeypatch.setattr(pyodide, "build", fail_on_call)
monkeypatch.setattr(Path, "mkdir", ignore_call)
@@ -88,6 +89,7 @@ def intercepted_build_args(monkeypatch):
monkeypatch.setattr(linux, "build", intercepted)
monkeypatch.setattr(macos, "build", intercepted)
monkeypatch.setattr(windows, "build", intercepted)
monkeypatch.setattr(pyodide, "build", intercepted)
yield intercepted
+41 -2
View File
@@ -10,7 +10,7 @@ import pytest
from cibuildwheel.__main__ import main
from cibuildwheel.environment import ParsedEnvironment
from cibuildwheel.options import BuildOptions, _get_pinned_container_images
from cibuildwheel.util import BuildSelector, resources_dir, split_config_settings
from cibuildwheel.util import BuildSelector, EnableGroup, resources_dir, split_config_settings
# CIBW_PLATFORM is tested in main_platform_test.py
@@ -126,7 +126,7 @@ def get_default_repair_command(platform: str) -> str:
return "auditwheel repair -w {dest_dir} {wheel}"
elif platform == "macos":
return "delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v {wheel}"
elif platform == "windows":
elif platform == "windows" or platform == "pyodide":
return ""
else:
msg = f"Unknown platform: {platform!r}"
@@ -368,6 +368,45 @@ def test_debug_traceback(monkeypatch, method, capfd):
assert "Traceback (most recent call last)" in err
@pytest.mark.parametrize("method", ["unset", "command_line", "env_var"])
def test_enable(method, intercepted_build_args, monkeypatch):
if method == "command_line":
monkeypatch.setattr(sys, "argv", [*sys.argv, "--enable", "pypy"])
elif method == "env_var":
monkeypatch.setenv("CIBW_ENABLE", "pypy")
main()
enable_groups = intercepted_build_args.args[0].globals.build_selector.enable
if method == "unset":
assert enable_groups == frozenset()
else:
assert enable_groups == frozenset([EnableGroup.PyPy])
def test_enable_arg_inherits(intercepted_build_args, monkeypatch):
monkeypatch.setenv("CIBW_ENABLE", "pypy")
monkeypatch.setattr(sys, "argv", [*sys.argv, "--enable", "cpython-prerelease"])
main()
enable_groups = intercepted_build_args.args[0].globals.build_selector.enable
assert enable_groups == frozenset((EnableGroup.PyPy, EnableGroup.CPythonPrerelease))
def test_enable_arg_error_message(monkeypatch, capsys):
monkeypatch.setattr(sys, "argv", [*sys.argv, "--enable", "invalid_group"])
with pytest.raises(SystemExit) as ex:
main()
assert ex.value.code == 2
_, err = capsys.readouterr()
assert "Valid group names are:" in err
def test_defaults(platform, intercepted_build_args):
main()
+2 -2
View File
@@ -6,7 +6,7 @@ import pytest
from cibuildwheel.__main__ import main
from cibuildwheel.architecture import Architecture
from cibuildwheel.util import EnableGroups
from cibuildwheel.util import EnableGroup
from ..conftest import MOCK_PACKAGE_DIR
@@ -217,7 +217,7 @@ def test_only_argument(intercepted_build_args, monkeypatch, only, plat):
assert options.globals.build_selector.skip_config == ""
assert options.platform == plat
assert options.globals.architectures == Architecture.all_archs(plat)
assert EnableGroups.PyPy in options.globals.build_selector.enable
assert EnableGroup.PyPy in options.globals.build_selector.enable
@pytest.mark.parametrize("only", ("cp311-manylxinux_x86_64", "some_linux_thing"))
+9 -22
View File
@@ -14,20 +14,8 @@ from cibuildwheel import linux, util
from cibuildwheel.__main__ import main
from cibuildwheel.oci_container import OCIPlatform
ALL_IDS = {
"cp36",
"cp37",
"cp38",
"cp39",
"cp310",
"cp311",
"cp312",
"cp313",
"pp37",
"pp38",
"pp39",
"pp310",
}
DEFAULT_IDS = {"cp36", "cp37", "cp38", "cp39", "cp310", "cp311", "cp312", "cp313"}
ALL_IDS = DEFAULT_IDS | {"cp313t", "pp37", "pp38", "pp39", "pp310"}
@pytest.fixture
@@ -77,7 +65,7 @@ def test_build_default_launches(monkeypatch):
assert kwargs["container"]["oci_platform"] == OCIPlatform.AMD64
identifiers = {x.identifier for x in kwargs["platform_configs"]}
assert identifiers == {f"{x}-manylinux_x86_64" for x in ALL_IDS}
assert identifiers == {f"{x}-manylinux_x86_64" for x in DEFAULT_IDS}
kwargs = build_in_container.call_args_list[1][1]
assert "quay.io/pypa/manylinux2014_i686" in kwargs["container"]["image"]
@@ -85,7 +73,7 @@ def test_build_default_launches(monkeypatch):
assert kwargs["container"]["oci_platform"] == OCIPlatform.i386
identifiers = {x.identifier for x in kwargs["platform_configs"]}
assert identifiers == {f"{x}-manylinux_i686" for x in ALL_IDS}
assert identifiers == {f"{x}-manylinux_i686" for x in DEFAULT_IDS}
kwargs = build_in_container.call_args_list[2][1]
assert "quay.io/pypa/musllinux_1_2_x86_64" in kwargs["container"]["image"]
@@ -93,9 +81,7 @@ def test_build_default_launches(monkeypatch):
assert kwargs["container"]["oci_platform"] == OCIPlatform.AMD64
identifiers = {x.identifier for x in kwargs["platform_configs"]}
assert identifiers == {
f"{x}-musllinux_x86_64" for x in ALL_IDS for x in ALL_IDS if "pp" not in x
}
assert identifiers == {f"{x}-musllinux_x86_64" for x in DEFAULT_IDS}
kwargs = build_in_container.call_args_list[3][1]
assert "quay.io/pypa/musllinux_1_2_i686" in kwargs["container"]["image"]
@@ -103,7 +89,7 @@ def test_build_default_launches(monkeypatch):
assert kwargs["container"]["oci_platform"] == OCIPlatform.i386
identifiers = {x.identifier for x in kwargs["platform_configs"]}
assert identifiers == {f"{x}-musllinux_i686" for x in ALL_IDS if "pp" not in x}
assert identifiers == {f"{x}-musllinux_i686" for x in DEFAULT_IDS}
@pytest.mark.usefixtures("mock_build_container")
@@ -117,6 +103,7 @@ def test_build_with_override_launches(monkeypatch, tmp_path):
[tool.cibuildwheel]
manylinux-x86_64-image = "manylinux_2_28"
musllinux-x86_64-image = "musllinux_1_2"
enable = ["pypy", "cpython-freethreading"]
# Before Python 3.10, use manylinux2014, musllinux_1_1
[[tool.cibuildwheel.overrides]]
@@ -158,7 +145,7 @@ before-all = "true"
assert identifiers == {
f"{x}-manylinux_x86_64"
for x in ALL_IDS
- {"cp36", "cp310", "cp311", "cp312", "cp313", "pp37", "pp38", "pp39", "pp310"}
- {"cp36", "cp310", "cp311", "cp312", "cp313", "cp313t", "pp37", "pp38", "pp39", "pp310"}
}
assert kwargs["options"].build_options("cp37-manylinux_x86_64").before_all == ""
@@ -169,7 +156,7 @@ before-all = "true"
identifiers = {x.identifier for x in kwargs["platform_configs"]}
assert identifiers == {
f"{x}-manylinux_x86_64"
for x in ["cp310", "cp311", "cp312", "cp313", "pp37", "pp38", "pp39", "pp310"]
for x in ["cp310", "cp311", "cp312", "cp313", "cp313t", "pp37", "pp38", "pp39", "pp310"]
}
kwargs = build_in_container.call_args_list[3][1]
+22 -14
View File
@@ -15,7 +15,7 @@ from cibuildwheel.options import (
Options,
_get_pinned_container_images,
)
from cibuildwheel.util import EnableGroups
from cibuildwheel.util import EnableGroup
PYPROJECT_1 = """
[tool.cibuildwheel]
@@ -429,24 +429,32 @@ def test_override_inherit_environment_with_references(tmp_path: Path) -> None:
@pytest.mark.parametrize(
("toml_assignment", "env", "expected_result"),
("toml_assignment", "env", "enable_args", "expected_result"),
[
("", {}, False),
("free-threaded-support = true", {}, True),
("free-threaded-support = false", {}, False),
("", {"CIBW_FREE_THREADED_SUPPORT": "0"}, False),
("", {"CIBW_FREE_THREADED_SUPPORT": "1"}, True),
("free-threaded-support = false", {"CIBW_FREE_THREADED_SUPPORT": "1"}, True),
("free-threaded-support = true", {"CIBW_FREE_THREADED_SUPPORT": "0"}, False),
("free-threaded-support = true", {"CIBW_FREE_THREADED_SUPPORT": ""}, True),
("free-threaded-support = false", {"CIBW_FREE_THREADED_SUPPORT": ""}, False),
("", {}, [], False),
("enable = ['cpython-freethreading']", {}, [], True),
("enable = []", {}, [], False),
("", {}, ["cpython-freethreading"], True),
("", {}, ["cpython-freethreading", "pypy"], True),
("", {"CIBW_ENABLE": "pypy"}, [], False),
("", {"CIBW_ENABLE": "cpython-freethreading"}, [], True),
("enable = []", {"CIBW_ENABLE": "cpython-freethreading"}, [], True),
("enable = ['cpython-freethreading']", {"CIBW_ENABLE": "pypy"}, [], True),
("enable = ['cpython-freethreading']", {}, ["pypy"], True),
("enable = ['cpython-freethreading']", {"CIBW_ENABLE": ""}, [], True),
("enable = []", {"CIBW_ENABLE": ""}, [], False),
],
)
def test_free_threaded_support(
tmp_path: Path, toml_assignment: str, env: dict[str, str], expected_result: bool
tmp_path: Path,
toml_assignment: str,
env: dict[str, str],
enable_args: list[str],
expected_result: bool,
) -> None:
args = CommandLineArguments.defaults()
args.package_dir = tmp_path
args.enable = enable_args
pyproject_toml: Path = tmp_path / "pyproject.toml"
pyproject_toml.write_text(
@@ -459,6 +467,6 @@ def test_free_threaded_support(
)
options = Options(platform="linux", command_line_arguments=args, env=env)
if expected_result:
assert EnableGroups.CPythonFreeThreading in options.globals.build_selector.enable
assert EnableGroup.CPythonFreeThreading in options.globals.build_selector.enable
else:
assert EnableGroups.CPythonFreeThreading not in options.globals.build_selector.enable
assert EnableGroup.CPythonFreeThreading not in options.globals.build_selector.enable