ó
^†êWc           @@  sz  d  Z  d d l m Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z y d d l	 Z	 Wn  e
 k
 r d d l j	 Z	 n Xd d l Z d d l m Z e j e ƒ Z e j d ƒ Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z e e d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" d e$ d „ Z% e% ƒ  Z& e% d e ƒ Z' e ƒ  Z( d S(   s2   Generate and work with PEP 425 Compatibility Tags.i    (   t   absolute_importN(   t   OrderedDicts   (.+)_(\d+)_(\d+)_(.+)c         C@  sE   y t  j |  ƒ SWn- t k
 r@ } t j d j | ƒ t ƒ d  SXd  S(   Ns   {0}(   t	   sysconfigt   get_config_vart   IOErrort   warningst   warnt   formatt   RuntimeWarningt   None(   t   vart   e(    (    s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyR      s
    c          C@  sU   t  t d ƒ r d }  n9 t j j d ƒ r3 d }  n t j d k rK d }  n d }  |  S(   s'   Return abbreviated implementation name.t   pypy_version_infot   ppt   javat   jyt   clit   ipt   cp(   t   hasattrt   syst   platformt
   startswith(   t   pyimpl(    (    s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyt   get_abbr_impl"   s    			c          C@  sD   t  d ƒ }  |  s" t ƒ  d k r@ d j t t t ƒ  ƒ ƒ }  n  |  S(   s   Return implementation version.t   py_version_nodotR   t    (   R   R   t   joint   mapt   strt   get_impl_version_info(   t   impl_ver(    (    s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyt   get_impl_ver/   s    c           C@  sK   t  ƒ  d k r/ t j d t j j t j j f St j d t j d f Sd S(   sQ   Return sys.version_info-like tuple for use in decrementing the minor
    version.R   i    i   N(   R   R   t   version_infoR   t   majort   minor(    (    (    s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyR   7   s    c           C@  s   d j  t ƒ  t ƒ  ƒ S(   s;   
    Returns the Tag for this specific implementation.
    s   {0}{1}(   R   R   R    (    (    (    s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyt   get_impl_tagB   s    c         C@  sB   t  |  ƒ } | d k r8 | r1 t j d |  ƒ n  | ƒ  S| | k S(   sg   Use a fallback method for determining SOABI flags if the needed config
    var is unset or unavailable.s>   Config variable '%s' is unset, Python ABI tag may be incorrectN(   R   R	   t   loggert   debug(   R
   t   fallbackt   expectedR   t   val(    (    s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyt   get_flagI   s    	
c       	   @  sg  t  d ƒ }  t ƒ  ‰  |  rˆ  d k rt t d ƒ rd } d } d } t d d „  d ˆ  d k ƒrp d	 } n  t d
 ‡  f d †  d ˆ  d k ƒr d } n  t d d „  d d d ˆ  d k oÊ t j d k  ƒrè t j d k  rè d } n  d ˆ  t ƒ  | | | f } n\ |  r6|  j d ƒ r6d |  j d ƒ d } n- |  r]|  j	 d d ƒ j	 d d ƒ } n d } | S(   sX   Return the ABI tag based on SOABI (if available) or emulate SOABI
    (CPython 2, PyPy).t   SOABIR   R   t
   maxunicodeR   t   Py_DEBUGc           S@  s   t  t d ƒ S(   Nt   gettotalrefcount(   R   R   (    (    (    s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyt   <lambda>_   s    R   t   dt   WITH_PYMALLOCc           @  s
   ˆ  d k S(   NR   (    (    (   t   impl(    s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyR/   c   s    t   mt   Py_UNICODE_SIZEc           S@  s   t  j d k S(   Niÿÿ (   R   R,   (    (    (    s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyR/   g   s    R(   i   i   t   us
   %s%s%s%s%ss   cpython-t   -i   t   .t   _(   s   cps   pp(   i   i   (   i   i   N(   R   R   R   R   R*   R!   R    R   t   splitt   replaceR	   (   t   soabiR0   R3   R5   t   abi(    (   R2   s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyt   get_abi_tagU   s8    	"					!c           C@  s   t  j d k S(   Niÿÿÿ(   R   t   maxsize(    (    (    s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyt   _is_running_32bitw   s    c          C@  sÓ   t  j d k rŠ t j ƒ  \ }  } } |  j d ƒ } | d k rQ t ƒ  rQ d } n | d k ro t ƒ  ro d } n  d j | d | d	 | ƒ St j j ƒ  j	 d d
 ƒ j	 d d
 ƒ } | d k rÏ t ƒ  rÏ d } n  | S(   s0   Return our platform name 'win32', 'linux_x86_64't   darwinR7   t   x86_64t   i386t   ppc64t   ppcs   macosx_{0}_{1}_{2}i    i   R8   R6   t   linux_x86_64t
   linux_i686(
   R   R   t   mac_verR9   R?   R   t	   distutilst   utilt   get_platformR:   (   t   releaseR8   t   machinet	   split_vert   result(    (    s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyRJ   {   s    		'	c          C@  sW   t  ƒ  d k r t Sy d d  l }  t |  j ƒ SWn t t f k
 rI n Xt d d ƒ S(   NRE   RF   i    i   i   (   s   linux_x86_64s
   linux_i686(   RJ   t   Falset
   _manylinuxt   boolt   manylinux1_compatiblet   ImportErrort   AttributeErrort   have_compatible_glibc(   RP   (    (    s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyt   is_manylinux1_compatible•   s    c         C@  sd   t  j d |  ƒ } | s0 t j d |  t ƒ t St | j d ƒ ƒ | k oc t | j d ƒ ƒ | k S(   Ns$   (?P<major>[0-9]+)\.(?P<minor>[0-9]+)s=   Expected glibc version with 2 components major.minor, got: %sR"   R#   (   t   ret   matchR   R   R   RO   t   intt   group(   t   version_strt   needed_majort   needed_minorR3   (    (    s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyt   check_glibc_version§   s    	c         C@  sw   t  j d  ƒ } y | j } Wn t k
 r0 t SXt  j | _ | ƒ  } t | t	 ƒ sg | j
 d ƒ } n  t | |  | ƒ S(   Nt   ascii(   t   ctypest   CDLLR	   t   gnu_get_libc_versionRT   RO   t   c_char_pt   restypet
   isinstanceR   t   decodeR^   (   R"   t   minimum_minort   process_namespaceRb   R[   (    (    s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyRU   ·   s    	c         @  s¾   g  } ‡  ‡ f d †  ‰  t  d d f d d f d d f d	 d f g ƒ ‰ ˆ  |  | | ƒ rj | j | ƒ n  x@ ˆ D]8 } | ˆ | k rq ˆ  |  | | ƒ rq | j | ƒ qq qq W| j d
 ƒ | S(   s‹   Return a list of supported arches (including group arches) for
    the given major, minor and machine architecture of an OS X machine.
    c         @  s®   | d k r |  | f d k S| d k r8 |  | f d	 k S| d k rT |  | f d
 k S| d k rp |  | f d k S| ˆ k rª x+ ˆ | D] } ˆ  |  | | ƒ r‡ t  Sq‡ Wn  t S(   NRD   i
   i   RC   RB   i   RA   (   i
   i   (   i
   i   (   i
   i   (   i
   i   (   t   TrueRO   (   R"   R#   t   archt   garch(   t   _supports_archt   groups(    s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyRl   Ô   s    t   fatRB   RD   t   intelRA   t   fat64RC   t   fat32t	   universal(   s   i386s   ppc(   s   x86_64s   i386(   s   x86_64s   ppc64(   s   x86_64s   i386s   ppc(   R   t   append(   R"   R#   RL   t   archesRk   (    (   Rl   Rm   s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyt   get_darwin_archesÎ   s    $			"c         C@  sb  g  } |  d k ru g  }  t ƒ  } | d  } xG t | d d d ƒ D], } |  j d j t t | | f ƒ ƒ ƒ qB Wn  t ƒ  } g  } t ƒ  } | r¦ | g | d d +n  t	 ƒ  }	 d d l
 }
 xK |
 j ƒ  D]= } | d j d ƒ rÈ |	 j | d j d d ƒ d ƒ qÈ qÈ W| j t t |	 ƒ ƒ ƒ | j d	 ƒ | s«t ƒ  } t j d
 k rt j | ƒ } | rö| j ƒ  \ } } } } d j | | ƒ } g  } xj t t t | ƒ d ƒ ƒ D]@ } x7 t t | ƒ | | ƒ D] } | j | | | f ƒ qÎWq¯Wq/| g } n- t ƒ  r&| j d d ƒ | g } n	 | g } xC | D]; } x2 | D]* } | j d | |  d f | | f ƒ qCWq6Wx3 | D]( } | j d |  d d d	 | f ƒ q|Wn  | j d | |  d f d	 d f ƒ | j d | |  d d f d	 d f ƒ xd t |  ƒ D]V \ } } | j d | f d	 d f ƒ | d k r| j d | d d	 d f ƒ qqW| S(   sä   Return 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.
    iÿÿÿÿR   i    Ns   .abiR7   i   i   t   noneR@   s   {0}_{1}_%i_%st   linuxt
   manylinux1s   %s%ss   py%st   any(   R	   R   t   rangeRs   R   R   R   R   R=   t   sett   impt   get_suffixesR   t   addR9   t   extendt   sortedt   listRJ   R   R   t   _osx_arch_patRX   Rm   R   t   reversedRY   Ru   RV   R:   t	   enumerate(   t   versionst   noarcht	   supportedR!   R"   R#   R2   t   abisR<   t   abi3sR|   t   suffixRj   RX   t   namet   actual_archt   tplRt   R3   t   at   it   version(    (    s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyt   get_supported  s\    	
-			(	#"		,)$(%R†   ()   t   __doc__t
   __future__R    RW   R   R   R   t   loggingR`   R   RS   t   distutils.sysconfigt   distutils.utilRH   t
   pip.compatR   t	   getLoggert   __name__R%   t   compileR‚   R   R   R    R   R$   Ri   R*   R=   R?   RJ   RV   R^   RU   Ru   R	   RO   R‘   t   supported_tagst   supported_tags_noarcht   implementation_tag(    (    (    s_   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/pep425tags.pyt   <module>   s@   						"						=O	