
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \å-  ã               @   s  d dl Z d dlZd dlZd dlZe jdkrBdd„ Zdd„ Zdd„ Ze jd	krlejd
krld dl	m
Z dd„ Zn”e jd	k�r d dlZd dlZdd„ Zejdkr¤dd„ Zndd„ Zejjd%ƒrÊdd„ Zdd„ Zn6e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j| ƒ}|dkrdS |t| ƒ }t j|d… j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   ú#/usr/lib64/python3.6/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 jtjƒD ]J}tjj|| ƒ}tjj|ƒrD|S |jƒ j	dƒrTq"|d }tjj|ƒr"|S q"W d S )NÚcÚmÚPATHz.dll)r    r!   )
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    
c       	   !   C   s  t jdtj| ƒ ƒ}tjdƒ}|s,tjdƒ}|s4d S tjƒ }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jƒ }W d Q R X W d y|jƒ  W n tk
rÚ   Y nX X tj||ƒ}|sòd S t j|jdƒƒS )Nz[^\(\)\s]*lib%s\.[^\(\)\s]*ÚgccZccz-Wl,-tz-oz-lÚCÚLC_ALLÚLANG)ÚstdoutÚstderrÚenvr   )r#   ÚfsencodeÚreÚescapeÚshutilÚwhichÚtempfileZNamedTemporaryFiler+   Údictr$   Ú
subprocessÚPopenÚPIPEZSTDOUTÚOSErrorr7   ÚreadÚcloseÚFileNotFoundErrorÚsearchÚfsdecodeÚgroup)	r+   ÚexprZ
c_compilerZtempÚargsr9   ÚprocZtraceÚresr   r   r   Ú_findLib_gccW   s:    


rO   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jƒ }W d Q R X tjd|ƒ}|sjd S t	j
|jdƒƒS )Nz/usr/ccs/bin/dumpz-Lpv)r7   r8   s   \[.*\]\sSONAME\s+([^\s]+)r   )rA   rB   rC   ÚDEVNULLrD   r7   rE   r;   rH   r#   rI   rJ   )ÚfrM   ÚdatarN   r   r   r   Ú_get_soname„   s    rS   c             C   s�   | sd S t j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jƒ }W d Q R X t	j
d|ƒ}|s€d S tj|jdƒƒS )NÚobjdumpz-pz-jz.dynamic)r7   r8   s   \sSONAME\s+([^\s]+)r   )r=   r>   rA   rB   rC   rP   rD   r7   rE   r;   rH   r#   rI   rJ   )rQ   rT   rM   ÚdumprN   r   r   r   rS   •   s"    
ÚfreebsdÚopenbsdÚ	dragonflyc             C   sR   | j dƒ}g }y"x|r,|jdt|jƒ ƒƒ 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    
r^   c             C   s¢   t j| ƒ}d||f }tj|ƒ}ytjdtjtjd�}W n tk
rP   d}Y nX |� |j	j
ƒ }W d Q R X t j||ƒ}|sˆtt| ƒƒS |jtd� tj|d	 ƒS )
Nz:-l%s\.\S+ => \S*/(lib%s\.\S+)ú/sbin/ldconfigú-r)r7   r8   ó    )Úkeyr   )r_   r`   r	   )r;   r<   r#   r:   rA   rB   rC   rP   rD   r7   rE   ÚfindallrS   rO   Úsortr^   rI   )r+   ZenamerK   rM   rR   rN   r   r   r   r,   ¸   s     


c       	      C   sê   t j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 ](}|jƒ }|jdƒrrt j|ƒjƒ d }qrW W d Q R X |s°d S x4|jdƒD ]&}t jj|d	|  ƒ}t jj|ƒr¼|S q¼W d S )Nú/usr/bin/crler4   r5   ú-64)r7   r8   r9   s   Default Library Path (ELF):é   ú:zlib%s.so)re   rf   )re   )r#   r&   Úexistsr@   r$   rA   rB   rC   rP   rD   r7   ÚstripÚ
startswithrI   r   r'   )	r+   Úis64r9   rL   ÚpathsrM   ÚlineÚdirZlibfiler   r   r   Ú_findLib_crleÏ   s6    

 rp   Fc             C   s   t t| |ƒpt| ƒƒS )N)rS   rp   rO   )r+   rl   r   r   r   r,   ó   s    c             C   sà   dd l }|jdƒdkr&tjƒ jd }ntjƒ jd }dddddd	œ}|j|d
ƒ}d}tj|tj| ƒ|f ƒ}yZt	j
ddgt	jt	jt	jdddœd��,}tj||jjƒ ƒ}|rºtj|jdƒƒS W d Q R X W n tk
rÚ   Y nX d S )Nr   Úlrg   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-pr4   )r5   r6   )Ústdinr8   r7   r9   r   )ÚstructZcalcsizer#   ÚunameÚmachineÚgetr:   r;   r<   rA   rB   rP   rC   rH   r7   rE   rI   rJ   rD   )r+   rs   ru   Zmach_mapZabi_typeZregexÚprN   r   r   r   Ú_findSoname_ldconfigø   s.    
rx   c             C   sÐ   dt j| ƒ }ddg}tjjdƒ}|rHx |jdƒD ]}|jd|gƒ q2W |jdtjd|  gƒ d }yFtj	|tj
tj
d	d
�}|jƒ \}}t j|tj|ƒƒ}	|	r¦|	jdƒ}W n" tk
rÊ }
 zW Y d d }
~
X nX |S )Nz[^\(\)\s]*lib%s\.[^\(\)\s]*Zldz-tZLD_LIBRARY_PATHrh   z-Lz-oz-l%sT)r7   r8   Zuniversal_newlinesr   )r;   r<   r#   r$   rv   r   ÚextendÚdevnullrA   rB   rC   ZcommunicaterH   rI   rJ   Ú	Exception)r+   rK   ÚcmdZlibpathr   Úresultrw   ÚoutÚ_rN   Úer   r   r   Ú_findLib_ld  s&    
r�   c             C   s   t | ƒptt| ƒpt| ƒƒS )N)rx   rS   rO   r�   )r+   r   r   r   r,   ,  s    c              C   sØ   ddl m}  tjdkr:t| jƒ t| jdƒƒ ttdƒƒ tjdkrÔttdƒƒ ttdƒƒ ttdƒƒ tj	d	kr¬t| j
d
ƒƒ t| j
dƒƒ t| j
dƒƒ t| j
dƒƒ n(t| j
dƒƒ t| j
dƒƒ ttdƒƒ d S )Nr   )Úcdllr   r   r-   r!   r    Úbz2r.   z
libm.dylibzlibcrypto.dylibzlibSystem.dylibzSystem.framework/Systemzlibm.sozlibcrypt.soZcrypt)Zctypesr‚   r#   r+   Úprintr   Úloadr,   r   ÚplatformZLoadLibrary)r‚   r   r   r   Útest4  s"    



r‡   Ú__main__)rV   rW   rX   )F)r#   r=   rA   r   r+   r   r   r,   r†   Zctypes.macholib.dyldr/   r0   r;   r?   rO   rS   rk   r^   rp   rx   r�   r‡   Ú__name__r   r   r   r   Ú<module>   s8   

+



$
