@ -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 ' ) :