
\c           @   sy  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 e e j j f 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 6.1 (x86, x64, ia64)
    Microsoft Windows SDK 7.0 (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)
    Microsoft Visual Studio 2017 (x86, x64, arm, arm64)
    Microsoft Visual Studio Build Tools 2017 (x86, x64, arm, arm64)
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(    (    (    s.   lib/python2.7/site-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(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyR   ?   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 extra
    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 6.1 (x86, x64, ia64)
        Microsoft Windows SDK 7.0 (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(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyR   j   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 extra
    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)
        Microsoft Visual Studio 2017 (x86, x64, arm, arm64)
        Microsoft Visual Studio Build Tools 2017 (x86, x64, arm, arm64)

    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)   (    (    s.   lib/python2.7/site-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(    (    s.   lib/python2.7/site-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      ,@s^    Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/N(   R&   t   lowert   formatt   localst   find(   R)   R   R%   t   messaget   tmplt
   msdownload(    (    s.   lib/python2.7/site-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%   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   __init__   s    c         C   s   |  j  |  j  j d  d S(   Nt   _i   (   R%   R9   (   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt
   target_cpu   s    c         C   s   |  j  d k S(   NR   (   RE   (   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   target_is_x86  s    c         C   s   |  j  d k S(   NR   (   t   current_cpu(   RB   (    (    s.   lib/python2.7/site-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?   (    (    s.   lib/python2.7/site-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(   sr  
        Target platform specific subfolder.

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

        Return
        ------
        subfolder: str
            '\current', or '' (see hidex86 parameter)
        R   R   R@   s   \x64s   \%s(   RE   (   RB   RI   R?   (    (    s.   lib/python2.7/site-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(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt	   cross_dir4  s    (   R   R   t   __doc__t   safe_envt   getR6   RG   RC   t   propertyRE   RF   RH   t   FalseRJ   RK   RN   (    (    (    s.   lib/python2.7/site-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(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyRC   Y  s    c         C   s   d S(   s<   
        Microsoft Visual Studio root registry key.
        t   VisualStudio(    (   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   visualstudio\  s    c         C   s   t  j j |  j d  S(   s;   
        Microsoft Visual Studio SxS registry key.
        t   SxS(   R   R   R   RX   (   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   sxsc  s    c         C   s   t  j j |  j d  S(   s8   
        Microsoft Visual C++ VC7 registry key.
        t   VC7(   R   R   R   RZ   (   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   vcj  s    c         C   s   t  j j |  j d  S(   s;   
        Microsoft Visual Studio VS7 registry key.
        t   VS7(   R   R   R   RZ   (   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   vsq  s    c         C   s   d S(   s?   
        Microsoft Visual C++ for Python registry key.
        s   DevDiv\VCForPython(    (   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   vc_for_pythonx  s    c         C   s   d S(   s-   
        Microsoft SDK registry key.
        s   Microsoft SDKs(    (   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   microsoft_sdk  s    c         C   s   t  j j |  j d  S(   s>   
        Microsoft Windows/Platform SDK registry key.
        R   (   R   R   R   R`   (   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   windows_sdk  s    c         C   s   t  j j |  j d  S(   s<   
        Microsoft .NET Framework SDK registry key.
        t   NETFXSDK(   R   R   R   R`   (   RB   (    (    s.   lib/python2.7/site-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   (    (    s.   lib/python2.7/site-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   t   Wow6432Nodet   Softwaret	   Microsoft(   RU   RH   R   R   R   (   RB   R   R   t   node64(    (    s.   lib/python2.7/site-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   OpenKeyRi   t   HKEYSt   OSErrort   IOErrorRU   RH   t   Truet   QueryValueEx(   RB   R   t   nameRj   t   openkeyt   mst   hkeyt   bkey(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   lookup  s"    			"
(   R   R   RO   R   R   R	   R
   R   Rl   RC   RR   RX   RZ   R\   R^   R_   R`   Ra   Rc   Rd   RS   Ri   Rv   (    (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyRT   K  s"   	t
   SystemInfoc           B   sj  e  Z d  Z e j d d  Z e j d d  Z e j d e  Z d d  Z	 d   Z
 d   Z e d    Z e d	    Z 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   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   s1   | |  _  |  j  j |  _ | p' |  j   |  _ d  S(   N(   t   riRU   t   _find_latest_available_vc_vert   vc_ver(   RB   t   registry_infoR|   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyRC     s    	c         C   sB   y |  j    d SWn) t k
 r= d } t j j |   n Xd  S(   Nis%   No Microsoft Visual C++ version found(   t   find_available_vc_verst
   IndexErrorR   R   R   (   RB   t   err(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyR{     s
    c         C   s  |  j  j } |  j  j |  j  j |  j  j f } g  } xI|  j  j D];} x2| D]*} y% t j | | |  d t j  } Wn t	 t
 f k
 r qM 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 r^| j |  n  Wq!t k
 rrq!Xq!WqM Wq@ Wt |  S(   sC   
        Find all available Microsoft Visual C++ versions.
        i    (   Rz   Ri   R\   R_   R^   Rl   R   Rk   Rj   Rm   Rn   t   QueryInfoKeyt   ranget   floatt	   EnumValuet   appendR    t   EnumKeyt   sorted(   RB   Rs   t   vckeyst   vc_versRt   R   Ru   t   subkeyst   valuesRD   t   iR$   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyR~     s2    !%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(   R|   R   R   R   t   ProgramFilesx86Rz   Rv   R^   (   RB   Rq   t   default(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   VSInstallDir  s    c         C   s   |  j  |  j   p |  j   } t j j |  j j d |  j  } |  j j	 | d  } | rq 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   %0.1fR   t   VCs(   Microsoft Visual C++ directory not found(   R   t	   _guess_vct   _guess_vc_legacyR   R   R   Rz   R_   R|   Rv   R\   t   isdirR   R   R   (   RB   t   guess_vct   reg_patht	   python_vct
   default_vcR   t   msg(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   VCInstallDir  s    "!(c         C   s|   |  j  d k r d Sd } t j j |  j |  } y* t j |  d } t j j | |  SWn t t t f k
 rw n Xd S(   s*   
        Locate Visual C for 2017
        g      ,@Ns   VC\Tools\MSVCi(	   R|   R   R   R   R   t   listdirRm   Rn   R   (   RB   R   R   t   vc_exact_ver(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyR   /  s    c         C   s#   d |  j  } t j j |  j |  S(   s<   
        Locate Visual C for versions prior to 2017
        s    Microsoft Visual Studio %0.1f\VC(   R|   R   R   R   R   (   RB   R   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyR   ?  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(   sN   
        Microsoft Windows SDK versions for specified MSVC++ version.
        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(   R|   (   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   WindowsSdkVersionF  s    c         C   s   |  j  t j j |  j d   S(   s4   
        Microsoft Windows SDK last version
        t   lib(   t   _use_last_dir_nameR   R   R   t   WindowsSdkDir(   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   WindowsSdkLastVersionV  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   Rz   Ra   Rv   R   R_   R|   t   rfindRy   R   (   RB   t   sdkdirR$   t   locR   t   install_baset   intvert   d(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyR   ^  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   (   R|   Ro   RS   RU   RJ   RA   t   NetFxSdkVersionR   R   R   Rz   Rc   R   Ra   Rv   (	   RB   t   netfxverR%   RI   t   fxt   regpathsR$   R   t   execpath(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   WindowsSDKExecutablePath  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   (   R|   R   R   R   Rz   RX   Rv   (   RB   R   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   FSharpInstallDir  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   (    (   R|   Rz   Rv   Rd   (   RB   t   versR$   R   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   UniversalCRTSdkDir  s    	c         C   s   |  j  t j j |  j d   S(   s@   
        Microsoft Universal C Runtime SDK last version
        R   (   R   R   R   R   R   (   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   UniversalCRTSdkLastVersion  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(    (   R|   (   RB   (    (    s.   lib/python2.7/site-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   Rz   Rc   Rv   (   RB   R$   R   R   (    (    s.   lib/python2.7/site-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   Rx   Rz   Rv   R\   (   RB   t   guess_fw(    (    s.   lib/python2.7/site-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   Rx   Rz   Rv   R\   (   RB   R   (    (    s.   lib/python2.7/site-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   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   FrameworkVersion32  s    c         C   s   |  j  d  S(   s:   
        Microsoft .NET Framework 64bit versions.
        i@   (   R   (   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   FrameworkVersion64  s    c         C   s   |  j  j |  j  j d |  } t |  d |  } | pM |  j | d  pM d } |  j d k rn | d f } nR |  j d k r | j   d  d	 k r 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%ds   FrameworkDir%dt   vR   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(   Rz   Rv   R\   t   getattrR   R|   R6   (   RB   t   bitst   reg_vert   dot_net_dirR$   t   frameworkver(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyR     s    
		c            s;      f d   t  t j     D } t | d  p: d S(   s   
        Return name of the last dir in path or '' if no dir found.

        Parameters
        ----------
        path: str
            Use dirs in this path
        prefix: str
            Use only dirs startings by this prefix
        c         3   sE   |  ]; } t  j j t  j j   |   r | j   r | Vq d  S(   N(   R   R   R   R   t
   startswith(   t   .0t   dir_name(   R   t   prefix(    s.   lib/python2.7/site-packages/setuptools/msvc.pys	   <genexpr>(  s   !R   N(   t   reversedR   R   t   nextR   (   RB   R   R   t   matching_dirs(    (   R   R   s.   lib/python2.7/site-packages/setuptools/msvc.pyR     s    N(    R   R   RO   RP   RQ   Rx   Ry   R   R   RC   R{   R~   RR   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyRw     s4   
				&		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 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! 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.
    i    c         C   sd   t  |  |  _ t |  j  |  _ t |  j |  |  _ |  j | k  r` d } t j j	 |   n  d  S(   Ns.   No suitable Microsoft Visual C++ version found(
   R=   RU   RT   Rz   Rw   t   siR|   R   R   R   (   RB   R%   R|   R*   R   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyRC   H  s    c         C   s
   |  j  j S(   s/   
        Microsoft Visual C++ version.
        (   R   R|   (   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyR|   Q  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(	   R|   RU   RJ   Ro   R   R   R   R   R   (   RB   t   pathst   arch_subdirR   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   VSToolsX  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   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt
   VCIncludesg  s    c         C   s   |  j  d k r' |  j j d t  } n |  j j d t  } d | d | g } |  j  d k rs | d | g 7} n  g  | D]! } t j j |  j j |  ^ qz S(   sM   
        Microsoft Visual C++ & Microsoft Foundation Class Libraries
        g      .@R?   RI   s   Lib%ss   ATLMFC\Lib%sg      ,@s   Lib\store%s(	   R|   RU   RK   Ro   R   R   R   R   R   (   RB   R   R   R   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   VCLibrarieso  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(   R|   R   R   R   R   R   (   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   VCStoreRefs  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 |  j d k rs|  j j   r d n d } | t j j | j | |  j j d	 t   g 7} |  j j |  j j k r| t j j | j | |  j j
 d	 t   g 7} qn | t j j | j d
  g 7} | S(   s,   
        Microsoft Visual C++ Tools
        t
   VCPackagesg      $@s   Bin%sg      ,@RI   g      .@s   bin\HostX86%ss   bin\HostX64%sR?   t   Bin(   R   R   R   R   R   R|   Ro   RS   RU   RN   RJ   RH   RK   RG   RE   (   RB   R   t   toolsRL   R   R   t   host_dir(    (    s.   lib/python2.7/site-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%sR   s   %sum%sN(
   R|   RU   RK   Ro   R   R   R   R   R   t   _sdk_subdir(   RB   R   R   t   libver(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   OSLibraries  s     	c         C   s   t  j j |  j j d  } |  j d k rC | t  j j | d  g S|  j d k r^ |  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   R|   R   (   RB   R   t   sdkver(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt
   OSIncludes  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   R|   R   (   RB   t   reft   libpath(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt	   OSLibpath  s>    					
c         C   s   t  |  j    S(   s-   
        Microsoft Windows SDK Tools
        (   t   listt
   _sdk_tools(   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   SdkTools  s    c         c   s  |  j  d k  rG |  j  d k r$ d n d } t j j |  j j |  Vn  |  j j   s |  j j d t	  } d | } t j j |  j j |  V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 |  Vnl |  j  d k rvt j j |  j j d  } |  j j d t	  } |  j j } t j j | d | | f  Vn  |  j j r|  j j Vn  d S(   s=   
        Microsoft Windows SDK Tools paths generator
        g      .@g      &@R   s   Bin\x86R?   s   Bin%sg      $@R   RI   s   Bin\NETFX 4.0 Tools%ss   %s%sN(   R|   R   R   R   R   R   RU   RH   RJ   Ro   RF   R   R   (   RB   t   bin_dirR   R   R   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyR     s(    
	
!c         C   s   |  j  j } | r d | Sd S(   s6   
        Microsoft Windows SDK version subdir
        s   %s\R   (   R   R   (   RB   t   ucrtver(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyR     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(   R|   R   R   R   R   R   (   RB   (    (    s.   lib/python2.7/site-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   R|   Ro   RF   RH   RG   RE   R   R   R   R   R   R   R   (   RB   RU   R   t	   include32t	   include64R   R$   (    (    s.   lib/python2.7/site-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(	   R|   R   R   RU   RK   Ro   R   R   R   (   RB   R   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   NetFxSDKLibrariesF  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(   R|   R   R   R   R   R   (   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   NetFxSDKIncludesQ  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   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   VsTDb[  s    c         C   s   |  j  d k  r g  S|  j  d k  rF |  j j } |  j j d t  } n |  j j } d } d |  j  | f } t j j	 | |  g } |  j  d k r | t j j	 | | d  g 7} n  | S(   s(   
        Microsoft Build Engine
        g      (@g      .@RI   R   s   MSBuild\%0.1f\bin%st   Roslyn(
   R|   R   R   RU   RJ   Ro   R   R   R   R   (   RB   t	   base_pathR   R   t   build(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   MSBuildb  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(   R|   R   R   R   R   R   (   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   HTMLHelpWorkshopy  s    c         C   sl   |  j  d k  r g  S|  j j d t  } t j j |  j j d  } |  j	 } t j j | d | | f  g S(   s=   
        Microsoft Universal C Runtime SDK Libraries
        g      ,@R?   R   s   %sucrt%s(
   R|   RU   RK   Ro   R   R   R   R   R   t   _ucrt_subdir(   RB   R   R   R   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   UCRTLibraries  s    	c         C   sK   |  j  d k  r g  St j j |  j j d  } t j j | d |  j  g S(   s;   
        Microsoft Universal C Runtime SDK Include
        g      ,@R   s   %sucrt(   R|   R   R   R   R   R   R   (   RB   R   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   UCRTIncludes  s    c         C   s   |  j  j } | r d | Sd S(   sB   
        Microsoft Universal C Runtime SDK version subdir
        s   %s\R   (   R   R   (   RB   R   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyR     s    c         C   s,   |  j  d k  r" |  j  d k r" g  S|  j j S(   s%   
        Microsoft Visual F#
        g      &@g      (@(   R|   R   R   (   RB   (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   FSharp  s    c         C   s   |  j  j d t  } |  j d k  r9 |  j j } d } n |  j j j d d  } d } |  j d k rl d n |  j } | | |  j | f } t j j	 | |  S(   sA   
        Microsoft Visual C++ runtime redistribuable dll
        R?   i   s-   redist%s\Microsoft.VC%d0.CRT\vcruntime%d0.dlls   \Toolss   \Redists.   onecore%s\Microsoft.VC%d0.CRT\vcruntime%d0.dllg      ,@(
   RU   RK   Ro   R|   R   R   RA   R   R   R   (   RB   R   t   redist_patht	   vcruntimet   dll_ver(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   VCRuntimeRedist  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  R|   R   R   R   R  (   RB   t   existst   env(    (    s.   lib/python2.7/site-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   pathsepR   t   filterR   R   t   upperR   R   R   t   _unique_everseenR   (
   RB   Rq   t   spec_path_listsR	  t
   spec_pathst	   env_pathsR   t   extant_pathsR   t   unique_paths(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyR    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(    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyR    s    			

N("   R   R   RO   R   RC   RR   R|   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R  R  Ro   R"   R  R  (    (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyR!   0  s:   		 -	



-	(!   RO   R   R-   t   platformR  t   distutils.errorsR   t#   setuptools.extern.packaging.versionR    t   setuptools.extern.six.movesR   t   monkeyR   t   systemR   t   environRP   R  t   ImportErrorR   R   t   _msvc9_suppress_errorst   distutils.msvc9compilerR   R   R   R+   R3   R#   R=   RT   Rw   R!   (    (    (    s.   lib/python2.7/site-packages/setuptools/msvc.pyt   <module>   s:   		+/	&	$[ a