Skip to content

Commit 14898fb

Browse files
committed
Add wheel repair dependencies
Signed-off-by: Cristian Le <git@lecris.dev>
1 parent c4d8fda commit 14898fb

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
@@ -69,6 +69,8 @@ test-hatchling = [
6969
test-meta = [
7070
"hatch-fancy-pypi-readme>=22.3",
7171
"setuptools-scm",
72+
"auditwheel; platform_system=='Linux'",
73+
"delocate; platform_system=='Darwin'",
7274
]
7375
test-numpy = [
7476
"numpy; python_version<'3.14' and platform_python_implementation!='PyPy' and (platform_system != 'Windows' or platform_machine != 'ARM64')",
@@ -191,7 +193,15 @@ disallow_untyped_defs = true
191193
disallow_incomplete_defs = true
192194

193195
[[tool.mypy.overrides]]
194-
module = ["numpy", "pathspec", "setuptools_scm", "hatch_fancy_pypi_readme", "virtualenv"]
196+
module = [
197+
"numpy",
198+
"pathspec",
199+
"setuptools_scm",
200+
"hatch_fancy_pypi_readme",
201+
"virtualenv",
202+
"auditwheel.*",
203+
"delocate.*",
204+
]
195205
ignore_missing_imports = true
196206

197207

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
@@ -113,7 +113,11 @@ def dependencies(self) -> list[str]:
113113

114114
# These are only injected if cmake is required
115115
cmake_requires = [*requires.cmake(), *requires.ninja()] if required else []
116-
return [*cmake_requires, *requires.dynamic_metadata()]
116+
return [
117+
*cmake_requires,
118+
*requires.dynamic_metadata(),
119+
*requires.other_dynamic_requires(),
120+
]
117121

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

tests/test_dynamic_metadata.py

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

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

0 commit comments

Comments
 (0)