U âQabŸ¶ã@sXdZddlZddlmZddlmZmZddlmZm Z m Z m Z ddl Z ddl Z ddlZddlZddlmZddlmZdd lmZe  ¡d krªdd lmZdd lmZnGd d„dƒZeƒZeejjfZzddlm Z Wnek rîYnXdd„Z!d$dd„Z"dd„Z#dd„Z$d%dd„Z%Gdd„dƒZ&Gdd„dƒZ'Gd d!„d!ƒZ(Gd"d#„d#ƒZ)dS)&a� 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.X: Microsoft Visual C++ Build Tools 2015 (x86, x64, arm) Microsoft Visual Studio Build Tools 2017 (x86, x64, arm, arm64) Microsoft Visual Studio Build Tools 2019 (x86, x64, arm, arm64) This may also support compilers shipped with compatible Visual Studio versions. éN)Úopen)ÚlistdirÚpathsep)ÚjoinÚisfileÚisdirÚdirname)Ú LegacyVersion)Ú filterfalseé)Ú get_unpatchedÚWindows)Úwinreg)Úenvironc@seZdZdZdZdZdZdS)rN)Ú__name__Ú __module__Ú __qualname__Ú HKEY_USERSÚHKEY_CURRENT_USERÚHKEY_LOCAL_MACHINEÚHKEY_CLASSES_ROOT©rrú3/usr/lib/python3.8/site-packages/setuptools/msvc.pyr*sr)ÚRegc Cs’d}|d|f}zt |d¡}WnJtk rjz|d|f}t |d¡}Wntk rdd}YnXYnX|r†t|dƒ}t|ƒr†|Sttƒ|ƒS)aÍ Patched "distutils.msvc9compiler.find_vcvarsall" to use the standalone compiler build for Python (VCForPython / Microsoft Visual C++ Compiler for Python 2.7). Fall back to original behavior when the standalone compiler is not available. Redirect the path of "vcvarsall.bat". Parameters ---------- version: float Required Microsoft Visual C++ version. Return ------ str vcvarsall.bat path z-Software\%sMicrosoft\DevDiv\VCForPython\%0.1fÚÚ installdirz Wow6432Node\Nz vcvarsall.bat)rZ get_valueÚKeyErrorrrr Úmsvc9_find_vcvarsall)ÚversionZvc_baseÚkeyÚ productdirÚ vcvarsallrrrrAs   rÚx86c Os’zttƒ}|||f|ž|ŽWStjjk r4Yntk rFYnXzt||ƒ ¡WStjjk rŒ}zt|||ƒ‚W5d}~XYnXdS)ao Patched "distutils.msvc9compiler.query_vcvarsall" for support extra Microsoft Visual C++ 9.0 and 10.0 compilers. Set environment without use of "vcvarsall.bat". Parameters ---------- ver: float Required Microsoft Visual C++ version. arch: str Target architecture. Return ------ dict environment N) r Úmsvc9_query_vcvarsallÚ distutilsÚerrorsÚDistutilsPlatformErrorÚ ValueErrorÚEnvironmentInfoÚ return_envÚ_augment_exception)ÚverÚarchÚargsÚkwargsZorigÚexcrrrr#ks r#c Csrzttƒ|ƒWStjjk r&YnXzt|dd� ¡WStjjk rl}zt|dƒ‚W5d}~XYnXdS)a* Patched "distutils._msvccompiler._get_vc_env" for support extra Microsoft Visual C++ 14.X compilers. Set environment without use of "vcvarsall.bat". Parameters ---------- plat_spec: str Target architecture. Return ------ dict environment ç,@)Ú vc_min_verN)r Úmsvc14_get_vc_envr$r%r&r(r)r*)Z plat_specr/rrrr2‘s r2cOsBdtjkr4ddl}t|jƒtdƒkr4|jjj||ŽStt ƒ||ŽS)z¦ Patched "distutils._msvccompiler.gen_lib_options" for fix compatibility between "numpy.distutils" and "distutils._msvccompiler" (for Numpy < 1.11.2) znumpy.distutilsrNz1.11.2) ÚsysÚmodulesZnumpyr Ú __version__r$Z ccompilerZgen_lib_optionsr Úmsvc14_gen_lib_options)r-r.Znprrrr6±s  r6rcCs |jd}d| ¡ks"d| ¡kr”d}|jftƒŽ}d}|dkrf| ¡ d¡dkr\|d 7}q”|d 7}n.|d kr„|d 7}||d 7}n|dkr”|d7}|f|_dS)zl Add details to the exception message to help guide the user as to what action will resolve it. rr!zvisual cz0Microsoft Visual C++ {version:0.1f} is required.z-www.microsoft.com/download/details.aspx?id=%dç"@Zia64éÿÿÿÿz( Get it with "Microsoft Windows SDK 7.0"z% Get it from http://aka.ms/vcpython27ç$@z* Get it with "Microsoft Windows SDK 7.1": iW r0z[ Get it with "Build Tools for Visual Studio": https://visualstudio.microsoft.com/downloads/N)r-ÚlowerÚformatÚlocalsÚfind)r/rr,ÚmessageZtmplZ msdownloadrrrr*¾s   r*c@sbeZdZdZe dd¡ ¡Zdd„Ze dd„ƒZ dd „Z d d „Z dd d„Z ddd„Zddd„ZdS)Ú PlatformInfoz� Current and Target Architectures information. Parameters ---------- arch: str Target architecture. Zprocessor_architecturercCs| ¡ dd¡|_dS)NÚx64Úamd64)r:Úreplacer,)Úselfr,rrrÚ__init__íszPlatformInfo.__init__cCs|j|j d¡dd…S)zs Return Target CPU architecture. Return ------ str Target CPU Ú_r N)r,r=©rCrrrÚ target_cpuðs zPlatformInfo.target_cpucCs |jdkS)z‡ Return True if target CPU is x86 32 bits.. Return ------ bool CPU is x86 32 bits r"©rGrFrrrÚ target_is_x86üs zPlatformInfo.target_is_x86cCs |jdkS)zˆ Return True if current CPU is x86 32 bits.. Return ------ bool CPU is x86 32 bits r"©Ú current_cpurFrrrÚcurrent_is_x86s zPlatformInfo.current_is_x86FcCs.|jdkr|rdS|jdkr$|r$dSd|jS)uk 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 ------ str subfolder: ' arget', or '' (see hidex86 parameter) r"rrAú\x64ú\%srJ©rCÚhidex86r@rrrÚ current_dirsýzPlatformInfo.current_dircCs.|jdkr|rdS|jdkr$|r$dSd|jS)ar 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 ------ str subfolder: '\current', or '' (see hidex86 parameter) r"rrArMrNrHrOrrrÚ target_dir(sýzPlatformInfo.target_dircCs0|rdn|j}|j|krdS| ¡ dd|¡S)ap Cross platform specific subfolder. Parameters ---------- forcex86: bool Use 'x86' as current architecture even if current architecture is not x86. Return ------ str subfolder: '' if target architecture is current architecture, '\current_target' if not. r"rú\z\%s_)rKrGrRrB)rCÚforcex86ZcurrentrrrÚ cross_dir>sþzPlatformInfo.cross_dirN)FF)FF)F)rrrÚ__doc__rÚgetr:rKrDÚpropertyrGrIrLrQrRrUrrrrr?âs    r?c@sªeZdZdZejejejejfZ dd„Z e dd„ƒZ e dd„ƒZ e dd „ƒZe d d „ƒZe d d „ƒZe dd„ƒZe dd„ƒZe dd„ƒZe dd„ƒZddd„Zdd„ZdS)Ú RegistryInfozŸ Microsoft Visual Studio related registry information. Parameters ---------- platform_info: PlatformInfo "PlatformInfo" instance. cCs ||_dS©N)Úpi)rCZ platform_inforrrrDcszRegistryInfo.__init__cCsdS)z€ Microsoft Visual Studio root registry key. Return ------ str Registry key Z VisualStudiorrFrrrÚ visualstudiofs zRegistryInfo.visualstudiocCs t|jdƒS)z Microsoft Visual Studio SxS registry key. Return ------ str Registry key ZSxS)rr\rFrrrÚsxsrs zRegistryInfo.sxscCs t|jdƒS)z| Microsoft Visual C++ VC7 registry key. Return ------ str Registry key ZVC7©rr]rFrrrÚvc~s zRegistryInfo.vccCs t|jdƒS)z Microsoft Visual Studio VS7 registry key. Return ------ str Registry key ZVS7r^rFrrrÚvsŠs zRegistryInfo.vscCsdS)zƒ Microsoft Visual C++ for Python registry key. Return ------ str Registry key zDevDiv\VCForPythonrrFrrrÚ vc_for_python–s zRegistryInfo.vc_for_pythoncCsdS)zq Microsoft SDK registry key. Return ------ str Registry key zMicrosoft SDKsrrFrrrÚ microsoft_sdk¢s zRegistryInfo.microsoft_sdkcCs t|jdƒS)z‚ Microsoft Windows/Platform SDK registry key. Return ------ str Registry key r ©rrbrFrrrÚ windows_sdk®s zRegistryInfo.windows_sdkcCs t|jdƒS)z€ Microsoft .NET Framework SDK registry key. Return ------ str Registry key ZNETFXSDKrcrFrrrÚ netfx_sdkºs zRegistryInfo.netfx_sdkcCsdS)z€ Microsoft Windows Kits Roots registry key. Return ------ str Registry key zWindows Kits\Installed RootsrrFrrrÚwindows_kits_rootsÆs zRegistryInfo.windows_kits_rootsFcCs$|j ¡s|rdnd}td|d|ƒS)a Return key in Microsoft software registry. Parameters ---------- key: str Registry key path where look. x86: str Force x86 software registry. Return ------ str Registry key rZ Wow6432NodeZSoftwareZ Microsoft)r[rLr)rCrr"Znode64rrrÚ microsoftÒszRegistryInfo.microsoftc CsÊtj}tj}|j}|jD]¬}z||||ƒd|ƒ}Wn`ttfk r’|j ¡sŠz||||dƒd|ƒ}WqŽttfk r†YYqYqŽXnYqYnXzt  ||¡dWSttfk rÂYqXqdS)a 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 rTN) rÚKEY_READÚOpenKeyrgÚHKEYSÚOSErrorÚIOErrorr[rLZ QueryValueEx)rCrÚnameZkey_readZopenkeyÚmsÚhkeyÚbkeyrrrÚlookupås"   zRegistryInfo.lookupN)F)rrrrVrrrrrrjrDrXr\r]r_r`rarbrdrerfrgrqrrrrrYUs6ý         rYc@s<eZdZdZe dd¡Ze dd¡Ze de¡Zd7dd„Z d d „Z d d „Z d d„Z e dd„ƒZedd„ƒZedd„ƒZdd„Zdd„Zedd„ƒZedd„ƒZedd„ƒZedd „ƒZed!d"„ƒZed#d$„ƒZed%d&„ƒZed'd(„ƒZed)d*„ƒZed+d,„ƒZed-d.„ƒZed/d0„ƒZed1d2„ƒZ d3d4„Z!e d8d5d6„ƒZ"dS)9Ú SystemInfozê Microsoft Windows and Visual Studio related system information. Parameters ---------- registry_info: RegistryInfo "RegistryInfo" instance. vc_ver: float Required Microsoft Visual C++ version. ÚWinDirrÚ ProgramFileszProgramFiles(x86)NcCs2||_|jj|_| ¡|_|p$| ¡|_|_dSrZ)Úrir[Úfind_programdata_vs_versÚknown_vs_pathsÚ_find_latest_available_vs_verÚvs_verÚvc_ver)rCZ registry_inforzrrrrDs    ÿzSystemInfo.__init__cCs>| ¡}|s|jstj d¡‚t|ƒ}| |j¡t|ƒdS)zm Find the latest VC version Return ------ float version z%No Microsoft Visual C++ version foundr8)Úfind_reg_vs_versrwr$r%r&ÚsetÚupdateÚsorted)rCZ reg_vc_versZvc_versrrrrx%s  ÿ z(SystemInfo._find_latest_available_vs_verc Cs$|jj}|jj|jj|jjf}g}|jjD]ð}|D]æ}zt |||ƒdtj¡}Wnt t fk rlYq2YnXt  |¡\}}} t |ƒD]D} z*t t || ¡dƒ} | |kr²| | ¡Wq†tk rÈYq†Xq†t |ƒD]B} z&t t || ¡ƒ} | |krü| | ¡WqÔtk �rYqÔXqÔq2q*t|ƒS)z˜ Find Microsoft Visual Studio versions available in registry. Return ------ list of float Versions r)rurgr_rar`rjrrirhrkrlZ QueryInfoKeyÚrangeÚfloatZ EnumValueÚappendr'ZEnumKeyr~) rCrnZvckeysZvs_versrorrpZsubkeysÚvaluesrEÚir+rrrr{8s2      zSystemInfo.find_reg_vs_versc Cs¼i}d}z t|ƒ}Wnttfk r0|YSX|D]€}z\t||dƒ}t|ddd��}t |¡}W5QRX|d}tt|dƒƒ||| |d¡<Wq6tttfk r´Yq6Yq6Xq6|S) zé Find Visual studio 2017+ versions from information in "C:\ProgramData\Microsoft\VisualStudio\Packages\_Instances". Return ------ dict float version as key, path as value. z9C:\ProgramData\Microsoft\VisualStudio\Packages\_Instancesz state.jsonZrtzutf-8)ÚencodingZinstallationPathú VC\Tools\MSVCZinstallationVersion) rrkrlrrÚjsonÚloadÚ_as_float_versionr) rCZ vs_versionsZ instances_dirZ hashed_namesrmZ state_pathZ state_fileÚstateZvs_pathrrrrv[s* ÿ   ÿÿ z#SystemInfo.find_programdata_vs_verscCstd | d¡dd…¡ƒS)zç Return a string version as a simplified float version (major.minor) Parameters ---------- version: str Version. Return ------ float version Ú.Né)r€rÚsplit)rrrrrˆ…szSystemInfo._as_float_versioncCs.t|jd|jƒ}|j |jjd|j¡p,|S)zp Microsoft Visual Studio directory. Return ------ str path zMicrosoft Visual Studio %0.1fú%0.1f)rÚProgramFilesx86ryrurqr`)rCÚdefaultrrrÚ VSInstallDir–s ÿzSystemInfo.VSInstallDircCs,| ¡p| ¡}t|ƒs(d}tj |¡‚|S)zm Microsoft Visual C++ directory. Return ------ str path z(Microsoft Visual C++ directory not found)Ú _guess_vcÚ_guess_vc_legacyrr$r%r&)rCÚpathÚmsgrrrÚ VCInstallDir§s  zSystemInfo.VCInstallDirc CsŠ|jdkrdSz|j|j}Wntk r8|j}YnXt|dƒ}z$t|ƒd}| |¡|_t||ƒWStt t fk r„YdSXdS)zl Locate Visual C++ for VS2017+. Return ------ str path r0rr…r8N) ryrwrr�rrrˆrzrkrlÚ IndexError)rCZvs_dirZguess_vcrzrrrr‘¹s      zSystemInfo._guess_vccCsbt|jd|jƒ}t|jjd|jƒ}|j |d¡}|rBt|dƒn|}|j |jjd|j¡p`|S)z{ Locate Visual C++ for versions prior to 2017. Return ------ str path z Microsoft Visual Studio %0.1f\VCr�rZVC)rrŽryrurarqr_)rCr�Zreg_pathZ python_vcZ default_vcrrrr’×s ÿzSystemInfo._guess_vc_legacycCsJ|jdkrdS|jdkrdS|jdkr*dS|jdkr8dS|jd krFd Sd S) z— Microsoft Windows SDK versions for specified MSVC++ version. Return ------ tuple of str versions r7)z7.0z6.1z6.0ar9)z7.1z7.0aç&@)z8.0z8.0aç(@)ú8.1z8.1ar0)z10.0r™N©ryrFrrrÚWindowsSdkVersionës     zSystemInfo.WindowsSdkVersioncCs| t|jdƒ¡S)zt Microsoft Windows SDK last version. Return ------ str version Úlib)Ú_use_last_dir_namerÚ WindowsSdkDirrFrrrÚWindowsSdkLastVersions z SystemInfo.WindowsSdkLastVersioncCs d}|jD],}t|jjd|ƒ}|j |d¡}|r q8q |rDt|ƒstt|jjd|jƒ}|j |d¡}|rtt|dƒ}|r€t|ƒs¾|jD]6}|d| d¡…}d |}t|j |ƒ}t|ƒr†|}q†|rÊt|ƒsö|jD]$}d |}t|j |ƒ}t|ƒrÐ|}qÐ|�st|j d ƒ}|S) zn Microsoft Windows SDK directory. Return ------ str path rzv%sÚinstallationfolderr�rZWinSDKNrŠzMicrosoft SDKs\Windows Kits\%szMicrosoft SDKs\Windows\v%sZ PlatformSDK) r›rrurdrqrrarzÚrfindrtr•)rCÚsdkdirr+Úlocr“Z install_baseZintverÚdrrrrž s6           zSystemInfo.WindowsSdkDirc CsÌ|jdkrd}d}n&d}|jdkr&dnd}|jjd|d�}d || d d ¡f}g}|jd kr~|jD]}|t|jj||ƒg7}qb|jD]}|t|jj d ||ƒg7}q„|D]}|j  |d¡}|r¨|Sq¨dS)zy Microsoft Windows SDK executable directory. Return ------ str path r—é#ré(r˜TF)r@rPzWinSDK-NetFx%dTools%srSú-r0zv%sAr N) ryr[rQrBÚNetFxSdkVersionrrurer›rdrq) rCZnetfxverr,rPZfxZregpathsr+r“ZexecpathrrrÚWindowsSDKExecutablePath7s"    z#SystemInfo.WindowsSDKExecutablePathcCs&t|jjd|jƒ}|j |d¡p$dS)zl Microsoft Visual F# directory. Return ------ str path z%0.1f\Setup\F#r r)rrur\ryrq)rCr“rrrÚFSharpInstallDirZs zSystemInfo.FSharpInstallDircCsF|jdkrdnd}|D]*}|j |jjd|¡}|r|p:dSqdS)zt Microsoft Universal CRT SDK directory. Return ------ str path r0)Z10Z81rz kitsroot%srN)ryrurqrf)rCZversr+r¢rrrÚUniversalCRTSdkDirgs  ÿzSystemInfo.UniversalCRTSdkDircCs| t|jdƒ¡S)z€ Microsoft Universal C Runtime SDK last version. Return ------ str version rœ)r�rr«rFrrrÚUniversalCRTSdkLastVersion{s z%SystemInfo.UniversalCRTSdkLastVersioncCs|jdkrdSdS)z� Microsoft .NET Framework SDK versions. Return ------ tuple of str versions r0) z4.7.2z4.7.1z4.7z4.6.2z4.6.1z4.6z4.5.2z4.5.1z4.5rršrFrrrr¨‡sýýzSystemInfo.NetFxSdkVersioncCs8d}|jD](}t|jj|ƒ}|j |d¡}|r q4q |S)zu Microsoft .NET Framework SDK directory. Return ------ str path rZkitsinstallationfolder)r¨rrurerq)rCr¢r+r£rrrÚ NetFxSdkDir—s  zSystemInfo.NetFxSdkDircCs"t|jdƒ}|j |jjd¡p |S)zw Microsoft .NET Framework 32bit directory. Return ------ str path zMicrosoft.NET\FrameworkZframeworkdir32©rrsrurqr_©rCZguess_fwrrrÚFrameworkDir32©s zSystemInfo.FrameworkDir32cCs"t|jdƒ}|j |jjd¡p |S)zw Microsoft .NET Framework 64bit directory. Return ------ str path zMicrosoft.NET\Framework64Zframeworkdir64r®r¯rrrÚFrameworkDir64¹s zSystemInfo.FrameworkDir64cCs | d¡S)zƒ Microsoft .NET Framework 32bit versions. Return ------ tuple of str versions é ©Ú_find_dot_net_versionsrFrrrÚFrameworkVersion32És zSystemInfo.FrameworkVersion32cCs | d¡S)zƒ Microsoft .NET Framework 64bit versions. Return ------ tuple of str versions é@r³rFrrrÚFrameworkVersion64Õs zSystemInfo.FrameworkVersion64cCs”|j |jjd|¡}t|d|ƒ}|p6| |d¡p6d}|jdkrJ|dfS|jdkrt| ¡dd …d krld n|d fS|jd kr‚dS|jdkr�dSdS)zê Find Microsoft .NET Framework versions. Parameters ---------- bits: int Platform number of bits: 32 or 64. Return ------ tuple of str versions zframeworkver%dzFrameworkDir%dÚvrr˜zv4.0r9Nr‹Zv4z v4.0.30319úv3.5r7)r¹ú v2.0.50727g @)zv3.0rº)rurqr_Úgetattrr�ryr:)rCÚbitsZreg_verZ dot_net_dirr+rrrr´ás     z!SystemInfo._find_dot_net_versionscs*‡‡fdd„ttˆƒƒDƒ}t|dƒp(dS)a) 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 starting by this prefix Return ------ str name c3s*|]"}ttˆ|ƒƒr| ˆ¡r|VqdSrZ)rrÚ startswith)Ú.0Zdir_name©r“ÚprefixrrÚ s ýz0SystemInfo._use_last_dir_name..Nr)ÚreversedrÚnext)r“rÀZ matching_dirsrr¿rr�þs  þzSystemInfo._use_last_dir_name)N)r)#rrrrVrrWrsrtrŽrDrxr{rvÚ staticmethodrˆrXr�r•r‘r’r›rŸržr©rªr«r¬r¨r­r°r±rµr·r´r�rrrrrr sZ    #*      * "         rrc@sbeZdZdZd?dd„Zedd„ƒZedd „ƒZed d „ƒZed d „ƒZ edd„ƒZ edd„ƒZ edd„ƒZ edd„ƒZ edd„ƒZedd„ƒZedd„ƒZdd„Zedd„ƒZed d!„ƒZed"d#„ƒZed$d%„ƒZed&d'„ƒZed(d)„ƒZed*d+„ƒZed,d-„ƒZed.d/„ƒZed0d1„ƒZed2d3„ƒZed4d5„ƒZed6d7„ƒZd@d9d:„Zd;d<„Z e!dAd=d>„ƒZ"dS)Br(aY 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.X. 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. NrcCsBt|ƒ|_t|jƒ|_t|j|ƒ|_|j|kr>d}tj  |¡‚dS)Nz.No suitable Microsoft Visual C++ version found) r?r[rYrurrÚsirzr$r%r&)rCr,rzr1ÚerrrrrrD0s    zEnvironmentInfo.__init__cCs|jjS)zk Microsoft Visual Studio. Return ------ float version )rÅryrFrrrry9s zEnvironmentInfo.vs_vercCs|jjS)zp Microsoft Visual C++ version. Return ------ float version )rÅrzrFrrrrzEs zEnvironmentInfo.vc_vercsVddg}ˆjdkrDˆjjddd�}|dg7}|dg7}|d|g7}‡fd d „|DƒS) zu Microsoft Visual Studio Tools. Return ------ list of str paths z Common7\IDEz Common7\Toolsr0T©rPr@z1Common7\IDE\CommonExtensions\Microsoft\TestWindowzTeam Tools\Performance ToolszTeam Tools\Performance Tools%scsg|]}tˆjj|ƒ‘qSr©rrÅr�©r¾r“rFrrÚ csz+EnvironmentInfo.VSTools..)ryr[rQ)rCÚpathsÚ arch_subdirrrFrÚVSToolsQs    zEnvironmentInfo.VSToolscCst|jjdƒt|jjdƒgS)z’ Microsoft Visual C++ & Microsoft Foundation Class Includes. Return ------ list of str paths ZIncludezATLMFC\Include©rrÅr•rFrrrÚ VCIncludeses  ÿzEnvironmentInfo.VCIncludescsbˆjdkrˆjjdd�}nˆjjdd�}d|d|g}ˆjdkrP|d|g7}‡fd d „|DƒS) z“ Microsoft Visual C++ & Microsoft Foundation Class Libraries. Return ------ list of str paths ç.@T©r@©rPúLib%sz ATLMFC\Lib%sr0z Lib\store%scsg|]}tˆjj|ƒ‘qSrrÎrÉrFrrrÊ…sz/EnvironmentInfo.VCLibraries..)ryr[rR)rCrÌrËrrFrÚ VCLibrariesrs  zEnvironmentInfo.VCLibrariescCs|jdkrgSt|jjdƒgS)z‡ Microsoft Visual C++ store references Libraries. Return ------ list of str paths r0zLib\store\references)ryrrÅr•rFrrrÚ VCStoreRefs‡s zEnvironmentInfo.VCStoreRefscCs|j}t|jdƒg}|jdkr"dnd}|j |¡}|rL|t|jd|ƒg7}|jdkr|d|jjdd�}|t|j|ƒg7}n€|jdkrê|j ¡r”d nd }|t|j||jjdd �ƒg7}|jj |jj krü|t|j||jjdd �ƒg7}n|t|jd ƒg7}|S) zr Microsoft Visual C++ Tools. Return ------ list of str paths Z VCPackagesr9TFúBin%sr0rÒrÐz bin\HostX86%sz bin\HostX64%srÑÚBin) rÅrr•ryr[rUrQrLrRrKrG)rCrÅÚtoolsrTrÌr“Zhost_dirrrrÚVCTools•s0    ÿÿÿ zEnvironmentInfo.VCToolscCsh|jdkr.|jjddd�}t|jjd|ƒgS|jjdd�}t|jjdƒ}|j}t|d||fƒgSdS) zw Microsoft Windows SDK Libraries. Return ------ list of str paths r9TrÇrÓrÑrœz%sum%sN)ryr[rRrrÅržÚ _sdk_subdir)rCrÌrœZlibverrrrÚ OSLibrariesºs zEnvironmentInfo.OSLibrariescCsht|jjdƒ}|jdkr&|t|dƒgS|jdkr8|j}nd}t|d|ƒt|d|ƒt|d|ƒgSd S) zu Microsoft Windows SDK Include. Return ------ list of str paths Úincluder9Zglr0rz%ssharedz%sumz%swinrtN)rrÅržryrÚ)rCrÜÚsdkverrrrÚ OSIncludesÎs      þzEnvironmentInfo.OSIncludescCsžt|jjdƒ}g}|jdkr&||j7}|jdkr@|t|dƒg7}|jdkrš||t|jjdƒt|ddƒt|d dƒt|d dƒt|jjd d d |jdddƒg7}|S)z} Microsoft Windows SDK Libraries Paths. Return ------ list of str paths Z Referencesr7r—zCommonConfiguration\Neutralr0Z UnionMetadataz'Windows.Foundation.UniversalApiContractz1.0.0.0z%Windows.Foundation.FoundationContractz,Windows.Networking.Connectivity.WwanContractZ ExtensionSDKszMicrosoft.VCLibsr�ZCommonConfigurationZneutral)rrÅržryrÛ)rCÚrefÚlibpathrrrÚ OSLibpathæs.        ÿ þù zEnvironmentInfo.OSLibpathcCs t| ¡ƒS)zs Microsoft Windows SDK Tools. Return ------ list of str paths )ÚlistÚ _sdk_toolsrFrrrÚSdkToolss zEnvironmentInfo.SdkToolsccsø|jdkr,|jdkrdnd}t|jj|ƒV|j ¡s\|jjdd�}d|}t|jj|ƒV|jdkr |j ¡rvd }n|jjddd �}d |}t|jj|ƒVnB|jdkrât|jjdƒ}|jjdd�}|jj}t|d ||fƒV|jj rô|jj Vd S)zˆ Microsoft Windows SDK Tools paths generator. Return ------ generator of str paths rÐr—r×zBin\x86TrÑrÖ)r9r—rrÇzBin\NETFX 4.0 Tools%sz%s%sN) ryrrÅržr[rLrQrIrŸr©)rCZbin_dirrÌr“rÝrrrrãs(     zEnvironmentInfo._sdk_toolscCs|jj}|rd|SdS)zu Microsoft Windows SDK version subdir. Return ------ str subdir ú%s\r)rÅrŸ©rCÚucrtverrrrrÚ6s zEnvironmentInfo._sdk_subdircCs|jdkrgSt|jjdƒgS)zs Microsoft Windows SDK Setup. Return ------ list of str paths r7ZSetup)ryrrÅržrFrrrÚSdkSetupCs zEnvironmentInfo.SdkSetupcs”|j}|j‰|jdkr0d}| ¡ o,| ¡ }n$| ¡p>| ¡}|jdkpR|jdk}g}|rt|‡fdd„ˆjDƒ7}|r�|‡fdd„ˆjDƒ7}|S)zv Microsoft .NET Framework Tools. Return ------ list of str paths r9TrAcsg|]}tˆj|ƒ‘qSr)rr°©r¾r+©rÅrrrÊhsÿz+EnvironmentInfo.FxTools..csg|]}tˆj|ƒ‘qSr)rr±rérêrrrÊksÿ) r[rÅryrIrLrKrGrµr·)rCr[Z include32Z include64rØrrêrÚFxToolsRs"   ÿ ÿzEnvironmentInfo.FxToolscCs8|jdks|jjsgS|jjdd�}t|jjd|ƒgS)z~ Microsoft .Net Framework SDK Libraries. Return ------ list of str paths r0TrÑzlib\um%s)ryrÅr­r[rRr)rCrÌrrrÚNetFxSDKLibrariesos z!EnvironmentInfo.NetFxSDKLibrariescCs&|jdks|jjsgSt|jjdƒgS)z} Microsoft .Net Framework SDK Includes. Return ------ list of str paths r0z include\um)ryrÅr­rrFrrrÚNetFxSDKIncludess z EnvironmentInfo.NetFxSDKIncludescCst|jjdƒgS)z„ Microsoft Visual Studio Team System Database. Return ------ list of str paths z VSTSDB\DeployrÈrFrrrÚVsTDbŽs zEnvironmentInfo.VsTDbcCsv|jdkrgS|jdkr0|jj}|jjdd�}n |jj}d}d|j|f}t||ƒg}|jdkrr|t||dƒg7}|S)zn Microsoft Build Engine. Return ------ list of str paths r˜rÐTrÒrzMSBuild\%0.1f\bin%sZRoslyn)ryrÅrŽr[rQr�r)rCÚ base_pathrÌr“ZbuildrrrÚMSBuildšs    zEnvironmentInfo.MSBuildcCs|jdkrgSt|jjdƒgS)zt Microsoft HTML Help Workshop. Return ------ list of str paths r—zHTML Help Workshop)ryrrÅrŽrFrrrÚHTMLHelpWorkshop¶s z EnvironmentInfo.HTMLHelpWorkshopcCsD|jdkrgS|jjdd�}t|jjdƒ}|j}t|d||fƒgS)zƒ Microsoft Universal C Runtime SDK Libraries. Return ------ list of str paths r0TrÑrœz%sucrt%s)ryr[rRrrÅr«Ú _ucrt_subdir)rCrÌrœrçrrrÚ UCRTLibrariesÅs zEnvironmentInfo.UCRTLibrariescCs.|jdkrgSt|jjdƒ}t|d|jƒgS)z� Microsoft Universal C Runtime SDK Include. Return ------ list of str paths r0rÜz%sucrt)ryrrÅr«rò)rCrÜrrrÚ UCRTIncludes×s zEnvironmentInfo.UCRTIncludescCs|jj}|rd|SdS)z� Microsoft Universal C Runtime SDK version subdir. Return ------ str subdir rår)rÅr¬rærrrròçs zEnvironmentInfo._ucrt_subdircCs(d|jkrdkrnngS|jjgS)zk Microsoft Visual F#. Return ------ list of str paths r—r˜)ryrÅrªrFrrrÚFSharpôs zEnvironmentInfo.FSharpc CsÎd|j}|jjdd� d¡}g}|jj}t| dd¡ƒ}t|ƒrft |t |ƒdƒ}||t |dƒg7}|t |d ƒg7}d |jd d t |j ƒd f}t  ||¡D]&\}}t ||||ƒ} t| ƒr¢| Sq¢d S) z Microsoft Visual C++ runtime redistributable dll. Return ------ str path zvcruntime%d0.dllTrÑrSz\Toolsz\Redistr8ZonecoreZredistzMicrosoft.VC%d.CRTé N)rzr[rRÚstriprÅr•rrBrrrÚintryÚ itertoolsÚproductr) rCZ vcruntimerÌÚprefixesZ tools_pathZ redist_pathZcrt_dirsrÀZcrt_dirr“rrrÚVCRuntimeRedists  þzEnvironmentInfo.VCRuntimeRedistTcCs²t| d|j|j|j|jg|¡| d|j|j|j|j |j g|¡| d|j|j|j |j g|¡| d|j |j|j|j|j|j|j|j|jg |¡d�}|jdkr®t|jƒr®|j|d<|S)zÛ Return environment dict. Parameters ---------- exists: bool It True, only return existing paths. Return ------ dict environment rÜrœràr“)rÜrœràr“éZpy_vcruntime_redist)ÚdictÚ _build_pathsrÏrÞrôrírÔrÛrërórìrÕrárÙrÍrîrärèrðrñrõryrrü)rCÚexistsÚenvrrrr)&sVýûüúýûø öì  zEnvironmentInfo.return_envc Csptj |¡}t |d¡ t¡}t ||¡}|r A B C D _unique_everseen('ABBCcAD', str.lower) --> A B C D N)r|Úaddr Ú __contains__)ÚiterablerÚseenZseen_addZelementÚkrrrrzs  z EnvironmentInfo._unique_everseen)Nr)T)N)#rrrrVrDrXryrzrÍrÏrÔrÕrÙrÛrÞrárärãrÚrèrërìrírîrðrñrórôròrõrür)rÿrÄrrrrrr(sn        $    #             " 2"r()r")r)*rVr†ÚiorÚosrrZos.pathrrrrr3ÚplatformrùZdistutils.errorsr$Z#setuptools.extern.packaging.versionr Zsetuptools.extern.six.movesr Zmonkeyr ÚsystemrrrþÚ ImportErrorr%r&Z_msvc9_suppress_errorsZdistutils.msvc9compilerrrr#r2r6r*r?rYrrr(rrrrÚsJ      ú * &  $s5