???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................B
    ‡ f76  ã               @   sB  d dl Z d dlZd dlZd dlZe jdkrDdd„ Zdd„ Zdd„ Znâe jd	krnejd
krnd dl	m
Z dd„ Zn¸ej d¡rˆd dlmZ nže jd	kr&d dlZd dlZdd„ Zdd„ ZejdkrÈdd„ Zndd„ Zej d¡rîdd„ Zdd„ Zn8ejdkrdd„ Zd'dd„Zndd „ Zd!d"„ Zd#d„ Zd$d%„ Zed&kr>eƒ  dS )(é    NÚntc              C   sš   d} t j | ¡}|dkrdS |t| ƒ }t j|d…  dd¡\}}t|dd… ƒd }|dkrf|d7 }t|d	d
… ƒd }|dkr†d}|dkr–|| S dS )zÏReturn the version of MSVC that was used to build Python.

        For Python 2.3 and up, the version number is included in
        sys.version.  For earlier versions, assume the compiler is MSVC 6.
        zMSC v.éÿÿÿÿé   Nú é   éþÿÿÿé   é   é   g      $@r   )ÚsysÚversionÚfindÚlenÚsplitÚint)ÚprefixÚiÚsÚrestZmajorVersionZminorVersion© r   ú0/opt/alt/python37/lib64/python3.7/ctypes/util.pyÚ_get_build_version	   s    r   c              C   s^   t ƒ } | dkrdS | dkr d}n| dkr6d| d  }ndS ddl}d|jjkrV|d	7 }|d
 S )z%Return the name of the VC runtime dllNr   Úmsvcrtr   zmsvcr%dé
   r   z_d.pydÚdz.dll)r   Úimportlib.machineryÚ	machineryÚEXTENSION_SUFFIXES)r   ZclibnameÚ	importlibr   r   r   Úfind_msvcrt"   s    r   c             C   st   | dkrt ƒ S x`tjd  tj¡D ]J}tj || ¡}tj |¡rD|S | ¡  	d¡rTq"|d }tj |¡r"|S q"W d S )N)ÚcÚmÚPATHz.dll)
r   ÚosÚenvironr   ÚpathsepÚpathÚjoinÚisfileÚlowerÚendswith)ÚnameZ	directoryZfnamer   r   r   Úfind_library7   s    r,   ÚposixÚdarwin)Ú	dyld_findc          	   C   sL   d|  d|  d| | f g}x,|D ]$} yt | ƒS  tk
rB   w Y q X q W d S )Nzlib%s.dylibz%s.dylibz%s.framework/%s)Ú
_dyld_findÚ
ValueError)r+   Úpossibler   r   r   r,   H   s    
Úaix)r,   c          	   C   s(   d}t | dƒ}| d¡|kS Q R X dS )z,Return True if the given file is an ELF files   ELFÚbré   N)ÚopenÚread)ÚfilenameZ
elf_headerZthefiler   r   r   Ú_is_elf`   s    r9   c       
      C   s  t  dt | ¡ ¡}t d¡}|s,t d¡}|s4d S t ¡ }z||dd|jd|  g}t	t j
ƒ}d|d< d|d	< ytj|tjtj|d
}W n tk
rš   d S X | |j ¡ }W d Q R X W d y| ¡  W n tk
rÚ   Y nX X t ||¡}|sòd S x |D ]}	t|	ƒsqøt  |	¡S W d S )Nz[^\(\)\s]*lib%s\.[^\(\)\s]*ZgccZccz-Wl,-tz-oz-lÚCÚLC_ALLÚLANG)ÚstdoutÚstderrÚenv)r#   ÚfsencodeÚreÚescapeÚshutilÚwhichÚtempfileZNamedTemporaryFiler+   Údictr$   Ú
subprocessÚPopenÚPIPEZSTDOUTÚOSErrorr=   r7   ÚcloseÚFileNotFoundErrorÚfindallr9   Úfsdecode)
r+   ÚexprZ
c_compilerZtempÚargsr?   ÚprocZtraceÚresÚfiler   r   r   Ú_findLib_gccf   s@    




rT   Zsunos5c          	   C   sz   | sd S yt jdd| ft jt jd}W n tk
r:   d S X | |j ¡ }W d Q R X t d|¡}|sjd S t	 
| d¡¡S )Nz/usr/ccs/bin/dumpz-Lpv)r=   r>   s   \[.*\]\sSONAME\s+([^\s]+)r   )rG   rH   rI   ÚDEVNULLrJ   r=   r7   rA   Úsearchr#   rN   Úgroup)ÚfrQ   ÚdatarR   r   r   r   Ú_get_sonameš   s    rZ   c          	   C   s   | sd S t  d¡}|sd S y"tj|ddd| ftjtjd}W n tk
rP   d S X | |j ¡ }W d Q R X t	 
d|¡}|s€d S t | d¡¡S )NÚobjdumpz-pz-jz.dynamic)r=   r>   s   \sSONAME\s+([^\s]+)r   )rC   rD   rG   rH   rI   rU   rJ   r=   r7   rA   rV   r#   rN   rW   )rX   r[   rQ   ÚdumprR   r   r   r   rZ   «   s"    
)ZfreebsdZopenbsdZ	dragonflyc             C   sR   |   d¡}g }y"x|r,| dt| ¡ ƒ¡ qW W n tk
rD   Y nX |pPtjgS )Nó   .r   )r   Úinsertr   Úpopr1   r   Úmaxsize)ZlibnameÚpartsZnumsr   r   r   Ú_num_versionÃ   s    
rb   c          	   C   s¢   t  | ¡}d||f }t |¡}ytjdtjtjd}W n tk
rP   d}Y nX | |j	 
¡ }W d Q R X t  ||¡}|sˆtt| ƒƒS |jtd t |d ¡S )Nz:-l%s\.\S+ => \S*/(lib%s\.\S+))z/sbin/ldconfigz-r)r=   r>   ó    )Úkeyr   )rA   rB   r#   r@   rG   rH   rI   rU   rJ   r=   r7   rM   rZ   rT   Úsortrb   rN   )r+   ZenamerO   rQ   rY   rR   r   r   r   r,   Î   s     


c       	   	   C   sê   t j d¡sd S tt jƒ}d|d< |r,d}nd}d }ytj|tjtj|d}W n t	k
rb   d S X |: x2|j
D ](}| ¡ }| d¡rrt  |¡ ¡ d }qrW W d Q R X |s°d S x4| d	¡D ]&}t j |d
|  ¡}t j |¡r¼|S q¼W d S )Nz/usr/bin/crler:   r;   )z/usr/bin/crlez-64)z/usr/bin/crle)r=   r>   r?   s   Default Library Path (ELF):r5   ú:zlib%s.so)r#   r&   ÚexistsrF   r$   rG   rH   rI   rU   rJ   r=   ÚstripÚ
startswithrN   r   r'   )	r+   Úis64r?   rP   ÚpathsrQ   ÚlineÚdirZlibfiler   r   r   Ú_findLib_crleå   s6    

 rn   Fc             C   s   t t| |ƒpt| ƒƒS )N)rZ   rn   rT   )r+   rj   r   r   r   r,   	  s    c          	   C   sà   dd l }| d¡dkr&t ¡ jd }nt ¡ jd }dddddd	œ}| |d
¡}d}t |t | ¡|f ¡}yZt	j
ddgt	jt	jt	jdddœd,}t ||j ¡ ¡}|rºt | d¡¡S W d Q R X W n tk
rÚ   Y nX d S )Nr   Úlr5   z-32z-64zlibc6,x86-64zlibc6,64bitzlibc6,IA-64)z	x86_64-64zppc64-64z
sparc64-64zs390x-64zia64-64Zlibc6z\s+(lib%s\.[^\s]+)\s+\(%sz/sbin/ldconfigz-pr:   )r;   r<   )Ústdinr>   r=   r?   r   )ÚstructZcalcsizer#   ÚunameÚmachineÚgetr@   rA   rB   rG   rH   rU   rI   rV   r=   r7   rN   rW   rJ   )r+   rq   rs   Zmach_mapZabi_typeZregexÚprR   r   r   r   Ú_findSoname_ldconfig  s.    
rv   c             C   sÔ   dt  | ¡ }ddg}tj d¡}|rHx | d¡D ]}| d|g¡ q2W | dtjd|  g¡ d }yXtj	|tj
tj
d	d
}| ¡ \}}t  |t |¡¡}	x|	D ]}
t|
ƒs¬qžt |
¡S W W n tk
rÎ   Y nX |S )Nz[^\(\)\s]*lib%s\.[^\(\)\s]*Zldz-tZLD_LIBRARY_PATHrf   z-Lz-oz-l%sT)r=   r>   Zuniversal_newlines)rA   rB   r#   r$   rt   r   ÚextendÚdevnullrG   rH   rI   ZcommunicaterM   rN   r9   Ú	Exception)r+   rO   ÚcmdZlibpathr   Úresultru   ÚoutÚ_rR   rS   r   r   r   Ú_findLib_ld,  s*    

r~   c             C   s    t | ƒptt| ƒƒptt| ƒƒS )N)rv   rZ   rT   r~   )r+   r   r   r   r,   G  s    c              C   sÈ  ddl m}  tjdkr:t| jƒ t|  d¡ƒ ttdƒƒ tjdkrÄttdƒƒ ttdƒƒ ttdƒƒ tj	d	kr°t|  
d
¡ƒ t|  
d¡ƒ t|  
d¡ƒ t|  
d¡ƒ ntj	 d¡rœddl m} tjdk rtd|dtjƒ› ƒ td|  
d¡› ƒ ttdƒƒ t|  
d¡ƒ n*td|dtjƒ› ƒ td|  
d¡› ƒ tdtdƒ› ƒ td|  
tdƒ¡› ƒ tdtdƒ› ƒ td|  
tdƒ¡› ƒ n(t|  
d¡ƒ t|  
d¡ƒ ttdƒƒ d S )Nr   )Úcdllr   r   r-   r!   r    Úbz2r.   z
libm.dylibzlibcrypto.dylibzlibSystem.dylibzSystem.framework/Systemr3   )ÚCDLLl        z"Using CDLL(name, os.RTLD_MEMBER): zlibc.a(shr.o)zUsing cdll.LoadLibrary(): Zrpmz	librpm.sozlibc.a(shr_64.o)z	crypt	:: Zcryptz
crypto	:: Zcryptozlibm.sozlibcrypt.so)Zctypesr   r#   r+   Úprintr   Úloadr,   r   ÚplatformZLoadLibraryri   r   r`   ZRTLD_MEMBER)r   r   r   r   r   ÚtestO  s<    


r…   Ú__main__)F)r#   rC   rG   r   r+   r   r   r,   r„   Zctypes.macholib.dyldr/   r0   ri   Zctypes._aixrA   rE   r9   rT   rZ   rb   rn   rv   r~   r…   Ú__name__r   r   r   r   Ú<module>   s>   


2


$(
