diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 7bcf7acf5..60fc06392 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -4079,6 +4079,8 @@ This will become a hard error in the future.''' % kwargs['input'], location=self if isinstance(i, dependencies.ExternalProgram) and not i.found(): raise InterpreterException('Tried to use non-existing executable {!r}'.format(i.name)) cleaned_args.append(i) + if isinstance(cleaned_args[0], str): + cleaned_args[0] = self.func_find_program(node, cleaned_args[0], {}) name = args[0] if not isinstance(name, str): raise InterpreterException('First argument must be a string.') diff --git a/run_unittests.py b/run_unittests.py index 430bb5102..89e4d821f 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -2384,6 +2384,15 @@ class AllPlatformTests(BasePlatformTests): self.run_target('check-env') self.run_target('check-env-ct') + def test_run_target_subdir(self): + ''' + Test that run_targets are run from the correct directory + https://github.com/mesonbuild/meson/issues/957 + ''' + testdir = os.path.join(self.common_test_dir, '52 run target') + self.init(testdir) + self.run_target('textprinter') + def test_install_introspection(self): ''' Tests that the Meson introspection API exposes install filenames correctly diff --git a/test cases/common/52 run target/meson.build b/test cases/common/52 run target/meson.build index df0a1a50e..85d30f0b3 100644 --- a/test cases/common/52 run target/meson.build +++ b/test cases/common/52 run target/meson.build @@ -103,3 +103,5 @@ custom_target('check-env-ct', 'MY_ENV': '1'}, output: 'check-env-ct', ) + +run_target('textprinter', command: ['subdir/textprinter.py']) diff --git a/test cases/common/52 run target/subdir/textprinter.py b/test cases/common/52 run target/subdir/textprinter.py new file mode 100644 index 000000000..3159c08ed --- /dev/null +++ b/test cases/common/52 run target/subdir/textprinter.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python3 + +print('I am a script. Being run.')