o *g8@s@ddlZddlZddlZddlZejdkr"ddZddZddZnoejd kr7ejd kr7dd l m Z d dZnZej d rDddl mZnMejd krddlZddlZddZddZejdkrcddZnddZej drvddZddZnejdkrddZd'ddZn dd Zd!d"Zd#dZd$d%Zed&kredSdS)(NntcCsd}tj|}|dkrdS|t|}tj|ddd\}}t|ddd}|dkr3|d7}t|d d d }|dkrCd }|dkrK||SdS) zReturn 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)sysversionfindlensplitint)prefixisrest majorVersion minorVersionr"/usr/lib/python3.10/ctypes/util.py_get_build_version s  rcCs^t}|dur dS|dkrd}n |dkrd|d}ndSddl}d|jjvr+|d 7}|d S) z%Return the name of the VC runtime dllNrmsvcrtrzmsvcr%d rz_d.pydd.dll)rimportlib.machinery machineryEXTENSION_SUFFIXES)r clibname importlibrrr find_msvcrt"s r#cCsx|dvrtStjdtjD])}tj||}tj|r#|S| dr+q|d}tj|r9|SqdS)N)cmPATHr) r#osenvironrpathseppathjoinisfilelowerendswith)name directoryfnamerrr find_library7s  r2posixdarwin) dyld_findc CsHd|d|d||fg}|D]}zt|WSty!YqwdS)Nz lib%s.dylibz%s.dylibz%s.framework/%s) _dyld_find ValueError)r/possiblerrrr2Hs  aix)r2cCs@d}t|d}|d|kWdS1swYdS)z,Return True if the given file is an ELF filesELFbrN)openread)filename elf_headerthefilerrr_is_elf`s  $rAc Csftdt|}td}|std}|sdSt}zh|dd|jd|g}t tj }d|d<d|d <z t j |t j t j|d }Wnty^YWz|WdSty]YdSww| |j}Wdn1sqwYWz|WntyYnwz|WwtyYwwt||}|sdS|D] } t| sqt| SdS) N[^\(\)\s]*lib%s\.[^\(\)\s]*gccccz-Wl,-t-oz-lCLC_ALLLANGstdoutstderrenv)r'fsencodereescapeshutilwhichtempfileNamedTemporaryFiler/dictr( subprocessPopenPIPESTDOUTOSErrorcloseFileNotFoundErrorrJr=findallrAfsdecode) r/expr c_compilertempargsrLproctraceresfilerrr _findLib_gccfs`           rfsunos5cCs|sdSztjdd|ftjtjd}Wn tyYdSw| |j}Wdn1s0wYtd|}|s?dSt | dS)Nz/usr/ccs/bin/dumpz-LpvrJrKs\[.*\]\sSONAME\s+([^\s]+)r) rUrVrWDEVNULLrYrJr=rNsearchr'r]group)frbdatardrrr _get_sonames"    rncCs|sdStd}|s dSztj|ddd|ftjtjd}Wn ty(YdSw| |j}Wdn1s;wYt d|}|sJdSt | dS)Nobjdump-pz-jz.dynamicrhs\sSONAME\s+([^\s]+)r)rPrQrUrVrWrirYrJr=rNrjr'r]rk)rlrorbdumprdrrrrns(    )freebsdopenbsd dragonflycCsN|d}g}z|r|dt||s Wn ty Ynw|p&tjgS)N.r)rinsertrpopr7r maxsize)libnamepartsnumsrrr _num_versions   r|cCst|}d||f}t|}z tjdtjtjd}Wn ty'd}Ynw| |j }Wdn1s:wYt ||}|sMt t |S|jtdt|dS)Nz:-l%s\.\S+ => \S*/(lib%s\.\S+))/sbin/ldconfigz-rrh)keyr)rNrOr'rMrUrVrWrirYrJr=r\rnrfsortr|r])r/enamer^rbrmrdrrrr2s&        c CstjdsdSttj}d|d<|rd}nd}d}z tj|tjtj|d}Wn t y1YdSw| |j D]}| }| drLt |d}q8Wdn1sWwY|s`dS|d D]}tj|d |}tj|rz|SqedS) N /usr/bin/crlerFrG)r-64)rrIsDefault Library Path (ELF):r;:zlib%s.so)r'r*existsrTr(rUrVrWrirYrJstrip startswithr]rr+) r/is64rLrapathsrblinedirlibfilerrr _findLib_crlesB      rFcCstt||p t|SN)rnrrf)r/rrrrr2 sc Csddl}t}|jdrd}|ddkr|jd}n|jd}ddddd d d }||d }d }t|t ||f}zBt j ddgt j t j t j dddd%}t||j}|rnt|dWdWSWdWdS1szwYWdStyYdSw)Nrarmlr;z-32rz libc6,x86-64z libc6,64bitz libc6,IA-64zlibc6(,hard-float)?)z x86_64-64zppc64-64z sparc64-64zs390x-64zia64-64zarm-32libc6z\s+(lib%s\.[^\s]+)\s+\(%sr}rprF)rGrH)stdinrKrJrLr)structr'unamemachinercalcsizegetrMrNrOrUrVrirWrjrJr=r]rkrY) r/rrrmach_mapabi_typeregexprdrrr_findSoname_ldconfigsD     & rc Csdt|}ddg}tjd}|r"|dD] }|d|gq|dtjd|gd}z.tj |tj tj d d }| \}}t |t |} | D]} t| sSqLt | WSW|StygY|Sw) NrBldz-tLD_LIBRARY_PATHrz-LrEz-l%sT)rJrKuniversal_newlines)rNrOr'r(rrextenddevnullrUrVrW communicater\r]rA Exception) r/r^cmdlibpathrresultrout_rdrerrr _findLib_ld7s2    rcCs t|ptt|ptt|Sr)rrnrfr)r/rrrr2Rs   cCsddlm}tjdkrt|jt|dttdtjdkrttdttdttdtj d krWt| d t| d t| d t| d dStj drddlm }tj dkrtd|dtjtd| dttdt| dntd|dtjtd| dtdtdtd| tdtdtdtd| tddSt| dt| dttddSdS)Nr)cdllrrr3r%r$bz2r4z libm.dylibzlibcrypto.dylibzlibSystem.dylibzSystem.framework/Systemr9)CDLLlz"Using CDLL(name, os.RTLD_MEMBER): z libc.a(shr.o)zUsing cdll.LoadLibrary(): rpmz librpm.sozlibc.a(shr_64.o)z crypt :: cryptz crypto :: cryptozlibm.soz libcrypt.so)ctypesrr'r/printrloadr2r platform LoadLibraryrrrx RTLD_MEMBER)rrrrrtestZs>             r__main__)F)r'rPrUr r/rr#r2rctypes.macholib.dyldr5r6r ctypes._aixrNrRrArfrnr|rrrr__name__rrrrsB       2    $)(