88import re
99import sys
1010from pathlib import Path
11- from typing import TYPE_CHECKING , Any
11+ from typing import TYPE_CHECKING , Any , TypeVar
1212
1313from packaging .specifiers import SpecifierSet
1414from packaging .version import Version
@@ -32,6 +32,9 @@ def __dir__() -> list[str]:
3232 return __all__
3333
3434
35+ T = TypeVar ("T" )
36+
37+
3538def strtobool (value : str ) -> bool :
3639 """
3740 Converts a environment variable string into a boolean value.
@@ -191,6 +194,51 @@ def _handle_minimum_version(
191194 dc .version = SpecifierSet (f">={ dc .minimum_version } " )
192195
193196
197+ def _handle_move (
198+ before_name : str ,
199+ before : T | None ,
200+ after_name : str ,
201+ after : T ,
202+ minimum_version : Version | None ,
203+ introduced_in : Version ,
204+ ) -> T :
205+ """
206+ Backward_compat for moving names around. The default must be false-like.
207+ """
208+
209+ if after and minimum_version is not None and minimum_version < introduced_in :
210+ rich_print (
211+ f"[red][bold]ERROR:[/bold] Cannot set { after_name } if minimum-version is set to less than { introduced_in } (which is where it was introduced)"
212+ )
213+ raise SystemExit (7 )
214+
215+ if (
216+ before is not None
217+ and minimum_version is not None
218+ and minimum_version >= introduced_in
219+ ):
220+ rich_print (
221+ f"[red][bold]ERROR:[/bold] Cannot set { before_name } if minimum-version is set to { introduced_in } or higher"
222+ )
223+ raise SystemExit (7 )
224+
225+ if before is not None and after :
226+ rich_print (
227+ f"[red][bold]ERROR:[/bold] Cannot set { before_name } and { after_name } at the same time"
228+ )
229+ raise SystemExit (7 )
230+
231+ if before is None :
232+ return after
233+
234+ if minimum_version is None :
235+ rich_print (
236+ f"[yellow][bold]WARNING:[/bold] Use { after_name } instead of { before_name } for scikit-build-core >= { introduced_in } "
237+ )
238+
239+ return before
240+
241+
194242def inherit_join (
195243 value : list [str ] | dict [str , str ] | str | int | bool ,
196244 previous : list [str ] | dict [str , str ] | str | int | bool | None ,
@@ -336,6 +384,23 @@ def __init__(
336384 _handle_minimum_version (self .settings .cmake , self .settings .minimum_version )
337385 _handle_minimum_version (self .settings .ninja , self .settings .minimum_version )
338386
387+ self .settings .build .verbose = _handle_move (
388+ "cmake.verbose" ,
389+ self .settings .cmake .verbose ,
390+ "build.verbose" ,
391+ self .settings .build .verbose ,
392+ self .settings .minimum_version ,
393+ Version ("0.10" ),
394+ )
395+ self .settings .build .targets = _handle_move (
396+ "cmake.targets" ,
397+ self .settings .cmake .targets ,
398+ "build.targets" ,
399+ self .settings .build .targets ,
400+ self .settings .minimum_version ,
401+ Version ("0.10" ),
402+ )
403+
339404 def unrecognized_options (self ) -> Generator [str , None , None ]:
340405 return self .sources .unrecognized_options (ScikitBuildSettings )
341406
0 commit comments