aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter/interpreter.py
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2021-06-07 10:03:55 -0700
committerDaniel Mensinger <daniel@mensinger-ka.de>2021-06-08 11:00:55 +0200
commit3f9a81e7f14e166934b6fd44a1236aa808555656 (patch)
tree114fa5f7515d8682bf8999398d08f604d14d394b /mesonbuild/interpreter/interpreter.py
parent3e998527a350cb197ca61b59c0a98cb6681b5fdd (diff)
downloadmeson-3f9a81e7f14e166934b6fd44a1236aa808555656.zip
meson-3f9a81e7f14e166934b6fd44a1236aa808555656.tar.gz
meson-3f9a81e7f14e166934b6fd44a1236aa808555656.tar.bz2
interpreter: use typed_kwargs for the add_*_arguments family
This makes use of the new convertor and validator arguments, so that we can check that the languages passed are in fact vaild, and then convert the native boolean into a MachineChoice internally.
Diffstat (limited to 'mesonbuild/interpreter/interpreter.py')
-rw-r--r--mesonbuild/interpreter/interpreter.py59
1 files changed, 39 insertions, 20 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index 38ab22f..6f613a1 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -25,7 +25,7 @@ from ..mesonlib import FileMode, MachineChoice, OptionKey, listify, extract_as_l
from ..programs import ExternalProgram, NonExistingExternalProgram
from ..dependencies import Dependency, NotFoundDependency, DependencyException
from ..depfile import DepFile
-from ..interpreterbase import InterpreterBase, typed_pos_args
+from ..interpreterbase import ContainerTypeInfo, InterpreterBase, KwargInfo, typed_kwargs, typed_pos_args
from ..interpreterbase import noPosargs, noKwargs, stringArgs, permittedKwargs, noArgsFlattening
from ..interpreterbase import InterpreterException, InvalidArguments, InvalidCode, SubdirDoneRequest
from ..interpreterbase import InterpreterObject, Disabler, disablerIfNotFound
@@ -60,9 +60,7 @@ import typing as T
import importlib
if T.TYPE_CHECKING:
- from ..compilers import Compiler
- from ..envconfig import MachineInfo
- from ..environment import Environment
+ from . import kwargs
# Input source types passed to Targets
SourceInputs = T.Union[mesonlib.File, GeneratedListHolder, TargetHolder,
@@ -72,6 +70,31 @@ if T.TYPE_CHECKING:
build.BuildTarget, build.CustomTargetIndex,
build.GeneratedList]
+
+def _language_validator(l: T.List[str]) -> T.Optional[str]:
+ """Validate language keyword argument.
+
+ Particularly for functions like `add_compiler()`, and `add_*_args()`
+ """
+ diff = {a.lower() for a in l}.difference(compilers.all_languages)
+ if diff:
+ return f'unknown languages: {", ".join(diff)}'
+ return None
+
+
+_NATIVE_KW = KwargInfo(
+ 'native', bool,
+ default=False,
+ convertor=lambda n: MachineChoice.BUILD if n else MachineChoice.HOST)
+
+_LANGUAGE_KW = KwargInfo(
+ 'language', ContainerTypeInfo(list, str, allow_empty=False),
+ listify=True,
+ required=True,
+ validator=_language_validator,
+ convertor=lambda x: [i.lower() for i in x])
+
+
def stringifyUserArguments(args, quote=False):
if isinstance(args, list):
return '[%s]' % ', '.join([stringifyUserArguments(x, True) for x in args])
@@ -2530,29 +2553,25 @@ This warning will become a hard error in a future Meson release.
self.build.test_setups[setup_name] = build.TestSetup(exe_wrapper, gdb, timeout_multiplier, env,
exclude_suites)
- @permittedKwargs({'language', 'native'})
@typed_pos_args('add_global_arguments', varargs=str)
- def func_add_global_arguments(self, node: mparser.FunctionNode, args: T.Tuple[T.List[str]], kwargs):
- for_machine = self.machine_from_native_kwarg(kwargs)
- self.add_global_arguments(node, self.build.global_args[for_machine], args[0], kwargs)
+ @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)
- @permittedKwargs({'language', 'native'})
@typed_pos_args('add_global_link_arguments', varargs=str)
- def func_add_global_link_arguments(self, node: mparser.FunctionNode, args: T.Tuple[T.List[str]], kwargs):
- for_machine = self.machine_from_native_kwarg(kwargs)
- self.add_global_arguments(node, self.build.global_link_args[for_machine], args[0], kwargs)
+ @typed_kwargs('add_global_arguments', _NATIVE_KW, _LANGUAGE_KW)
+ 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)
- @permittedKwargs({'language', 'native'})
@typed_pos_args('add_project_arguments', varargs=str)
- def func_add_project_arguments(self, node: mparser.FunctionNode, args: T.Tuple[T.List[str]], kwargs):
- for_machine = self.machine_from_native_kwarg(kwargs)
- self.add_project_arguments(node, self.build.projects_args[for_machine], args[0], kwargs)
+ @typed_kwargs('add_global_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)
- @permittedKwargs({'language', 'native'})
@typed_pos_args('add_project_link_arguments', varargs=str)
- def func_add_project_link_arguments(self, node: mparser.FunctionNode, args: T.Tuple[T.List[str]], kwargs):
- for_machine = self.machine_from_native_kwarg(kwargs)
- self.add_project_arguments(node, self.build.projects_link_args[for_machine], args[0], kwargs)
+ @typed_kwargs('add_global_arguments', _NATIVE_KW, _LANGUAGE_KW)
+ def func_add_project_link_arguments(self, node: mparser.FunctionNode, args: T.Tuple[T.List[str]], kwargs: 'kwargs.FuncAddProjectArgs') -> None:
+ self.add_project_arguments(node, self.build.projects_link_args[kwargs['native']], args[0], kwargs)
def warn_about_builtin_args(self, args):
# -Wpedantic is deliberately not included, since some people want to use it but not use -Wextra