U ,a76@sBddlZddlZddlZddlZejdkrDddZddZddZnejd krnejd krndd l m Z d dZnej d rddl mZnejd kr&ddlZddlZddZddZejdkrddZnddZej drddZddZn8ejdkrddZd'ddZndd Zd!d"Zd#dZd$d%Zed&kr>edS)(NntcCsd}tj|}|dkrdS|t|}tj|ddd\}}t|ddd}|dkrf|d7}t|d d d }|dkrd }|dkr||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)prefixisrestZ majorVersionZ minorVersionr0/opt/alt/python38/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 dllNrmsvcrtrzmsvcr%d rz_d.pydd.dll)rimportlib.machinery machineryEXTENSION_SUFFIXES)r Zclibname importlibrrr find_msvcrt"s r cCsx|dkrtStjdtjD]R}tj||}tj|rF|S| drVq |d}tj|r |Sq dS)N)cmPATHr) r osenvironrpathseppathjoinisfilelowerendswith)nameZ directoryZfnamerrr find_library7s   r-posixdarwin) 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|kW5QRSQRXdS)z,Return True if the given file is an ELF filesELFbrN)openread)filenameZ elf_headerZthefilerrr_is_elf`s r:c Cs tdt|}td}|s,td}|s4dSt}z|dd|j d|g}t tj }d|d<d|d <zt j|t jt j|d }Wntk rYW$dSX||j}W5QRXW5z |Wnt k rYnXXt||}|sdS|D]} t| sqt| SdS) N[^\(\)\s]*lib%s\.[^\(\)\s]*ZgccZccz-Wl,-t-oz-lCLC_ALLLANGstdoutstderrenv)r$fsencodereescapeshutilwhichtempfileZNamedTemporaryFilecloseFileNotFoundErrorr,dictr% subprocessPopenPIPEZSTDOUTOSErrorrAr8findallr:fsdecode) r,exprZ c_compilerZtempargsrCprocZtraceresfilerrr _findLib_gccfsB        rXZsunos5c Cs||sdSztjdd|ftjtjd}Wntk r<YdSX||j}W5QRXtd|}|sldSt | dS)Nz/usr/ccs/bin/dumpz-LpvrArBs\[.*\]\sSONAME\s+([^\s]+)r) rMrNrODEVNULLrPrAr8rEsearchr$rRgroup)frUdatarVrrr _get_sonames   r_c Cs|sdStd}|sdSz"tj|ddd|ftjtjd}Wntk rRYdSX||j}W5QRXt d|}|sdSt | dS)Nobjdump-pz-jz.dynamicrYs\sSONAME\s+([^\s]+)r)rGrHrMrNrOrZrPrAr8rEr[r$rRr\)r]r`rUdumprVrrrr_s$   )ZfreebsdZopenbsdZ dragonflycCsN|d}g}z|r*|dt|qWntk r@YnX|pLtjgS)N.r)rinsertrpopr2r maxsize)ZlibnamepartsZnumsrrr _num_versions rhc Cst|}d||f}t|}ztjdtjtjd}Wntk rPd}YnX||j }W5QRXt ||}|st t |S|jtdt|dS)Nz:-l%s\.\S+ => \S*/(lib%s\.\S+))/sbin/ldconfigz-rrY)keyr)rErFr$rDrMrNrOrZrPrAr8rQr_rXsortrhrR)r,ZenamerSrUr^rVrrrr-s"        c CstjdsdSttj}d|d<|r,d}nd}d}ztj|tjtj|d}Wnt k rdYdSX|6|j D](}| }| drrt |d}qrW5QRX|sdS|d D]*}tj|d |}tj|r|SqdS) N /usr/bin/crler=r>)rm-64)rmr@sDefault Library Path (ELF):r6:zlib%s.so)r$r'existsrLr%rMrNrOrZrPrAstrip startswithrRrr() r,is64rCrTpathsrUlinedirZlibfilerrr _findLib_crles8       rwFcCstt||pt|SN)r_rwrX)r,rsrrrr- sc Csddl}|ddkr&tjd}ntjd}dddddd }||d }d }t|t||f}zht j d d gt j t j t j dddd:}t ||j}|rt|dW5QRWSW5QRXWntk rYnXdS)Nrlr6z-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$unamemachinegetrDrErFrMrNrZrOr[rAr8rRr\rP)r,r{r}Zmach_mapZabi_typeZregexprVrrr_findSoname_ldconfigs4  ,rc Csdt|}ddg}tjd}|rD|dD]}|d|gq0|dtjd|gd}zZtj |tj tj d d }| \}}t |t |} | D]} t| sqt | WSWntk rYnX|S) Nr;Zldz-tZLD_LIBRARY_PATHroz-Lr<z-l%sT)rArBZuniversal_newlines)rErFr$r%r~rextenddevnullrMrNrOZ communicaterQrRr: Exception) r,rScmdZlibpathrresultrout_rVrWrrr _findLib_ld,s,   rcCs t|ptt|ptt|Srx)rr_rXr)r,rrrr-Gs   cCsddlm}tjdkr:t|jt|dttdtjdkrttdttdttdtj d krt| d t| d t| d t| d ntj drddlm }tj dkrtd|dtjtd| dttdt| dn*td|dtjtd| dtdtdtd| tdtdtdtd| tdn(t| dt| dttddS)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)Zctypesrr$r,printrloadr-r platformZ LoadLibraryrrrrfZ RTLD_MEMBER)rrrrrtestOs<            r__main__)F)r$rGrMr r,rr r-rZctypes.macholib.dyldr0r1rrZ ctypes._aixrErIr:rXr_rhrwrrr__name__rrrrs>     2     $ (