
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a76  ã                   @   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/python38/lib64/python3.8/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Údú.dll)r   Úimportlib.machineryÚ	machineryÚEXTENSION_SUFFIXES)r   ZclibnameÚ	importlibr   r   r   Úfind_msvcrt"   s    r    c                 C   sx   | dkrt ƒ S tjd  tj¡D ]R}tj || ¡}tj |¡rF|  S | ¡  	d¡rVq |d }tj |¡r |  S q d S )N)ÚcÚmÚPATHr   )
r    ÚosÚenvironr   ÚpathsepÚpathÚjoinÚisfileÚlowerÚendswith)ÚnameZ	directoryZfnamer   r   r   Úfind_library7   s    
r-   ÚposixÚdarwin)Ú	dyld_findc              	   C   sP   d|  d|  d| | f g}|D ],} zt | ƒW   S  tk
rH   Y qY qX q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   s4   d}t | dƒ�}| d¡|kW  5 Q R £ 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    r:   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	< ztj|tjtj|d
�}W n tk
r    Y W ¢$d S X |� |j ¡ }W 5 Q R X W 5 z| ¡  W n t	k
rà   Y nX X t ||¡}|sød S |D ]}	t|	ƒ�s� qüt  |	¡  S d S )Nú[^\(\)\s]*lib%s\.[^\(\)\s]*ZgccZccz-Wl,-tú-oz-lÚCÚLC_ALLÚLANG©ÚstdoutÚstderrÚenv)r$   ÚfsencodeÚreÚescapeÚshutilÚwhichÚtempfileZNamedTemporaryFileÚcloseÚFileNotFoundErrorr,   Údictr%   Ú
subprocessÚPopenÚPIPEZSTDOUTÚOSErrorrA   r8   Úfindallr:   Úfsdecode)
r,   ÚexprZ
c_compilerZtempÚargsrC   ÚprocZtraceÚresÚfiler   r   r   Ú_findLib_gccf   sB    


ý

rX   Zsunos5c              	   C   s|   | sd S zt jdd| ft jt jd�}W n tk
r<   Y d S X |� |j ¡ }W 5 Q R X t d|¡}|sld S t	 
| d¡¡S )Nz/usr/ccs/bin/dumpz-Lpv©rA   rB   s   \[.*\]\sSONAME\s+([^\s]+)r   )rM   rN   rO   ÚDEVNULLrP   rA   r8   rE   Úsearchr$   rR   Úgroup)ÚfrU   ÚdatarV   r   r   r   Ú_get_sonameš   s    þ
r_   c              	   C   s’   | sd S t  d¡}|sd S z"tj|ddd| ftjtjd�}W n tk
rR   Y d S X |� |j ¡ }W 5 Q R X t	 
d|¡}|s‚d S t | d¡¡S )NÚobjdumpú-pz-jz.dynamicrY   s   \sSONAME\s+([^\s]+)r   )rG   rH   rM   rN   rO   rZ   rP   rA   r8   rE   r[   r$   rR   r\   )r]   r`   rU   ÚdumprV   r   r   r   r_   «   s$    
þ
)ZfreebsdZopenbsdZ	dragonflyc                 C   sN   |   d¡}g }z|r*| dt| ¡ ƒ¡ qW n tk
r@   Y nX |pLtjgS )Nó   .r   )r   Úinsertr   Úpopr2   r   Úmaxsize)ZlibnameÚpartsZnumsr   r   r   Ú_num_versionÃ   s    
rh   c              	   C   s¢   t  | ¡}d||f }t |¡}ztjdtjtjd�}W n tk
rP   d}Y nX |� |j	 
¡ }W 5 Q R X t  ||¡}|sˆtt| ƒƒS |jtd� t |d ¡S )Nz:-l%s\.\S+ => \S*/(lib%s\.\S+))ú/sbin/ldconfigz-rrY   ó    )Úkeyr   )rE   rF   r$   rD   rM   rN   rO   rZ   rP   rA   r8   rQ   r_   rX   Úsortrh   rR   )r,   ZenamerS   rU   r^   rV   r   r   r   r-   Î   s"    

þ

c           	   	   C   sè   t j d¡sd S tt jƒ}d|d< |r,d}nd}d }ztj|tjtj|d�}W n t	k
rd   Y d S X |�6 |j
D ](}| ¡ }| d¡rrt  |¡ ¡ d }qrW 5 Q R X |s®d S | d	¡D ]*}t j |d
|  ¡}t j |¡r¸|  S q¸d S )Nú/usr/bin/crler=   r>   )rm   ú-64)rm   r@   s   Default Library Path (ELF):r6   ú:zlib%s.so)r$   r'   ÚexistsrL   r%   rM   rN   rO   rZ   rP   rA   ÚstripÚ
startswithrR   r   r(   )	r,   Úis64rC   rT   ÚpathsrU   ÚlineÚdirZlibfiler   r   r   Ú_findLib_crleå   s8    
ý



rw   Fc                 C   s   t t| |ƒpt| ƒƒS ©N)r_   rw   rX   )r,   rs   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 ¡}zht	j
ddgt	jt	jt	jdddœd��:}t ||j ¡ ¡}|rÈt | d¡¡W  5 Q R £ W S W 5 Q R X W n tk
rè   Y nX d S )Nr   Úlr6   z-32rn   z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+\(%sri   ra   r=   )r>   r?   )ÚstdinrB   rA   rC   r   )ÚstructZcalcsizer$   ÚunameÚmachineÚgetrD   rE   rF   rM   rN   rZ   rO   r[   rA   r8   rR   r\   rP   )r,   r{   r}   Zmach_mapZabi_typeZregexÚprV   r   r   r   Ú_findSoname_ldconfig  s4    û
ü,r€   c                 C   sÒ   dt  | ¡ }ddg}tj d¡}|rD| d¡D ]}| d|g¡ q0| dtjd|  g¡ d }zZtj	|tj
tj
d	d
�}| ¡ \}}t  |t |¡¡}	|	D ]}
t|
ƒs¦q˜t |
¡  W S W n tk
rÌ   Y nX |S )Nr;   Zldz-tZLD_LIBRARY_PATHro   z-Lr<   z-l%sT)rA   rB   Zuniversal_newlines)rE   rF   r$   r%   r~   r   ÚextendÚdevnullrM   rN   rO   ZcommunicaterQ   rR   r:   Ú	Exception)r,   rS   ÚcmdZlibpathr   Úresultr   ÚoutÚ_rV   rW   r   r   r   Ú_findLib_ld,  s,    
þrˆ   c                 C   s    t | ƒptt| ƒƒptt| ƒƒS rx   )r€   r_   rX   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/Systemr4   )Ú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LoadLibraryrr   r‹   rf   ZRTLD_MEMBER)r‰   r‹   r   r   r   ÚtestO  s<    


r�   Ú__main__)F)r$   rG   rM   r   r,   r   r    r-   rŽ   Zctypes.macholib.dyldr0   r1   rr   Zctypes._aixrE   rI   r:   rX   r_   rh   rw   r€   rˆ   r�   Ú__name__r   r   r   r   Ú<module>   s>   


2


$(
