summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Claessens <xclaessens@netflix.com>2025-10-11 17:54:00 -0400
committerXavier Claessens <xclaesse@gmail.com>2025-10-15 12:15:39 -0400
commit76facd5f717e152d64bfeeadc6217686304c5000 (patch)
tree805a47db390429fbd4ac5ec151faea37bec9b4c5
parent0fa4c9ee9512eb362d0e9ca869725175464462f7 (diff)
downloadmeson-76facd5f717e152d64bfeeadc6217686304c5000.tar.gz
Add support for LocalProgram to generator()
-rw-r--r--mesonbuild/build.py10
-rw-r--r--mesonbuild/interpreter/interpreter.py4
2 files changed, 9 insertions, 5 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index 7bf3a60a8..2365b005a 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -1982,7 +1982,7 @@ class FileMaybeInTargetPrivateDir:
return self.fname
class Generator(HoldableObject):
- def __init__(self, exe: T.Union['Executable', programs.ExternalProgram],
+ def __init__(self, exe: T.Union[Executable, programs.ExternalProgram, LocalProgram, CustomTarget, CustomTargetIndex],
arguments: T.List[str],
output: T.List[str],
# how2dataclass
@@ -1991,10 +1991,14 @@ class Generator(HoldableObject):
capture: bool = False,
depends: T.Optional[T.List[BuildTargetTypes]] = None,
name: str = 'Generator'):
+ self.depends = list(depends or [])
+ if isinstance(exe, LocalProgram):
+ # FIXME: Generator does not have depend_files?
+ self.depends.extend(exe.depends)
+ exe = exe.program
self.exe = exe
self.depfile = depfile
self.capture = capture
- self.depends: T.List[BuildTargetTypes] = depends or []
self.arglist = arguments
self.outputs = output
self.name = name
@@ -2003,7 +2007,7 @@ class Generator(HoldableObject):
repr_str = "<{0}: {1}>"
return repr_str.format(self.__class__.__name__, self.exe)
- def get_exe(self) -> T.Union['Executable', programs.ExternalProgram]:
+ def get_exe(self) -> T.Union[Executable, programs.ExternalProgram, CustomTarget, CustomTargetIndex]:
return self.exe
def get_base_outnames(self, inname: str) -> T.List[str]:
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index 681fcd7c0..61b5e2ce3 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -2238,7 +2238,7 @@ class Interpreter(InterpreterBase, HoldableObject):
self.add_target(name, tg)
return tg
- @typed_pos_args('generator', (build.Executable, ExternalProgram))
+ @typed_pos_args('generator', (build.Executable, ExternalProgram, build.LocalProgram))
@typed_kwargs(
'generator',
KwargInfo('arguments', ContainerTypeInfo(list, str, allow_empty=False), required=True, listify=True),
@@ -2248,7 +2248,7 @@ class Interpreter(InterpreterBase, HoldableObject):
KwargInfo('capture', bool, default=False, since='0.43.0'),
)
def func_generator(self, node: mparser.FunctionNode,
- args: T.Tuple[T.Union[build.Executable, ExternalProgram]],
+ args: T.Tuple[T.Union[build.Executable, ExternalProgram, build.LocalProgram]],
kwargs: 'kwtypes.FuncGenerator') -> build.Generator:
for rule in kwargs['output']:
if '@BASENAME@' not in rule and '@PLAINNAME@' not in rule: