B ‡ f76ã@sBddlZddlZddlZddlZejdkrDdd„Zdd„Zdd„Znâejd krnejd krndd l m Z d d„Zn¸ej  d ¡rˆddl mZnžejd kr&ddlZddlZdd„Zdd„ZejdkrÈdd„Zndd„Zej  d¡rîdd„Zdd„Zn8ejdkrdd„Zd'dd„Zndd „Zd!d"„Zd#d„Zd$d%„Zed&kr>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ú0/opt/alt/python37/lib64/python3.7/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`tjd tj¡D]J}tj ||¡}tj |¡rD|S| ¡  d¡rTq"|d}tj |¡r"|Sq"WdS)N)ÚcÚmÚPATHz.dll) 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  Úaix)r,c Cs(d}t|dƒ}| d¡|kSQRXdS)z,Return True if the given file is an ELF filesELFÚbréN)ÚopenÚread)ÚfilenameZ elf_headerZthefilerrrÚ_is_elf`s r9c Cst dt |¡¡}t d¡}|s,t d¡}|s4dSt ¡}z||dd|jd|g}t tj ƒ}d|d<d|d <yt j |t j t j|d }Wntk ršdSX||j ¡}WdQRXWdy | ¡Wntk rÚYnXXt ||¡}|sòdSx |D]} t| ƒsqøt | ¡SWdS) Nz[^\(\)\s]*lib%s\.[^\(\)\s]*ZgccZccz-Wl,-tz-oz-lÚCÚLC_ALLÚLANG)ÚstdoutÚstderrÚenv)r#ÚfsencodeÚreÚescapeÚshutilÚwhichÚtempfileZNamedTemporaryFiler+Údictr$Ú subprocessÚPopenÚPIPEZSTDOUTÚOSErrorr=r7ÚcloseÚFileNotFoundErrorÚfindallr9Úfsdecode) r+ÚexprZ c_compilerZtempÚargsr?ÚprocZtraceÚresÚfilerrrÚ _findLib_gccfs@        rTZsunos5c Csz|sdSytjdd|ftjtjd}Wntk r:dSX||j ¡}WdQRXt d|¡}|sjdSt   |  d¡¡S)Nz/usr/ccs/bin/dumpz-Lpv)r=r>s\[.*\]\sSONAME\s+([^\s]+)r) rGrHrIÚDEVNULLrJr=r7rAÚsearchr#rNÚgroup)ÚfrQÚdatarRrrrÚ _get_sonamešs  rZc Cs|sdSt d¡}|sdSy"tj|ddd|ftjtjd}Wntk rPdSX||j ¡}WdQRXt   d|¡}|s€dSt   |  d¡¡S)NÚobjdumpz-pz-jz.dynamic)r=r>s\sSONAME\s+([^\s]+)r)rCrDrGrHrIrUrJr=r7rArVr#rNrW)rXr[rQÚdumprRrrrrZ«s"  )ZfreebsdZopenbsdZ dragonflycCsR| d¡}g}y"x|r,| dt| ¡ƒ¡qWWntk rDYnX|pPtjgS)Nó.r)rÚinsertrÚpopr1r Úmaxsize)ZlibnameÚpartsZnumsrrrÚ _num_versionÃs rbc Cs¢t |¡}d||f}t |¡}ytjdtjtjd}Wntk rPd}YnX||j   ¡}WdQRXt  ||¡}|sˆt t |ƒƒS|jtdt |d¡S)Nz:-l%s\.\S+ => \S*/(lib%s\.\S+))z/sbin/ldconfigz-r)r=r>ó)Úkeyr)rArBr#r@rGrHrIrUrJr=r7rMrZrTÚsortrbrN)r+ZenamerOrQrYrRrrrr,Îs        c Csêtj d¡sdSttjƒ}d|d<|r,d}nd}d}ytj|tjtj|d}Wnt k rbdSX|:x2|j D](}|  ¡}|  d¡rrt  |¡ ¡d}qrWWdQRX|s°dSx4| d ¡D]&}tj |d |¡}tj |¡r¼|Sq¼WdS) Nz /usr/bin/crler:r;)z /usr/bin/crlez-64)z /usr/bin/crle)r=r>r?sDefault Library Path (ELF):r5ú:zlib%s.so)r#r&ÚexistsrFr$rGrHrIrUrJr=ÚstripÚ startswithrNrr') r+Úis64r?rPÚpathsrQÚlineÚdirZlibfilerrrÚ _findLib_crleås6       rnFcCstt||ƒpt|ƒƒS)N)rZrnrT)r+rjrrrr, sc Csàddl}| d¡dkr&t ¡jd}nt ¡jd}dddddd œ}| |d ¡}d }t |t |¡|f¡}yZt j d d gt j t j t j dddœd,}t  ||j ¡¡}|rºt | d¡¡SWdQRXWntk rÚYnXdS)NrÚlr5z-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-pr:)r;r<)Ústdinr>r=r?r)ÚstructZcalcsizer#ÚunameÚmachineÚgetr@rArBrGrHrUrIrVr=r7rNrWrJ)r+rqrsZmach_mapZabi_typeZregexÚprRrrrÚ_findSoname_ldconfigs.  rvc CsÔdt |¡}ddg}tj d¡}|rHx | d¡D]}| d|g¡q2W| dtjd|g¡d}yXtj |tj tj d d }|  ¡\}}t  |t  |¡¡} x| D]} t| ƒs¬qžt  | ¡SWWntk rÎYnX|S) Nz[^\(\)\s]*lib%s\.[^\(\)\s]*Zldz-tZLD_LIBRARY_PATHrfz-Lz-oz-l%sT)r=r>Zuniversal_newlines)rArBr#r$rtrÚextendÚdevnullrGrHrIZ communicaterMrNr9Ú Exception) r+rOÚcmdZlibpathrÚresultruÚoutÚ_rRrSrrrÚ _findLib_ld,s*    r~cCs t|ƒptt|ƒƒptt|ƒƒS)N)rvrZrTr~)r+rrrr,GscCsÈddlm}tjdkr:t|jƒt| d¡ƒttdƒƒtjdkrÄttdƒƒttdƒƒttdƒƒtj d kr°t|  d ¡ƒt|  d ¡ƒt|  d ¡ƒt|  d ¡ƒntj   d¡rœddlm }tj dkrtd|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/Systemr3)Ú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)Zctypesrr#r+ÚprintrÚloadr,r ÚplatformZ LoadLibraryrirr`Z RTLD_MEMBER)rrrrrÚtestOs<            r…Ú__main__)F)r#rCrGr r+rrr,r„Zctypes.macholib.dyldr/r0riZ ctypes._aixrArEr9rTrZrbrnrvr~r…Ú__name__rrrrÚs>     2     $ (