diff --git a/docs/yaml/objects/external_program.yaml b/docs/yaml/objects/external_program.yaml index 4c24497a9f15..d7f366ef1945 100644 --- a/docs/yaml/objects/external_program.yaml +++ b/docs/yaml/objects/external_program.yaml @@ -56,3 +56,8 @@ methods: ```meson run_command(find_program('foo'), 'arg1', 'arg2') ``` + +- name: cmd_array + returns: list[str] + description: Returns an array containing the command(s) for the program. + since: 1.7.0 diff --git a/mesonbuild/interpreter/interpreterobjects.py b/mesonbuild/interpreter/interpreterobjects.py index a919102607be..e563f9289fcc 100644 --- a/mesonbuild/interpreter/interpreterobjects.py +++ b/mesonbuild/interpreter/interpreterobjects.py @@ -618,7 +618,8 @@ def __init__(self, ep: _EXTPROG, interpreter: 'Interpreter') -> None: self.methods.update({'found': self.found_method, 'path': self.path_method, 'version': self.version_method, - 'full_path': self.full_path_method}) + 'full_path': self.full_path_method, + 'cmd_array': self.cmd_array_method}) @noPosargs @noKwargs @@ -645,6 +646,16 @@ def _full_path(self) -> str: assert path is not None return path + @noPosargs + @noKwargs + @FeatureNew('ExternalProgram.cmd_array', '1.7.0') + def cmd_array_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> T.List[str]: + if not self.found(): + raise InterpreterException('Unable to get the path of a not-found external program') + cmd = self.held_object.get_command() + assert cmd is not None + return cmd + @noPosargs @noKwargs @FeatureNew('ExternalProgram.version', '0.62.0') diff --git a/test cases/common/26 find program/meson.build b/test cases/common/26 find program/meson.build index a20f6b45a142..0466e241359b 100644 --- a/test cases/common/26 find program/meson.build +++ b/test cases/common/26 find program/meson.build @@ -40,3 +40,18 @@ assert(not prog.found(), 'Program should not be found') prog = find_program('test_subdir.py', dirs : ['/nonexistent', meson.current_source_dir() / 'scripts']) assert(prog.found(), 'Program should be found') + +prog = find_program('print-version.py') +message(prog.cmd_array()) +message(prog.full_path()) +if build_machine.system() != 'cygwin' + assert(prog.cmd_array() != [prog.full_path()]) +endif + +if build_machine.system() == 'windows' + prog = find_program('cmd.exe') + assert(prog.cmd_array() == [prog.full_path()]) +else + prog = find_program('ld') + assert(prog.cmd_array() == [prog.full_path()]) +endif \ No newline at end of file