U e5d76ã@sBddlZddlZddlZddlZejdkrDdd„Zdd„Zdd„Znâejd krnejd krndd l m Z d d„Zn¸ej  d ¡rˆddl mZnžejd k�r&ddlZddlZdd„Zdd„ZejdkrÈdd„Zndd„Zej  d¡rîdd„Zdd„Zn8ejdk�rdd„Zd'dd„Zndd „Zd!d"„Zd#d„Zd$d%„Zed&k�r>eƒdS)(éNÚntcCsšd}tj |¡}|dkrdS|t|ƒ}tj|d… dd¡\}}t|dd…ƒd}|dkrf|d7}t|d d …ƒ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.8/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Údú.dll)rÚimportlib.machineryÚ machineryÚEXTENSION_SUFFIXES)r ZclibnameÚ importlibrrrÚ find_msvcrt"s r cCsx|dkrtƒStjd tj¡D]R}tj ||¡}tj |¡rF|S| ¡  d¡rVq |d}tj |¡r |Sq dS)N)ÚcÚmÚPATHr) r ÚosÚenvironrÚpathsepÚpathÚjoinÚisfileÚlowerÚendswith)ÚnameZ directoryZfnamerrrÚ find_library7s   r-ÚposixÚdarwin)Ú dyld_findc CsPd|d|d||fg}|D],}zt|ƒWStk rHYqYqXqdS)Nz lib%s.dylibz%s.dylibz%s.framework/%s)Ú _dyld_findÚ ValueError)r,Úpossiblerrrr-Hs þ Úaix)r-c Cs4d}t|dƒ�}| d¡|kW5QR£SQRXdS)z,Return True if the given file is an ELF filesELFÚbréN)ÚopenÚread)ÚfilenameZ elf_headerZthefilerrrÚ_is_elf`s r:c Cs t dt |¡¡}t d¡}|s,t d¡}|s4dSt ¡}z‚|dd|j d|g}t tj ƒ}d|d<d|d <zt j|t jt j|d �}Wntk r YW¢$dSX|�|j ¡}W5QRXW5z | ¡Wnt k ràYnXXt ||¡}|sødS|D]} t| ƒ�s�qüt | ¡SdS) Nú[^\(\)\s]*lib%s\.[^\(\)\s]*ZgccZccz-Wl,-tú-oz-lÚCÚLC_ALLÚLANG©ÚstdoutÚstderrÚenv)r$ÚfsencodeÚreÚescapeÚshutilÚwhichÚtempfileZNamedTemporaryFileÚcloseÚFileNotFoundErrorr,Údictr%Ú subprocessÚPopenÚPIPEZSTDOUTÚOSErrorrAr8Úfindallr:Úfsdecode) r,ÚexprZ c_compilerZtempÚargsrCÚprocZtraceÚresÚfilerrrÚ _findLib_gccfsB   ý     rXZsunos5c Cs||sdSztjdd|ftjtjd�}Wntk r<YdSX|�|j ¡}W5QRXt d|¡}|sldSt   |  d¡¡S)Nz/usr/ccs/bin/dumpz-Lpv©rArBs\[.*\]\sSONAME\s+([^\s]+)r) rMrNrOÚDEVNULLrPrAr8rEÚsearchr$rRÚgroup)ÚfrUÚdatarVrrrÚ _get_sonamešs þ  r_c Cs’|sdSt d¡}|sdSz"tj|ddd|ftjtjd�}Wntk rRYdSX|�|j ¡}W5QRXt   d|¡}|s‚dSt   |  d¡¡S)NÚobjdumpú-pz-jz.dynamicrYs\sSONAME\s+([^\s]+)r)rGrHrMrNrOrZrPrAr8rEr[r$rRr\)r]r`rUÚdumprVrrrr_«s$ þ  )ZfreebsdZopenbsdZ dragonflycCsN| d¡}g}z|r*| dt| ¡ƒ¡qWntk r@YnX|pLtjgS)Nó.r)rÚinsertrÚpopr2r Úmaxsize)ZlibnameÚpartsZnumsrrrÚ _num_versionÃs rhc Cs¢t |¡}d||f}t |¡}ztjdtjtjd�}Wntk rPd}YnX|�|j   ¡}W5QRXt  ||¡}|sˆt t |ƒƒS|jtd�t |d¡S)Nz:-l%s\.\S+ => \S*/(lib%s\.\S+))ú/sbin/ldconfigz-rrYó)Úkeyr)rErFr$rDrMrNrOrZrPrAr8rQr_rXÚsortrhrR)r,ZenamerSrUr^rVrrrr-Îs"   þ     c Csètj d¡sdSttjƒ}d|d<|r,d}nd}d}ztj|tjtj|d�}Wnt k rdYdSX|�6|j D](}|  ¡}|  d¡rrt  |¡ ¡d}qrW5QRX|s®dS| d ¡D]*}tj |d |¡}tj |¡r¸|Sq¸dS) Nú /usr/bin/crler=r>)rmú-64)rmr@sDefault Library Path (ELF):r6ú:zlib%s.so)r$r'ÚexistsrLr%rMrNrOrZrPrAÚstripÚ startswithrRrr() r,Úis64rCrTÚpathsrUÚlineÚdirZlibfilerrrÚ _findLib_crleås8  ý     rwFcCstt||ƒpt|ƒƒS©N)r_rwrX)r,rsrrrr- sc Csîddl}| d¡dkr&t ¡jd}nt ¡jd}dddddd œ}| |d ¡}d }t |t |¡|f¡}zht j d d gt j t j t j dddœd��:}t  ||j ¡¡}|rÈt | d¡¡W5QR£WSW5QRXWntk rèYnXdS)NrÚlr6z-32rnz libc6,x86-64z libc6,64bitz libc6,IA-64)z x86_64-64zppc64-64z sparc64-64zs390x-64zia64-64Zlibc6z\s+(lib%s\.[^\s]+)\s+\(%srirar=)r>r?)ÚstdinrBrArCr)ÚstructZcalcsizer$ÚunameÚmachineÚgetrDrErFrMrNrZrOr[rAr8rRr\rP)r,r{r}Zmach_mapZabi_typeZregexÚprVrrrÚ_findSoname_ldconfigs4û  ü,r€c CsÒdt |¡}ddg}tj d¡}|rD| d¡D]}| d|g¡q0| dtjd|g¡d}zZtj |tj tj d d �}|  ¡\}}t  |t  |¡¡} | D]} t| ƒs¦q˜t  | ¡WSWntk rÌYnX|S) Nr;Zldz-tZLD_LIBRARY_PATHroz-Lr<z-l%sT)rArBZuniversal_newlines)rErFr$r%r~rÚextendÚdevnullrMrNrOZ communicaterQrRr:Ú Exception) r,rSÚcmdZlibpathrÚresultrÚoutÚ_rVrWrrrÚ _findLib_ld,s,  þ rˆcCs t|ƒptt|ƒƒptt|ƒƒSrx)r€r_rXrˆ)r,rrrr-Gs  ÿ ÿcCsÈddlm}tjdkr:t|jƒt| d¡ƒttdƒƒtjdk�rÄttdƒƒttdƒƒttdƒƒtj d kr°t|  d ¡ƒt|  d ¡ƒt|  d ¡ƒt|  d ¡ƒ�ntj   d¡�rœddlm }tj dk�rtd|dtjƒ›�ƒtd|  d¡›�ƒttdƒƒt|  d¡ƒn*td|dtjƒ›�ƒtd|  d¡›�ƒtdtdƒ›�ƒtd|  tdƒ¡›�ƒtdtdƒ›�ƒtd|  tdƒ¡›�ƒn(t|  d¡ƒt|  d¡ƒttdƒƒdS)Nr)Úcdllrrr.r"r!Úbz2r/z libm.dylibzlibcrypto.dylibzlibSystem.dylibzSystem.framework/Systemr4)ÚCDLLlz"Using CDLL(name, os.RTLD_MEMBER): z libc.a(shr.o)zUsing cdll.LoadLibrary(): Zrpmz librpm.sozlibc.a(shr_64.o)z crypt :: Zcryptz crypto :: Zcryptozlibm.soz libcrypt.so)Zctypesr‰r$r,ÚprintrÚloadr-r ÚplatformZ LoadLibraryrrr‹rfZ RTLD_MEMBER)r‰r‹rrrÚtestOs<            r�Ú__main__)F)r$rGrMr r,rr r-rŽZctypes.macholib.dyldr0r1rrZ ctypes._aixrErIr:rXr_rhrwr€rˆr�Ú__name__rrrrÚs>     2     $ (