@@ -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