diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2021-06-16 20:11:46 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-16 20:11:46 +0300 |
commit | 6fb2f86379c224e99652748eea94a03321b9bd11 (patch) | |
tree | a96fb2b8f6468d793b64b172abc67b8224e0edc3 /mesonbuild/interpreter/interpreter.py | |
parent | 537adce5d803ff4ae373d87671190a4a2682ff54 (diff) | |
parent | 0f5e55a749f0fed6330b216a82de941de3ccf9d6 (diff) | |
download | meson-6fb2f86379c224e99652748eea94a03321b9bd11.zip meson-6fb2f86379c224e99652748eea94a03321b9bd11.tar.gz meson-6fb2f86379c224e99652748eea94a03321b9bd11.tar.bz2 |
Merge pull request #8822 from dcbaker/submit/annotate-and-check-qt-module
Rewrite the Qt module for type safety!
Diffstat (limited to 'mesonbuild/interpreter/interpreter.py')
-rw-r--r-- | mesonbuild/interpreter/interpreter.py | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py index 1a7d2fc..dce0391 100644 --- a/mesonbuild/interpreter/interpreter.py +++ b/mesonbuild/interpreter/interpreter.py @@ -267,7 +267,7 @@ class Interpreter(InterpreterBase): self.ast = ast self.sanity_check_ast() self.builtin.update({'meson': MesonMain(build, self)}) - self.generators = [] + self.generators: T.List['GeneratorHolder'] = [] self.processed_buildfiles = set() # type: T.Set[str] self.project_args_frozen = False self.global_args_frozen = False # implies self.project_args_frozen @@ -1954,10 +1954,34 @@ This will become a hard error in the future.''' % kwargs['input'], location=self @permittedKwargs({'arguments', 'output', 'depends', 'depfile', 'capture', 'preserve_path_from'}) - def func_generator(self, node, args, kwargs): - gen = GeneratorHolder(self, args, kwargs) - self.generators.append(gen) - return gen + @typed_pos_args('generator', (ExecutableHolder, ExternalProgramHolder)) + @typed_kwargs( + 'generator', + KwargInfo('arguments', ContainerTypeInfo(list, str, allow_empty=False), required=True, listify=True), + KwargInfo('output', ContainerTypeInfo(list, str, allow_empty=False), required=True, listify=True), + KwargInfo('depfile', str, validator=lambda x: 'Depfile must be a plain filename with a subdirectory' if has_path_sep(x) else None), + KwargInfo('capture', bool, default=False, since='0.43.0'), + KwargInfo('depends', ContainerTypeInfo(list, (BuildTargetHolder, CustomTargetHolder)), default=[], listify=True), + ) + def func_generator(self, node: mparser.FunctionNode, + args: T.Tuple[T.Union[ExecutableHolder, ExternalProgramHolder]], + kwargs: 'kwargs.FuncGenerator') -> GeneratorHolder: + for rule in kwargs['output']: + if '@BASENAME@' not in rule and '@PLAINNAME@' not in rule: + raise InvalidArguments('Every element of "output" must contain @BASENAME@ or @PLAINNAME@.') + if has_path_sep(rule): + raise InvalidArguments('"output" must not contain a directory separator.') + if len(kwargs['output']) > 1: + for o in kwargs['output']: + if '@OUTPUT@' in o: + raise InvalidArguments('Tried to use @OUTPUT@ in a rule with more than one output.') + + depends = [d.held_object for d in kwargs.pop('depends')] + + gen = build.Generator(args[0].held_object, depends=depends, **kwargs) + holder = GeneratorHolder(gen, self) + self.generators.append(holder) + return holder @typed_pos_args('benchmark', str, (ExecutableHolder, JarHolder, ExternalProgramHolder, mesonlib.File)) @typed_kwargs('benchmark', *TEST_KWARGS) |