|
12 | 12 | from pathlib import Path
|
13 | 13 | from typing import TYPE_CHECKING, Any
|
14 | 14 |
|
| 15 | +from packaging.version import Version |
| 16 | + |
15 | 17 | from . import __version__
|
16 | 18 | from ._logging import logger
|
17 | 19 | from ._shutil import Run
|
18 |
| -from .errors import CMakeConfigError, CMakeNotFoundError, FailedLiveProcessError |
| 20 | +from .errors import ( |
| 21 | + CMakeConfigError, |
| 22 | + CMakeNotFoundError, |
| 23 | + CMakeVersionError, |
| 24 | + FailedLiveProcessError, |
| 25 | +) |
19 | 26 | from .program_search import Program, best_program, get_cmake_program, get_cmake_programs
|
20 | 27 |
|
21 | 28 | if TYPE_CHECKING:
|
22 | 29 | from collections.abc import Generator, Iterable, Mapping, Sequence
|
23 | 30 |
|
24 | 31 | from packaging.specifiers import SpecifierSet
|
25 |
| - from packaging.version import Version |
26 | 32 |
|
27 | 33 | from ._compat.typing import Self
|
28 | 34 |
|
@@ -222,12 +228,19 @@ def get_generator(self, *args: str) -> str | None:
|
222 | 228 | def configure(
|
223 | 229 | self,
|
224 | 230 | *,
|
| 231 | + preset: str | None = None, |
225 | 232 | defines: Mapping[str, str | os.PathLike[str] | bool] | None = None,
|
226 | 233 | cmake_args: Sequence[str] = (),
|
227 | 234 | ) -> None:
|
228 | 235 | _cmake_args = self._compute_cmake_args(defines or {})
|
229 | 236 | all_args = [*_cmake_args, *cmake_args]
|
230 | 237 |
|
| 238 | + if preset: |
| 239 | + if self.cmake.version < Version("3.19"): |
| 240 | + msg = f"CMake version ({self.cmake.version}) is too old to support presets." |
| 241 | + raise CMakeVersionError(msg) |
| 242 | + all_args.append(f"--preset={preset}") |
| 243 | + |
231 | 244 | gen = self.get_generator(*all_args)
|
232 | 245 | if gen:
|
233 | 246 | self.single_config = gen == "Ninja" or "Makefiles" in gen
|
|
0 commit comments