176 lines
5.0 KiB
Python
176 lines
5.0 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
import textwrap
|
|
from pathlib import Path
|
|
from tempfile import TemporaryDirectory
|
|
from test.test_projects.base import TestProject
|
|
|
|
from . import test_projects, utils
|
|
|
|
# utilities
|
|
|
|
|
|
def make_sdist(project: TestProject, working_dir: Path) -> Path:
|
|
project_dir = working_dir / "project"
|
|
project_dir.mkdir(parents=True, exist_ok=True)
|
|
project.generate(project_dir)
|
|
|
|
sdist_dir = working_dir / "sdist"
|
|
subprocess.run(
|
|
[sys.executable, "-m", "build", "--sdist", "--outdir", str(sdist_dir), str(project_dir)],
|
|
check=True,
|
|
)
|
|
|
|
return next(sdist_dir.glob("*.tar.gz"))
|
|
|
|
|
|
def cibuildwheel_from_sdist_run(sdist_path, add_env=None, config_file=None):
|
|
env = os.environ.copy()
|
|
|
|
if add_env:
|
|
env.update(add_env)
|
|
|
|
with TemporaryDirectory() as tmp_output_dir:
|
|
subprocess.run(
|
|
[
|
|
sys.executable,
|
|
"-m",
|
|
"cibuildwheel",
|
|
*(["--config-file", config_file] if config_file else []),
|
|
"--output-dir",
|
|
str(tmp_output_dir),
|
|
str(sdist_path),
|
|
],
|
|
env=env,
|
|
check=True,
|
|
)
|
|
return os.listdir(tmp_output_dir)
|
|
|
|
|
|
# tests
|
|
|
|
|
|
def test_simple(tmp_path):
|
|
basic_project = test_projects.new_c_project()
|
|
|
|
# make an sdist of the project
|
|
sdist_dir = tmp_path / "sdist"
|
|
sdist_dir.mkdir()
|
|
sdist_path = make_sdist(basic_project, sdist_dir)
|
|
|
|
# build the wheels from sdist
|
|
actual_wheels = cibuildwheel_from_sdist_run(
|
|
sdist_path,
|
|
add_env={"CIBW_BUILD": "cp39-*"},
|
|
)
|
|
|
|
# check that the expected wheels are produced
|
|
expected_wheels = [w for w in utils.expected_wheels("spam", "0.1.0") if "cp39" in w]
|
|
assert set(actual_wheels) == set(expected_wheels)
|
|
|
|
|
|
def test_external_config_file_argument(tmp_path, capfd):
|
|
basic_project = test_projects.new_c_project()
|
|
|
|
# make an sdist of the project
|
|
sdist_dir = tmp_path / "sdist"
|
|
sdist_dir.mkdir()
|
|
sdist_path = make_sdist(basic_project, sdist_dir)
|
|
|
|
# add a config file
|
|
config_file = tmp_path / "config.toml"
|
|
config_file.write_text(
|
|
textwrap.dedent(
|
|
"""
|
|
[tool.cibuildwheel]
|
|
before-all = 'echo "test log statement from before-all"'
|
|
"""
|
|
)
|
|
)
|
|
|
|
# build the wheels from sdist
|
|
actual_wheels = cibuildwheel_from_sdist_run(
|
|
sdist_path,
|
|
add_env={"CIBW_BUILD": "cp39-*"},
|
|
config_file=str(config_file),
|
|
)
|
|
|
|
# check that the expected wheels are produced
|
|
expected_wheels = [w for w in utils.expected_wheels("spam", "0.1.0") if "cp39" in w]
|
|
assert set(actual_wheels) == set(expected_wheels)
|
|
|
|
# check that before-all was run
|
|
captured = capfd.readouterr()
|
|
assert "test log statement from before-all" in captured.out
|
|
|
|
|
|
def test_config_in_pyproject_toml(tmp_path, capfd):
|
|
# make a project with a pyproject.toml
|
|
project = test_projects.new_c_project()
|
|
project.files["pyproject.toml"] = textwrap.dedent(
|
|
"""
|
|
[tool.cibuildwheel]
|
|
before-build = 'echo "test log statement from before-build 8419"'
|
|
"""
|
|
)
|
|
|
|
# make an sdist of the project
|
|
sdist_dir = tmp_path / "sdist"
|
|
sdist_dir.mkdir()
|
|
sdist_path = make_sdist(project, sdist_dir)
|
|
|
|
# build the wheels from sdist
|
|
actual_wheels = cibuildwheel_from_sdist_run(
|
|
sdist_path,
|
|
add_env={"CIBW_BUILD": "cp39-*"},
|
|
)
|
|
|
|
# check that the expected wheels are produced
|
|
expected_wheels = [w for w in utils.expected_wheels("spam", "0.1.0") if "cp39" in w]
|
|
assert set(actual_wheels) == set(expected_wheels)
|
|
|
|
# check that before-build was run
|
|
captured = capfd.readouterr()
|
|
assert "test log statement from before-build 8419" in captured.out
|
|
|
|
|
|
def test_internal_config_file_argument(tmp_path, capfd):
|
|
# make a project with a config file inside
|
|
project = test_projects.new_c_project(
|
|
setup_cfg_add="include_package_data = True",
|
|
)
|
|
project.files["wheel_build_config.toml"] = textwrap.dedent(
|
|
"""
|
|
[tool.cibuildwheel]
|
|
before-all = 'echo "test log statement from before-all 1829"'
|
|
"""
|
|
)
|
|
project.files["MANIFEST.in"] = textwrap.dedent(
|
|
"""
|
|
include wheel_build_config.toml
|
|
"""
|
|
)
|
|
|
|
# make an sdist of the project
|
|
sdist_dir = tmp_path / "sdist"
|
|
sdist_dir.mkdir()
|
|
sdist_path = make_sdist(project, sdist_dir)
|
|
|
|
# build the wheels from sdist, referencing the config file inside
|
|
actual_wheels = cibuildwheel_from_sdist_run(
|
|
sdist_path,
|
|
add_env={"CIBW_BUILD": "cp39-*"},
|
|
config_file="{package}/wheel_build_config.toml",
|
|
)
|
|
|
|
# check that the expected wheels are produced
|
|
expected_wheels = [w for w in utils.expected_wheels("spam", "0.1.0") if "cp39" in w]
|
|
assert set(actual_wheels) == set(expected_wheels)
|
|
|
|
# check that before-all was run
|
|
captured = capfd.readouterr()
|
|
assert "test log statement from before-all 1829" in captured.out
|