grthtrhthjhtyjytjytkergtrhtrjytjerhrfh3 ÝPfä*ã @sdZddlmZddlZddlZddlZddlZddlZy ddlZWne k rbddl jZYnXddl Z ddl mZddlZejeƒZejdƒZdd„Zdd „Zd d „Zd d „Zdd„Zd!dd„Zdd„Zdd„Zdd„Zdd„Zdd„Z d"dd„Z!e!ƒZ"e!dd �Z#eƒZ$dS)#z2Generate and work with PEP 425 Compatibility Tags.é)Úabsolute_importN)Ú OrderedDictz(.+)_(\d+)_(\d+)_(.+)cCsBy tj|ƒStk r<}ztjdj|ƒtƒdSd}~XnXdS)Nz{0})Ú sysconfigÚget_config_varÚIOErrorÚwarningsÚwarnÚformatÚRuntimeWarning)ÚvarÚe©r ú /usr/lib/python3.6/pep425tags.pyrs  rcCs:ttdƒrd}n&tjjdƒr"d}ntjdkr2d}nd}|S)z'Return abbreviated implementation name.Úpypy_version_infoÚppÚjavaZjyZcliZipÚcp)ÚhasattrÚsysÚplatformÚ startswith)Zpyimplr r rÚ get_abbr_impl!s   rcCs.tdƒ}| stƒdkr*djtttƒƒƒ}|S)zReturn implementation version.Úpy_version_nodotrÚ)rrÚjoinÚmapÚstrÚget_impl_version_info)Zimpl_verr r rÚ get_impl_ver.srcCs:tƒdkr"tjdtjjtjjfStjdtjdfSdS)zQReturn sys.version_info-like tuple for use in decrementing the minor version.rréN)rrÚ version_inforÚmajorÚminorr r r rr6s  rcCsdjtƒtƒƒS)z; Returns the Tag for this specific implementation. z{0}{1})r rrr r r rÚ get_impl_tagAsr#TcCs.t|ƒ}|dkr&|r tjd|ƒ|ƒS||kS)zgUse a fallback method for determining SOABI flags if the needed config var is unset or unavailable.Nz>Config variable '%s' is unset, Python ABI tag may be incorrect)rÚloggerÚdebug)r ZfallbackÚexpectedrÚvalr r rÚget_flagHsr(csôtdƒ}tƒ‰| r°ˆdkr°ttdƒr°d}d}d}tddd„ˆdkd �rLd }td ‡fd d„ˆdkd �rjd }tddd„dˆdko†tjdkd�rštjdkršd}dˆtƒ|||f}n@|rÒ|jdƒrÒd|jdƒd}n|rì|j ddƒj ddƒ}nd}|S)zXReturn the ABI tag based on SOABI (if available) or emulate SOABI (CPython 2, PyPy).ÚSOABIrrÚ maxunicoderÚPy_DEBUGcSs ttdƒS)NÚgettotalrefcount)rrr r r rÚ^szget_abi_tag..)rÚdÚ WITH_PYMALLOCcsˆdkS)Nrr r )Úimplr rr-bsÚmZPy_UNICODE_SIZEcSs tjdkS)Niÿÿ)rr*r r r rr-fséé)r&rÚuz %s%s%s%s%szcpython-ú-rÚ.Ú_N)rr)r3r3)r3r3) rrrrr(r rrÚsplitÚreplace)Zsoabir.r1r4Úabir )r0rÚ get_abi_tagTs8    r;cCs tjdkS)Niÿÿÿ)rÚmaxsizer r r rÚ_is_running_32bitvsr=cCsŽtjdkr^tjƒ\}}}|jdƒ}|dkr6tƒr6d}n|dkrHtƒrHd}dj|d|d |ƒStjjƒj dd ƒj d d ƒ}|d krŠtƒrŠd }|S)z0Return our platform name 'win32', 'linux_x86_64'Údarwinr6Úx86_64Úi386Úppc64Úppczmacosx_{0}_{1}_{2}rrr7r5Ú linux_x86_64Ú linux_i686) rrZmac_verr8r=r Ú distutilsÚutilÚ get_platformr9)Úreleaser7ÚmachineZ split_verÚresultr r rrGzs  rGc CsJtƒdkrdSyddl}t|jƒSttfk r8YnXtjjj ddƒS)NrCrDFréé)rCrD) rGÚ _manylinuxÚboolZmanylinux1_compatibleÚ ImportErrorÚAttributeErrorÚpipZutilsZglibcZhave_compatible_glibc)rMr r rÚis_manylinux1_compatible”s  rRcsvg}‡‡fdd„‰td dddgƒ‰ˆ|||ƒr8|j|ƒx.ˆD]&}|ˆ|kr>ˆ|||ƒr>|j|ƒq>W|jd ƒ|S)zŒReturn a list of supported arches (including group arches) for the given major, minor and machine architecture of an macOS machine. cs~|dkr||fd kS|dkr(||fd kS|dkr<||fd kS|dkrP||fd kS|ˆkrzx ˆ|D]}ˆ|||ƒrbdSqbWd S)NrBé rLrAr@r2r?TF)rSrL)rSrL)rSr2)rSrLr )r!r"ÚarchÚgarch)Ú_supports_archÚgroupsr rrV«s     z)get_darwin_arches.._supports_archÚfatr@rBÚintelr?Úfat64rAÚfat32Z universal©r@rB)rXr\©r?r@)rYr]©r?rA)rZr^©r?r@rB)r[r_)rÚappend)r!r"rIÚarchesrUr )rVrWrÚget_darwin_arches¥s$    rbFcCsg}|dkrXg}tƒ}|dd…}x4t|dddƒD] }|jdjtt||fƒƒƒq4W|p`tƒ}g} |pntƒ}|r‚|g| dd…<tƒ} ddl } x8| j ƒD],} | dj dƒrš| j | dj ddƒdƒqšW| jtt| ƒƒƒ| jdƒ|�sx|pôtƒ} | j d ƒ�rŠtj| ƒ}|�r‚|jƒ\}}}}d j||ƒ}g}xTttt|ƒdƒƒD]4}x,tt|ƒ||ƒD]}|j|||fƒ�q^W�qHWn| g}n*|dk�r®tƒ�r®| jd d ƒ| g}n| g}x:| D]2}x*|D]"} |jd ||df|| fƒ�qÄW�qºWxZ|dd…D]J}|dk�rPx6| D].}x&|D]} |jd ||f|| fƒ�qW�qW�qþWx*|D]"} |jd|ddd| fƒ�qRW|jd ||dfddfƒ|jd ||ddfddfƒxNt|ƒD]B\}}|jd|fddfƒ|dk�r¾|jd|dddfƒ�q¾W|S)acReturn a list of supported tags for each version specified in `versions`. :param versions: a list of string versions, of the form ["33", "32"], or None. The first version will be assumed to support our ABI. :param platform: specify the exact platform you want valid tags for, or None. If None, use the local system platform. :param impl: specify the exact implementation you want valid tags for, or None. If None, use the local interpreter impl. :param abi: specify the exact abi you want valid tags for, or None. If None, use the local interpreter abi. Nrrrz.abir6rKZnoneZmacosxz {0}_{1}_%i_%sÚlinuxZ manylinux1z%s%sÚ31Ú30zpy%sÚanyéÿÿÿÿrgrgrg)rdre)rÚranger`rrrrr;ÚsetÚimpZ get_suffixesrÚaddr8ÚextendÚsortedÚlistrGÚ _osx_arch_patÚmatchrWr ÚreversedÚintrbrRr9Ú enumerate)ZversionsÚnoarchrr0r:Z supportedr r!r"ZabisZabi3srjÚsuffixrTrpÚnameZ actual_archZtplrar1ÚaÚversionÚir r rÚ get_supportedâsh            (   * "  rz)rt)TT)NFNNN)%Ú__doc__Z __future__rÚrerrrZloggingrrOZdistutils.sysconfigZdistutils.utilrEZ pip.compatrZpip.utils.glibcrQZ getLoggerÚ__name__r$Úcompilerorrrrr#r(r;r=rGrRrbrzZsupported_tagsZsupported_tags_noarchZimplementation_tagr r r rÚs>        "= ^