Skip to content

Commit 08532eb

Browse files
committed
Allow overriding a program with a CustomTarget
1 parent c0b7516 commit 08532eb

File tree

4 files changed

+25
-2
lines changed

4 files changed

+25
-2
lines changed

docs/markdown/snippets/local_program.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,7 @@ build-time commands (e.g. [[custom_target]]).
1111

1212
The program can be passed to [[meson.override_find_program]] and used in
1313
subprojects.
14+
15+
It is also now possible to pass a [[@custom_tgt]] or [[@custom_idx]] directly
16+
to [[meson.override_find_program]], but be aware that an interpreter could be
17+
required on Windows in which case [[local_program]] should be used.

docs/yaml/builtins/meson.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,10 @@ methods:
383383
check is passed to [[find_program]] for a program that has been overridden with
384384
an executable, the current project version is used.
385385
386+
*(since 1.10.0)* It is also possible to override with a [[@custom_tgt]] or
387+
[[@custom_idx]]. In that case, be aware that an interpreter could be required
388+
on Windows in which case [[local_program]] should be used.
389+
386390
posargs:
387391
progname:
388392
type: str

mesonbuild/interpreter/mesonmain.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,11 +314,17 @@ def install_dependency_manifest_method(self, args: T.Tuple[str], kwargs: 'TYPE_k
314314
self.build.dep_manifest_name = args[0]
315315

316316
@FeatureNew('meson.override_find_program', '0.46.0')
317-
@typed_pos_args('meson.override_find_program', str, (mesonlib.File, ExternalProgram, build.Executable, build.LocalProgram))
317+
@typed_pos_args('meson.override_find_program', str, (mesonlib.File, ExternalProgram, build.Executable, build.LocalProgram,
318+
build.CustomTarget, build.CustomTargetIndex))
318319
@noKwargs
319320
@InterpreterObject.method('override_find_program')
320-
def override_find_program_method(self, args: T.Tuple[str, T.Union[mesonlib.File, ExternalProgram, build.Executable, build.LocalProgram]], kwargs: 'TYPE_kwargs') -> None:
321+
def override_find_program_method(self, args: T.Tuple[str, T.Union[mesonlib.File, ExternalProgram, build.Executable,
322+
build.LocalProgram, build.CustomTarget, build.CustomTargetIndex]],
323+
kwargs: 'TYPE_kwargs') -> None:
321324
name, exe = args
325+
if isinstance(exe, (build.CustomTarget, build.CustomTargetIndex)):
326+
FeatureNew.single_use('Overriding find_program with a CustomTarget or CustomTargetIndex', '1.10.0',
327+
self.subproject, location=self.current_node)
322328
if not isinstance(exe, (ExternalProgram, build.LocalProgram)):
323329
exe = self.interpreter._local_program_impl(exe)
324330
self.interpreter.add_find_program_override(name, exe)

test cases/common/285 local program/meson.build

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,12 @@ prog4 = find_program('prog4')
5454
assert(prog4.version() == '2.0')
5555
assert(prog4.found())
5656
test('test-prog4', prog4)
57+
58+
# A custom target can be passed directly, but it won't run on Windows.
59+
meson.override_find_program('prog5', prog_ct)
60+
prog5 = find_program('prog5')
61+
assert(prog5.version() == '2.0')
62+
assert(prog5.found())
63+
if host_machine.system() != 'windows'
64+
test('test-prog5', prog5)
65+
endif

0 commit comments

Comments
 (0)