Fix run_targets running scripts from different subdirs.
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 68744ef..d688b6a 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py
@@ -4008,6 +4008,8 @@ if isinstance(i, dependencies.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], {}) 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 759aa96..7e7ec93 100755 --- a/run_unittests.py +++ b/run_unittests.py
@@ -2385,6 +2385,15 @@ 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 df0a1a5..85d30f0 100644 --- a/test cases/common/52 run target/meson.build +++ b/test cases/common/52 run target/meson.build
@@ -103,3 +103,5 @@ '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 0000000..3159c08 --- /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.')