@@ -41,12 +41,13 @@ def set_program_override(pkg_bin: ExternalProgram, for_machine: MachineChoice) -
4141 PkgConfigInterface .pkg_bin_per_machine [for_machine ] = pkg_bin
4242
4343 @staticmethod
44- def instance (env : Environment , for_machine : MachineChoice , silent : bool ) -> T .Optional [PkgConfigInterface ]:
44+ def instance (env : Environment , for_machine : MachineChoice , silent : bool ,
45+ extra_paths : T .Optional [T .List [str ]] = None ) -> T .Optional [PkgConfigInterface ]:
4546 '''Return a pkg-config implementation singleton'''
4647 for_machine = for_machine if env .is_cross_build () else MachineChoice .HOST
4748 impl = PkgConfigInterface .class_impl [for_machine ]
4849 if impl is False :
49- impl = PkgConfigCLI (env , for_machine , silent , PkgConfigInterface .pkg_bin_per_machine [for_machine ])
50+ impl = PkgConfigCLI (env , for_machine , silent , PkgConfigInterface .pkg_bin_per_machine [for_machine ], extra_paths )
5051 if not impl .found ():
5152 impl = None
5253 if not impl and not silent :
@@ -55,7 +56,9 @@ def instance(env: Environment, for_machine: MachineChoice, silent: bool) -> T.Op
5556 return impl
5657
5758 @staticmethod
58- def _cli (env : Environment , for_machine : MachineChoice , silent : bool = False ) -> T .Optional [PkgConfigCLI ]:
59+ def _cli (env : Environment , for_machine : MachineChoice ,
60+ extra_paths : T .Optional [T .List [str ]] = None ,
61+ silent : bool = False ) -> T .Optional [PkgConfigCLI ]:
5962 '''Return the CLI pkg-config implementation singleton
6063 Even when we use another implementation internally, external tools might
6164 still need the CLI implementation.
@@ -66,15 +69,16 @@ def _cli(env: Environment, for_machine: MachineChoice, silent: bool = False) ->
6669 if impl and not isinstance (impl , PkgConfigCLI ):
6770 impl = PkgConfigInterface .class_cli_impl [for_machine ]
6871 if impl is False :
69- impl = PkgConfigCLI (env , for_machine , silent , PkgConfigInterface .pkg_bin_per_machine [for_machine ])
72+ impl = PkgConfigCLI (env , for_machine , silent , PkgConfigInterface .pkg_bin_per_machine [for_machine ], extra_paths )
7073 if not impl .found ():
7174 impl = None
7275 PkgConfigInterface .class_cli_impl [for_machine ] = impl
7376 return T .cast ('T.Optional[PkgConfigCLI]' , impl ) # Trust me, mypy
7477
7578 @staticmethod
76- def get_env (env : Environment , for_machine : MachineChoice , uninstalled : bool = False ) -> EnvironmentVariables :
77- cli = PkgConfigInterface ._cli (env , for_machine )
79+ def get_env (env : Environment , for_machine : MachineChoice , uninstalled : bool = False ,
80+ extra_paths : T .Optional [T .List [str ]] = None ) -> EnvironmentVariables :
81+ cli = PkgConfigInterface ._cli (env , for_machine , extra_paths )
7882 return cli ._get_env (uninstalled ) if cli else EnvironmentVariables ()
7983
8084 @staticmethod
@@ -123,11 +127,13 @@ class PkgConfigCLI(PkgConfigInterface):
123127 '''pkg-config CLI implementation'''
124128
125129 def __init__ (self , env : Environment , for_machine : MachineChoice , silent : bool ,
126- pkgbin : T .Optional [ExternalProgram ] = None ) -> None :
130+ pkgbin : T .Optional [ExternalProgram ] = None ,
131+ extra_paths : T .Optional [T .List [str ]] = None ) -> None :
127132 super ().__init__ (env , for_machine )
128133 self ._detect_pkgbin (pkgbin )
129134 if self .pkgbin and not silent :
130135 mlog .log ('Found pkg-config:' , mlog .green ('YES' ), mlog .bold (f'({ self .pkgbin .get_path ()} )' ), mlog .blue (self .pkgbin_version ))
136+ self .extra_paths = extra_paths or []
131137
132138 def found (self ) -> bool :
133139 return bool (self .pkgbin )
@@ -258,7 +264,7 @@ def _get_env(self, uninstalled: bool = False) -> EnvironmentVariables:
258264 key = OptionKey ('pkg_config_path' , machine = self .for_machine )
259265 pathlist = self .env .coredata .optstore .get_value_for (key )
260266 assert isinstance (pathlist , list )
261- extra_paths : T .List [str ] = pathlist [:]
267+ extra_paths : T .List [str ] = pathlist + self . extra_paths
262268 if uninstalled :
263269 bpath = self .env .get_build_dir ()
264270 if bpath is not None :
@@ -297,11 +303,13 @@ def _call_pkgbin(self, args: T.List[str], env: T.Optional[EnvironOrDict] = None)
297303class PkgConfigDependency (ExternalDependency ):
298304
299305 def __init__ (self , name : str , environment : Environment , kwargs : T .Dict [str , T .Any ],
300- language : T .Optional [str ] = None ) -> None :
306+ language : T .Optional [str ] = None ,
307+ extra_paths : T .Optional [T .List [str ]] = None ) -> None :
301308 super ().__init__ (DependencyTypeName ('pkgconfig' ), environment , kwargs , language = language )
302309 self .name = name
303310 self .is_libtool = False
304- pkgconfig = PkgConfigInterface .instance (self .env , self .for_machine , self .silent )
311+ self .extra_paths = extra_paths or []
312+ pkgconfig = PkgConfigInterface .instance (self .env , self .for_machine , self .silent , self .extra_paths )
305313 if not pkgconfig :
306314 msg = f'Pkg-config for machine { self .for_machine } not found. Giving up.'
307315 if self .required :
0 commit comments