diff options
Diffstat (limited to 'mesonbuild/interpreter/interpreter.py')
-rw-r--r-- | mesonbuild/interpreter/interpreter.py | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py index b31b7a8..5339be2 100644 --- a/mesonbuild/interpreter/interpreter.py +++ b/mesonbuild/interpreter/interpreter.py @@ -1493,12 +1493,12 @@ external dependencies (including libraries) must go to "dependencies".''') required: bool = True, silent: bool = True, wanted: T.Union[str, T.List[str]] = '', search_dirs: T.Optional[T.List[str]] = None, - version_func: T.Optional[T.Callable[[T.Union['ExternalProgram', 'build.Executable', 'OverrideProgram']], str]] = None - ) -> T.Union['ExternalProgram', 'build.Executable', 'OverrideProgram']: + version_func: T.Optional[T.Callable[[T.Union['ExternalProgram', 'build.Executable', 'OverrideProgram']], str]] = None, + depname: T.Optional[str] = None, varname: T.Optional[str] = None) -> T.Union['ExternalProgram', 'build.Executable', 'OverrideProgram']: args = mesonlib.listify(args) extra_info: T.List[mlog.TV_Loggable] = [] - progobj = self.program_lookup(args, for_machine, required, search_dirs, extra_info) + progobj = self.program_lookup(args, for_machine, required, search_dirs, depname, varname, extra_info) if progobj is None: progobj = self.notfound_program(args) @@ -1542,7 +1542,9 @@ external dependencies (including libraries) must go to "dependencies".''') return progobj 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] + required: bool, search_dirs: T.List[str], + depname: T.Optional[str], varname: T.Optional[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: @@ -1556,6 +1558,20 @@ external dependencies (including libraries) must go to "dependencies".''') return self.find_program_fallback(fallback, args, required, extra_info) progobj = self.program_from_file_for(for_machine, args) + if progobj is None and depname: + # Check if the program path is found in a pkgconfig variable. + # Currently only used internally by gnome and wayland modules, this + # code path is not (yet?) exposed in public find_program() function. + name = args[0] + if not varname: + varname = name.replace('-', '_') + df = DependencyFallbacksHolder(self, [depname], allow_fallback=False) + dep = df.lookup({'native': for_machine == MachineChoice.BUILD, + 'required': False}) + if dep.found(): + path = dep.get_variable(pkgconfig=varname, default_value='') + if path: + progobj = ExternalProgram(name, [path], silent=True) if progobj is None: progobj = self.program_from_system(args, search_dirs, extra_info) if progobj is None and args[0].endswith('python3'): |