From a1e3efb81c738c54142149bf8e04a7818645e279 Mon Sep 17 00:00:00 2001 From: Olena <107187316+OlenaYefymenko@users.noreply.github.com> Date: Wed, 24 Jan 2024 21:19:24 +0200 Subject: [PATCH] fix: correct path when building sdist package (#1687) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Edit path when building sdist package This patch changes the working directory from the temp to the project when building sdist package.This resolves issues with relative paths in configuration files. Resolves #1683 * Add a test for the `package` placeholder exposure The change extends the existing test — `test_simple`. It checks that the temporary wheel build directory is the project root extracted from the source distribution. It does so by testing the presence of the `setup.py` in the current working directory, as a side effect. * Edit quotes in the CLI argument for Windows compatibility Co-authored-by: Sviatoslav Sydorenko (Святослав Сидоренко) * Use single quotes to avoid syntax errors from f-string Co-authored-by: Sviatoslav Sydorenko (Святослав Сидоренко) --------- Co-authored-by: Sviatoslav Sydorenko (Святослав Сидоренко) --- cibuildwheel/__main__.py | 2 +- test/test_from_sdist.py | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/cibuildwheel/__main__.py b/cibuildwheel/__main__.py index c6a2fdeaa..03b471447 100644 --- a/cibuildwheel/__main__.py +++ b/cibuildwheel/__main__.py @@ -160,7 +160,7 @@ def main() -> None: # This is now the new package dir args.package_dir = project_dir.resolve() - with chdir(temp_dir): + with chdir(project_dir): build_in_directory(args) finally: # avoid https://github.com/python/cpython/issues/86962 by performing diff --git a/test/test_from_sdist.py b/test/test_from_sdist.py index f0b7e93e8..0021a2acb 100644 --- a/test/test_from_sdist.py +++ b/test/test_from_sdist.py @@ -61,10 +61,23 @@ def test_simple(tmp_path): sdist_dir.mkdir() sdist_path = make_sdist(basic_project, sdist_dir) + setup_py_assertion_snippet = textwrap.dedent( + """ + import os + + assert os.path.exists('setup.py') + assert os.path.exists('{package}/setup.py') + """, + ) + setup_py_assertion_cmd = f'python3 -c "{setup_py_assertion_snippet !s}"' + # build the wheels from sdist actual_wheels = cibuildwheel_from_sdist_run( sdist_path, - add_env={"CIBW_BUILD": "cp39-*"}, + add_env={ + "CIBW_BEFORE_BUILD": setup_py_assertion_cmd, + "CIBW_BUILD": "cp39-*", + }, ) # check that the expected wheels are produced