summaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorXavier Claessens <xclaessens@netflix.com>2025-10-11 17:48:52 -0400
committerXavier Claessens <xclaesse@gmail.com>2025-10-15 12:15:39 -0400
commit0fa4c9ee9512eb362d0e9ca869725175464462f7 (patch)
tree5e4de60854abbf3e1ca61739b692d2c3b0b07540 /mesonbuild
parent02f15f57481640d90fb311bf130f06b9a8302ee1 (diff)
downloadmeson-0fa4c9ee9512eb362d0e9ca869725175464462f7.tar.gz
Add support for LocalProgram to test() and benchmark()
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/interpreter/interpreter.py23
1 files changed, 14 insertions, 9 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index 896981ea8..681fcd7c0 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -2262,17 +2262,17 @@ class Interpreter(InterpreterBase, HoldableObject):
return build.Generator(args[0], **kwargs)
- @typed_pos_args('benchmark', str, (build.Executable, build.Jar, ExternalProgram, mesonlib.File, build.CustomTarget, build.CustomTargetIndex))
+ @typed_pos_args('benchmark', str, (build.Executable, build.Jar, ExternalProgram, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.LocalProgram))
@typed_kwargs('benchmark', *TEST_KWS)
def func_benchmark(self, node: mparser.BaseNode,
- args: T.Tuple[str, T.Union[build.Executable, build.Jar, ExternalProgram, mesonlib.File]],
+ args: T.Tuple[str, T.Union[build.Executable, build.Jar, ExternalProgram, mesonlib.File, build.LocalProgram]],
kwargs: 'kwtypes.FuncBenchmark') -> None:
self.add_test(node, args, kwargs, False)
- @typed_pos_args('test', str, (build.Executable, build.Jar, ExternalProgram, mesonlib.File, build.CustomTarget, build.CustomTargetIndex))
+ @typed_pos_args('test', str, (build.Executable, build.Jar, ExternalProgram, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.LocalProgram))
@typed_kwargs('test', *TEST_KWS, KwargInfo('is_parallel', bool, default=True))
def func_test(self, node: mparser.BaseNode,
- args: T.Tuple[str, T.Union[build.Executable, build.Jar, ExternalProgram, mesonlib.File, build.CustomTarget, build.CustomTargetIndex]],
+ args: T.Tuple[str, T.Union[build.Executable, build.Jar, ExternalProgram, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.LocalProgram]],
kwargs: 'kwtypes.FuncTest') -> None:
self.add_test(node, args, kwargs, True)
@@ -2286,7 +2286,7 @@ class Interpreter(InterpreterBase, HoldableObject):
return ENV_KW.convertor(envlist)
def make_test(self, node: mparser.BaseNode,
- args: T.Tuple[str, T.Union[build.Executable, build.Jar, ExternalProgram, mesonlib.File, build.CustomTarget, build.CustomTargetIndex]],
+ args: T.Tuple[str, T.Union[build.Executable, build.Jar, ExternalProgram, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.LocalProgram]],
kwargs: 'kwtypes.BaseTest',
klass: T.Type[TestClass] = Test) -> TestClass:
name = args[0]
@@ -2295,15 +2295,20 @@ class Interpreter(InterpreterBase, HoldableObject):
location=node)
name = name.replace(':', '_')
exe = args[1]
- if isinstance(exe, ExternalProgram):
+ depends = list(kwargs['depends'] or [])
+ if isinstance(exe, build.LocalProgram):
+ # FIXME: tests does not have depend_files?
+ depends.extend(exe.depends)
+ exe = exe.program
+ elif isinstance(exe, ExternalProgram):
if not exe.found():
raise InvalidArguments('Tried to use not-found external program as test exe')
elif isinstance(exe, mesonlib.File):
exe = self.find_program_impl([exe])
elif isinstance(exe, build.CustomTarget):
- kwargs.setdefault('depends', []).append(exe)
+ depends.append(exe)
elif isinstance(exe, build.CustomTargetIndex):
- kwargs.setdefault('depends', []).append(exe.target)
+ depends.append(exe.target)
env = self.unpack_env_kwarg(kwargs)
@@ -2322,7 +2327,7 @@ class Interpreter(InterpreterBase, HoldableObject):
prj,
suite,
exe,
- kwargs['depends'],
+ depends,
kwargs.get('is_parallel', False),
kwargs['args'],
env,