pfc@sddlZddlZejdkrEdZdZdZnejdkr`dZnejdkrejd krdd lmZ d Znejdkrddl Z ddl Z ddl Z d Z ejd krdZn dZejjds0ejjds0ejjdrEdZdZqejd krldZedZqdZdZndZedkrendS(iNtntcCsd}tjj|}|dkr(dS|t|}tj|jdd\}}t|d d}t|dd!d }|dkrd }n|dkr||Sd S( sReturn 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. sMSC v.iit iiiig$@iN(tsystversiontfindtlentsplittinttNone(tprefixtitstrestt majorVersiont minorVersion((s#/usr/lib64/python2.7/ctypes/util.pyt_get_build_version s    cCswt}|dkrdS|dkr.d}nd|d}ddl}|jdddkro|d 7}n|d S( s%Return the name of the VC runtime dllitmsvcrtsmsvcr%di iNis_d.pydtds.dll(RRtimpt get_suffixes(RtclibnameR((s#/usr/lib64/python2.7/ctypes/util.pyt find_msvcrt s      cCs|dkrtSxtjdjtjD]l}tjj||}tjj|r^|S|jj dryq-n|d}tjj|r-|Sq-WdS(NtctmtPATHs.dll(RR( RtostenvironRtpathseptpathtjointisfiletlowertendswithR(tnamet directorytfname((s#/usr/lib64/python2.7/ctypes/util.pyt find_library1s   tcecCs|S(N((R!((s#/usr/lib64/python2.7/ctypes/util.pyR$Gstposixtdarwin(t dyld_findcCs[d|d|d||fg}x3|D]+}yt|SWq(tk rRq(q(Xq(WdS(Ns lib%s.dylibs%s.dylibs%s.framework/%s(t _dyld_findt ValueErrorR(R!tpossible((s#/usr/lib64/python2.7/ctypes/util.pyR$Ls   c Csdtj|}tj\}}tj|d|d|}z3tj|}z|j}Wd|j}XWdytj|Wn+t k r}|j t j krqnXX|dkrt dntj ||} | sdS| jdS(Ns[^\(\)\s]*lib%s\.[^\(\)\s]*srif type gcc >/dev/null 2>&1; then CC=gcc; elif type cc >/dev/null 2>&1; then CC=cc;else exit 10; fi;$CC -Wl,-t -o s 2>&1 -li sgcc or cc command not foundi(tretescapettempfiletmkstempRtclosetpopentreadtunlinktOSErrorterrnotENOENTtsearchRtgroup( R!texprtfdouttccouttcmdtfttracetrvtetres((s#/usr/lib64/python2.7/ctypes/util.pyt _findLib_gcc[s(    tsunos5cCsj|s dSd|}tj|}z|j}Wd|jXtjd|}|s]dS|jdS(Ns#/usr/ccs/bin/dump -Lpv 2>/dev/null s\[.*\]\sSONAME\s+([^\s]+)i(RRR1R2R0R,R7R8(R=R<tdataRA((s#/usr/lib64/python2.7/ctypes/util.pyt _get_sonamews  cCs|s dSd|}tj|}|j}|j}|dkrWtjj|Stj|}z|j}Wd|jXtjd|}|sdS|j dS(NsWif ! type objdump >/dev/null 2>&1; then exit 10; fi;objdump -p -j .dynamic 2>/dev/null i s\sSONAME\s+([^\s]+)i( RRR1R2R0RtbasenameR,R7R8(R=R<tdumpR?RDRA((s#/usr/lib64/python2.7/ctypes/util.pyREs"    tfreebsdtopenbsdt dragonflycCsf|jd}g}y-x&|r@|jdt|jqWWntk rUnX|petjgS(Nt.i(RtinsertRtpopR*Rtmaxint(tlibnametpartstnums((s#/usr/lib64/python2.7/ctypes/util.pyt _num_versions $ cCstj|}d||f}tjd}z|j}Wd|jXtj||}|sttt|S|j dd|dS(Ns:-l%s\.\S+ => \S*/(lib%s\.\S+)s/sbin/ldconfig -r 2>/dev/nulltcmpcSstt|t|S(N(RSRR(txty((s#/usr/lib64/python2.7/ctypes/util.pytsi( R,R-RR1R2R0tfindallRERBtsort(R!tenameR9R=RDRA((s#/usr/lib64/python2.7/ctypes/util.pyR$s cCstjjdsdS|r%d}nd}xKtj|jD]4}|j}|jdrA|jd}qAqAW|sdSxF|jdD]5}tjj |d|}tjj|r|SqWdS(Ns /usr/bin/crles*env LC_ALL=C /usr/bin/crle -64 2>/dev/nulls&env LC_ALL=C /usr/bin/crle 2>/dev/nullsDefault Library Path (ELF):it:slib%s.so( RRtexistsRR1t readlineststript startswithRR(R!tis64R<tlinetpathstdirtlibfile((s#/usr/lib64/python2.7/ctypes/util.pyt _findLib_crles   cCstt||pt|S(N(RERdRB(R!R_((s#/usr/lib64/python2.7/ctypes/util.pyR$sc Csddl}|jddkr8tjdd}ntjdd}idd6dd 6dd 6dd 6d d 6}|j|d}dtj||f}tjd}z|j}Wd|j Xtj ||}|sdS|j dS(Nitlis-32s-64s libc6,x86-64s x86_64-64s libc6,64bitsppc64-64s sparc64-64ss390x-64s libc6,IA-64sia64-64tlibc6s\s+(lib%s\.[^\s]+)\s+\(%ss/sbin/ldconfig -p 2>/dev/nulli( tstructtcalcsizeRtunametgetR,R-R1R2R0R7RR8( R!Rgtmachinetmach_maptabi_typeR9R=RDRA((s#/usr/lib64/python2.7/ctypes/util.pyt_findSoname_ldconfigs(   cCst|ptt|S(N(RnRERB(R!((s#/usr/lib64/python2.7/ctypes/util.pyR$scCsddlm}tjdkrC|jGH|jdGHtdGHntjdkrtdGHtdGHtdGHtjd kr|j d GH|j d GH|j d GH|j d GHq|j dGH|j dGHtdGHndS(Ni(tcdllRRR&RRtbz2R's libm.dylibslibcrypto.dylibslibSystem.dylibsSystem.framework/Systemslibm.sos libcrypt.sotcrypt( tctypesRoRR!RtloadR$Rtplatformt LoadLibrary(Ro((s#/usr/lib64/python2.7/ctypes/util.pyttests"   t__main__(RRR!RRR$Rttctypes.macholib.dyldR(R)R,R.R5RBRER^RRRdtFalseRnRvt__name__(((s#/usr/lib64/python2.7/ctypes/util.pyts8     $