fc@sddlZddlZddlZddlmZddlmZmZmZmZddl m Z dddd gZ ddd YZ dd Zddd Zdd ZdZedS(iN(t StrictVersion(t PKG_DIRECTORYt PY_COMPILEDt PY_SOURCEt PY_FROZENi(tBytecodetRequiret find_moduletget_module_constanttextract_constantcBsYeZdZdd d dZdZdZd ddZd dZd dZ RS( s7A prerequisite to building or installing a distributiontcCsn|dkr!|dk r!t}n|dk rQ||}|dkrQd}qQn|jjt|`dS(Nt __version__(tNoneRt__dict__tupdatetlocalstself(Rtnametrequested_versiontmodulethomepaget attributetformat((s6/usr/lib/python2.7/site-packages/setuptools/depends.pyt__init__s     cCs*|jdk r#d|j|jfS|jS(s0Return full package/distribution name, w/versions%s-%sN(RR R(R((s6/usr/lib/python2.7/site-packages/setuptools/depends.pyt full_name scCs=|jdkp<|jdkp<t|dko<||jkS(s%Is 'version' sufficiently up-to-date?tunknownN(RR RtstrR(Rtversion((s6/usr/lib/python2.7/site-packages/setuptools/depends.pyt version_ok&sRcCs|jdkr]y6t|j|\}}}|r@|jn|SWq]tk rYdSXnt|j|j||}|dk r||k r|jdk r|j|S|S(sGet version number of installed module, 'None', or 'default' Search 'paths' for module. If not found, return 'None'. If found, return the extracted version attribute, or 'default' if no version attribute was specified, or the value cannot be determined without importing the module. The version is formatted according to the requirement's version format (if any), unless it is 'None' or the supplied 'default'. N(RR RRtcloset ImportErrorRR(Rtpathstdefaulttftptitv((s6/usr/lib/python2.7/site-packages/setuptools/depends.pyt get_version+s   ' cCs|j|dk S(s/Return true if dependency is present on 'paths'N(R%R (RR((s6/usr/lib/python2.7/site-packages/setuptools/depends.pyt is_presentFscCs,|j|}|dkrtS|j|S(s>Return true if dependency is present and up-to-date on 'paths'N(R%R tFalseR(RRR((s6/usr/lib/python2.7/site-packages/setuptools/depends.pyt is_currentJs N( t__name__t __module__t__doc__R RRRR%R&R((((s6/usr/lib/python2.7/site-packages/setuptools/depends.pyRs   c Cs|jd}x|r|jd}tj||\}}\}}}} |tkrv|pgdg}|g}q|rtd||fqqW| S(s7Just like 'imp.find_module()', but with package supportt.iRsCan't find %r in %s(tsplittpoptimpRRR( RRtpartstpartR!tpathtsuffixtmodetkindtinfo((s6/usr/lib/python2.7/site-packages/setuptools/depends.pyRRs (  c Csy%t||\}}\}}}Wntk r9dSXz|tkrh|jdtj|} n|tkrtj |} no|t krt |j|d} nH|t j krtj||||||fntt j ||dSWd|r |jnXt| ||S(sFind 'module' by searching 'paths', and extract 'symbol' Return 'None' if 'module' does not exist on 'paths', or it does not define 'symbol'. If the module defines 'symbol' as a constant, return the constant. Otherwise, return 'default'.itexecN(RRR RtreadtmarshaltloadRR/tget_frozen_objectRtcompiletsystmodulest load_moduletgetattrRR ( RtsymbolR RR!R2R3R4R5tcode((s6/usr/lib/python2.7/site-packages/setuptools/depends.pyRes$%     "c Cs||jkrdSt|jj|}d}d}d}|}xpt|D]b}|j} |j} | |kr|j| }qP| |kr| |ks| |kr|S|}qPWdS(sExtract the constant value of 'symbol' from 'code' If the name 'symbol' is bound to a constant value by the Python code object 'code', return that value. If 'symbol' is bound to an expression, return 'default'. Otherwise, return 'None'. Return value is based on the first assignment to 'symbol'. 'symbol' must be a global, or at least a non-"fast" local in the code block. That is, only 'STORE_NAME' and 'STORE_GLOBAL' opcodes are checked, and 'symbol' must be present in 'code.co_names'. iZiaidN(tco_namesR tlisttindexRtopcodetargt co_consts( RBRAR tname_idxt STORE_NAMEt STORE_GLOBALt LOAD_CONSTtconstt byte_codetopRG((s6/usr/lib/python2.7/site-packages/setuptools/depends.pyR s    $cCsXtjjd r&tjdkr&dSd}x%|D]}t|=tj|q3WdS(s Patch the globals to remove the objects not available on some platforms. XXX it'd be better to test assertions about bytecode instead. tjavatcliNR R(R R(R=tplatformt startswithtglobalst__all__tremove(t incompatibleR((s6/usr/lib/python2.7/site-packages/setuptools/depends.pyt_update_globalss "  ((R=R/R9tdistutils.versionRRRRRt py33compatRRURR RRR RX(((s6/usr/lib/python2.7/site-packages/setuptools/depends.pyts   "C " $