diff --git a/mesonbuild/modules/cmake.py b/mesonbuild/modules/cmake.py index 10a4ef29b..2168aaa51 100644 --- a/mesonbuild/modules/cmake.py +++ b/mesonbuild/modules/cmake.py @@ -17,7 +17,6 @@ from ..interpreter.type_checking import REQUIRED_KW, INSTALL_DIR_KW, NoneType, i from ..interpreterbase import ( FeatureNew, - permittedKwargs, noPosargs, noKwargs, @@ -34,7 +33,7 @@ if T.TYPE_CHECKING: from typing_extensions import TypedDict from . import ModuleState - from ..cmake import SingleTargetOptions + from ..cmake.common import SingleTargetOptions from ..environment import Environment from ..interpreter import Interpreter, kwargs from ..interpreterbase import TYPE_kwargs, TYPE_var, InterpreterObject @@ -59,6 +58,12 @@ if T.TYPE_CHECKING: options: T.Optional[CMakeSubprojectOptions] cmake_options: T.List[str] + class TargetKW(TypedDict): + + target: T.Optional[str] + + +_TARGET_KW = KwargInfo('target', (str, NoneType)) COMPATIBILITIES = ['AnyNewerVersion', 'SameMajorVersion', 'SameMinorVersion', 'ExactVersion'] @@ -194,8 +199,8 @@ class CMakeSubprojectOptions(ModuleObject): } ) - def _get_opts(self, kwargs: dict) -> SingleTargetOptions: - if 'target' in kwargs: + def _get_opts(self, kwargs: TargetKW) -> SingleTargetOptions: + if kwargs['target'] is not None: return self.target_options[kwargs['target']] return self.target_options.global_options @@ -205,23 +210,23 @@ class CMakeSubprojectOptions(ModuleObject): self.cmake_options += cmake_defines_to_args(args[0]) @typed_pos_args('subproject_options.set_override_option', str, str) - @permittedKwargs({'target'}) - def set_override_option(self, state: ModuleState, args: T.Tuple[str, str], kwargs: TYPE_kwargs) -> None: + @typed_kwargs('subproject_options.set_override_option', _TARGET_KW) + def set_override_option(self, state: ModuleState, args: T.Tuple[str, str], kwargs: TargetKW) -> None: self._get_opts(kwargs).set_opt(args[0], args[1]) @typed_pos_args('subproject_options.set_install', bool) - @permittedKwargs({'target'}) - def set_install(self, state: ModuleState, args: T.Tuple[bool], kwargs: TYPE_kwargs) -> None: + @typed_kwargs('subproject_options.set_install', _TARGET_KW) + def set_install(self, state: ModuleState, args: T.Tuple[bool], kwargs: TargetKW) -> None: self._get_opts(kwargs).set_install(args[0]) @typed_pos_args('subproject_options.append_compile_args', str, varargs=str, min_varargs=1) - @permittedKwargs({'target'}) - def append_compile_args(self, state: ModuleState, args: T.Tuple[str, T.List[str]], kwargs: TYPE_kwargs) -> None: + @typed_kwargs('subproject_options.append_compile_args', _TARGET_KW) + def append_compile_args(self, state: ModuleState, args: T.Tuple[str, T.List[str]], kwargs: TargetKW) -> None: self._get_opts(kwargs).append_args(args[0], args[1]) @typed_pos_args('subproject_options.append_link_args', varargs=str, min_varargs=1) - @permittedKwargs({'target'}) - def append_link_args(self, state: ModuleState, args: T.Tuple[T.List[str]], kwargs: TYPE_kwargs) -> None: + @typed_kwargs('subproject_options.append_link_args', _TARGET_KW) + def append_link_args(self, state: ModuleState, args: T.Tuple[T.List[str]], kwargs: TargetKW) -> None: self._get_opts(kwargs).append_link_args(args[0]) @noPosargs