aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2022-03-01 12:46:02 -0800
committerDylan Baker <dylan@pnwbakers.com>2022-03-03 10:30:31 -0800
commitbcf924dc7b7eebfdca83e74da400a060b6be4319 (patch)
tree799b8d786f2e66cd24459967191bb28c01626efc /mesonbuild/interpreter
parent5e89953dbb116c61944aa7e300c37a60c6fa07e3 (diff)
downloadmeson-bcf924dc7b7eebfdca83e74da400a060b6be4319.zip
meson-bcf924dc7b7eebfdca83e74da400a060b6be4319.tar.gz
meson-bcf924dc7b7eebfdca83e74da400a060b6be4319.tar.bz2
interpreter: annotate the find_program chain
Diffstat (limited to 'mesonbuild/interpreter')
-rw-r--r--mesonbuild/interpreter/interpreter.py31
1 files changed, 20 insertions, 11 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index 397ea92..9f12719 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -1393,7 +1393,8 @@ external dependencies (including libraries) must go to "dependencies".''')
return success
- def program_from_file_for(self, for_machine, prognames):
+ def program_from_file_for(self, for_machine: MachineChoice, prognames: T.List[mesonlib.FileOrString]
+ ) -> T.Optional[ExternalProgram]:
for p in prognames:
if isinstance(p, mesonlib.File):
continue # Always points to a local (i.e. self generated) file.
@@ -1404,7 +1405,8 @@ external dependencies (including libraries) must go to "dependencies".''')
return prog
return None
- def program_from_system(self, args, search_dirs, extra_info):
+ def program_from_system(self, args: T.List[mesonlib.FileOrString], search_dirs: T.List[str],
+ extra_info: T.List[mlog.TV_Loggable]) -> T.Optional[ExternalProgram]:
# Search for scripts relative to current subdir.
# Do not cache found programs because find_program('foobar')
# might give different results when run from different source dirs.
@@ -1430,9 +1432,11 @@ external dependencies (including libraries) must go to "dependencies".''')
if extprog.found():
extra_info.append(f"({' '.join(extprog.get_command())})")
return extprog
+ return None
- def program_from_overrides(self, command_names: T.List[str], extra_info: T.List['mlog.TV_Loggable']) -> \
- T.Optional[T.Union[ExternalProgram, 'OverrideProgram', 'build.Executable']]:
+ def program_from_overrides(self, command_names: T.List[mesonlib.FileOrString],
+ extra_info: T.List['mlog.TV_Loggable']
+ ) -> T.Optional[T.Union[ExternalProgram, OverrideProgram, build.Executable]]:
for name in command_names:
if not isinstance(name, str):
continue
@@ -1442,7 +1446,7 @@ external dependencies (including libraries) must go to "dependencies".''')
return exe
return None
- def store_name_lookups(self, command_names):
+ def store_name_lookups(self, command_names: T.List[mesonlib.FileOrString]) -> None:
for name in command_names:
if isinstance(name, str):
self.build.searched_programs.add(name)
@@ -1470,7 +1474,7 @@ external dependencies (including libraries) must go to "dependencies".''')
) -> T.Union['ExternalProgram', 'build.Executable', 'OverrideProgram']:
args = mesonlib.listify(args)
- extra_info = []
+ extra_info: T.List[mlog.TV_Loggable] = []
progobj = self.program_lookup(args, for_machine, required, search_dirs, extra_info)
if progobj is None:
progobj = self.notfound_program(args)
@@ -1487,14 +1491,15 @@ external dependencies (including libraries) must go to "dependencies".''')
if version_func:
version = version_func(progobj)
elif isinstance(progobj, build.Executable):
- interp = self
if progobj.subproject:
interp = self.subprojects[progobj.subproject].held_object
- assert isinstance(interp, Interpreter)
+ else:
+ interp = self
+ assert isinstance(interp, Interpreter)
version = interp.project_version
else:
version = progobj.get_version(self)
- is_found, not_found, found = mesonlib.version_compare_many(version, wanted)
+ is_found, not_found, _ = mesonlib.version_compare_many(version, wanted)
if not is_found:
mlog.log('Program', mlog.bold(progobj.name), 'found:', mlog.red('NO'),
'found', mlog.normal_cyan(version), 'but need:',
@@ -1513,7 +1518,9 @@ external dependencies (including libraries) must go to "dependencies".''')
progobj.was_returned_by_find_program = True
return progobj
- def program_lookup(self, args, for_machine, required: bool, search_dirs, extra_info):
+ def program_lookup(self, args: T.List[mesonlib.FileOrString], for_machine: MachineChoice,
+ required: bool, search_dirs: T.List[str], extra_info: T.List[mlog.TV_Loggable]
+ ) -> T.Optional[T.Union[ExternalProgram, build.Executable, OverrideProgram]]:
progobj = self.program_from_overrides(args, extra_info)
if progobj:
return progobj
@@ -1536,7 +1543,9 @@ external dependencies (including libraries) must go to "dependencies".''')
return progobj
- def find_program_fallback(self, fallback: str, args, required: bool, extra_info):
+ def find_program_fallback(self, fallback: str, args: T.List[mesonlib.FileOrString],
+ required: bool, extra_info: T.List[mlog.TV_Loggable]
+ ) -> T.Optional[T.Union[ExternalProgram, build.Executable, OverrideProgram]]:
mlog.log('Fallback to subproject', mlog.bold(fallback), 'which provides program',
mlog.bold(' '.join(args)))
sp_kwargs: kwargs.DoSubproject = {