o
    ldb                     @  sb  d dl mZ d dlZd dlZd dlZddlmZ ddlmZ ddl	m
Z
mZ ddl	mZmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ejrYddlmZmZ ddlmZ eejejhd\ddZG dd deZG dd deZ G dd  d eZ!G d!d" d"eZ"G d#d$ d$eZ#G d%d& d&eZ$G d'd( d(eZ%G d)d* d*eZ&G d+d, d,eZ'G d-d. d.eZ(G d/d0 d0eZ)G d1d2 d2eZ*G d3d4 d4eZ+G d5d6 d6eZ,G d7d8 d8eZ-G d9d: d:eZ.G d;d< d<eZ/G d=d> d>eZ0eejej1ej2hd\d?d@Z3eejej2hd\dAdBZ4edCejej1ej5ejge%dDdEZ6edFej7ej2gee dGZ8edHejej1ge(dIZ9edJejej1ge'dIZ:edKejej1ge&dIZ;edLejej1ge$dMdNZ<edOej2ejgdPe"dQZ=edRej7ej2ge,e-dGZ>edSej7ej2ge.e/dGZ?edTejej2ejge0dUdV dWZ@edXejej2ejge0dYdV dWZAedZejej2ejge0d[dV dWZBdS )]    )annotationsN   )mesonlib)mlog   )DependencyExceptionDependencyMethods)BuiltinDependencySystemDependency)CMakeDependency)ConfigToolDependency)DependencyFactoryfactory_methods)PkgConfigDependency)EnvironmentMachineChoice)DependencyGeneratorenv'Environment'for_machine'MachineChoice'kwargsT.Dict[str, T.Any]methodsT.List[DependencyMethods]returnT.List['DependencyGenerator']c              	   C  s   | dd}|dvrtd| dg }tj|v r/|dkr d}nd}|tjt|| ||d	 tj|v rA|tjt	d
| ||d	 |S )Nlanguagec)r   cppfortranz	Language z is not supported with NetCDF.r    znetcdf-fortranZnetcdfr   ZNetCDF)
getr   r   	PKGCONFIGappend	functoolspartialr   CMAKEr   )r   r   r   r   r   
candidatespkg r*   {home/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/dependencies/misc.pynetcdf_factory$   s   

r,   c                         e Zd Zd	 fddZ  ZS )
DlBuiltinDependencynamestrr   r   r   r   c                   s8   t  ||| d| _| jdd|d rd| _d S d S )Nz0.62.0zDconsider checking for `dlopen` with and without `find_library('dl')`Zdlopenz#include <dlfcn.h>r   T)super__init__feature_sinceclib_compilerhas_functionis_found)selfr/   r   r   	__class__r*   r+   r3   >   s
   
zDlBuiltinDependency.__init__r/   r0   r   r   r   r   __name__
__module____qualname__r3   __classcell__r*   r*   r9   r+   r.   =       r.   c                      r-   )
DlSystemDependencyr/   r0   r   r   r   r   c                   \   t  ||| d| _| jdd|}| jd|g | j| _|d r*| jr,d| _d S d S d S )Nr1   zdlfcn.h dlr   T	r2   r3   r4   r5   
has_headerfind_librarylibtype	link_argsr7   r8   r/   r   r   hr9   r*   r+   r3   G      
zDlSystemDependency.__init__r;   r<   r*   r*   r9   r+   rB   F   rA   rB   c                
      s6   e Zd Zddddddddd	d
	Zd fddZ  ZS )OpenMPDependencyz5.0z5.0-revision1z4.5z4.03.1z3.0z2.5z2.0z1.0)	Z201811Z201611Z201511Z201307Z201107Z200805Z200505Z200203Z199810environmentr   r   r   r   Nonec              
     s  | d}t jd|||d d| _| j dkr*d| _d| _| j  | _| _	d S | j dkrBd| _d| _| j  | _| _	d S z| jj
d	d
| j| j | gddd }W n tjyv } ztd t| d }W Y d }~nd }~ww |rz| j| | _W n ty   td|  |d	krtd Y d S w d}|D ]"}| jj|d
| j| gddd rd| _| j | _| j | _	 nq| jsttdd d S d S d S )Nr   Zopenmpr!   FZnagforrO   TZpgiZ_OPENMPrD   disable_cacher   z,OpenMP support not available in the compilerz*Could not find an OpenMP version matching zbThis can be caused by flags such as gcc's `-fdirectives-only`, which affect preprocessor behavior.)zomp.hz	omp_lib.h)dependenciesrS   zWARNING:zOpenMP found but omp.h missing.)r"   r2   r3   r7   r5   Zget_idversionZopenmp_flagscompile_argsrJ   
get_definer   r   ZEnvironmentExceptionr   debugVERSIONSKeyErrorrG   Zopenmp_link_flagslogZyellow)r8   rP   r   r   Zopenmp_dateeZheader_namesr/   r9   r*   r+   r3   `   s\   



zOpenMPDependency.__init__rP   r   r   r   r   rQ   )r=   r>   r?   rY   r3   r@   r*   r*   r9   r+   rN   R   s    rN   c                      s   e Zd Zd fd	d
Z  ZS )ThreadDependencyr/   r0   rP   r   r   r   r   rQ   c                   sL   t  ||| d| _| jsg | _g | _d S | j|| _| j|| _d S )NT)r2   r3   r7   r5   rV   rJ   Zthread_flagsZthread_link_flagsr8   r/   rP   r   r9   r*   r+   r3      s   
zThreadDependency.__init__)r/   r0   rP   r   r   r   r   rQ   r<   r*   r*   r9   r+   r^      rA   r^   c                      r-   )
BlocksDependencyrP   r   r   r   r   rQ   c                   s   t  d|| d| _d| _| jj| j  rg | _g | _	n%dg| _dg| _	| j
jdd|ddr8| j
d	|g sCttd
d d S d}| j
j|| j| j	 d#}|jdkrittd
d 	 W d    d S d| _W d    d S 1 sww   Y  d S )NZblocksFz-fblocksz-lBlocksRuntimezBlock.hrD   TrR   ZBlocksRuntimezERROR:zBlocksRuntime not found.z
            int main(int argc, char **argv)
            {
                int (^callback)(void) = ^ int (void) { return 0; };
                return callback();
            })
extra_argsr   z+Compiler does not support blocks extension.)r2   r3   r/   r7   r   machinesr   Z	is_darwinrV   rJ   r5   rG   rH   r   r[   Zredcompile
returncode)r8   rP   r   sourcepr9   r*   r+   r3      s*   
"zBlocksDependency.__init__r]   r<   r*   r*   r9   r+   r`      rA   r`   c                      s6   e Zd ZdgZdZdZd fd	d
ZdddZ  ZS )PcapDependencyConfigToolzpcap-configz--helpr/   r0   rP   r   r   r   c                   sV   t  ||| | jsd S | dgd| _| dgd| _| jd u r)|  | _d S d S N--cflagsrV   --libsrJ   )r2   r3   r7   get_config_valuerV   rJ   rU   get_pcap_lib_versionr_   r9   r*   r+   r3      s   
z!PcapDependencyConfigTool.__init__r   T.Optional[str]c                 C  sR   | j j| js
d S | jddd| j g | g}tddt|}tdd|}|S )NZpcap_lib_versionstringz#include <pcap.h>zlibpcap version rD   z -- Apple version.*$)	r   rb   Zmatches_build_machiner   r5   Zget_return_valueresubr0   )r8   vr*   r*   r+   rl      s   
z-PcapDependencyConfigTool.get_pcap_lib_versionr/   r0   rP   r   r   r   )r   rm   )	r=   r>   r?   tools	tool_nameZskip_versionr3   rl   r@   r*   r*   r9   r+   rg      s    
rg   c                      (   e Zd ZdgZdZd
 fdd	Z  ZS )CupsDependencyConfigToolzcups-configr/   r0   rP   r   r   r   c                   s@   t  ||| | jsd S | dgd| _| ddgd| _d S )Nri   rV   z	--ldflagsrj   rJ   r2   r3   r7   rk   rV   rJ   r_   r9   r*   r+   r3      s
   z!CupsDependencyConfigTool.__init__rr   r=   r>   r?   rs   rt   r3   r@   r*   r*   r9   r+   rv          rv   c                      ru   )LibWmfDependencyConfigToolzlibwmf-configr/   r0   rP   r   r   r   c                   s>   t  ||| | jsd S | dgd| _| dgd| _d S rh   rw   r_   r9   r*   r+   r3      s
   z#LibWmfDependencyConfigTool.__init__rr   rx   r*   r*   r9   r+   rz      ry   rz   c                      ru   )LibGCryptDependencyConfigToolzlibgcrypt-configr/   r0   rP   r   r   r   c                   R   t  ||| | jsd S | dgd| _| dgd| _| dgdd | _d S Nri   rV   rj   rJ   z	--versionrU   r   r2   r3   r7   rk   rV   rJ   rU   r_   r9   r*   r+   r3         z&LibGCryptDependencyConfigTool.__init__rr   rx   r*   r*   r9   r+   r{      ry   r{   c                      s(   e Zd ZdgZdZd fd	d
Z  ZS )GpgmeDependencyConfigToolzgpgme-configz
gpg-configr/   r0   rP   r   r   r   c                   r|   r}   r~   r_   r9   r*   r+   r3   	  r   z"GpgmeDependencyConfigTool.__init__rr   rx   r*   r*   r9   r+   r     ry   r   c                      s   e Zd Zd fddZ  ZS )ShadercDependencyrP   r   r   r   c                   s   t  d|| d}d}||g}| jr|  |  }|D ])}|||g | _| jd urFd| _| jrC||krCt	d|d| j
d  d S qd S )Nshadercshaderc_combinedZshaderc_sharedTzStatic library z not found for dependency z, may not be statically linked)r2   r3   staticreverseZget_compilerrH   rJ   r7   r   warningr/   )r8   rP   r   Z
static_libZ
shared_libZlibscclibr9   r*   r+   r3     s$   

zShadercDependency.__init__)rP   r   r   r   r<   r*   r*   r9   r+   r     s    r   c                      s0   e Zd ZdZdZg dZdd fddZ  ZS )CursesConfigToolDependencyzUse the curses config tools.zcurses-config)zncursesw6-configzncursesw5-configzncurses6-configzncurses5-configzncurses5.4-configNr/   r0   r   r   r   r   r   rm   c                   s@   t  |||| | jsd S | dgd| _| dgd| _d S rh   rw   )r8   r/   r   r   r   r9   r*   r+   r3   4  s
   z#CursesConfigToolDependency.__init__N)r/   r0   r   r   r   r   r   rm   )r=   r>   r?   __doc__toolrs   r3   r@   r*   r*   r9   r+   r   ,  s
    r   c                      s"   e Zd ZdZd
 fdd	Z  ZS )CursesSystemDependencya  Curses dependency the hard way.

    This replaces hand rolled find_library() and has_header() calls. We
    provide this for portability reasons, there are a large number of curses
    implementations, and the differences between them can be very annoying.
    r/   r0   r   r   r   r   c              	     s  t  ||| ddgfdddgfdg dfdd	gfg}|D ]\}}| j||g }|r|D ]}| j|d
|}	|	d rd| _|| _|dr^| jdd| d|g | g\}
}|
	d| _
|dr| jdd| d|g | g\}}| jdd| d|g | g\}}| d| | _
|d}|r| j
rt| j
|| _ntd | jrtd| td|  nq.| jr d S qd S )Npdcurseszpdcurses/curses.hncurseswzncursesw/ncurses.h	ncurses.hncurses)zncurses/ncurses.hzncurses/curses.hr   curseszcurses.hrD   r   TZNCURSES_VERSIONz
#include <>"ZPDC_VER_MAJORZPDC_VER_MINOR.rU   z6Cannot determine version of curses to compare against.zCurses library:zCurses header:)r2   r3   r5   rH   rG   r7   rJ   
startswithrW   striprU   r"   r   Zversion_comparer   r   rX   )r8   r/   r   r   r(   r   headerslheaderrL   rq   _Zv_majorZv_minorreqr9   r*   r+   r3   E  sF   


"
""

zCursesSystemDependency.__init__r;   )r=   r>   r?   r   r3   r@   r*   r*   r9   r+   r   <  s    r   c                      r-   )
IconvBuiltinDependencyr/   r0   r   r   r   r   c                   :   t  ||| d| _d}| j||d rd| _d S d S )N)0.60.0zKconsider checking for `iconv_open` with and without `find_library('iconv')`z9#include <iconv.h>

int main() {
    iconv_open("","");
}r   Tr2   r3   r4   r5   Zlinksr7   r8   r/   r   r   coder9   r*   r+   r3   t     
zIconvBuiltinDependency.__init__r;   r<   r*   r*   r9   r+   r   s  rA   r   c                      r-   )
IconvSystemDependencyr/   r0   r   r   r   r   c                   rC   )N)r   zIconsider checking for `iconv_open` with and without find_library('iconv')ziconv.hrD   iconvr   TrF   rK   r9   r*   r+   r3   ~  rM   zIconvSystemDependency.__init__r;   r<   r*   r*   r9   r+   r   }  rA   r   c                      r-   )
IntlBuiltinDependencyr/   r0   r   r   r   r   c                   r   )Nz0.59.0zHconsider checking for `ngettext` with and without `find_library('intl')`z@#include <libintl.h>

int main() {
    gettext("Hello world");
}r   Tr   r   r9   r*   r+   r3     r   zIntlBuiltinDependency.__init__r;   r<   r*   r*   r9   r+   r     rA   r   c                      r-   )
IntlSystemDependencyr/   r0   r   r   r   r   c                   s   t  ||| d| _| jdd|}| jd|g | j| _|d r<| jr>d| _| j	r@| 
t|| jddisBd| _d S d S d S d S d S )	Nr   z	libintl.hrD   intlr   Tr   F)r2   r3   r4   r5   rG   rH   rI   rJ   r7   r   _add_sub_dependencyiconv_factoryr   rK   r9   r*   r+   r3     s   zIntlSystemDependency.__init__r;   r<   r*   r*   r9   r+   r     rA   r   c                      r-   )
OpensslSystemDependencyr/   r0   r   r   r   r   c                   s  t  ||| d| jd}| jdd|d sd S | jdd|g | gd | _| jse| jdd|g | gd   s<d S  d	  fd
ddD }ddd |d d D t	t
d|d  d  | _|dkr| t|| j|r| t|| j|rd| _d S | j|d|g | j| _| jsd S | jsd| _d S |dkr| t|| j|rd| _d S d S |dkr| jjddd|| gdd }|r| t|| ji rd| _| jd|g | j}|r| j| d S d S d S )Nsystem)methodr   zopenssl/ssl.hrD   r   ZOPENSSL_VERSION_STRz#include <openssl/opensslv.h>ZOPENSSL_VERSION_NUMBERLc                   s(   g | ]}t  d dd| ? d@ qS )r            )intrstrip.0iZversion_hexr*   r+   
<listcomp>  s   ( z4OpensslSystemDependency.__init__.<locals>.<listcomp>)   r      r   r   c                 s  s    | ]}t |V  qd S r   )r0   r   r*   r*   r+   	<genexpr>  s    z3OpensslSystemDependency.__init__.<locals>.<genexpr>   ar   opensslTr   libssl	libcryptozopenssl/opensslconf.hZOPENSSL_THREADS)rT   rE   )r2   r3   r   r5   rG   rW   rU   r   joinchrordr   libssl_factoryr   libcrypto_factoryr7   rH   lstriprI   rJ   Zhas_header_symbolthreads_factoryextend)r8   r/   r   r   Zdependency_kwargsZversion_intsZuse_threadsZsublibr9   r   r+   r3     sL   
6

z OpensslSystemDependency.__init__r;   r<   r*   r*   r9   r+   r     rA   r   c              	   C  s   g }t j|v rg d}|D ]}|tt|| | q| j|  sBt j|v r2|tt	d| | t j
|v rB|ttd| | |S )N)r   r   r   r   r   )r   r#   r$   r%   r&   r   rb   Z
is_windowsCONFIG_TOOLr   SYSTEMr   )r   r   r   r   r(   Zpkgconfig_filesr)   r*   r*   r+   curses_factory  s   


r   c                   s   g }t j|v r9dg}ddg}d jtdr( fdd|| D }n fdd|| D }|| t j|v rH|	t
t  |S )	zCustom DependencyFactory for ShaderC.

    ShaderC's odd you get three different libraries from the same build
    thing are just easier to represent as a separate function than
    twisting DependencyFactory even more.
    r   r   Zshaderc_staticr   Zprefer_staticc                      g | ]
}t t| qS r*   r%   r&   r   r   r/   r   r   r*   r+   r         z#shaderc_factory.<locals>.<listcomp>c                   r   r*   r   r   r   r*   r+   r     r   )r   r#   r"   ZcoredataZ
get_optionr   Z	OptionKeyr   r   r$   r%   r&   r   )r   r   r   r   r(   Zshared_libsZstatic_libsr   r*   r   r+   shaderc_factory  s   


r   ZcupsZCups)configtool_class
cmake_namerE   )Zbuiltin_classsystem_classZgpgme)r   Z	libgcryptZlibwmfZpcapZlibpcap)r   Zpkgconfig_namethreadsZThreads)r   r   r   r   r   c                 C  s   t d|t|ddgdS )NOpenSSLOpenSSL::CryptoOpenSSL::SSLmodulesr   dictr/   r   r   r*   r*   r+   <lambda>Q  s    r   )r   Zcmake_classr   c                 C     t d|t|dgdS )Nr   r   r   r   r   r*   r*   r+   r   X      r   c                 C  r   )Nr   r   r   r   r   r*   r*   r+   r   _  r   )
r   r   r   r   r   r   r   r   r   r   )C
__future__r   r%   ro   typingTrD   r   r   baser   r   r	   r
   Zcmaker   Z
configtoolr   factoryr   r   Z	pkgconfigr   TYPE_CHECKINGrP   r   r   r   r#   r'   r,   r.   rB   rN   r^   r`   rg   rv   rz   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   ZEXTRAFRAMEWORKZcups_factoryZBUILTINZ
dl_factoryZgpgme_factoryZlibgcrypt_factoryZlibwmf_factoryZpcap_factoryr   r   Zintl_factoryZopenssl_factoryr   r   r*   r*   r*   r+   <module>   s   	:!!7

1"








