|
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 ._compat.builtins import ExceptionGroup |
17 | 19 | from ._logging import logger |
18 | 20 | from ._shutil import Run |
19 | | -from .errors import CMakeConfigError, CMakeNotFoundError, FailedLiveProcessError |
| 21 | +from .errors import ( |
| 22 | + CMakeConfigError, |
| 23 | + CMakeNotFoundError, |
| 24 | + CMakeVersionError, |
| 25 | + FailedLiveProcessError, |
| 26 | +) |
20 | 27 | from .file_api.query import stateless_query |
21 | 28 | from .file_api.reply import load_reply_dir |
22 | 29 | from .program_search import Program, best_program, get_cmake_program, get_cmake_programs |
|
25 | 32 | from collections.abc import Generator, Iterable, Mapping, Sequence |
26 | 33 |
|
27 | 34 | from packaging.specifiers import SpecifierSet |
28 | | - from packaging.version import Version |
29 | 35 |
|
30 | 36 | from ._compat.typing import Self |
31 | 37 | from .file_api.model.index import Index |
@@ -242,12 +248,19 @@ def get_generator(self, *args: str) -> str | None: |
242 | 248 | def configure( |
243 | 249 | self, |
244 | 250 | *, |
| 251 | + preset: str | None = None, |
245 | 252 | defines: Mapping[str, str | os.PathLike[str] | bool] | None = None, |
246 | 253 | cmake_args: Sequence[str] = (), |
247 | 254 | ) -> None: |
248 | 255 | _cmake_args = self._compute_cmake_args(defines or {}) |
249 | 256 | all_args = [*_cmake_args, *cmake_args] |
250 | 257 |
|
| 258 | + if preset: |
| 259 | + if self.cmake.version < Version("3.19"): |
| 260 | + msg = f"CMake version ({self.cmake.version}) is too old to support presets." |
| 261 | + raise CMakeVersionError(msg) |
| 262 | + all_args.append(f"--preset={preset}") |
| 263 | + |
251 | 264 | gen = self.get_generator(*all_args) |
252 | 265 | if gen: |
253 | 266 | self.single_config = gen == "Ninja" or "Makefiles" in gen |
|
0 commit comments