3 \�-�@sddlZddlZddlZddlZejdkrBdd�Zdd�Zdd�Zejd krlejd krldd l m Z d d�Zn�ejd k�rddl Z ddl Z d d�Zejdkr�dd�Zndd�Zejjd%�r�dd�Zdd�Zn6ejdkr�dd�Zd&dd�Zndd�Zdd �Zd!d�Zd"d#�Zed$k�re�dS)'�N�ntcCs�d}tjj|�}|d krdS|t|�}tj|d�jdd�\}}t|dd ��d}|dkrf|d7}t|dd��d }|dkr�d }|dkr�||SdS) 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. zMSC 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  rcCs^t�}|dkrdS|dkr d}n|dkr6d|d}ndSddl}d|jjkrV|d 7}|d S) z%Return the name of the VC runtime dllNr�msvcrtrzmsvcr%d� rz_d.pyd�dz.dll)r�importlib.machinery� machinery�EXTENSION_SUFFIXES)r Zclibname� importlibrrr� find_msvcrt"s rcCst|dkrt�Sx`tjdjtj�D]J}tjj||�}tjj|�rD|S|j�j d�rTq"|d}tjj|�r"|Sq"WdS)N�c�m�PATHz.dll)r r!) r�os�environr�pathsep�path�join�isfile�lower�endswith)�nameZ directoryZfnamerrr� find_library7s  r,�posix�darwin)� dyld_findc CsLd|d|d||fg}x,|D]$}yt|�Stk rBw Yq Xq WdS)Nz lib%s.dylibz%s.dylibz%s.framework/%s)� _dyld_find� ValueError)r+�possiblerrrr,Hs  c !Cstjdtj|��}tjd�}|s,tjd�}|s4dStj�}z||dd|jd|g}t tj �}d|d<d|d <yt j |t j t j|d �}Wntk r�dSX|�|jj�}WdQRXWdy |j�Wntk r�YnXXtj||�}|s�dStj|jd ��S) Nz[^\(\)\s]*lib%s\.[^\(\)\s]*�gccZccz-Wl,-tz-oz-l�C�LC_ALL�LANG)�stdout�stderr�envr)r#�fsencode�re�escape�shutil�which�tempfileZNamedTemporaryFiler+�dictr$� subprocess�Popen�PIPEZSTDOUT�OSErrorr7�read�close�FileNotFoundError�search�fsdecode�group) r+�exprZ c_compilerZtemp�argsr9�procZtrace�resrrr� _findLib_gccWs:      rOZsunos5cCsz|sdSytjdd|ftjtjd�}Wntk r:dSX|�|jj�}WdQRXtjd|�}|sjdSt j |j d��S)Nz/usr/ccs/bin/dumpz-Lpv)r7r8s\[.*\]\sSONAME\s+([^\s]+)r) rArBrC�DEVNULLrDr7rEr;rHr#rIrJ)�frM�datarNrrr� _get_soname�s  rScCs�|sdStjd�}|sdSy"tj|ddd|ftjtjd�}Wntk rPdSX|�|jj�}WdQRXt j d|�}|s�dSt j |j d��S)N�objdumpz-pz-jz.dynamic)r7r8s\sSONAME\s+([^\s]+)r)r=r>rArBrCrPrDr7rEr;rHr#rIrJ)rQrTrM�dumprNrrrrS�s"  �freebsd�openbsd� dragonflyc CsR|jd�}g}y"x|r,|jdt|j���qWWntk rDYnX|pPtjgS)N�.r)r�insertr�popr1r �maxsize)Zlibname�partsZnumsrrr� _num_version�s r^cCs�tj|�}d||f}tj|�}ytjdtjtjd�}Wntk rPd}YnX|�|j j �}WdQRXtj ||�}|s�t t |��S|jtd�tj|d �S) Nz:-l%s\.\S+ => \S*/(lib%s\.\S+)�/sbin/ldconfig�-r)r7r8�)�keyr)r_r`r )r;r<r#r:rArBrCrPrDr7rE�findallrSrO�sortr^rI)r+ZenamerKrMrRrNrrrr,�s        c Cs�tjjd�sdSttj�}d|d<|r,d }nd }d}ytj|tjtj|d�}Wnt k rbdSX|�:x2|j D](}|j �}|j d�rrtj |�j�d}qrWWdQRX|s�dSx4|jd�D]&}tjj|d |�}tjj|�r�|Sq�WdS) N� /usr/bin/crler4r5�-64)r7r8r9sDefault Library Path (ELF):��:zlib%s.so)rerf)re)r#r&�existsr@r$rArBrCrPrDr7�strip� startswithrIrr') r+�is64r9rL�pathsrM�line�dirZlibfilerrr� _findLib_crle�s6       rpFcCstt||�pt|��S)N)rSrprO)r+rlrrrr,�scCs�ddl}|jd�dkr&tj�jd}ntj�jd}dddddd �}|j|d �}d }tj|tj|�|f�}yZt j d d gt j t j t j ddd�d��,}tj ||jj��}|r�tj|jd��SWdQRXWntk r�YnXdS)Nr�lrgz-32z-64z libc6,x86-64z libc6,64bitz libc6,IA-64)z x86_64-64zppc64-64z sparc64-64zs390x-64zia64-64Zlibc6z\s+(lib%s\.[^\s]+)\s+\(%sz/sbin/ldconfigz-pr4)r5r6)�stdinr8r7r9r)�structZcalcsizer#�uname�machine�getr:r;r<rArBrPrCrHr7rErIrJrD)r+rsruZmach_mapZabi_typeZregex�prNrrr�_findSoname_ldconfig�s.  rxc Cs�dtj|�}ddg}tjjd�}|rHx |jd�D]}|jd|g�q2W|jdtjd|g�d}yFtj |tj tj d d �}|j �\}}tj |tj |��} | r�| jd �}Wn"tk r�} zWYdd} ~ XnX|S) Nz[^\(\)\s]*lib%s\.[^\(\)\s]*Zldz-tZLD_LIBRARY_PATHrhz-Lz-oz-l%sT)r7r8Zuniversal_newlinesr)r;r<r#r$rvr�extend�devnullrArBrCZ communicaterHrIrJ� Exception) r+rK�cmdZlibpathr�resultrw�out�_rN�errr� _findLib_lds&   r�cCst|�ptt|�pt|��S)N)rxrSrOr�)r+rrrr,,scCs�ddlm}tjdkr:t|j�t|jd��ttd��tjdkr�ttd��ttd��ttd��tj d kr�t|j d ��t|j d ��t|j d ��t|j d ��n(t|j d��t|j d��ttd��dS)Nr)�cdllrrr-r!r �bz2r.z libm.dylibzlibcrypto.dylibzlibSystem.dylibzSystem.framework/Systemzlibm.soz libcrypt.soZcrypt) Zctypesr�r#r+�printr�loadr,r �platformZ LoadLibrary)r�rrr�test4s"         r��__main__)rVrWrX)F)r#r=rAr r+rrr,r�Zctypes.macholib.dyldr/r0r;r?rOrSrkr^rprxr�r��__name__rrrr�s8   +     $