Skip to content

Commit a08577e

Browse files
committed
Add wheel repair dependencies
Signed-off-by: Cristian Le <[email protected]>
1 parent 12ad924 commit a08577e

File tree

6 files changed

+45
-10
lines changed

6 files changed

+45
-10
lines changed

pyproject.toml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ test-hatchling = [
6868
test-meta = [
6969
"hatch-fancy-pypi-readme>=22.3",
7070
"setuptools-scm",
71+
"auditwheel; platform_system=='Linux'",
72+
"delocate; platform_system=='Darwin'",
7173
]
7274
test-numpy = [
7375
"numpy; python_version<'3.13' and platform_python_implementation!='PyPy'",
@@ -179,7 +181,15 @@ disallow_untyped_defs = true
179181
disallow_incomplete_defs = true
180182

181183
[[tool.mypy.overrides]]
182-
module = ["numpy", "pathspec", "setuptools_scm", "hatch_fancy_pypi_readme", "virtualenv"]
184+
module = [
185+
"numpy",
186+
"pathspec",
187+
"setuptools_scm",
188+
"hatch_fancy_pypi_readme",
189+
"virtualenv",
190+
"auditwheel.*",
191+
"delocate.*",
192+
]
183193
ignore_missing_imports = true
184194

185195

src/scikit_build_core/build/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ def get_requires_for_build_sdist(
148148
return [
149149
*cmake_requires,
150150
*requires.dynamic_metadata(),
151+
*requires.other_dynamic_requires(),
151152
]
152153

153154

@@ -166,6 +167,7 @@ def get_requires_for_build_wheel(
166167
return [
167168
*cmake_requires,
168169
*requires.dynamic_metadata(),
170+
*requires.other_dynamic_requires(),
169171
]
170172

171173

@@ -184,4 +186,5 @@ def get_requires_for_build_editable(
184186
return [
185187
*cmake_requires,
186188
*requires.dynamic_metadata(),
189+
*requires.other_dynamic_requires(),
187190
]

src/scikit_build_core/builder/__main__.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,12 @@ def main() -> None:
3131

3232
if Path("pyproject.toml").is_file():
3333
req = GetRequires()
34-
all_req = [*req.cmake(), *req.ninja(), *req.dynamic_metadata()]
34+
all_req = [
35+
*req.cmake(),
36+
*req.ninja(),
37+
*req.dynamic_metadata(),
38+
*req.other_dynamic_requires(),
39+
]
3540
rich_print(f"{{bold.red}}Get Requires:{{normal}} {all_req!r}")
3641

3742
ip_program_search(color="magenta")

src/scikit_build_core/builder/get_requires.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import functools
55
import importlib.util
66
import os
7+
import platform
8+
import shutil
79
import sysconfig
810
from typing import TYPE_CHECKING, Literal
911

@@ -137,17 +139,28 @@ def ninja(self) -> Generator[str, None, None]:
137139
return
138140
yield f"ninja{ninja_verset}"
139141

140-
def dynamic_metadata(self) -> Generator[str, None, None]:
141-
if self.settings.fail:
142-
return
143-
142+
def other_dynamic_requires(self) -> Generator[str, None, None]:
144143
for build_require in self.settings.build.requires:
145144
yield build_require.format(
146145
**pyproject_format(
147146
settings=self.settings,
148147
)
149148
)
150149

150+
if self.settings.wheel.repair:
151+
platform_system = platform.system()
152+
if platform_system == "Linux":
153+
yield "auditwheel"
154+
patchelf_path = shutil.which("patchelf")
155+
if patchelf_path is None:
156+
yield "patchelf"
157+
elif platform_system == "Darwin":
158+
yield "delocate"
159+
160+
def dynamic_metadata(self) -> Generator[str, None, None]:
161+
if self.settings.fail:
162+
return
163+
151164
for dynamic_metadata in self.settings.metadata.values():
152165
if "provider" in dynamic_metadata:
153166
config = dynamic_metadata.copy()

src/scikit_build_core/hatch/plugin.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,11 @@ def dependencies(self) -> list[str]:
111111

112112
# These are only injected if cmake is required
113113
cmake_requires = [*requires.cmake(), *requires.ninja()] if required else []
114-
return [*cmake_requires, *requires.dynamic_metadata()]
114+
return [
115+
*cmake_requires,
116+
*requires.dynamic_metadata(),
117+
*requires.other_dynamic_requires(),
118+
]
115119

116120
def initialize(self, version: str, build_data: dict[str, Any]) -> None:
117121
if version == "editable":

tests/test_dynamic_metadata.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -371,18 +371,18 @@ def test_build_requires_field(override, monkeypatch) -> None:
371371
settings_reader.validate_may_exit()
372372

373373
if override is None:
374-
assert set(GetRequires().dynamic_metadata()) == {
374+
assert set(GetRequires().other_dynamic_requires()) == {
375375
"foo",
376376
}
377377
elif override == "env":
378378
# evaluate ../foo as uri
379379
foo_path = pyproject_path.absolute().parent.parent / "foo"
380380
foo_path = foo_path.absolute()
381-
assert set(GetRequires().dynamic_metadata()) == {
381+
assert set(GetRequires().other_dynamic_requires()) == {
382382
f"foo @ {foo_path.as_uri()}",
383383
}
384384
elif override == "sdist":
385-
assert set(GetRequires().dynamic_metadata()) == {
385+
assert set(GetRequires().other_dynamic_requires()) == {
386386
# TODO: Check if special handling should be done for sdist
387387
"foo",
388388
}

0 commit comments

Comments
 (0)