diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2021-08-10 15:18:58 -0700 |
---|---|---|
committer | Daniel Mensinger <daniel@mensinger-ka.de> | 2021-09-30 21:01:38 +0200 |
commit | cb762f29fe178d38c2b2fa29b5c9baec1f0edd90 (patch) | |
tree | 72fc7cd2e2fda09c2fd4fee286ca5c20a4c1e978 /mesonbuild/interpreter/interpreter.py | |
parent | 377c23388f2c10cc3f5b13ba7a3cfe5dea7ff645 (diff) | |
download | meson-cb762f29fe178d38c2b2fa29b5c9baec1f0edd90.zip meson-cb762f29fe178d38c2b2fa29b5c9baec1f0edd90.tar.gz meson-cb762f29fe178d38c2b2fa29b5c9baec1f0edd90.tar.bz2 |
interpreter: use typed_kwargs on func_run_target
Diffstat (limited to 'mesonbuild/interpreter/interpreter.py')
-rw-r--r-- | mesonbuild/interpreter/interpreter.py | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py index 8bd68b8..e05379a 100644 --- a/mesonbuild/interpreter/interpreter.py +++ b/mesonbuild/interpreter/interpreter.py @@ -1664,35 +1664,36 @@ This will become a hard error in the future.''' % kwargs['input'], location=self self.add_target(tg.name, tg) return tg - @FeatureNewKwargs('run_target', '0.57.0', ['env']) - @permittedKwargs({'command', 'depends', 'env'}) @typed_pos_args('run_target', str) - def func_run_target(self, node: mparser.FunctionNode, args: T.Tuple[str], kwargs: 'TYPE_kwargs') -> build.RunTarget: - if 'command' not in kwargs: - raise InterpreterException('Missing "command" keyword argument') - all_args = extract_as_list(kwargs, 'command') - deps = extract_as_list(kwargs, 'depends') + @typed_kwargs( + 'run_target', + KwargInfo( + 'command', + # TODO: should accept CustomTargetIndex as well? + ContainerTypeInfo(list, (str, build.BuildTarget, build.CustomTarget, ExternalProgram, mesonlib.File), allow_empty=False), + required=True, + listify=True, + default=[], + ), + KwargInfo( + 'depends', + ContainerTypeInfo(list, (build.BuildTarget, build.CustomTarget)), + listify=True, + default=[], + ), + ENV_KW.evolve(since='0.57.0'), + ) + def func_run_target(self, node: mparser.FunctionNode, args: T.Tuple[str], + kwargs: 'kwargs.RunTarget') -> build.RunTarget: + all_args = kwargs['command'].copy() - cleaned_args = [] for i in listify(all_args): - if not isinstance(i, (str, build.BuildTarget, build.CustomTarget, ExternalProgram, mesonlib.File)): - mlog.debug('Wrong type:', str(i)) - raise InterpreterException('Invalid argument to run_target.') if isinstance(i, ExternalProgram) and not i.found(): raise InterpreterException(f'Tried to use non-existing executable {i.name!r}') - cleaned_args.append(i) - if isinstance(cleaned_args[0], str): - cleaned_args[0] = self.func_find_program(node, cleaned_args[0], {}) + if isinstance(all_args[0], str): + all_args[0] = self.func_find_program(node, all_args[0], {}) name = args[0] - if not isinstance(name, str): - raise InterpreterException('First argument must be a string.') - cleaned_deps = [] - for d in deps: - if not isinstance(d, (build.BuildTarget, build.CustomTarget)): - raise InterpreterException('Depends items must be build targets.') - cleaned_deps.append(d) - env = self.unpack_env_kwarg(kwargs) - tg = build.RunTarget(name, cleaned_args, cleaned_deps, self.subdir, self.subproject, env) + tg = build.RunTarget(name, all_args, kwargs['depends'], self.subdir, self.subproject, kwargs['env']) self.add_target(name, tg) full_name = (self.subproject, name) assert full_name not in self.build.run_target_names |