From ff45d5c22fb561de7e0af2297d67744aedd54482 Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Tue, 30 Sep 2025 04:23:04 +0530 Subject: [PATCH 1/5] Distinguish between `pyodide-build` and `pypa/build` --- cibuildwheel/frontend.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cibuildwheel/frontend.py b/cibuildwheel/frontend.py index 7973354fe..add8ad838 100644 --- a/cibuildwheel/frontend.py +++ b/cibuildwheel/frontend.py @@ -1,4 +1,5 @@ import dataclasses +import os import shlex import typing from collections.abc import Sequence @@ -37,6 +38,14 @@ def options_summary(self) -> str | dict[str, str]: def _get_verbosity_flags(level: int, frontend: BuildFrontendName) -> list[str]: + # The pseudo build-frontend provided by pyodide-build does not yet support + # tuning its verbosity level, see https://github.com/pyodide/pyodide-build/issues/222 + # We can use the "PYODIDE" env var to detect if we're running in that context. + if os.environ.get("PYODIDE") == "1": + if level != 0: + log.warning(f"build_verbosity {level} is not supported for Pyodide builds. Ignoring.") + return [] + if level < 0: if frontend == "pip": return ["-" + -level * "q"] From adde7d4d14138604394544213c658c1dded288d2 Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Tue, 30 Sep 2025 04:28:40 +0530 Subject: [PATCH 2/5] Try to add a test, not sure if this is correct --- unit_test/main_tests/main_options_test.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/unit_test/main_tests/main_options_test.py b/unit_test/main_tests/main_options_test.py index 45cbe0562..8bc978e91 100644 --- a/unit_test/main_tests/main_options_test.py +++ b/unit_test/main_tests/main_options_test.py @@ -390,6 +390,22 @@ def test_build_verbosity( assert build_options.build_verbosity == expected_verbosity +@pytest.mark.parametrize("build_verbosity", [0, 1, 2, -1]) +@pytest.mark.usefixtures("platform", "intercepted_build_args") +def test_build_verbosity_pyodide(build_verbosity, monkeypatch, capsys): + monkeypatch.setenv("PYODIDE", "1") + monkeypatch.setenv("CIBW_BUILD_VERBOSITY", str(build_verbosity)) + + main() + + _, err = capsys.readouterr() + if build_verbosity != 0: + assert "build_verbosity" in err + assert "not supported for Pyodide builds" in err + else: + assert "not supported for Pyodide builds" not in err + + @pytest.mark.parametrize("platform_specific", [False, True]) def test_config_settings(platform_specific, platform, intercepted_build_args, monkeypatch): config_settings = ( From e7173a05dade1b55debe9b36f7d960b45ff5c916 Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Tue, 30 Sep 2025 16:11:39 +0530 Subject: [PATCH 3/5] Redo test --- unit_test/main_tests/main_options_test.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/unit_test/main_tests/main_options_test.py b/unit_test/main_tests/main_options_test.py index 8bc978e91..865d68851 100644 --- a/unit_test/main_tests/main_options_test.py +++ b/unit_test/main_tests/main_options_test.py @@ -8,7 +8,11 @@ from cibuildwheel.__main__ import main from cibuildwheel.environment import ParsedEnvironment -from cibuildwheel.frontend import _split_config_settings, parse_config_settings +from cibuildwheel.frontend import ( + _get_verbosity_flags, + _split_config_settings, + parse_config_settings, +) from cibuildwheel.options import BuildOptions, _get_pinned_container_images from cibuildwheel.selector import BuildSelector, EnableGroup from cibuildwheel.util import resources @@ -390,16 +394,15 @@ def test_build_verbosity( assert build_options.build_verbosity == expected_verbosity -@pytest.mark.parametrize("build_verbosity", [0, 1, 2, -1]) -@pytest.mark.usefixtures("platform", "intercepted_build_args") -def test_build_verbosity_pyodide(build_verbosity, monkeypatch, capsys): +@pytest.mark.parametrize("verbosity", [0, 1, 2, -1, 3]) +def test_get_verbosity_flags_pyodide(monkeypatch, capsys, verbosity): monkeypatch.setenv("PYODIDE", "1") - monkeypatch.setenv("CIBW_BUILD_VERBOSITY", str(build_verbosity)) - main() + assert _get_verbosity_flags(verbosity, "build") == [] _, err = capsys.readouterr() - if build_verbosity != 0: + + if verbosity != 0: assert "build_verbosity" in err assert "not supported for Pyodide builds" in err else: From c414000e2dae6866b30ed235b1ee585a41d8992b Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Tue, 30 Sep 2025 16:12:30 +0530 Subject: [PATCH 4/5] (Debug) add "PYODIDE" environment variable --- cibuildwheel/frontend.py | 6 ++++++ cibuildwheel/platforms/pyodide.py | 2 ++ 2 files changed, 8 insertions(+) diff --git a/cibuildwheel/frontend.py b/cibuildwheel/frontend.py index add8ad838..b8955a8d4 100644 --- a/cibuildwheel/frontend.py +++ b/cibuildwheel/frontend.py @@ -1,6 +1,7 @@ import dataclasses import os import shlex +import sys import typing from collections.abc import Sequence from typing import Literal, Self, get_args @@ -44,6 +45,11 @@ def _get_verbosity_flags(level: int, frontend: BuildFrontendName) -> list[str]: if os.environ.get("PYODIDE") == "1": if level != 0: log.warning(f"build_verbosity {level} is not supported for Pyodide builds. Ignoring.") + + # debug; if this code path is called correctly we should exit + sys.exit( + "Exiting due to PYODIDE=1 environment variable; verbosity flags are not supported." + ) return [] if level < 0: diff --git a/cibuildwheel/platforms/pyodide.py b/cibuildwheel/platforms/pyodide.py index 60d707078..625699f0a 100644 --- a/cibuildwheel/platforms/pyodide.py +++ b/cibuildwheel/platforms/pyodide.py @@ -414,6 +414,7 @@ def build(options: Options, tmp_path: Path) -> None: shell(before_build_prepared, env=env) log.step("Building wheel...") + env["PYODIDE"] = "1" extra_flags = get_build_frontend_extra_flags( build_frontend, build_options.build_verbosity, build_options.config_settings @@ -423,6 +424,7 @@ def build(options: Options, tmp_path: Path) -> None: if constraints_path: combine_constraints(build_env, constraints_path, identifier_tmp_dir) build_env["VIRTUALENV_PIP"] = pip_version + build_env["PYODIDE"] = "1" call( "pyodide", "build", From 8106c5af24d0505be82734e2124858c8a45412c2 Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Tue, 30 Sep 2025 16:33:04 +0530 Subject: [PATCH 5/5] The code path is being called correctly indeed --- cibuildwheel/frontend.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/cibuildwheel/frontend.py b/cibuildwheel/frontend.py index b8955a8d4..827cdbd5e 100644 --- a/cibuildwheel/frontend.py +++ b/cibuildwheel/frontend.py @@ -1,7 +1,6 @@ import dataclasses import os import shlex -import sys import typing from collections.abc import Sequence from typing import Literal, Self, get_args @@ -46,10 +45,6 @@ def _get_verbosity_flags(level: int, frontend: BuildFrontendName) -> list[str]: if level != 0: log.warning(f"build_verbosity {level} is not supported for Pyodide builds. Ignoring.") - # debug; if this code path is called correctly we should exit - sys.exit( - "Exiting due to PYODIDE=1 environment variable; verbosity flags are not supported." - ) return [] if level < 0: