diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2022-03-01 12:46:02 -0800 |
---|---|---|
committer | Dylan Baker <dylan@pnwbakers.com> | 2022-03-03 10:30:31 -0800 |
commit | bcf924dc7b7eebfdca83e74da400a060b6be4319 (patch) | |
tree | 799b8d786f2e66cd24459967191bb28c01626efc /mesonbuild/interpreter/interpreter.py | |
parent | 5e89953dbb116c61944aa7e300c37a60c6fa07e3 (diff) | |
download | meson-bcf924dc7b7eebfdca83e74da400a060b6be4319.zip meson-bcf924dc7b7eebfdca83e74da400a060b6be4319.tar.gz meson-bcf924dc7b7eebfdca83e74da400a060b6be4319.tar.bz2 |
interpreter: annotate the find_program chain
Diffstat (limited to 'mesonbuild/interpreter/interpreter.py')
-rw-r--r-- | mesonbuild/interpreter/interpreter.py | 31 |
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 = { |