
%}Xc           @   sg  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 m Z d d l	 m
 Z
 d d l m Z e j   d k r d d l	 m Z e j Z n d	 f  d
     YZ e   Z y d d l m Z Wn e k
 r n Xd   Z d d  Z d   Z d   Z d d  Z d f  d     YZ d f  d     YZ d f  d     YZ d f  d     YZ d S(   s  
Improved support for Microsoft Visual C++ compilers.

Known supported compilers:
--------------------------
Microsoft Visual C++ 9.0:
    Microsoft Visual C++ Compiler for Python 2.7 (x86, amd64);
    Microsoft Windows SDK 7.0 (x86, x64, ia64);
    Microsoft Windows SDK 6.1 (x86, x64, ia64)

Microsoft Visual C++ 10.0:
    Microsoft Windows SDK 7.1 (x86, x64, ia64)

Microsoft Visual C++ 14.0:
    Microsoft Visual C++ Build Tools 2015 (x86, x64, arm)
iN(   t   LegacyVersion(   t   filterfalsei   (   t   get_unpatchedt   Windows(   t   winregR   c           B   s    e  Z d  Z d  Z d  Z d  Z RS(   N(   t   __name__t
   __module__t   Nonet
   HKEY_USERSt   HKEY_CURRENT_USERt   HKEY_LOCAL_MACHINEt   HKEY_CLASSES_ROOT(    (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyR   &   s   (   t   Regc         C   s   d } | d |  f } y t  j | d  } WnQ t k
 r y& | d |  f } t  j | d  } Wq t k
 r{ d } q Xn X| r t j j j j | d  } t j j |  r | Sn  t t	  |   S(   s+  
    Patched "distutils.msvc9compiler.find_vcvarsall" to use the standalone
    compiler build for Python (VCForPython). Fall back to original behavior
    when the standalone compiler is not available.

    Redirect the path of "vcvarsall.bat".

    Known supported compilers
    -------------------------
    Microsoft Visual C++ 9.0:
        Microsoft Visual C++ Compiler for Python 2.7 (x86, amd64)

    Parameters
    ----------
    version: float
        Required Microsoft Visual C++ version.

    Return
    ------
    vcvarsall.bat path: str
    s-   Software\%sMicrosoft\DevDiv\VCForPython\%0.1ft    t
   installdirs   Wow6432Node\s   vcvarsall.batN(
   R   t	   get_valuet   KeyErrorR   t   ost   patht   joint   isfileR   t   msvc9_find_vcvarsall(   t   versiont   VC_BASEt   keyt
   productdirt	   vcvarsall(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyR   4   s    t   x86c         O   s   y# t  t  } | |  | | |  SWn' t j j k
 r< n t k
 rL n Xy t | |   j   SWn, t j j k
 r } t | |  |    n Xd S(   s  
    Patched "distutils.msvc9compiler.query_vcvarsall" for support standalones
    compilers.

    Set environment without use of "vcvarsall.bat".

    Known supported compilers
    -------------------------
    Microsoft Visual C++ 9.0:
        Microsoft Visual C++ Compiler for Python 2.7 (x86, amd64);
        Microsoft Windows SDK 7.0 (x86, x64, ia64);
        Microsoft Windows SDK 6.1 (x86, x64, ia64)

    Microsoft Visual C++ 10.0:
        Microsoft Windows SDK 7.1 (x86, x64, ia64)

    Parameters
    ----------
    ver: float
        Required Microsoft Visual C++ version.
    arch: str
        Target architecture.

    Return
    ------
    environment: dict
    N(	   R   t   msvc9_query_vcvarsallt	   distutilst   errorst   DistutilsPlatformErrort
   ValueErrort   EnvironmentInfot
   return_envt   _augment_exception(   t   vert   archt   argst   kwargst   origt   exc(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyR   _   s    c         C   sx   y t  t  |   SWn t j j k
 r- n Xy t |  d d j   SWn) t j j k
 rs } t | d    n Xd S(   s  
    Patched "distutils._msvccompiler._get_vc_env" for support standalones
    compilers.

    Set environment without use of "vcvarsall.bat".

    Known supported compilers
    -------------------------
    Microsoft Visual C++ 14.0:
        Microsoft Visual C++ Build Tools 2015 (x86, x64, arm)

    Parameters
    ----------
    plat_spec: str
        Target architecture.

    Return
    ------
    environment: dict
    t
   vc_min_verg      ,@N(   R   t   msvc14_get_vc_envR   R   R   R!   R"   R#   (   t	   plat_specR)   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyR+      s    c          O   sb   d t  j k rO d d l } t | j  t d  k  rO | j j j |  |   Sn  t t	  |  |   S(   s   
    Patched "distutils._msvccompiler.gen_lib_options" for fix
    compatibility between "numpy.distutils" and "distutils._msvccompiler"
    (for Numpy < 1.11.2)
    s   numpy.distutilsiNs   1.11.2(
   t   syst   modulest   numpyR    t   __version__R   t	   ccompilert   gen_lib_optionsR   t   msvc14_gen_lib_options(   R&   R'   t   np(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyR3      s
    R   c         C   s   |  j  d } d | j   k s1 d | j   k r d } | j t     } d } | d k r | j   j d  d k r | d	 7} | | d
 7} q | d 7} q | d k r | d 7} | | d 7} q | d k r | d 7} q n  | f |  _  d S(   sl   
    Add details to the exception message to help guide the user
    as to what action will resolve it.
    i    R   s   visual cs0   Microsoft Visual C++ {version:0.1f} is required.s-   www.microsoft.com/download/details.aspx?id=%dg      "@t   ia64is*    Get it with "Microsoft Windows SDK 7.0": iB  s%    Get it from http://aka.ms/vcpython27g      $@s*    Get it with "Microsoft Windows SDK 7.1": iW   g      ,@sj    Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-toolsN(   R&   t   lowert   formatt   localst   find(   R)   R   R%   t   messaget   tmplt
   msdownload(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyR#      s     $

t   PlatformInfoc           B   sz   e  Z d  Z e j d d  j   Z d   Z e d    Z	 d   Z
 d   Z e e d  Z e e d  Z e d	  Z RS(
   s   
    Current and Target Architectures informations.

    Parameters
    ----------
    arch: str
        Target architecture.
    t   processor_architectureR   c         C   s   | j    j d d  |  _ d  S(   Nt   x64t   amd64(   R6   t   replaceR%   (   t   selfR%   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   __init__   s    c         C   s   |  j  |  j  j d  d S(   Nt   _i   (   R%   R9   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt
   target_cpu   s    c         C   s   |  j  d k S(   NR   (   RE   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   target_is_x86   s    c         C   s   |  j  d k S(   NR   (   t   current_cpu(   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   current_is_x86   s    c         C   s=   |  j  d k r | r d S|  j  d k r2 | r2 d Sd |  j  S(   sj  
        Current platform specific subfolder.

        Parameters
        ----------
        hidex86: bool
            return '' and not '' if architecture is x86.
        x64: bool
            return 'd' and not 'md64' if architecture is amd64.

        Return
        ------
        subfolder: str
            '	arget', or '' (see hidex86 parameter)
        R   R   R@   s   \x64s   \%s(   RG   (   RB   t   hidex86R?   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   current_dir   s    c         C   s=   |  j  d k r | r d S|  j  d k r2 | r2 d Sd |  j  S(   sk  
        Target platform specific subfolder.

        Parameters
        ----------
        hidex86: bool
            return '' and not '' if architecture is x86.
        x64: bool
            return 'd' and not 'md64' if architecture is amd64.

        Return
        ------
        subfolder: str
            '\current', or '' (see hidex86 parameter)
        R   R   R@   s   \x64s   \%s(   RE   (   RB   RI   R?   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt
   target_dir  s    c         C   sB   | r d n |  j  } |  j | k r( d S|  j   j d d |  S(   so  
        Cross platform specific subfolder.

        Parameters
        ----------
        forcex86: bool
            Use 'x86' as current architecture even if current acritecture is
            not x86.

        Return
        ------
        subfolder: str
            '' if target architecture is current architecture,
            '\current_target' if not.
        R   R   s   \s   \%s_(   RG   RE   RK   RA   (   RB   t   forcex86t   current(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt	   cross_dir(  s    (   R   R   t   __doc__t   safe_envt   getR6   RG   RC   t   propertyRE   RF   RH   t   FalseRJ   RK   RN   (    (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyR=      s   			t   RegistryInfoc           B   s   e  Z d  Z e j e j e j e j f Z d   Z	 e
 d    Z e
 d    Z e
 d    Z e
 d    Z e
 d    Z e
 d    Z e
 d    Z e
 d	    Z e
 d
    Z e d  Z d   Z RS(   s   
    Microsoft Visual Studio related registry informations.

    Parameters
    ----------
    platform_info: PlatformInfo
        "PlatformInfo" instance.
    c         C   s   | |  _  d  S(   N(   t   pi(   RB   t   platform_info(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyRC   M  s    c         C   s   d S(   s<   
        Microsoft Visual Studio root registry key.
        t   VisualStudio(    (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   visualstudioP  s    c         C   s   t  j j |  j d  S(   s;   
        Microsoft Visual Studio SxS registry key.
        t   SxS(   R   R   R   RX   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   sxsW  s    c         C   s   t  j j |  j d  S(   s8   
        Microsoft Visual C++ VC7 registry key.
        t   VC7(   R   R   R   RZ   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   vc^  s    c         C   s   t  j j |  j d  S(   s;   
        Microsoft Visual Studio VS7 registry key.
        t   VS7(   R   R   R   RZ   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   vse  s    c         C   s   d S(   s?   
        Microsoft Visual C++ for Python registry key.
        s   DevDiv\VCForPython(    (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   vc_for_pythonl  s    c         C   s   d S(   s-   
        Microsoft SDK registry key.
        s   Microsoft SDKs(    (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   microsoft_sdks  s    c         C   s   t  j j |  j d  S(   s>   
        Microsoft Windows/Platform SDK registry key.
        R   (   R   R   R   R`   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   windows_sdkz  s    c         C   s   t  j j |  j d  S(   s<   
        Microsoft .NET Framework SDK registry key.
        t   NETFXSDK(   R   R   R   R`   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt	   netfx_sdk  s    c         C   s   d S(   s<   
        Microsoft Windows Kits Roots registry key.
        s   Windows Kits\Installed Roots(    (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   windows_kits_roots  s    c         C   s:   |  j  j   s | r d n d } t j j d | d |  S(   s
  
        Return key in Microsoft software registry.

        Parameters
        ----------
        key: str
            Registry key path where look.
        x86: str
            Force x86 software registry.

        Return
        ------
        str: value
        R   s   \Wow6432Nodet   Softwaret	   Microsoft(   RU   RH   R   R   R   (   RB   R   R   t   node64(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt	   microsoft  s    !c         C   s   t  j } t  j } |  j } x |  j D] } y | | | |  d |  } Wnk t t f k
 r |  j j   s% y" | | | | t	  d |  } Wq t t f k
 r q% q Xq q% n Xy t  j
 | |  d SWq% t t f k
 r q% Xq% Wd S(   s  
        Look for values in registry in Microsoft software registry.

        Parameters
        ----------
        key: str
            Registry key path where look.
        name: str
            Value name to find.

        Return
        ------
        str: value
        i    N(   R   t   KEY_READt   OpenKeyRh   t   HKEYSt   OSErrort   IOErrorRU   RH   t   Truet   QueryValueEx(   RB   R   t   nameRi   t   openkeyt   mst   hkeyt   bkey(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   lookup  s"    			"
(   R   R   RO   R   R   R	   R
   R   Rk   RC   RR   RX   RZ   R\   R^   R_   R`   Ra   Rc   Rd   RS   Rh   Ru   (    (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyRT   ?  s"   	t
   SystemInfoc           B   s(  e  Z d  Z e j d d  Z e j d d  Z e j d e  Z d d  Z	 d   Z
 e d    Z e d    Z e d	    Z e d
    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z d d  Z RS(   s   
    Microsoft Windows and Visual Studio related system inormations.

    Parameters
    ----------
    registry_info: RegistryInfo
        "RegistryInfo" instance.
    vc_ver: float
        Required Microsoft Visual C++ version.
    t   WinDirR   t   ProgramFiless   ProgramFiles(x86)c         C   sq   | |  _  |  j  j |  _ | r* | |  _ nC y |  j   d |  _ Wn) t k
 rl d } t j j |   n Xd  S(   Nis%   No Microsoft Visual C++ version found(   t   riRU   t   vc_vert   find_available_vc_verst
   IndexErrorR   R   R   (   RB   t   registry_infoRz   t   err(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyRC     s    	c         C   sn  |  j  j |  j  j f } g  } xC|  j  j D]5} x,| D]$} y t j | | d t j  } Wn t t f k
 ry q8 n Xt j	 |  \ } } } xd t
 |  D]V }	 y< t t j | |	  d  }
 |
 | k r | j |
  n  Wq t k
 r q Xq Wx` t
 |  D]R }	 y8 t t j | |	   }
 |
 | k rC| j |
  n  Wqt k
 rWqXqWq8 Wq+ Wt |  S(   sC   
        Find all available Microsoft Visual C++ versions.
        i    (   Ry   R\   R_   Rk   R   Rj   Ri   Rl   Rm   t   QueryInfoKeyt   ranget   floatt	   EnumValuet   appendR    t   EnumKeyt   sorted(   RB   t   vckeyst   vc_versRs   R   Rt   t   subkeyst   valuesRD   t   iR$   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyR{     s0    c         C   sK   d |  j  } t j j |  j |  } |  j j |  j j d |  j   pJ | S(   s4   
        Microsoft Visual Studio directory.
        s   Microsoft Visual Studio %0.1fs   %0.1f(   Rz   R   R   R   t   ProgramFilesx86Ry   Ru   R^   (   RB   Rp   t   default(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   VSInstallDir  s    c         C   s   d |  j  } t j j |  j |  } t j j |  j j d |  j   } |  j j | d  } | rw t j j | d  n | } |  j j |  j j d |  j   p | } t j j	 |  s d } t
 j j |   n  | S(   s1   
        Microsoft Visual C++ directory.
        s    Microsoft Visual Studio %0.1f\VCs   %0.1fR   t   VCs(   Microsoft Visual C++ directory not found(   Rz   R   R   R   R   Ry   R_   Ru   R\   t   isdirR   R   R   (   RB   R   t   guess_vct   reg_patht	   python_vct
   default_vcR   t   msg(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   VCInstallDir  s    "!(c         C   sc   |  j  d k r d S|  j  d k r& d S|  j  d k r9 d S|  j  d k rL d S|  j  d k r_ d Sd S(   s1   
        Microsoft Windows SDK versions.
        g      "@s   7.0s   6.1s   6.0ag      $@s   7.1s   7.0ag      &@s   8.0s   8.0ag      (@s   8.1s   8.1ag      ,@s   10.0N(   s   7.0s   6.1s   6.0a(   s   7.1s   7.0a(   s   8.0s   8.0a(   s   8.1s   8.1a(   s   10.0s   8.1(   Rz   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   WindowsSdkVersion"  s    c         C   s  d } xO |  j  D]D } t j j |  j j d |  } |  j j | d  } | r Pq q W| sr t j j |  r t j j |  j j d |  j	  } |  j j | d  } | r t j j | d  } q n  | s t j j |  rKxd |  j  D]V } | | j
 d   } d | } t j j |  j |  } t j j |  r | } q q Wn  | set j j |  rxQ |  j  D]C } d	 | } t j j |  j |  } t j j |  ro| } qoqoWn  | st j j |  j d
  } n  | S(   s2   
        Microsoft Windows SDK directory.
        R   s   v%st   installationfolders   %0.1fR   t   WinSDKt   .s   Microsoft SDKs\Windows Kits\%ss   Microsoft SDKs\Windows\v%st   PlatformSDK(   R   R   R   R   Ry   Ra   Ru   R   R_   Rz   t   rfindRx   R   (   RB   t   sdkdirR$   t   locR   t   install_baset   intvert   d(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   WindowsSdkDir3  s6    "

c   	      C   s8  |  j  d k r d } d } n< d } |  j  d k r9 t n t } |  j j d t d |  } d | | j d	 d
  f } g  } |  j  d k r x9 |  j D]+ } | t j j	 |  j
 j | |  g 7} q Wn  x: |  j D]/ } | t j j	 |  j
 j d | |  g 7} q Wx- | D]% } |  j
 j | d  } | rPqqW| S(   s=   
        Microsoft Windows SDK executable directory.
        g      &@i#   R   i(   g      (@R?   RI   s   WinSDK-NetFx%dTools%ss   \t   -g      ,@s   v%sAR   (   Rz   Rn   RS   RU   RJ   RA   t   NetFxSdkVersionR   R   R   Ry   Rc   R   Ra   Ru   (	   RB   t   netfxverR%   RI   t   fxt   regpathsR$   R   t   execpath(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   WindowsSDKExecutablePathY  s$    	,-c         C   sA   d |  j  } t j j |  j j |  } |  j j | d  p@ d S(   s0   
        Microsoft Visual F# directory.
        s   %0.1f\Setup\F#R   R   (   Rz   R   R   R   Ry   RX   Ru   (   RB   R   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   FSharpInstallDirx  s    c         C   sb   |  j  d k r d } n d } x7 | D]/ } |  j j |  j j d |  } | r% Pq% q% W| pa d S(   s8   
        Microsoft Universal CRT SDK directory.
        g      ,@t   10t   81s
   kitsroot%sR   (   R   R   (    (   Rz   Ry   Ru   Rd   (   RB   t   versR$   R   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   UniversalCRTSdkDir  s    	c         C   s   |  j  d k r d Sd Sd S(   s8   
        Microsoft .NET Framework SDK versions.
        g      ,@s   4.6.1s   4.6N(   s   4.6.1s   4.6(    (   Rz   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyR     s    c         C   sX   xK |  j  D]@ } t j j |  j j |  } |  j j | d  } | r
 Pq
 q
 W| pW d S(   s9   
        Microsoft .NET Framework SDK directory.
        t   kitsinstallationfolderR   (   R   R   R   R   Ry   Rc   Ru   (   RB   R$   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   NetFxSdkDir  s    c         C   s7   t  j j |  j d  } |  j j |  j j d  p6 | S(   s;   
        Microsoft .NET Framework 32bit directory.
        s   Microsoft.NET\Frameworkt   frameworkdir32(   R   R   R   Rw   Ry   Ru   R\   (   RB   t   guess_fw(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   FrameworkDir32  s    c         C   s7   t  j j |  j d  } |  j j |  j j d  p6 | S(   s;   
        Microsoft .NET Framework 64bit directory.
        s   Microsoft.NET\Framework64t   frameworkdir64(   R   R   R   Rw   Ry   Ru   R\   (   RB   R   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   FrameworkDir64  s    c         C   s   |  j  d  S(   s:   
        Microsoft .NET Framework 32bit versions.
        i    (   t   _find_dot_net_versions(   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   FrameworkVersion32  s    c         C   s   |  j  d  S(   s:   
        Microsoft .NET Framework 64bit versions.
        i@   (   R   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   FrameworkVersion64  s    i    c         C   s   |  j  j |  j  j d |  p" d } |  j d k rC | d f } nR |  j d k r} | j   d  d k rn d n | d	 f } n |  j d
 k r d } n  |  j d k r d } n  | S(   s   
        Find Microsoft .NET Framework versions.

        Parameters
        ----------
        bits: int
            Platform number of bits: 32 or 64.
        s   frameworkver%dR   g      (@s   v4.0g      $@i   t   v4s
   v4.0.30319s   v3.5g      "@s
   v2.0.50727g       @s   v3.0(   s   v3.5s
   v2.0.50727(   s   v3.0s
   v2.0.50727(   Ry   Ru   R\   Rz   R6   (   RB   t   bitsR$   t   frameworkver(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyR     s    
%		N(   R   R   RO   RP   RQ   Rw   Rx   R   R   RC   R{   RR   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyRv     s(   
	&	R!   c           B   s  e  Z d  Z d d d  Z e d    Z e d    Z e d    Z e d    Z	 e d    Z
 e d    Z e d    Z e d	    Z e d
    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d  Z d   Z d d  Z d   Z RS(   sY  
    Return environment variables for specified Microsoft Visual C++ version
    and platform : Lib, Include, Path and libpath.

    This function is compatible with Microsoft Visual C++ 9.0 to 14.0.

    Script created by analysing Microsoft environment configuration files like
    "vcvars[...].bat", "SetEnv.Cmd", "vcbuildtools.bat", ...

    Parameters
    ----------
    arch: str
        Target architecture.
    vc_ver: float
        Required Microsoft Visual C++ version. If not set, autodetect the last
        version.
    vc_min_ver: float
        Minimum Microsoft Visual C++ version.
    c         C   sm   t  |  |  _ t |  j  |  _ t |  j |  |  _ | ri |  j | k  ri d } t j j	 |   qi n  d  S(   Ns.   No suitable Microsoft Visual C++ version found(
   R=   RU   RT   Ry   Rv   t   siRz   R   R   R   (   RB   R%   Rz   R*   R~   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyRC      s    c         C   s
   |  j  j S(   s/   
        Microsoft Visual C++ version.
        (   R   Rz   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyRz   
  s    c         C   s   d d g } |  j  d k rd |  j j d t d t  } | d g 7} | d g 7} | d | g 7} n  g  | D]! } t j j |  j j |  ^ qk S(	   s/   
        Microsoft Visual Studio Tools
        s   Common7\IDEs   Common7\Toolsg      ,@RI   R?   s1   Common7\IDE\CommonExtensions\Microsoft\TestWindows   Team Tools\Performance Toolss   Team Tools\Performance Tools%s(	   Rz   RU   RJ   Rn   R   R   R   R   R   (   RB   t   pathst   arch_subdirR   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   VSTools  s    c         C   s4   t  j j |  j j d  t  j j |  j j d  g S(   sL   
        Microsoft Visual C++ & Microsoft Foundation Class Includes
        t   Includes   ATLMFC\Include(   R   R   R   R   R   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt
   VCIncludes   s    c         C   sx   |  j  j d t  } d | d | g } |  j d k rL | d | g 7} n  g  | D]! } t j j |  j j |  ^ qS S(   sM   
        Microsoft Visual C++ & Microsoft Foundation Class Libraries
        RI   s   Lib%ss   ATLMFC\Lib%sg      ,@s   Lib\store%s(	   RU   RK   Rn   Rz   R   R   R   R   R   (   RB   R   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   VCLibraries(  s
    c         C   s/   |  j  d k  r g  St j j |  j j d  g S(   sA   
        Microsoft Visual C++ store references Libraries
        g      ,@s   Lib\store\references(   Rz   R   R   R   R   R   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   VCStoreRefs5  s    c         C   s   |  j  } t j j | j d  g } |  j d k r9 t n t } |  j j	 |  } | r} | t j j | j d |  g 7} n  |  j d k r d |  j j
 d t  } | t j j | j |  g 7} n | t j j | j d  g 7} | S(   s,   
        Microsoft Visual C++ Tools
        t
   VCPackagesg      $@s   Bin%sg      ,@RI   t   Bin(   R   R   R   R   R   Rz   Rn   RS   RU   RN   RJ   (   RB   R   t   toolsRL   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   VCTools>  s    	&"c         C   s   |  j  d k rJ |  j j d t d t  } t j j |  j j d |  g S|  j j d t  } t j j |  j j d  } |  j	 |  } t j j | d | | f  g Sd S(   s1   
        Microsoft Windows SDK Libraries
        g      $@RI   R?   s   Lib%st   libs   %sum%sN(
   Rz   RU   RK   Rn   R   R   R   R   R   t   _get_content_dirname(   RB   R   R   t   libver(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   OSLibrariesT  s     c         C   s   t  j j |  j j d  } |  j d k rC | t  j j | d  g S|  j d k rd |  j |  } n d } t  j j | d |  t  j j | d |  t  j j | d |  g Sd	 S(
   s/   
        Microsoft Windows SDK Include
        t   includeg      $@t   glg      ,@R   s   %sshareds   %sums   %swinrtN(   R   R   R   R   R   Rz   R   (   RB   R   t   sdkver(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt
   OSIncludesc  s    c         C   s  t  j j |  j j d  } g  } |  j d k r@ | |  j 7} n  |  j d k rn | t  j j | d  g 7} n  |  j d k r| | t  j j |  j j d  t  j j | d d  t  j j | d	 d  t  j j | d
 d  t  j j |  j j d d d |  j d d d  g 7} n  | S(   s7   
        Microsoft Windows SDK Libraries Paths
        t
   Referencesg      "@g      &@s   CommonConfiguration\Neutralg      ,@t   UnionMetadatas'   Windows.Foundation.UniversalApiContracts   1.0.0.0s%   Windows.Foundation.FoundationContracts,   Windows.Networking.Connectivity.WwanContractt   ExtensionSDKss   Microsoft.VCLibss   %0.1ft   CommonConfigurationt   neutral(   R   R   R   R   R   Rz   R   (   RB   t   reft   libpath(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt	   OSLibpathv  s>    					
c         C   s2  |  j  d k r d n d } t j j |  j j |  g } |  j j   s |  j j d t	  } d | } | t j j |  j j |  g 7} n  |  j  d k s |  j  d k r|  j j
   r d } n |  j j d t	 d t	  } d	 | } | t j j |  j j |  g 7} n  |  j j r.| |  j j g 7} n  | S(
   s-   
        Microsoft Windows SDK Tools
        g      &@R   s   Bin\x86R?   s   Bin%sg      $@R   RI   s   Bin\NETFX 4.0 Tools%s(   Rz   R   R   R   R   R   RU   RH   RJ   Rn   RF   R   (   RB   t   bin_dirR   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   SdkTools  s    
%	
%c         C   s/   |  j  d k r g  St j j |  j j d  g S(   s-   
        Microsoft Windows SDK Setup
        g      "@t   Setup(   Rz   R   R   R   R   R   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   SdkSetup  s    c         C   s   |  j  } |  j } |  j d k rD t } | j   o> | j   } n6 | j   pY | j   } | j d k pw | j d k } g  } | r | g  | j D] } t	 j
 j | j |  ^ q 7} n  | r | g  | j D] } t	 j
 j | j |  ^ q 7} n  | S(   s0   
        Microsoft .NET Framework Tools
        g      $@R@   (   RU   R   Rz   Rn   RF   RH   RG   RE   R   R   R   R   R   R   R   (   RB   RU   R   t	   include32t	   include64R   R$   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   FxTools  s    		//c         C   sU   |  j  d k  s |  j j r  g  S|  j j d t  } t j j |  j j d |  g S(   s8   
        Microsoft .Net Framework SDK Libraries
        g      ,@R?   s   lib\um%s(	   Rz   R   R   RU   RK   Rn   R   R   R   (   RB   R   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   NetFxSDKLibraries  s    c         C   s<   |  j  d k  s |  j j r  g  St j j |  j j d  g S(   s7   
        Microsoft .Net Framework SDK Includes
        g      ,@s
   include\um(   Rz   R   R   R   R   R   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   NetFxSDKIncludes  s    c         C   s   t  j j |  j j d  g S(   s>   
        Microsoft Visual Studio Team System Database
        s   VSTSDB\Deploy(   R   R   R   R   R   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   VsTDb  s    c         C   sW   |  j  d k  r g  S|  j j d t  } d |  j  | f } t j j |  j j |  g S(   s(   
        Microsoft Build Engine
        g      (@RI   s   MSBuild\%0.1f\bin%s(	   Rz   RU   RJ   Rn   R   R   R   R   R   (   RB   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   MSBuild  s
    c         C   s/   |  j  d k  r g  St j j |  j j d  g S(   s.   
        Microsoft HTML Help Workshop
        g      &@s   HTML Help Workshop(   Rz   R   R   R   R   R   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   HTMLHelpWorkshop  s    c         C   sr   |  j  d k  r g  S|  j j d t  } t j j |  j j d  } |  j	 |  } t j j | d | | f  g S(   s3   
        Microsoft Universal CRT Libraries
        g      ,@R?   R   s   %sucrt%s(
   Rz   RU   RK   Rn   R   R   R   R   R   R   (   RB   R   R   t   ucrtver(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   UCRTLibraries  s    c         C   sW   |  j  d k  r g  St j j |  j j d  } |  j |  } t j j | d |  g S(   s1   
        Microsoft Universal CRT Include
        g      ,@R   s   %sucrt(   Rz   R   R   R   R   R   R   (   RB   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   UCRTIncludes  s
    c         C   s,   |  j  d k  r" |  j  d k r" g  S|  j j S(   s%   
        Microsoft Visual F#
        g      &@g      (@(   Rz   R   R   (   RB   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   FSharp*  s    c         C   sM   |  j  j d t  } d } | | |  j |  j f } t j j |  j j |  S(   sA   
        Microsoft Visual C++ runtime redistribuable dll
        R?   s-   redist%s\Microsoft.VC%d0.CRT\vcruntime%d0.dll(	   RU   RK   Rn   Rz   R   R   R   R   R   (   RB   R   t	   vcruntime(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   VCRuntimeRedist4  s    c         C   s  t  d |  j d |  j |  j |  j |  j g |  d |  j d |  j |  j |  j |  j	 |  j
 g |  d |  j d |  j |  j |  j |  j g |  d |  j d |  j |  j |  j |  j |  j |  j |  j |  j |  j g	 |   } |  j d k rt j j |  j  r|  j | d <n  | S(   s   
        Return environment dict.

        Parameters
        ----------
        exists: bool
            It True, only return existing paths.
        R   R   R   R   i   t   py_vcruntime_redist(   t   dictt   _build_pathsR   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   Rz   R   R   R   R   (   RB   t   existst   env(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyR"   >  sD    												$c   
      C   s   t  j j |  } t j | d  j t j  } t  j | |  } | rc t t	 t j
 j |   n | } | s d | j   } t j j |   n  |  j |  }	 t j j |	  S(   s  
        Given an environment variable name and specified paths,
        return a pathsep-separated string of paths containing
        unique, extant, directories from those paths and from
        the environment variable. Raise an error if no paths
        are resolved.
        R   s    %s environment variable is empty(   t	   itertoolst   chaint   from_iterableRP   RQ   t   splitR   t   pathsept   listt   filterR   R   t   upperR   R   R   t   _unique_everseenR   (
   RB   Rp   t   spec_path_listsR   t
   spec_pathst	   env_pathsR   t   extant_pathsR   t   unique_paths(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyR   k  s    	'c         c   s   t    } | j } | d k rM xg t | j |  D] } | |  | Vq1 Wn; x8 | D]0 } | |  } | | k rT | |  | VqT qT Wd S(   s   
        List unique elements, preserving order.
        Remember all elements ever seen.

        _unique_everseen('AAAABBBCCDAABBB') --> A B C D

        _unique_everseen('ABBCcAD', str.lower) --> A B C D
        N(   t   sett   addR   R   t   __contains__(   RB   t   iterableR   t   seent   seen_addt   elementt   k(    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyR     s    			

c         C   sH   y) t  j |  } | r$ d | d Sd SWn t t f k
 rC d SXd S(   s   
        Return name of the first dir in path or '' if no dir found.

        Parameters
        ----------
        path: str
            Path where search dir.

        Return
        ------
        foldername: str
            "name" or ""
        s   %s\i    R   N(   R   t   listdirRl   Rm   (   RB   R   Rp   (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyR     s    N(    R   R   RO   R   RC   RR   Rz   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   Rn   R"   R   R   R   (    (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyR!     s6   
	-




-	(   RO   R   R-   t   platformR   t   distutils.errorsR   t&   pkg_resources.extern.packaging.versionR    t   setuptools.extern.six.movesR   t   monkeyR   t   systemR   t   environRP   R   t   distutils.msvc9compilerR   t   ImportErrorR   R   R+   R3   R#   R=   RT   Rv   R!   (    (    (    s3   /usr/lib/python2.7/dist-packages/setuptools/msvc.pyt   <module>   s6   		+/	$	%[ %