summaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorXavier Claessens <xclaessens@netflix.com>2025-10-15 09:36:08 -0400
committerXavier Claessens <xclaesse@gmail.com>2025-10-15 12:15:39 -0400
commit80914bcf03947c02388df0067a9c3486d694865c (patch)
tree657375b83bfd3fdfafdad4960dc25c56eb0adc07 /mesonbuild
parent6abb678c20b1ae92e534b597b072c32a276002e6 (diff)
downloadmeson-80914bcf03947c02388df0067a9c3486d694865c.tar.gz
Add support for LocalProgram to add_*_script()
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/interpreter/mesonmain.py22
1 files changed, 12 insertions, 10 deletions
diff --git a/mesonbuild/interpreter/mesonmain.py b/mesonbuild/interpreter/mesonmain.py
index a5590320a..3afeb8647 100644
--- a/mesonbuild/interpreter/mesonmain.py
+++ b/mesonbuild/interpreter/mesonmain.py
@@ -57,21 +57,23 @@ class MesonMain(MesonInterpreterObject):
self.interpreter = interpreter
def _find_source_script(
- self, name: str, prog: T.Union[str, mesonlib.File, build.Executable, ExternalProgram],
- args: T.List[str]) -> 'ExecutableSerialisation':
+ self, name: str, prog: T.Union[str, mesonlib.File, build.Executable, ExternalProgram, build.LocalProgram],
+ args: T.List[str], allow_built_program: bool = False) -> 'ExecutableSerialisation':
largs: T.List[T.Union[str, build.Executable, ExternalProgram, build.LocalProgram]] = []
if isinstance(prog, (build.Executable, ExternalProgram)):
FeatureNew.single_use(f'Passing executable/found program object to script parameter of {name}',
'0.55.0', self.subproject, location=self.current_node)
- largs.append(prog)
- else:
+ elif isinstance(prog, (str, mesonlib.File)):
if isinstance(prog, mesonlib.File):
FeatureNew.single_use(f'Passing file object to script parameter of {name}',
'0.57.0', self.subproject, location=self.current_node)
- found = self.interpreter.find_program_impl([prog])
- largs.append(found)
+ prog = self.interpreter.find_program_impl([prog])
+
+ if isinstance(prog, build.LocalProgram) and not allow_built_program and not prog.run_program():
+ self.interpreter._compiled_exe_error(prog)
+ largs.append(prog)
largs.extend(args)
es = self.interpreter.backend.get_executable_serialisation(largs, verbose=True)
es.subproject = self.interpreter.subproject
@@ -116,7 +118,7 @@ class MesonMain(MesonInterpreterObject):
@typed_pos_args(
'meson.add_install_script',
- (str, mesonlib.File, build.Executable, ExternalProgram),
+ (str, mesonlib.File, build.Executable, ExternalProgram, build.LocalProgram),
varargs=(str, mesonlib.File, build.BuildTarget, build.CustomTarget, build.CustomTargetIndex, ExternalProgram)
)
@typed_kwargs(
@@ -132,7 +134,7 @@ class MesonMain(MesonInterpreterObject):
T.List[T.Union[str, mesonlib.File, build.BuildTargetTypes, ExternalProgram]]],
kwargs: 'AddInstallScriptKW') -> None:
script_args = self._process_script_args('add_install_script', args[1])
- script = self._find_source_script('add_install_script', args[0], script_args)
+ script = self._find_source_script('add_install_script', args[0], script_args, allow_built_program=True)
script.skip_if_destdir = kwargs['skip_if_destdir']
script.tag = kwargs['install_tag']
script.dry_run = kwargs['dry_run']
@@ -147,7 +149,7 @@ class MesonMain(MesonInterpreterObject):
@InterpreterObject.method('add_postconf_script')
def add_postconf_script_method(
self,
- args: T.Tuple[T.Union[str, mesonlib.File, ExternalProgram],
+ args: T.Tuple[T.Union[str, mesonlib.File, ExternalProgram, build.LocalProgram],
T.List[T.Union[str, mesonlib.File, ExternalProgram]]],
kwargs: 'TYPE_kwargs') -> None:
script_args = self._process_script_args('add_postconf_script', args[1])
@@ -164,7 +166,7 @@ class MesonMain(MesonInterpreterObject):
@InterpreterObject.method('add_dist_script')
def add_dist_script_method(
self,
- args: T.Tuple[T.Union[str, mesonlib.File, ExternalProgram],
+ args: T.Tuple[T.Union[str, mesonlib.File, ExternalProgram, build.LocalProgram],
T.List[T.Union[str, mesonlib.File, ExternalProgram]]],
kwargs: 'TYPE_kwargs') -> None:
if args[1]: