|
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