@@ -1801,7 +1801,7 @@ def func_find_program(self, node: mparser.BaseNode, args: T.Tuple[T.List[mesonli
18011801 'local_program' ,
18021802 DEPENDS_KW ,
18031803 DEPEND_FILES_KW ,
1804- KwargInfo ('interpreter' , (ExternalProgram , NoneType ), default = None ),
1804+ KwargInfo ('interpreter' , (NoneType , ExternalProgram , ContainerTypeInfo ( list , ( ExternalProgram , str )) ), default = None ),
18051805 )
18061806 def func_local_program (self , node : mparser .BaseNode , args : T .Tuple [T .Union [mesonlib .FileOrString , build .Executable , build .CustomTarget , build .CustomTargetIndex ]],
18071807 kwargs : kwtypes .LocalProgram ) -> build .LocalProgram :
@@ -1810,7 +1810,7 @@ def func_local_program(self, node: mparser.BaseNode, args: T.Tuple[T.Union[meson
18101810 def _local_program_impl (self , exe : T .Union [mesonlib .FileOrString , build .Executable , build .CustomTarget , build .CustomTargetIndex ],
18111811 depends_ : T .Optional [T .List [T .Union [build .BuildTarget , build .CustomTarget , build .CustomTargetIndex ]]] = None ,
18121812 depend_files_ : T .Optional [T .List [mesonlib .FileOrString ]] = None ,
1813- interpreter : T .Optional [ExternalProgram ] = None ) -> build .LocalProgram :
1813+ interpreter : T .Optional [T . Union [ ExternalProgram , T . List [ ExternalProgram , str ]] ] = None ) -> build .LocalProgram :
18141814 if isinstance (exe , build .CustomTarget ):
18151815 if len (exe .outputs ) != 1 :
18161816 raise InvalidArguments ('CustomTarget used as LocalProgram must have exactly one output.' )
@@ -1824,11 +1824,17 @@ def _local_program_impl(self, exe: T.Union[mesonlib.FileOrString, build.Executab
18241824 if interpreter :
18251825 if not isinstance (exe , (build .CustomTarget , build .CustomTargetIndex )):
18261826 raise InvalidArguments ('The "interpreter" argument can only be used when the first argument is a custom target.' )
1827+ if isinstance (interpreter , list ):
1828+ interpreter , args = interpreter [0 ], interpreter [1 :]
1829+ if not isinstance (interpreter , ExternalProgram ) or any (not isinstance (a , str ) for a in args ):
1830+ raise InvalidArguments ('Interpreter must be an ExternalProgram followed by strings.' )
1831+ else :
1832+ args = []
18271833 if not interpreter .found ():
18281834 raise InvalidArguments (f'Specified interpreter program { interpreter .description ()!r} not found.' )
18291835 target = exe .target if isinstance (exe , build .CustomTargetIndex ) else exe
18301836 depends .append (target )
1831- cmd = interpreter .get_command () + [self .backend .get_target_filename (exe )]
1837+ cmd = interpreter .get_command () + args + [self .backend .get_target_filename (exe )]
18321838 prog = ExternalProgram (exe .name , command = cmd , silent = True )
18331839 return build .LocalProgram (prog , self .project_version , depends , depend_files )
18341840 return build .LocalProgram (exe , self .project_version , depends , depend_files )
0 commit comments