Skip to content

Commit 0c4e7f9

Browse files
committed
Implement the build_dir format variables
Signed-off-by: Cristian Le <[email protected]>
1 parent 387c790 commit 0c4e7f9

File tree

4 files changed

+43
-18
lines changed

4 files changed

+43
-18
lines changed

src/scikit_build_core/build/_file_processor.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
import pathspec
99

10+
from scikit_build_core.format import pyproject_format
11+
1012
if TYPE_CHECKING:
1113
from collections.abc import Generator, Sequence
1214

@@ -51,12 +53,7 @@ def each_unignored_file(
5153
if p != Path(".gitignore")
5254
}
5355

54-
exclude_build_dir = build_dir.format(
55-
cache_tag="*",
56-
wheel_tag="*",
57-
build_type="*",
58-
state="*",
59-
)
56+
exclude_build_dir = build_dir.format(**pyproject_format(dummy=True))
6057

6158
exclude_lines = (
6259
[*EXCLUDE_LINES, exclude_build_dir] if exclude_build_dir else EXCLUDE_LINES

src/scikit_build_core/build/wheel.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import dataclasses
44
import os
55
import shutil
6-
import sys
76
import sysconfig
87
import tempfile
98
from collections.abc import Mapping
@@ -20,6 +19,7 @@
2019
from ..builder.wheel_tag import WheelTag
2120
from ..cmake import CMake, CMaker
2221
from ..errors import FailedLiveProcessError
22+
from ..format import pyproject_format
2323
from ..settings.skbuild_read_settings import SettingsReader
2424
from ._editable import editable_redirect, libdir_to_installed, mapping_to_modules
2525
from ._init import setup_logging
@@ -279,10 +279,11 @@ def _build_wheel_impl_impl(
279279
build_dir = (
280280
Path(
281281
settings.build_dir.format(
282-
cache_tag=sys.implementation.cache_tag,
283-
wheel_tag=str(tags),
284-
build_type=settings.cmake.build_type,
285-
state=state,
282+
**pyproject_format(
283+
settings=settings,
284+
tags=tags,
285+
state=state,
286+
)
286287
)
287288
)
288289
if settings.build_dir

src/scikit_build_core/format.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@
22

33
from __future__ import annotations
44

5+
import sys
56
from typing import TYPE_CHECKING, TypedDict
67

78
if TYPE_CHECKING:
9+
from typing import Literal
10+
11+
from scikit_build_core.builder.wheel_tag import WheelTag
812
from scikit_build_core.settings.skbuild_model import ScikitBuildSettings
913

1014
__all__ = [
@@ -24,14 +28,36 @@ class PyprojectFormatter(TypedDict, total=False):
2428
in the pyproject.toml config file.
2529
"""
2630

31+
cache_tag: str
32+
wheel_tag: str
33+
build_type: str
34+
state: str
35+
2736

2837
def pyproject_format(
2938
*,
30-
settings: ScikitBuildSettings | None = None, # noqa: ARG001
39+
settings: ScikitBuildSettings | None = None,
40+
state: (
41+
Literal["sdist", "wheel", "editable", "metadata_wheel", "metadata_editable"]
42+
| None
43+
) = None,
44+
tags: WheelTag | None = None,
3145
dummy: bool = False,
3246
) -> PyprojectFormatter | dict[str, str]:
3347
"""Generate :py:class:`PyprojectFormatter` dictionary to use in f-string format."""
3448
if dummy:
3549
# Return a dict with all the known keys but with values replaced with dummy values
3650
return {key: "*" for key in PyprojectFormatter.__annotations__}
37-
return PyprojectFormatter()
51+
# First set all known values
52+
res = PyprojectFormatter(
53+
cache_tag=sys.implementation.cache_tag,
54+
)
55+
# Then compute all optional keys depending on the function input
56+
if settings is not None:
57+
res["build_type"] = settings.cmake.build_type
58+
if tags is not None:
59+
res["wheel_tag"] = str(tags)
60+
if state is not None:
61+
res["state"] = state
62+
# Construct the final dict including the always known keys
63+
return res

src/scikit_build_core/hatch/plugin.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import importlib.metadata
77
import os
88
import shutil
9-
import sys
109
import sysconfig
1110
import tempfile
1211
import typing
@@ -24,6 +23,7 @@
2423
from ..builder.get_requires import GetRequires
2524
from ..builder.wheel_tag import WheelTag
2625
from ..cmake import CMake, CMaker
26+
from ..format import pyproject_format
2727
from ..settings.skbuild_read_settings import SettingsReader
2828

2929
__all__ = ["ScikitBuildHook"]
@@ -162,10 +162,11 @@ def _initialize(self, *, build_data: dict[str, Any]) -> None:
162162
build_dir = (
163163
Path(
164164
settings.build_dir.format(
165-
cache_tag=sys.implementation.cache_tag,
166-
wheel_tag=str(tags),
167-
build_type=settings.cmake.build_type,
168-
state=state,
165+
**pyproject_format(
166+
settings=settings,
167+
tags=tags,
168+
state=state,
169+
)
169170
)
170171
)
171172
if settings.build_dir

0 commit comments

Comments
 (0)