o
    uJAf*&                     @  s<  U d dl mZ d dlZd dlZd dlZd dlZddlmZm	Z	m
Z
mZ ddlmZmZmZ ddlmZ ejrkddlmZ dd	lmZmZmZ ejeeeejed
f f Zejejeef d
f Zejej e eef Z!G dd dej"Z#e# Z$e% Z&de'd< d0ddZ(dddddddddd d!d"Z)d1d2d)d*Z*d3d.d/Z+dS )4    )annotationsN   )ExternalDependencyDependencyExceptionDependencyMethodsNotFoundDependency   )listifyMachineChoice
PerMachine)mlog)Environment)DependencyFactoryWrappedFactoryFuncDependencyGenerator.c                   @  s6   e Zd ZU ded< i Zded< dd	d
ZdddZdS )DependencyPackageszT.Dict[str, PackageTypes]datazT.Dict[str, str]defaultskeystrreturnPackageTypesc                 C  s6   || j v r| j | }td|  | j| S t|)Nzmesonbuild.dependencies.)r   	importlibimport_moduler   KeyError)selfr   Zmodn r   C/usr/lib/python3.10/site-packages/mesonbuild/dependencies/detect.py__missing__$   s
   


zDependencyPackages.__missing__objectboolc                 C  s   || j v p	|| jv S N)r   r   )r   r   r   r   r   __contains__,   s   zDependencyPackages.__contains__N)r   r   r   r   )r   r   r   r    )__name__
__module____qualname____annotations__r   r   r"   r   r   r   r   r       s
   
 
r   z
T.Set[str]_packages_accept_languagenamer   kwargsT.Dict[str, T.Any]r   
'TV_DepID'c                 C  s   d| ff}ddl m} t|dksJ d| D ]6\}}|dv r"qt|tr<|D ]	}t|ts2J q)ttt	|}n
t|tt
tfsFJ g |||fR }q|S )Nr(   r   )permitted_dependency_kwargs   z_Extra kwargs have been added to dependency(), please review if it makes sense to handle it here>   nativerequiredinclude_typeZnot_found_messagedefault_optionsversionZallow_fallbackfallback)Zinterpreterr,   lenitems
isinstancelistr   tuple	frozensetr	   r    int)r(   r)   Z
identifierr,   r   valueir   r   r   get_dep_identifier3   s   


r=   ZBoostZCUDADUBZGMockZGTestZHDF5LLVMZMPIZNetCDFZOpenMPZ	WxWidgets)boostcudadubgmockgtesthdf5llvmmpinetcdfopenmp	wxwidgetsenv'Environment'T.Dict[str, object]
candidates)T.Optional[T.List['DependencyGenerator']]1T.Union['ExternalDependency', NotFoundDependency]c                 C  s  | sJ | dd}t|tstdt| ddts td|  }|tvr3d|v r3t|  dt| d	dttfsBtd
t ||}| ddrQt	j
nt	j}tdd| d }|d u rht| |||}g }	g }
d}|D ]}z| }|  |
| W n8 ty } z,t|tjsJ dd|  d|j d| }t| |f|_|	| W Y d }~qpd }~ww |	d  | }|rd| d }d|v r|d|j d 7 }| rg }|jr|t|j | }|r|d| d  tj|t||d tdg|R   |  S qpdd |
D }|r"t |}nd}t|t||d t!d|r;d| dnd |ra|	rM|	d rM|	d td |  d!|r]d"|  d t"| |S )#Nr/   Tz%Keyword "required" must be a boolean.method z"Keyword "method" must be a string.languagez7 dependency does not accept "language" keyword argumentr2   z)Keyword "Version" must be string or list.r.   Fz
Build-timezRun-timez dependencyzfor mypyzDependency lookup for z with method z	 failed: (z) zfor  )zfound:YESc                 S  s   g | ]
}|  r|  qS r   )	log_tried).0dr   r   r   
<listcomp>   s    z,find_external_dependency.<locals>.<listcomp>NOz(tried r   zDependency "z" not foundz, tried )#getr6   r    r   r   lowerr'   r7   display_name_mapr
   BUILDHOSTr   _build_external_dependency_list_check_versionappend	functoolspartialfuncrX   r   debugargslog_detailsrS   foundr2   normal_cyanlog_infologboldgreenformat_listredr   )r(   rK   r)   rN   r/   lnameZdisplay_namefor_machineZ	type_textZpkg_excZpkgdepdetailscrZ   eZ	bettermsginform   Ztried_methodsZtriedr   r   r   find_external_dependency]   s   



(
ry   rt   r
   T.List['DependencyGenerator']c                 C  s  d|v r|d dd t D vrtd|d |  }|tv rPtt| tr@tdt| }t	|t
r>t|||}|g}|S tdt| }||||}|S g }	|dddkr_g d}
n|d g}
d	|
v ryd
dlm} |	t|| || d|
v rd
dlm} |	t|| || d|
v r|j|  rd
dlm} |	t|| || d|
v rd
dlm} |	t|| || |	S )NrQ   c                 S  s   g | ]}|j qS r   )r;   )rY   rw   r   r   r   r[      s    z3_build_external_dependency_list.<locals>.<listcomp>zmethod {!r} is invalidzT.Type[ExternalDependency]z.T.Union[DependencyFactory, WrappedFactoryFunc]auto)
pkg-configextraframeworkcmakerB   r   )DubDependencyr|   )PkgConfigDependencyr}   )ExtraFrameworkDependencyr~   )CMakeDependency)r   r   formatr^   packagesr6   typeTcast
issubclassr   re   rf   r]   rB   r   rd   	pkgconfigr   machines	is_darwinZ	frameworkr   r~   r   )r(   rK   rt   r)   rs   Zentry1rg   depZentry2rN   methodsr   r   r   r   r   r   r   rb      s>   


rb   )r(   r   r)   r*   r   r+   r!   )
r(   r   rK   rL   r)   rM   rN   rO   r   rP   )
r(   r   rK   rL   rt   r
   r)   r*   r   rz   ),
__future__r   collectionsre   r   typingr   baser   r   r   r   mesonlibr	   r
   r   rR   r   TYPE_CHECKINGenvironmentr   factoryr   r   r   Unionr   r    r:   TupleZTV_DepIDEntryZTV_DepIDTyper   UserDictr   r   setr'   r&   r=   r_   ry   rb   r   r   r   r   <module>   s<   
X