From fe97589390e393961f880d84a9ed394db8194ed6 Mon Sep 17 00:00:00 2001 From: Paul McCarthy Date: Tue, 12 Apr 2022 14:15:42 +0100 Subject: [PATCH 01/13] fix: Don't error if no new wheels were built (this may happen if --allow-empty is active) --- cibuildwheel/util.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py index ef85a72c6..0f262729b 100644 --- a/cibuildwheel/util.py +++ b/cibuildwheel/util.py @@ -435,6 +435,11 @@ class FileReport(NamedTuple): FileReport(wheel.name, f"{(wheel.stat().st_size + 1023) // 1024:,d}") for wheel in final_contents - existing_contents ] + + if len(new_contents) == 0: + print('No new wheels') + return + max_name_len = max(len(f.name) for f in new_contents) max_size_len = max(len(f.size) for f in new_contents) n = len(new_contents) From 07013d6bafc4cc9c308242bf6bf89b181ae9d42a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 12 Apr 2022 13:29:42 +0000 Subject: [PATCH 02/13] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- cibuildwheel/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py index 0f262729b..e05aa4948 100644 --- a/cibuildwheel/util.py +++ b/cibuildwheel/util.py @@ -437,7 +437,7 @@ class FileReport(NamedTuple): ] if len(new_contents) == 0: - print('No new wheels') + print("No new wheels") return max_name_len = max(len(f.name) for f in new_contents) From 1e176a021bea2a86b8b43f5d7661bc3ee27bfc8e Mon Sep 17 00:00:00 2001 From: Paul McCarthy Date: Wed, 13 Apr 2022 10:03:14 +0100 Subject: [PATCH 03/13] RF: Remove unnecessary message --- cibuildwheel/util.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py index e05aa4948..5015d3487 100644 --- a/cibuildwheel/util.py +++ b/cibuildwheel/util.py @@ -437,7 +437,6 @@ class FileReport(NamedTuple): ] if len(new_contents) == 0: - print("No new wheels") return max_name_len = max(len(f.name) for f in new_contents) From 1f52f30fcf0df9d1f106f50850bc70d3a40b56fd Mon Sep 17 00:00:00 2001 From: Paul McCarthy Date: Wed, 13 Apr 2022 10:15:36 +0100 Subject: [PATCH 04/13] TEST: Sanity check test for --allow-empty flag --- test/test_0_basic.py | 17 +++++++++++++++++ test/utils.py | 8 ++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/test/test_0_basic.py b/test/test_0_basic.py index ec72483a3..9c3e15882 100644 --- a/test/test_0_basic.py +++ b/test/test_0_basic.py @@ -59,3 +59,20 @@ def test_build_identifiers(tmp_path): assert len(expected_wheels) == len( build_identifiers ), f"{expected_wheels} vs {build_identifiers}" + + +def test_allow_empty(tmp_path, build_frontend_env): + project_dir = tmp_path / "project" + basic_project.generate(project_dir) + + # Sanity check - --allow-empty should cause a no-op build to complete + # without error + build_frontend_env["CIBW_BUILD"] = "BUILD_NOTHING_AT_ALL" + + # build the wheels + actual_wheels = utils.cibuildwheel_run( + project_dir, add_env=build_frontend_env, + add_args=["--allow-empty"]) + + # check that the expected wheels are produced + expected_wheels = utils.expected_wheels("spam", "0.1.0") diff --git a/test/utils.py b/test/utils.py index 0248a7c15..1e5bbca65 100644 --- a/test/utils.py +++ b/test/utils.py @@ -44,7 +44,7 @@ def cibuildwheel_get_build_identifiers(project_path, env=None, *, prerelease_pyt return cmd_output.strip().split("\n") -def cibuildwheel_run(project_path, package_dir=".", env=None, add_env=None, output_dir=None): +def cibuildwheel_run(project_path, package_dir=".", env=None, add_env=None, output_dir=None, add_args=None): """ Runs cibuildwheel as a subprocess, building the project at project_path. @@ -57,6 +57,7 @@ def cibuildwheel_run(project_path, package_dir=".", env=None, add_env=None, outp :param add_env: environment used to update env :param output_dir: directory where wheels are saved. If None, a temporary directory will be used for the duration of the command. + :param add_args: Additional command-line arguments to pass to cibuildwheel. :return: list of built wheels (file names). """ if env is None: @@ -64,6 +65,9 @@ def cibuildwheel_run(project_path, package_dir=".", env=None, add_env=None, outp # If present in the host environment, remove the MACOSX_DEPLOYMENT_TARGET for consistency env.pop("MACOSX_DEPLOYMENT_TARGET", None) + if add_args is None: + add_args = [] + if add_env is not None: env.update(add_env) @@ -77,7 +81,7 @@ def cibuildwheel_run(project_path, package_dir=".", env=None, add_env=None, outp "--output-dir", str(output_dir or tmp_output_dir), str(package_dir), - ], + ] + add_args, env=env, cwd=project_path, check=True, From 82c3d4a4b781f61ac2a438567fc790312aa46dee Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 13 Apr 2022 09:16:22 +0000 Subject: [PATCH 05/13] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- test/test_0_basic.py | 4 ++-- test/utils.py | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/test/test_0_basic.py b/test/test_0_basic.py index 9c3e15882..e44058a91 100644 --- a/test/test_0_basic.py +++ b/test/test_0_basic.py @@ -71,8 +71,8 @@ def test_allow_empty(tmp_path, build_frontend_env): # build the wheels actual_wheels = utils.cibuildwheel_run( - project_dir, add_env=build_frontend_env, - add_args=["--allow-empty"]) + project_dir, add_env=build_frontend_env, add_args=["--allow-empty"] + ) # check that the expected wheels are produced expected_wheels = utils.expected_wheels("spam", "0.1.0") diff --git a/test/utils.py b/test/utils.py index 1e5bbca65..648794bdc 100644 --- a/test/utils.py +++ b/test/utils.py @@ -44,7 +44,9 @@ def cibuildwheel_get_build_identifiers(project_path, env=None, *, prerelease_pyt return cmd_output.strip().split("\n") -def cibuildwheel_run(project_path, package_dir=".", env=None, add_env=None, output_dir=None, add_args=None): +def cibuildwheel_run( + project_path, package_dir=".", env=None, add_env=None, output_dir=None, add_args=None +): """ Runs cibuildwheel as a subprocess, building the project at project_path. @@ -81,7 +83,8 @@ def cibuildwheel_run(project_path, package_dir=".", env=None, add_env=None, outp "--output-dir", str(output_dir or tmp_output_dir), str(package_dir), - ] + add_args, + ] + + add_args, env=env, cwd=project_path, check=True, From bb2d5bdab6db8a26589c513abdce2b8f8d6e4c8b Mon Sep 17 00:00:00 2001 From: Paul McCarthy Date: Wed, 13 Apr 2022 10:19:43 +0100 Subject: [PATCH 06/13] TEST: Actually evaluate test outcome --- test/test_0_basic.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_0_basic.py b/test/test_0_basic.py index e44058a91..720bf42f4 100644 --- a/test/test_0_basic.py +++ b/test/test_0_basic.py @@ -74,5 +74,5 @@ def test_allow_empty(tmp_path, build_frontend_env): project_dir, add_env=build_frontend_env, add_args=["--allow-empty"] ) - # check that the expected wheels are produced - expected_wheels = utils.expected_wheels("spam", "0.1.0") + # check that nothing was built + assert len(actual_wheels) == 0 From be9a635f9bbc97d9baf63ec82e1d24cedf5e77f5 Mon Sep 17 00:00:00 2001 From: Paul McCarthy Date: Wed, 13 Apr 2022 10:47:00 +0100 Subject: [PATCH 07/13] fix: don't assume that any configurations are active --- cibuildwheel/macos.py | 23 ++++++++++++----------- cibuildwheel/windows.py | 21 +++++++++++---------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/cibuildwheel/macos.py b/cibuildwheel/macos.py index a58186123..839e25088 100644 --- a/cibuildwheel/macos.py +++ b/cibuildwheel/macos.py @@ -276,17 +276,18 @@ def build(options: Options, tmp_path: Path) -> None: ) try: - before_all_options_identifier = python_configurations[0].identifier - before_all_options = options.build_options(before_all_options_identifier) - - if before_all_options.before_all: - log.step("Running before_all...") - env = before_all_options.environment.as_dictionary(prev_environment=os.environ) - env.setdefault("MACOSX_DEPLOYMENT_TARGET", "10.9") - before_all_prepared = prepare_command( - before_all_options.before_all, project=".", package=before_all_options.package_dir - ) - shell(before_all_prepared, env=env) + if len(python_configurations) > 0: + before_all_options_identifier = python_configurations[0].identifier + before_all_options = options.build_options(before_all_options_identifier) + + if before_all_options.before_all: + log.step("Running before_all...") + env = before_all_options.environment.as_dictionary(prev_environment=os.environ) + env.setdefault("MACOSX_DEPLOYMENT_TARGET", "10.9") + before_all_prepared = prepare_command( + before_all_options.before_all, project=".", package=before_all_options.package_dir + ) + shell(before_all_prepared, env=env) for config in python_configurations: build_options = options.build_options(config.identifier) diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py index 86d01fa82..874445faf 100644 --- a/cibuildwheel/windows.py +++ b/cibuildwheel/windows.py @@ -235,16 +235,17 @@ def build(options: Options, tmp_path: Path) -> None: ) try: - before_all_options_identifier = python_configurations[0].identifier - before_all_options = options.build_options(before_all_options_identifier) - - if before_all_options.before_all: - log.step("Running before_all...") - env = before_all_options.environment.as_dictionary(prev_environment=os.environ) - before_all_prepared = prepare_command( - before_all_options.before_all, project=".", package=options.globals.package_dir - ) - shell(before_all_prepared, env=env) + if len(python_configurations) > 0: + before_all_options_identifier = python_configurations[0].identifier + before_all_options = options.build_options(before_all_options_identifier) + + if before_all_options.before_all: + log.step("Running before_all...") + env = before_all_options.environment.as_dictionary(prev_environment=os.environ) + before_all_prepared = prepare_command( + before_all_options.before_all, project=".", package=options.globals.package_dir + ) + shell(before_all_prepared, env=env) for config in python_configurations: build_options = options.build_options(config.identifier) From d061fc796725216a9e7163e8952bc67accaeb15a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 13 Apr 2022 09:48:08 +0000 Subject: [PATCH 08/13] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- cibuildwheel/macos.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cibuildwheel/macos.py b/cibuildwheel/macos.py index 839e25088..71eea5e71 100644 --- a/cibuildwheel/macos.py +++ b/cibuildwheel/macos.py @@ -285,7 +285,9 @@ def build(options: Options, tmp_path: Path) -> None: env = before_all_options.environment.as_dictionary(prev_environment=os.environ) env.setdefault("MACOSX_DEPLOYMENT_TARGET", "10.9") before_all_prepared = prepare_command( - before_all_options.before_all, project=".", package=before_all_options.package_dir + before_all_options.before_all, + project=".", + package=before_all_options.package_dir, ) shell(before_all_prepared, env=env) From 945d4f66352109a0eaf383d85f851295ee058fa0 Mon Sep 17 00:00:00 2001 From: Paul McCarthy Date: Thu, 14 Apr 2022 10:21:21 +0100 Subject: [PATCH 09/13] test: don't modify build_frontend_env, as it appears to be global --- test/test_0_basic.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/test_0_basic.py b/test/test_0_basic.py index 720bf42f4..9080a30d3 100644 --- a/test/test_0_basic.py +++ b/test/test_0_basic.py @@ -67,11 +67,13 @@ def test_allow_empty(tmp_path, build_frontend_env): # Sanity check - --allow-empty should cause a no-op build to complete # without error - build_frontend_env["CIBW_BUILD"] = "BUILD_NOTHING_AT_ALL" - - # build the wheels actual_wheels = utils.cibuildwheel_run( - project_dir, add_env=build_frontend_env, add_args=["--allow-empty"] + project_dir, + add_env={ + "CIBW_BUILD": "BUILD_NOTHING_AT_ALL", + **build_frontend_env + }, + add_args=["--allow-empty"] ) # check that nothing was built From 30627ae04fa983c79e69291c27907647116b5933 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 14 Apr 2022 09:22:13 +0000 Subject: [PATCH 10/13] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- test/test_0_basic.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/test/test_0_basic.py b/test/test_0_basic.py index 9080a30d3..733c65468 100644 --- a/test/test_0_basic.py +++ b/test/test_0_basic.py @@ -69,11 +69,8 @@ def test_allow_empty(tmp_path, build_frontend_env): # without error actual_wheels = utils.cibuildwheel_run( project_dir, - add_env={ - "CIBW_BUILD": "BUILD_NOTHING_AT_ALL", - **build_frontend_env - }, - add_args=["--allow-empty"] + add_env={"CIBW_BUILD": "BUILD_NOTHING_AT_ALL", **build_frontend_env}, + add_args=["--allow-empty"], ) # check that nothing was built From baf3ead650ea2750e0df6a7b5919088483dc6665 Mon Sep 17 00:00:00 2001 From: Paul McCarthy Date: Tue, 19 Apr 2022 16:00:12 +0100 Subject: [PATCH 11/13] style: exit early to reduce indentation --- cibuildwheel/macos.py | 30 ++++++++++++++++-------------- cibuildwheel/windows.py | 24 +++++++++++++----------- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/cibuildwheel/macos.py b/cibuildwheel/macos.py index 71eea5e71..de6ee7ae5 100644 --- a/cibuildwheel/macos.py +++ b/cibuildwheel/macos.py @@ -275,21 +275,23 @@ def build(options: Options, tmp_path: Path) -> None: options.globals.build_selector, options.globals.architectures ) + if len(python_configurations) == 0: + return + try: - if len(python_configurations) > 0: - before_all_options_identifier = python_configurations[0].identifier - before_all_options = options.build_options(before_all_options_identifier) - - if before_all_options.before_all: - log.step("Running before_all...") - env = before_all_options.environment.as_dictionary(prev_environment=os.environ) - env.setdefault("MACOSX_DEPLOYMENT_TARGET", "10.9") - before_all_prepared = prepare_command( - before_all_options.before_all, - project=".", - package=before_all_options.package_dir, - ) - shell(before_all_prepared, env=env) + before_all_options_identifier = python_configurations[0].identifier + before_all_options = options.build_options(before_all_options_identifier) + + if before_all_options.before_all: + log.step("Running before_all...") + env = before_all_options.environment.as_dictionary(prev_environment=os.environ) + env.setdefault("MACOSX_DEPLOYMENT_TARGET", "10.9") + before_all_prepared = prepare_command( + before_all_options.before_all, + project=".", + package=before_all_options.package_dir, + ) + shell(before_all_prepared, env=env) for config in python_configurations: build_options = options.build_options(config.identifier) diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py index 874445faf..13b5c0c3d 100644 --- a/cibuildwheel/windows.py +++ b/cibuildwheel/windows.py @@ -234,18 +234,20 @@ def build(options: Options, tmp_path: Path) -> None: options.globals.build_selector, options.globals.architectures ) + if len(python_configurations) == 0: + return + try: - if len(python_configurations) > 0: - before_all_options_identifier = python_configurations[0].identifier - before_all_options = options.build_options(before_all_options_identifier) - - if before_all_options.before_all: - log.step("Running before_all...") - env = before_all_options.environment.as_dictionary(prev_environment=os.environ) - before_all_prepared = prepare_command( - before_all_options.before_all, project=".", package=options.globals.package_dir - ) - shell(before_all_prepared, env=env) + before_all_options_identifier = python_configurations[0].identifier + before_all_options = options.build_options(before_all_options_identifier) + + if before_all_options.before_all: + log.step("Running before_all...") + env = before_all_options.environment.as_dictionary(prev_environment=os.environ) + before_all_prepared = prepare_command( + before_all_options.before_all, project=".", package=options.globals.package_dir + ) + shell(before_all_prepared, env=env) for config in python_configurations: build_options = options.build_options(config.identifier) From abedb687838e7ea778ae03294ecb8698a21a3763 Mon Sep 17 00:00:00 2001 From: Paul McCarthy Date: Tue, 19 Apr 2022 16:02:23 +0100 Subject: [PATCH 12/13] test: build_frontend_env fixture not required for --allow-empy test. Small style tweak --- test/test_0_basic.py | 4 ++-- test/utils.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/test_0_basic.py b/test/test_0_basic.py index 733c65468..2d2e8d97f 100644 --- a/test/test_0_basic.py +++ b/test/test_0_basic.py @@ -61,7 +61,7 @@ def test_build_identifiers(tmp_path): ), f"{expected_wheels} vs {build_identifiers}" -def test_allow_empty(tmp_path, build_frontend_env): +def test_allow_empty(tmp_path): project_dir = tmp_path / "project" basic_project.generate(project_dir) @@ -69,7 +69,7 @@ def test_allow_empty(tmp_path, build_frontend_env): # without error actual_wheels = utils.cibuildwheel_run( project_dir, - add_env={"CIBW_BUILD": "BUILD_NOTHING_AT_ALL", **build_frontend_env}, + add_env={"CIBW_BUILD": "BUILD_NOTHING_AT_ALL"}, add_args=["--allow-empty"], ) diff --git a/test/utils.py b/test/utils.py index 648794bdc..86df69a40 100644 --- a/test/utils.py +++ b/test/utils.py @@ -83,8 +83,8 @@ def cibuildwheel_run( "--output-dir", str(output_dir or tmp_output_dir), str(package_dir), - ] - + add_args, + *add_args, + ], env=env, cwd=project_path, check=True, From f08f08c04df43d8e54d2e6e598d7909e4af00e01 Mon Sep 17 00:00:00 2001 From: Paul McCarthy Date: Thu, 21 Apr 2022 10:34:11 +0100 Subject: [PATCH 13/13] style: spurious comma --- cibuildwheel/macos.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cibuildwheel/macos.py b/cibuildwheel/macos.py index de6ee7ae5..d27703152 100644 --- a/cibuildwheel/macos.py +++ b/cibuildwheel/macos.py @@ -287,9 +287,7 @@ def build(options: Options, tmp_path: Path) -> None: env = before_all_options.environment.as_dictionary(prev_environment=os.environ) env.setdefault("MACOSX_DEPLOYMENT_TARGET", "10.9") before_all_prepared = prepare_command( - before_all_options.before_all, - project=".", - package=before_all_options.package_dir, + before_all_options.before_all, project=".", package=before_all_options.package_dir ) shell(before_all_prepared, env=env)