diff options
Diffstat (limited to 'mesonbuild/interpreter')
-rw-r--r-- | mesonbuild/interpreter/compiler.py | 19 | ||||
-rw-r--r-- | mesonbuild/interpreter/interpreter.py | 21 | ||||
-rw-r--r-- | mesonbuild/interpreter/kwargs.py | 1 |
3 files changed, 18 insertions, 23 deletions
diff --git a/mesonbuild/interpreter/compiler.py b/mesonbuild/interpreter/compiler.py index bf32be3..9a6beeb 100644 --- a/mesonbuild/interpreter/compiler.py +++ b/mesonbuild/interpreter/compiler.py @@ -1,4 +1,5 @@ import functools +from mesonbuild.interpreterbase.decorators import typed_kwargs, KwargInfo from .interpreterobjects import (extract_required_kwarg, extract_search_dirs) @@ -684,12 +685,24 @@ class CompilerHolder(ObjectHolder['Compiler']): return result @FeatureNew('compiler.get_supported_arguments', '0.43.0') - @permittedKwargs({}) - def get_supported_arguments_method(self, args, kwargs): + @FeatureNewKwargs('compiler.get_supported_arguments', '0.59.0', ['checked']) + @typed_kwargs('compiler.get_supported_arguments', KwargInfo('checked', str, default='off')) + def get_supported_arguments_method(self, args: T.Sequence[str], kwargs: T.Dict[str, T.Any]): args = mesonlib.stringlistify(args) supported_args = [] + checked = kwargs.pop('checked') + + if checked not in ['warn', 'require', 'off']: + raise mesonlib.MesonException('"checked" kwarg must be one of "warn", "require" or "off"') + for arg in args: - if self.has_argument_method(arg, kwargs): + if not self.has_argument_method(arg, kwargs): + msg = f'Compiler for {self.compiler.get_display_language()} does not support "{arg}"' + if checked == 'warn': + mlog.warning(msg) + elif checked == 'require': + raise mesonlib.MesonException(msg) + else: supported_args.append(arg) return supported_args diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py index 95537fd..5be99b4 100644 --- a/mesonbuild/interpreter/interpreter.py +++ b/mesonbuild/interpreter/interpreter.py @@ -2321,9 +2321,8 @@ This will become a hard error in the future.''' % kwargs['input'], location=self self.build.test_setups[setup_name] = build.TestSetup(exe_wrapper, gdb, timeout_multiplier, env, exclude_suites) - @FeatureNewKwargs('add_global_arguments', '0.59.0', ['required']) @typed_pos_args('add_global_arguments', varargs=str) - @typed_kwargs('add_global_arguments', _NATIVE_KW, _LANGUAGE_KW, KwargInfo('required', bool, default=False)) + @typed_kwargs('add_global_arguments', _NATIVE_KW, _LANGUAGE_KW) def func_add_global_arguments(self, node: mparser.FunctionNode, args: T.Tuple[T.List[str]], kwargs: 'kwargs.FuncAddProjectArgs') -> None: self._add_global_arguments(node, self.build.global_args[kwargs['native']], args[0], kwargs) @@ -2332,9 +2331,8 @@ This will become a hard error in the future.''' % kwargs['input'], location=self def func_add_global_link_arguments(self, node: mparser.FunctionNode, args: T.Tuple[T.List[str]], kwargs: 'kwargs.FuncAddProjectArgs') -> None: self._add_global_arguments(node, self.build.global_link_args[kwargs['native']], args[0], kwargs) - @FeatureNewKwargs('add_project_arguments', '0.59.0', ['required']) @typed_pos_args('add_project_arguments', varargs=str) - @typed_kwargs('add_project_arguments', _NATIVE_KW, _LANGUAGE_KW, KwargInfo('required', bool, default=False)) + @typed_kwargs('add_project_arguments', _NATIVE_KW, _LANGUAGE_KW) def func_add_project_arguments(self, node: mparser.FunctionNode, args: T.Tuple[T.List[str]], kwargs: 'kwargs.FuncAddProjectArgs') -> None: self._add_project_arguments(node, self.build.projects_args[kwargs['native']], args[0], kwargs) @@ -2400,21 +2398,6 @@ This will become a hard error in the future.''' % kwargs['input'], location=self self._warn_about_builtin_args(args) - try: - if kwargs['required']: - compilers = self.coredata.compilers.build.values() if kwargs['native'] == MachineChoice.BUILD \ - else self.coredata.compilers.host.values() - - for c in compilers: - if not c.language in kwargs['language']: - continue - - for arg in args: - if not c.has_multi_arguments([arg], self.environment)[0]: - raise mesonlib.MesonException(f'C compiler does not support "{arg}"') - except KeyError: - pass - for lang in kwargs['language']: argsdict[lang] = argsdict.get(lang, []) + args diff --git a/mesonbuild/interpreter/kwargs.py b/mesonbuild/interpreter/kwargs.py index e1ff2a8..1cc2082 100644 --- a/mesonbuild/interpreter/kwargs.py +++ b/mesonbuild/interpreter/kwargs.py @@ -27,7 +27,6 @@ class FuncAddProjectArgs(TypedDict): native: MachineChoice language: T.List[str] - required: bool class BaseTest(TypedDict): |