ó
%}Xc           @   sÌ   d  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 d d l m	 Z	 d d l
 m Z d d l Z g  Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d S(   s   
Monkey patching of distutils.
iÿÿÿÿNi   (   t   import_module(   t   sixc         C   sC   t  |  t j ƒ r t n t  |  t j ƒ r0 t n d „  } | |  ƒ S(   Nc         S   s   d  S(   N(   t   None(   t   item(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/monkey.pyt   <lambda>   s    (   t
   isinstanceR   t   class_typest   get_unpatched_classt   typest   FunctionTypet   get_unpatched_function(   R   t   lookup(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/monkey.pyt   get_unpatched   s    	c         C   sT   d „  t  j |  ƒ Dƒ } t | ƒ } | j j d ƒ sP d |  } t | ƒ ‚ n  | S(   s•   Protect against re-patching the distutils if reloaded

    Also ensures that no other distutils extension monkeypatched the distutils
    first.
    c         s   s'   |  ] } | j  j d  ƒ s | Vq d S(   t
   setuptoolsN(   t
   __module__t
   startswith(   t   .0t   cls(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/monkey.pys	   <genexpr>(   s   t	   distutilss(   distutils has already been patched by %r(   t   inspectt   getmrot   nextR   R   t   AssertionError(   R   t   external_basest   baset   msg(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/monkey.pyR   !   s    
c          C   s”  t  j t j _ t j d k  pI d t j k  o8 d k n pI d t j k  }  |  rd t  j t j _ n  t j d k  pÜ d t j k  o d k  n pÜ d t j k  o¬ d k  n pÜ d t j k  oË d k n pÜ d t j k  } | rý d	 } | t j j	 _
 n  t ƒ  t ƒ  x/ t j t j t j f D] } t  j j | _ q$Wt  j j t j _ t  j j t j _ d
 t j k r‰t  j j t j d
 _ n  t ƒ  d  S(   Ni   i   i   i   i   i   i   i    s   https://upload.pypi.org/legacy/s   distutils.command.build_ext(   i   i   i   (   i   i   (   i   i   i   (   i   i   (   i   i   i   (   i   i    (   i   i   i   (   i   i   (   i   i   i   (   i   i   (   i   i   i   (   i   i   (   R   t   CommandR   t   coret   syst   version_infot   findallt   filelistt   configt   PyPIRCCommandt   DEFAULT_REPOSITORYt+   _patch_distribution_metadata_write_pkg_filet+   _patch_distribution_metadata_write_pkg_infot   distt   cmdt   Distributiont	   extensiont	   Extensiont   modulest#   patch_for_msvc_specialized_compiler(   t   has_issue_12885t   needs_warehouset	   warehouset   module(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/monkey.pyt	   patch_all3   s.    c           C   s   t  j j t j j _ d S(   sD   Patch write_pkg_file to also write Requires-Python/Requires-ExternalN(   R   R%   t   write_pkg_fileR   t   DistributionMetadata(    (    (    s5   /usr/lib/python2.7/dist-packages/setuptools/monkey.pyR#   e   s    c          C   sF   d t  j d  k o d k  n }  |  s- d St j j t j j _ d S(   sÇ   
    Workaround issue #197 - Python 3 prior to 3.2.2 uses an environment-local
    encoding to save the pkg_info. Monkey-patch its write_pkg_info method to
    correct this undesirable behavior.
    i   i   N(   i   (   i   i   i   (   R   R   R   R%   t   write_pkg_infoR   R2   (   t   environment_local(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/monkey.pyR$   l   s    #c         C   s9   t  | | ƒ } t |  ƒ j d | ƒ t | | |  ƒ d S(   sž   
    Patch func_name in target_mod with replacement

    Important - original must be resolved by name to avoid
    patching an already patched function.
    t	   unpatchedN(   t   getattrt   varst
   setdefaultt   setattr(   t   replacementt
   target_modt	   func_namet   original(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/monkey.pyt
   patch_func{   s    c         C   s   t  |  d ƒ S(   NR5   (   R6   (   t	   candidate(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/monkey.pyR
   Œ   s    c             sá   t  d ƒ ‰  t j ƒ  d k r" d S‡  f d †  }  t j |  d ƒ } t j |  d ƒ } y$ t | d ƒ Œ  t | d ƒ Œ  Wn t k
 rŒ n Xy t | d	 ƒ Œ  Wn t k
 r´ n Xy t | d
 ƒ Œ  Wn t k
 rÜ n Xd S(   s\   
    Patch functions in distutils to use standalone Microsoft Visual C++
    compilers.
    s   setuptools.msvct   WindowsNc            sq   d |  k r d n d } | | j  d ƒ } t ˆ  | ƒ } t |  ƒ } t | | ƒ sd t | ƒ ‚ n  | | | f S(   sT   
        Prepare the parameters for patch_func to patch indicated function.
        t   msvc9t   msvc9_t   msvc14_t   _(   t   lstripR6   R    t   hasattrt   ImportError(   t   mod_nameR<   t   repl_prefixt	   repl_namet   replt   mod(   t   msvc(    s5   /usr/lib/python2.7/dist-packages/setuptools/monkey.pyt   patch_paramsœ   s    s   distutils.msvc9compilers   distutils._msvccompilert   find_vcvarsallt   query_vcvarsallt   _get_vc_envt   gen_lib_options(   R    t   platformt   systemt	   functoolst   partialR>   RG   (   RN   RA   t   msvc14(    (   RM   s5   /usr/lib/python2.7/dist-packages/setuptools/monkey.pyR+      s&    (   t   __doc__R   t   distutils.filelistR   RS   R   RU   R   t
   py26compatR    t   setuptools.externR   R   t   __all__R   R   R0   R#   R$   R>   R
   R+   (    (    (    s5   /usr/lib/python2.7/dist-packages/setuptools/monkey.pyt   <module>   s$   				2				