a i76@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|dd d }|dkrd }|dkr||SdS) NzMSC v.  g$@r)sysversionfindlensplitint)prefixisrestZ majorVersionZ minorVersionr#/usr/lib64/python3.9/ctypes/util.py_get_build_version s  rcCs^t}|durdS|dkr d}n|dkr6d|d}ndSddl}d|jjvrV|d7}|d S) Nrmsvcrtrzmsvcr%d rz_d.pydd.dll)rimportlib.machinery machineryEXTENSION_SUFFIXES)r Zclibname importlibrrr find_msvcrt"s r cCsx|dvrtStjdtjD]R}tj||}tj|rF|S| drVq |d}tj|r |Sq dS)N)cmPATHr) r osenvironrpathseppathjoinisfilelowerendswith)nameZ directoryfnamerrr find_library7s   r.posixdarwin) dyld_findc CsNd|d|d||fg}|D]*}zt|WStyFYqYq0qdS)Nz lib%s.dylibz%s.dylibz%s.framework/%s) _dyld_find ValueError)r,possiblerrrr.Hs   aix)r.cCs@d}t|d}|d|kWdS1s20YdS)NsELFbr)openread)filenameZ elf_headerthefilerrr_is_elf`s r<c Csttdt|}td}|s,td}|s4dSt}z|dd|jd|g}t tj }d|d<d|d <zt j |t j t j|d }Wn6tyYWz |WntyYn0dS0||j}Wdn1s0YWz |WntyYn0n$z |Wnty2Yn00t||}|sLdS|D]} t| sbqPt| SdS) N[^\(\)\s]*lib%s\.[^\(\)\s]*ZgccZccz-Wl,-t-oz-lCLC_ALLLANGstdoutstderrenv)r$fsencodereescapeshutilwhichtempfileNamedTemporaryFiler,dictr% subprocessPopenPIPESTDOUTOSErrorcloseFileNotFoundErrorrCr9findallr<fsdecode) r,exprZ c_compilerZtempargsrEprocZtraceresfilerrr _findLib_gccfsT       *    r\Zsunos5cCs|sdSztjdd|ftjtjd}Wnty:YdS0||j}Wdn1s`0Ytd|}|s~dSt | dS)Nz/usr/ccs/bin/dumpz-LpvrCrDs\[.*\]\sSONAME\s+([^\s]+)r) rNrOrPDEVNULLrRrCr9rGsearchr$rVgroup)frYdatarZrrr _get_sonames   ( rccCs|sdStd}|sdSz"tj|ddd|ftjtjd}WntyPYdS0||j}Wdn1sv0Yt d|}|sdSt | dS)Nobjdump-pz-jz.dynamicr]s\sSONAME\s+([^\s]+)r)rIrJrNrOrPr^rRrCr9rGr_r$rVr`)rardrYdumprZrrrrcs$   ( )ZfreebsdZopenbsdZ dragonflycCsL|d}g}z|r*|dt|qWnty>Yn0|pJtjgS)N.r)rinsertrpopr3r maxsize)ZlibnamepartsZnumsrrr _num_versions  rlcCst|}d||f}t|}ztjdtjtjd}WntyNd}Yn00||j }Wdn1st0Yt ||}|st t |S|jtdt|dS)Nz:-l%s\.\S+ => \S*/(lib%s\.\S+))/sbin/ldconfigz-rr])keyr)rGrHr$rFrNrOrPr^rRrCr9rUrcr\sortrlrV)r,ZenamerWrYrbrZrrrr.s"      (   c CstjdsdSttj}d|d<|r,d}nd}d}ztj|tjtj|d}Wnt ybYdS0|@|j D](}| }| drpt |d}qpWdn1s0Y|sdS|d D]*}tj|d |}tj|r|SqdS) N /usr/bin/crler?r@)rq-64)rqrBsDefault Library Path (ELF):r7:zlib%s.so)r$r'existsrMr%rNrOrPr^rRrCstrip startswithrVrr() r,is64rErXpathsrYlinedirZlibfilerrr _findLib_crles8      2  r{FcCstt||pt|SN)rcr{r\)r,rwrrrr. scCsddl}|ddkr&tjd}ntjd}dddddd }||d }d }t|t||f}z~t j d d gt j t j t j ddddF}t ||j}|rt|dWdWSWdn1s0YWntyYn0dS)Nrlr7z-32rrz libc6,x86-64z libc6,64bitz libc6,IA-64)z x86_64-64zppc64-64z sparc64-64zs390x-64zia64-64Zlibc6z\s+(lib%s\.[^\s]+)\s+\(%srmrer?)r@rA)stdinrDrCrEr)structcalcsizer$unamemachinegetrFrGrHrNrOr^rPr_rCr9rVr`rR)r,rrZmach_mapZabi_typeZregexprZrrr_findSoname_ldconfigs4  B rc Csdt|}ddg}tjd}|rD|dD]}|d|gq0|dtjd|gd}zZtj |tj tj d d }| \}}t |t |} | D]} t| sqt | WSWntyYn0|S) Nr=Zldz-tZLD_LIBRARY_PATHrsz-Lr>z-l%sT)rCrDuniversal_newlines)rGrHr$r%rrextenddevnullrNrOrP communicaterUrVr< Exception) r,rWcmdZlibpathrresultrout_rZr[rrr _findLib_ld,s,    rcCs t|ptt|ptt|Sr|)rrcr\r)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!bz2r0z libm.dylibzlibcrypto.dylibzlibSystem.dylibzSystem.framework/Systemr5)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 LoadLibraryrvrrjZ RTLD_MEMBER)rrrrrtestOs<            r__main__)F)r$rIrNr r,rr r.rZctypes.macholib.dyldr1r2rvZ ctypes._aixrGrKr<r\rcrlr{rrr__name__rrrrs>     2     $ (