diff options
-rw-r--r-- | mesonbuild/interpreter/interpreter.py | 24 | ||||
-rw-r--r-- | mesonbuild/interpreter/kwargs.py | 6 |
2 files changed, 20 insertions, 10 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py index 3fb0fc3..27cf9b4 100644 --- a/mesonbuild/interpreter/interpreter.py +++ b/mesonbuild/interpreter/interpreter.py @@ -1489,23 +1489,27 @@ external dependencies (including libraries) must go to "dependencies".''') self.do_subproject(fallback, 'meson', sp_kwargs) return self.program_from_overrides(args, extra_info) - @FeatureNewKwargs('find_program', '0.53.0', ['dirs']) - @FeatureNewKwargs('find_program', '0.52.0', ['version']) - @FeatureNewKwargs('find_program', '0.49.0', ['disabler']) - @disablerIfNotFound - @permittedKwargs({'required', 'native', 'version', 'dirs'}) @typed_pos_args('find_program', varargs=(str, mesonlib.File), min_varargs=1) - def func_find_program(self, node: mparser.BaseNode, args: T.Tuple[T.List[mesonlib.FileOrString]], kwargs) -> T.Union['build.Executable', ExternalProgram, 'OverrideProgram']: + @typed_kwargs( + 'find_program', + DISABLER_KW.evolve(since='0.49.0'), + NATIVE_KW, + REQUIRED_KW, + KwargInfo('dirs', ContainerTypeInfo(list, str), default=[], listify=True, since='0.53.0'), + KwargInfo('version', ContainerTypeInfo(list, str), default=[], listify=True, since='0.52.0'), + ) + @disablerIfNotFound + def func_find_program(self, node: mparser.BaseNode, args: T.Tuple[T.List[mesonlib.FileOrString]], + kwargs: 'kwargs.FindProgram', + ) -> T.Union['build.Executable', ExternalProgram, 'OverrideProgram']: disabled, required, feature = extract_required_kwarg(kwargs, self.subproject) if disabled: mlog.log('Program', mlog.bold(' '.join(args[0])), 'skipped: feature', mlog.bold(feature), 'disabled') return self.notfound_program(args[0]) search_dirs = extract_search_dirs(kwargs) - wanted = mesonlib.stringlistify(kwargs.get('version', [])) - for_machine = self.machine_from_native_kwarg(kwargs) - return self.find_program_impl(args[0], for_machine, required=required, - silent=False, wanted=wanted, + return self.find_program_impl(args[0], kwargs['native'], required=required, + silent=False, wanted=kwargs['version'], search_dirs=search_dirs) def func_find_library(self, node, args, kwargs): diff --git a/mesonbuild/interpreter/kwargs.py b/mesonbuild/interpreter/kwargs.py index 4777d8a..4f8cf06 100644 --- a/mesonbuild/interpreter/kwargs.py +++ b/mesonbuild/interpreter/kwargs.py @@ -226,3 +226,9 @@ class Summary(TypedDict): section: str bool_yn: bool list_sep: T.Optional[str] + + +class FindProgram(ExtractRequired, ExtractSearchDirs): + + native: MachineChoice + version: T.List[str] |