Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/scikit_build_core/builder/_load_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,8 @@ def __iter__(self) -> Iterator[str]:
yield from self.project

# Iterate over the keys of the dynamic metadata providers
yield from self.providers
# GraalPy needs it to be a copy
yield from list(self.providers)

def __len__(self) -> int:
return len(self.project) + len(self.providers)
Expand Down
18 changes: 12 additions & 6 deletions src/scikit_build_core/builder/sysconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,12 +193,18 @@
Return the ABI flags for the current Python interpreter. Derived from
``packaging.tags.sys_tags()`` since that works on Windows.
"""

most_compatible = next(iter(packaging.tags.sys_tags()))
full_abi = most_compatible.abi
vers = packaging.tags.interpreter_version()
abi_flags = full_abi[full_abi.find(vers) + len(vers) :]
return "".join(sorted(abi_flags))
abi_flags: str | None = sysconfig.get_config_var("ABIFLAGS")
if abi_flags:
return abi_flags

Check warning on line 198 in src/scikit_build_core/builder/sysconfig.py

View check run for this annotation

Codecov / codecov/patch

src/scikit_build_core/builder/sysconfig.py#L198

Added line #L198 was not covered by tests

if sys.implementation.name == "cpython" and sys.platform.startswith("win32"):
most_compatible = next(iter(packaging.tags.sys_tags()))
full_abi = most_compatible.abi
vers = packaging.tags.interpreter_version()
abi_flags = full_abi[full_abi.find(vers) + len(vers) :]
return "".join(sorted(abi_flags))

return ""


def info_print(
Expand Down
6 changes: 4 additions & 2 deletions src/scikit_build_core/file_api/model/codemodel.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,14 +94,16 @@ class Sysroot:
@dataclasses.dataclass(frozen=True)
class Link:
language: str
commandFragments: List[CommandFragment]
commandFragments: Optional[List[CommandFragment]]
lto: Optional[bool] = None
sysroot: Optional[Sysroot] = None


@dataclasses.dataclass(frozen=True)
class Archive:
commandFragments: List[CommandFragment] = dataclasses.field(default_factory=list)
commandFragments: Optional[List[CommandFragment]] = dataclasses.field(
default_factory=list
)
lto: Optional[bool] = None


Expand Down
3 changes: 3 additions & 0 deletions tests/test_setuptools_abi3.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
@pytest.mark.skipif(
sys.implementation.name == "pypy", reason="pypy does not support abi3"
)
@pytest.mark.skipif(
sys.implementation.name == "graalpy", reason="graalpy does not support abi3"
)
@pytest.mark.skipif(
sysconfig.get_config_var("Py_GIL_DISABLED"),
reason="Free-threaded Python does not support abi3",
Expand Down