diff --git a/docs/options.md b/docs/options.md index 90f9015e..e0012cee 100644 --- a/docs/options.md +++ b/docs/options.md @@ -482,6 +482,11 @@ uv currently does not support iOS or musllinux on s390x, ppc64le and riscv64. You can also use the `uv` backend directly; though currently multiple output files (from workspaces) are not supported. +!!! note + There is currently a compatibility issue between GraalPy and uv. If you + are building GraalPy wheels, use `build` or `pip` as the build frontend + instead of `build[uv]` or `uv`. + On Android and Pyodide, the "pip" frontend is not supported. You can specify extra arguments to pass to the build frontend using the diff --git a/test/conftest.py b/test/conftest.py index ad8ccff1..2a80e770 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -13,6 +13,7 @@ from cibuildwheel.selector import EnableGroup from cibuildwheel.typing import PLATFORMS from cibuildwheel.venv import find_uv +from . import utils from .utils import DEFAULT_CIBW_ENABLE, EMULATED_ARCHS, get_platform @@ -164,7 +165,7 @@ def build_frontend_env_nouv(request: pytest.FixtureRequest) -> dict[str, str]: @pytest.fixture(params=["pip", "build", "build[uv]", "uv"]) -def build_frontend_env(request: pytest.FixtureRequest) -> dict[str, str]: +def build_frontend_env(request: pytest.FixtureRequest) -> Generator[dict[str, str], None, None]: frontend = request.param marks = {m.name for m in request.node.iter_markers()} if "android" in marks: @@ -186,7 +187,17 @@ def build_frontend_env(request: pytest.FixtureRequest) -> dict[str, str]: if uv_path is not None and frontend == "build" and platform not in {"android", "ios"}: pytest.skip("No need to check build when uv is present") - return {"CIBW_BUILD_FRONTEND": frontend} + # temporary workaround: uv doesn't work with graalpy yet + uses_uv = "uv" in frontend + env: dict[str, str] = {"CIBW_BUILD_FRONTEND": frontend} + if uses_uv: + utils.include_graalpy_in_expected_wheels = False + env["CIBW_SKIP"] = "gp*" # skip graalpy when using uv, until uv supports it + try: + yield env + finally: + if uses_uv: + utils.include_graalpy_in_expected_wheels = True @pytest.fixture diff --git a/test/utils.py b/test/utils.py index 6acdc804..bb599abd 100644 --- a/test/utils.py +++ b/test/utils.py @@ -28,6 +28,10 @@ GRAALPY_ARCHS = ["x86_64", "AMD64", "aarch64", "arm64"] SINGLE_PYTHON_VERSION: Final[tuple[int, int]] = (3, 12) +# temporary workaround: set by build_frontend_env fixture to skip graalpy +# when uv is the build frontend (compatibility issue between graalpy and uv) +include_graalpy_in_expected_wheels: bool = True + _AARCH64_CAN_RUN_ARMV7: Final[bool] = Architecture.aarch64.value not in EMULATED_ARCHS and { None: Architecture.armv7l.value not in EMULATED_ARCHS, CIProvider.travis_ci: False, @@ -305,7 +309,7 @@ def _expected_wheels( "pp311-pypy311_pp73", ] - if EnableGroup.GraalPy in enable_groups: + if EnableGroup.GraalPy in enable_groups and include_graalpy_in_expected_wheels: python_abi_tags += [ "graalpy311-graalpy242_311_native", "graalpy312-graalpy250_312_native",