Skip to content

Commit c0b7516

Browse files
committed
Add support for LocalProgram to add_*_script()
1 parent 6c858c0 commit c0b7516

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

mesonbuild/interpreter/mesonmain.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,21 +57,23 @@ def __init__(self, build: 'build.Build', interpreter: 'Interpreter'):
5757
self.interpreter = interpreter
5858

5959
def _find_source_script(
60-
self, name: str, prog: T.Union[str, mesonlib.File, build.Executable, ExternalProgram],
61-
args: T.List[str]) -> 'ExecutableSerialisation':
60+
self, name: str, prog: T.Union[str, mesonlib.File, build.Executable, ExternalProgram, build.LocalProgram],
61+
args: T.List[str], allow_built_program: bool = False) -> 'ExecutableSerialisation':
6262
largs: T.List[T.Union[str, build.Executable, ExternalProgram, build.LocalProgram]] = []
6363

6464
if isinstance(prog, (build.Executable, ExternalProgram)):
6565
FeatureNew.single_use(f'Passing executable/found program object to script parameter of {name}',
6666
'0.55.0', self.subproject, location=self.current_node)
67-
largs.append(prog)
68-
else:
67+
elif isinstance(prog, (str, mesonlib.File)):
6968
if isinstance(prog, mesonlib.File):
7069
FeatureNew.single_use(f'Passing file object to script parameter of {name}',
7170
'0.57.0', self.subproject, location=self.current_node)
72-
found = self.interpreter.find_program_impl([prog])
73-
largs.append(found)
71+
prog = self.interpreter.find_program_impl([prog])
72+
73+
if isinstance(prog, build.LocalProgram) and not allow_built_program and not prog.run_program():
74+
self.interpreter._compiled_exe_error(prog)
7475

76+
largs.append(prog)
7577
largs.extend(args)
7678
es = self.interpreter.backend.get_executable_serialisation(largs, verbose=True)
7779
es.subproject = self.interpreter.subproject
@@ -116,7 +118,7 @@ def _process_script_args(
116118

117119
@typed_pos_args(
118120
'meson.add_install_script',
119-
(str, mesonlib.File, build.Executable, ExternalProgram),
121+
(str, mesonlib.File, build.Executable, ExternalProgram, build.LocalProgram),
120122
varargs=(str, mesonlib.File, build.BuildTarget, build.CustomTarget, build.CustomTargetIndex, ExternalProgram)
121123
)
122124
@typed_kwargs(
@@ -132,7 +134,7 @@ def add_install_script_method(
132134
T.List[T.Union[str, mesonlib.File, build.BuildTargetTypes, ExternalProgram]]],
133135
kwargs: 'AddInstallScriptKW') -> None:
134136
script_args = self._process_script_args('add_install_script', args[1])
135-
script = self._find_source_script('add_install_script', args[0], script_args)
137+
script = self._find_source_script('add_install_script', args[0], script_args, allow_built_program=True)
136138
script.skip_if_destdir = kwargs['skip_if_destdir']
137139
script.tag = kwargs['install_tag']
138140
script.dry_run = kwargs['dry_run']
@@ -147,7 +149,7 @@ def add_install_script_method(
147149
@InterpreterObject.method('add_postconf_script')
148150
def add_postconf_script_method(
149151
self,
150-
args: T.Tuple[T.Union[str, mesonlib.File, ExternalProgram],
152+
args: T.Tuple[T.Union[str, mesonlib.File, ExternalProgram, build.LocalProgram],
151153
T.List[T.Union[str, mesonlib.File, ExternalProgram]]],
152154
kwargs: 'TYPE_kwargs') -> None:
153155
script_args = self._process_script_args('add_postconf_script', args[1])
@@ -164,7 +166,7 @@ def add_postconf_script_method(
164166
@InterpreterObject.method('add_dist_script')
165167
def add_dist_script_method(
166168
self,
167-
args: T.Tuple[T.Union[str, mesonlib.File, ExternalProgram],
169+
args: T.Tuple[T.Union[str, mesonlib.File, ExternalProgram, build.LocalProgram],
168170
T.List[T.Union[str, mesonlib.File, ExternalProgram]]],
169171
kwargs: 'TYPE_kwargs') -> None:
170172
if args[1]:

0 commit comments

Comments
 (0)