3 K”Re´Ÿã @sdZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z ej ƒdkrpddl mZejZnGd d „d ƒZeƒZeejjfZydd lmZWnek r´YnXd d „Zd dd„Zdd„Zdd„Zd!dd„ZGdd„dƒZGdd„dƒZGdd„dƒZGdd„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.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) éN)Ú LegacyVersion)Ú filterfalseé)Ú get_unpatchedÚWindows)Úwinregc@seZdZdZdZdZdZdS)rN)Ú__name__Ú __module__Ú __qualname__Ú HKEY_USERSÚHKEY_CURRENT_USERÚHKEY_LOCAL_MACHINEÚHKEY_CLASSES_ROOT©rrú…/builddir/build/BUILDROOT/alt-python36-setuptools-38.5.2-7.el8.x86_64/opt/alt/python36/lib/python3.6/site-packages/setuptools/msvc.pyr(sr)ÚRegcCsžd}|d|f}ytj|dƒ}WnJtk rjy|d|f}tj|dƒ}Wntk rdd}YnXYnX|r’tjjjj|dƒ}tjj|ƒr’|Sttƒ|ƒS)a+ 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 z-Software\%sMicrosoft\DevDiv\VCForPython\%0.1fÚÚ installdirz Wow6432Node\Nz vcvarsall.bat) rÚ get_valueÚKeyErrorÚosÚpathÚjoinÚisfilerÚmsvc9_find_vcvarsall)ÚversionZVC_BASEÚkeyÚ productdirÚ vcvarsallrrrr?s   rÚx86cOsŽyttƒ}|||f|ž|ŽStjjk r2Yntk rDYnXyt||ƒjƒStjjk rˆ}zt|||ƒ‚WYdd}~XnXdS)aœ 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Úmsvc9_query_vcvarsallÚ distutilsÚerrorsÚDistutilsPlatformErrorÚ ValueErrorÚEnvironmentInfoÚ return_envÚ_augment_exception)ÚverÚarchÚargsÚkwargsÚorigÚexcrrrr js r cCsny ttƒ|ƒStjjk r$YnXyt|dd�jƒStjjk rh}zt|dƒ‚WYdd}~XnXdS)a' 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 g,@)Ú vc_min_verN)rÚmsvc14_get_vc_envr!r"r#r%r&r')Z plat_specr-rrrr/™s  r/cOsBdtjkr4ddl}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ÚmodulesÚnumpyrÚ __version__r!Z ccompilerZgen_lib_optionsrÚmsvc14_gen_lib_options)r*r+Únprrrr4¿s  r4rcCs¬|jd}d|jƒks"d|jƒkr d}|jftƒŽ}d}|dkrr|jƒjdƒdkrh|d 7}||d 7}q |d 7}n.|d kr�|d 7}||d7}n|dkr |d7}|f|_dS)zl Add details to the exception message to help guide the user as to what action will resolve it. rrzvisual cz0Microsoft Visual C++ {version:0.1f} is required.z-www.microsoft.com/download/details.aspx?id=%dg"@Zia64rz* Get it with "Microsoft Windows SDK 7.0": iB z% Get it from http://aka.ms/vcpython27g$@z* Get it with "Microsoft Windows SDK 7.1": iW g,@zj Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-toolsNéÿÿÿÿ)r*ÚlowerÚformatÚlocalsÚfind)r-rr)ÚmessageÚtmplZ msdownloadrrrr'Ìs   r'c@sbeZdZdZejddƒjƒZdd„Ze dd„ƒZ dd „Z d d „Z dd d„Z ddd„Zddd„ZdS)Ú PlatformInfoz‚ Current and Target Architectures informations. Parameters ---------- arch: str Target architecture. Zprocessor_architecturercCs|jƒjddƒ|_dS)NÚx64Úamd64)r7Úreplacer))Úselfr)rrrÚ__init__üszPlatformInfo.__init__cCs|j|jjdƒdd…S)NÚ_r)r)r:)rArrrÚ target_cpuÿszPlatformInfo.target_cpucCs |jdkS)Nr)rD)rArrrÚ target_is_x86szPlatformInfo.target_is_x86cCs |jdkS)Nr)Ú current_cpu)rArrrÚcurrent_is_x86szPlatformInfo.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 ------ subfolder: str ' arget', or '' (see hidex86 parameter) rrr?z\x64z\%s)rF)rAÚhidex86r>rrrÚ current_dir szPlatformInfo.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 ------ subfolder: str '\current', or '' (see hidex86 parameter) rrr?z\x64z\%s)rD)rArHr>rrrÚ target_dirszPlatformInfo.target_dircCs0|rdn|j}|j|krdS|jƒjdd|ƒS)ao 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. rrú\z\%s_)rFrDrJr@)rAÚforcex86ÚcurrentrrrÚ cross_dir5szPlatformInfo.cross_dirN)FF)FF)F)rr r Ú__doc__Úsafe_envÚgetr7rFrBÚpropertyrDrErGrIrJrNrrrrr=ñ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 informations. Parameters ---------- platform_info: PlatformInfo "PlatformInfo" instance. cCs ||_dS)N)Úpi)rAZ platform_inforrrrBZszRegistryInfo.__init__cCsdS)z< Microsoft Visual Studio root registry key. Z VisualStudior)rArrrÚ visualstudio]szRegistryInfo.visualstudiocCstjj|jdƒS)z; Microsoft Visual Studio SxS registry key. ZSxS)rrrrU)rArrrÚsxsdszRegistryInfo.sxscCstjj|jdƒS)z8 Microsoft Visual C++ VC7 registry key. ZVC7)rrrrV)rArrrÚvckszRegistryInfo.vccCstjj|jdƒS)z; Microsoft Visual Studio VS7 registry key. ZVS7)rrrrV)rArrrÚvsrszRegistryInfo.vscCsdS)z? Microsoft Visual C++ for Python registry key. zDevDiv\VCForPythonr)rArrrÚ vc_for_pythonyszRegistryInfo.vc_for_pythoncCsdS)z- Microsoft SDK registry key. zMicrosoft SDKsr)rArrrÚ microsoft_sdk€szRegistryInfo.microsoft_sdkcCstjj|jdƒS)z> Microsoft Windows/Platform SDK registry key. r)rrrrZ)rArrrÚ windows_sdk‡szRegistryInfo.windows_sdkcCstjj|jdƒS)z< Microsoft .NET Framework SDK registry key. ZNETFXSDK)rrrrZ)rArrrÚ netfx_sdkŽszRegistryInfo.netfx_sdkcCsdS)z< Microsoft Windows Kits Roots registry key. zWindows Kits\Installed Rootsr)rArrrÚwindows_kits_roots•szRegistryInfo.windows_kits_rootsFcCs(|jjƒs|rdnd}tjjd|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: value rZ Wow6432NodeZSoftwareÚ Microsoft)rTrGrrr)rArrZnode64rrrÚ microsoftœszRegistryInfo.microsoftcCsÂtj}tj}|j}xª|jD] }y||||ƒd|ƒ}WnZttfk rŽ|jjƒsˆy||||dƒd|ƒ}WqŠttfk r„wYqŠXnwYnXytj ||ƒdSttfk r¸YqXqWdS)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ÚOpenKeyr_ÚHKEYSÚOSErrorÚIOErrorrTrGÚ QueryValueEx)rArÚnamer`ZopenkeyÚmsÚhkeyÚbkeyrrrÚlookup®s"   zRegistryInfo.lookupN)F)rr r rOrr r r rrbrBrRrUrVrWrXrYrZr[r\r]r_rjrrrrrSLs"          rSc@s$eZdZdZejddƒZejddƒZejdeƒZd3dd„Z d d „Z d d „Z e d d„ƒZ e dd„ƒZdd„Zdd„Ze dd„ƒZe dd„ƒZe dd„ƒZe dd„ƒZe dd„ƒZe dd „ƒZe d!d"„ƒZe d#d$„ƒZe d%d&„ƒZe d'd(„ƒZe d)d*„ƒZe d+d,„ƒZe d-d.„ƒZd/d0„Zd4d1d2„ZdS)5Ú SystemInfozê Microsoft Windows and Visual Studio related system inormations. Parameters ---------- registry_info: RegistryInfo "RegistryInfo" instance. vc_ver: float Required Microsoft Visual C++ version. ÚWinDirrÚ ProgramFileszProgramFiles(x86)NcCs"||_|jj|_|p|jƒ|_dS)N)ÚrirTÚ_find_latest_available_vc_verÚvc_ver)rAZ registry_inforprrrrBãs zSystemInfo.__init__c Cs6y |jƒdStk r0d}tjj|ƒ‚YnXdS)Nrz%No Microsoft Visual C++ version foundr6)Úfind_available_vc_versÚ IndexErrorr!r"r#)rAÚerrrrrroès  z(SystemInfo._find_latest_available_vc_verc Cs6|jj}|jj|jj|jjf}g}�x|jjD]ü}xö|D]î}ytj|||ƒdtjƒ}Wnt t fk rpw8YnXtj |ƒ\}}} xPt |ƒD]D} y*t tj|| ƒdƒ} | |kr¸|j| ƒWqŒtk rÎYqŒXqŒWxPt |ƒD]D} y(t tj|| ƒƒ} | |k�r|j| ƒWqÞtk �r YqÞXqÞWq8Wq.Wt|ƒS)zC Find all available Microsoft Visual C++ versions. r)rnr_rWrYrXrbrrar`rcrdZ QueryInfoKeyÚrangeÚfloatZ EnumValueÚappendr$ÚEnumKeyÚsorted) rArgZvckeysZvc_versrhrriZsubkeysÚvaluesrCÚir(rrrrqïs2   z!SystemInfo.find_available_vc_verscCs6d|j}tjj|j|ƒ}|jj|jjd|jƒp4|S)z4 Microsoft Visual Studio directory. zMicrosoft Visual Studio %0.1fz%0.1f)rprrrÚProgramFilesx86rnrjrX)rArfÚdefaultrrrÚ VSInstallDir s zSystemInfo.VSInstallDircCsŽ|j|jƒp|jƒ}tjj|jjd|jƒ}|jj |dƒ}|rNtjj|dƒn|}|jj |jj d|jƒpl|}tjj |ƒsŠd}t j j|ƒ‚|S)z1 Microsoft Visual C++ directory. z%0.1frZVCz(Microsoft Visual C++ directory not found)r}Ú _guess_vcÚ_guess_vc_legacyrrrrnrYrprjrWÚisdirr!r"r#)rAÚguess_vcZreg_pathZ python_vcZ default_vcrÚmsgrrrÚ VCInstallDirs  zSystemInfo.VCInstallDirc Cs^|jdkrdSd}tjj|j|ƒ}ytj|ƒd}tjj||ƒStttfk rXYnXdS)z* Locate Visual C for 2017 g,@Nz VC\Tools\MSVCrr6) rprrrr}Úlistdirrcrdrr)rAr|r�Z vc_exact_verrrrr~0s zSystemInfo._guess_vccCsd|j}tjj|j|ƒS)z< Locate Visual C for versions prior to 2017 z Microsoft Visual Studio %0.1f\VC)rprrrr{)rAr|rrrr@s zSystemInfo._guess_vc_legacycCsJ|jdkrdS|jdkrdS|jdkr*dS|jd kr8dS|jdkrFdSdS)zN Microsoft Windows SDK versions for specified MSVC++ version. g"@ú7.0ú6.1ú6.0ag$@ú7.1ú7.0ag&@ú8.0ú8.0ag(@ú8.1ú8.1ag,@ú10.0N)r…r†r‡)rˆr‰)rŠr‹)rŒr�)rŽrŒ)rp)rArrrÚWindowsSdkVersionGs     zSystemInfo.WindowsSdkVersioncCs|jtjj|jdƒƒS)z4 Microsoft Windows SDK last version Úlib)Ú_use_last_dir_namerrrÚ WindowsSdkDir)rArrrÚWindowsSdkLastVersionWs z SystemInfo.WindowsSdkLastVersioncCsTd}x8|jD].}tjj|jjd|ƒ}|jj|dƒ}|r Pq W| sRtjj|ƒ rŠtjj|jjd|j ƒ}|jj|dƒ}|rŠtjj|dƒ}| sžtjj|ƒ rèxH|jD]>}|d|j dƒ…}d |}tjj|j |ƒ}tjj|ƒr¦|}q¦W| sþtjj|ƒ �r:x:|jD]0}d |}tjj|j |ƒ}tjj|ƒ�r|}�qW|�sPtjj|j d ƒ}|S) z2 Microsoft Windows SDK directory. rzv%sÚinstallationfolderz%0.1frZWinSDKNÚ.zMicrosoft SDKs\Windows Kits\%szMicrosoft SDKs\Windows\v%sZ PlatformSDK) r�rrrrnr[rjr€rYrpÚrfindrmrƒ)rAÚsdkdirr(ÚlocrÚ install_baseZintverÚdrrrr’_s6     zSystemInfo.WindowsSdkDirc CsÚ|jdkrd}d}n&d}|jdkr&dnd}|jjd|d�}d ||jd d ƒf}g}|jd kr†x(|jD]}|tjj|jj ||ƒg7}qdWx,|j D]"}|tjj|jj d ||ƒg7}qŽWx |D]}|jj |dƒ}|rºPqºW|S)z= Microsoft Windows SDK executable directory. g&@é#ré(g(@TF)r>rHzWinSDK-NetFx%dTools%srKú-g,@zv%sAr”) rprTrIr@ÚNetFxSdkVersionrrrrnr\r�r[rj) rAZnetfxverr)rHZfxZregpathsr(rZexecpathrrrÚWindowsSDKExecutablePath…s$    " z#SystemInfo.WindowsSDKExecutablePathcCs.d|j}tjj|jj|ƒ}|jj|dƒp,dS)z0 Microsoft Visual F# directory. z%0.1f\Setup\F#rr)rprrrrnrUrj)rArrrrÚFSharpInstallDir¤s zSystemInfo.FSharpInstallDircCsF|jdkrd}nf}x(|D] }|jj|jjd|ƒ}|rPqW|pDdS)z8 Microsoft Universal CRT SDK directory. g,@Ú10Ú81z kitsroot%sr)r¡r¢)rprnrjr])rAÚversr(r—rrrÚUniversalCRTSdkDir­s    zSystemInfo.UniversalCRTSdkDircCs|jtjj|jdƒƒS)z@ Microsoft Universal C Runtime SDK last version r�)r‘rrrr¤)rArrrÚUniversalCRTSdkLastVersionÀs z%SystemInfo.UniversalCRTSdkLastVersioncCs|jdkrdSfSdS)z8 Microsoft .NET Framework SDK versions. g,@ú4.6.1ú4.6N)r¦r§)rp)rArrrržÈs zSystemInfo.NetFxSdkVersioncCs>x4|jD]*}tjj|jj|ƒ}|jj|dƒ}|rPqW|p)sz0SystemInfo._use_last_dir_name..Nr)Úreversedrr„Únext)rArr»Z matching_dirsr)rr»rr‘s zSystemInfo._use_last_dir_name)N)r) rr r rOrPrQrlrmr{rBrorqrRr}rƒr~rr�r“r’rŸr r¤r¥ržr¨rªr«r®r°r­r‘rrrrrkÑs4         &     rkc@sReZdZdZd=dd„Zedd„ƒZedd „ƒZed d „ƒZed d „ƒZ edd„ƒZ edd„ƒZ edd„ƒZ edd„ƒZ edd„ƒZedd„ƒZdd„Zedd„ƒZedd„ƒZed d!„ƒZed"d#„ƒZed$d%„ƒZed&d'„ƒZed(d)„ƒZed*d+„ƒZed,d-„ƒZed.d/„ƒZed0d1„ƒZed2d3„ƒZed4d5„ƒZd>d7d8„Zd9d:„Zd?d;d<„Z dS)@r%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.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. NrcCsBt|ƒ|_t|jƒ|_t|j|ƒ|_|j|kr>d}tjj |ƒ‚dS)Nz.No suitable Microsoft Visual C++ version found) r=rTrSrnrkÚsirpr!r"r#)rAr)rpr.rsrrrrBIs    zEnvironmentInfo.__init__cCs|jjS)z/ Microsoft Visual C++ version. )r¿rp)rArrrrpRszEnvironmentInfo.vc_vercsVddg}ˆjdkrDˆjjddd�}|dg7}|dg7}|d|g7}‡fd d „|DƒS) z/ Microsoft Visual Studio Tools z Common7\IDEz Common7\Toolsg,@T)rHr>z1Common7\IDE\CommonExtensions\Microsoft\TestWindowzTeam Tools\Performance ToolszTeam Tools\Performance Tools%scsg|]}tjjˆjj|ƒ‘qSr)rrrr¿r})r¹r)rArrú fsz+EnvironmentInfo.VSTools..)rprTrI)rAÚpathsÚ arch_subdirr)rArÚVSToolsYs   zEnvironmentInfo.VSToolscCs$tjj|jjdƒtjj|jjdƒgS)zL Microsoft Visual C++ & Microsoft Foundation Class Includes ÚIncludezATLMFC\Include)rrrr¿rƒ)rArrrÚ VCIncludeshszEnvironmentInfo.VCIncludescsbˆjdkrˆjjdd�}nˆjjdd�}d|d|g}ˆjdkrP|d|g7}‡fd d „|DƒS) zM Microsoft Visual C++ & Microsoft Foundation Class Libraries g.@T)r>)rHzLib%sz ATLMFC\Lib%sg,@z Lib\store%scsg|]}tjjˆjj|ƒ‘qSr)rrrr¿rƒ)r¹r)rArrrÀ~sz/EnvironmentInfo.VCLibraries..)rprTrJ)rArÂrÁr)rArÚ VCLibrariesps  zEnvironmentInfo.VCLibrariescCs"|jdkrgStjj|jjdƒgS)zA Microsoft Visual C++ store references Libraries g,@zLib\store\references)rprrrr¿rƒ)rArrrÚ VCStoreRefs€s zEnvironmentInfo.VCStoreRefscCs|j}tjj|jdƒg}|jdkr&dnd}|jj|ƒ}|rT|tjj|jd|ƒg7}|jdkrˆd|jjdd�}|tjj|j|ƒg7}nŒ|jdkrþ|jj ƒr d nd }|tjj|j||jj dd �ƒg7}|jj |jj krü|tjj|j||jjdd �ƒg7}n|tjj|jd ƒg7}|S) z, Microsoft Visual C++ Tools Z VCPackagesg$@TFzBin%sg,@)rHg.@z bin\HostX86%sz bin\HostX64%s)r>ÚBin) r¿rrrrƒrprTrNrIrGrJrFrD)rAr¿ÚtoolsrLrÂrZhost_dirrrrÚVCTools‰s&   zEnvironmentInfo.VCToolscCst|jdkr2|jjddd�}tjj|jjd|ƒgS|jjdd�}tjj|jjdƒ}|j}tjj|d||fƒgSdS) z1 Microsoft Windows SDK Libraries g$@T)rHr>zLib%s)r>r�z%sum%sN) rprTrJrrrr¿r’Ú _sdk_subdir)rArÂr�ZlibverrrrÚ OSLibraries©s zEnvironmentInfo.OSLibrariescCs|tjj|jjdƒ}|jdkr.|tjj|dƒgS|jdkr@|j}nd}tjj|d|ƒtjj|d|ƒtjj|d|ƒgSd S) z/ Microsoft Windows SDK Include Úincludeg$@Úglg,@rz%ssharedz%sumz%swinrtN)rrrr¿r’rprË)rArÍÚsdkverrrrÚ OSIncludes¸s  zEnvironmentInfo.OSIncludescCsºtjj|jjdƒ}g}|jdkr*||j7}|jdkrH|tjj|dƒg7}|jdkr¶||tjj|jjdƒtjj|ddƒtjj|d dƒtjj|d dƒtjj|jjd d d |jdddƒg7}|S)z7 Microsoft Windows SDK Libraries Paths Z Referencesg"@g&@zCommonConfiguration\Neutralg,@Z UnionMetadataz'Windows.Foundation.UniversalApiContractz1.0.0.0z%Windows.Foundation.FoundationContractz,Windows.Networking.Connectivity.WwanContractZ ExtensionSDKszMicrosoft.VCLibsz%0.1fZCommonConfigurationZneutral)rrrr¿r’rprÌ)rAÚrefÚlibpathrrrÚ OSLibpathËs>     zEnvironmentInfo.OSLibpathcCs t|jƒƒS)z- Microsoft Windows SDK Tools )ÚlistÚ _sdk_tools)rArrrÚSdkToolsøszEnvironmentInfo.SdkToolsccs|jdkr0|jdkrdnd}tjj|jj|ƒV|jjƒsd|jjdd�}d|}tjj|jj|ƒV|jdksx|jdkr¶|jj ƒrˆd }n|jjddd �}d |}tjj|jj|ƒVnL|jdk�rtjj|jjdƒ}|jjdd�}|jj }tjj|d ||fƒV|jj �r|jj Vd S)z= Microsoft Windows SDK Tools paths generator g.@g&@rÈzBin\x86T)r>zBin%sg$@r)rHr>zBin\NETFX 4.0 Tools%sz%s%sN) rprrrr¿r’rTrGrIrEr“rŸ)rAÚbin_dirrÂrrÏrrrrÕÿs(     zEnvironmentInfo._sdk_toolscCs|jj}|rd|SdS)z6 Microsoft Windows SDK version subdir z%s\r)r¿r“)rAÚucrtverrrrrËszEnvironmentInfo._sdk_subdircCs"|jdkrgStjj|jjdƒgS)z- Microsoft Windows SDK Setup g"@ZSetup)rprrrr¿r’)rArrrÚSdkSetup%s zEnvironmentInfo.SdkSetupcs”|j}|j‰|jdkr0d}|jƒ o,|jƒ }n$|jƒp>|jƒ}|jdkpR|jdk}g}|rt|‡fdd„ˆjDƒ7}|r�|‡fdd„ˆjDƒ7}|S)z0 Microsoft .NET Framework Tools g$@Tr?csg|]}tjjˆj|ƒ‘qSr)rrrrª)r¹r()r¿rrrÀ@sz+EnvironmentInfo.FxTools..csg|]}tjjˆj|ƒ‘qSr)rrrr«)r¹r()r¿rrrÀCs) rTr¿rprErGrFrDr®r°)rArTZ include32Z include64rÉr)r¿rÚFxTools/s     zEnvironmentInfo.FxToolscCs>|jdks|jj rgS|jjdd�}tjj|jjd|ƒgS)z8 Microsoft .Net Framework SDK Libraries g,@T)r>zlib\um%s)rpr¿r¨rTrJrrr)rArÂrrrÚNetFxSDKLibrariesGsz!EnvironmentInfo.NetFxSDKLibrariescCs,|jdks|jj rgStjj|jjdƒgS)z7 Microsoft .Net Framework SDK Includes g,@z include\um)rpr¿r¨rrr)rArrrÚNetFxSDKIncludesRsz EnvironmentInfo.NetFxSDKIncludescCstjj|jjdƒgS)z> Microsoft Visual Studio Team System Database z VSTSDB\Deploy)rrrr¿r})rArrrÚVsTDb\szEnvironmentInfo.VsTDbcCs~|jdkrgS|jdkr0|jj}|jjdd�}n |jj}d}d|j|f}tjj||ƒg}|jdkrz|tjj||dƒg7}|S)z( Microsoft Build Engine g(@g.@T)rHrzMSBuild\%0.1f\bin%sZRoslyn) rpr¿r{rTrIr}rrr)rAÚ base_pathrÂrÚbuildrrrÚMSBuildcs   zEnvironmentInfo.MSBuildcCs"|jdkrgStjj|jjdƒgS)z. Microsoft HTML Help Workshop g&@zHTML Help Workshop)rprrrr¿r{)rArrrÚHTMLHelpWorkshopzs z EnvironmentInfo.HTMLHelpWorkshopcCsL|jdkrgS|jjdd�}tjj|jjdƒ}|j}tjj|d||fƒgS)z= Microsoft Universal C Runtime SDK Libraries g,@T)r>r�z%sucrt%s) rprTrJrrrr¿r¤Ú _ucrt_subdir)rArÂr�rØrrrÚ UCRTLibraries„s  zEnvironmentInfo.UCRTLibrariescCs6|jdkrgStjj|jjdƒ}tjj|d|jƒgS)z; Microsoft Universal C Runtime SDK Include g,@rÍz%sucrt)rprrrr¿r¤râ)rArÍrrrÚ UCRTIncludes‘s zEnvironmentInfo.UCRTIncludescCs|jj}|rd|SdS)zB Microsoft Universal C Runtime SDK version subdir z%s\r)r¿r¥)rArØrrrrâœszEnvironmentInfo._ucrt_subdircCs |jdkr|jdkrgS|jjS)z% Microsoft Visual F# g&@g(@)rpr¿r )rArrrÚFSharp¤szEnvironmentInfo.FSharpcCsl|jjdd�}|jdkr&|jj}d}n|jjjddƒ}d}|jdkrHdn|j}|||j|f}tjj||ƒS) zA Microsoft Visual C++ runtime redistribuable dll T)r>éz-redist%s\Microsoft.VC%d0.CRT\vcruntime%d0.dllz\Toolsz\Redistz.onecore%s\Microsoft.VC%d0.CRT\vcruntime%d0.dllg,@) rTrJrpr¿rƒr@rrr)rArÂZ redist_pathZ vcruntimeZdll_verrrrÚVCRuntimeRedist®s zEnvironmentInfo.VCRuntimeRedistTcCs¶t|jd|j|j|j|jg|ƒ|jd|j|j|j|j |j g|ƒ|jd|j|j|j |j g|ƒ|jd|j |j|j|j|j|j|j|j|jg |ƒd�}|jdkr²tjj|jƒr²|j|d<|S)z— Return environment dict. Parameters ---------- exists: bool It True, only return existing paths. 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årprrrrç)rAÚexistsÚenvrrrr&ÁsD   zEnvironmentInfo.return_envc Csxtjj|ƒ}tj|dƒjtjƒ}tj||ƒ}|rBtt tj j |ƒƒn|}|sbd|j ƒ}t jj|ƒ‚|j|ƒ} tjj| ƒS)a 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. rz %s environment variable is empty)Ú itertoolsÚchainÚ from_iterablerPrQÚsplitrÚpathseprÔÚfilterrr€Úupperr!r"r#Ú_unique_everseenr) rArfZspec_path_listsrëZ spec_pathsZ env_pathsrÁZ extant_pathsr‚Z unique_pathsrrrrêîs     zEnvironmentInfo._build_pathsccsjtƒ}|j}|dkr:xPt|j|ƒD]}||ƒ|Vq"Wn,x*|D]"}||ƒ}||kr@||ƒ|Vq@WdS)z× 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)ÚsetÚaddrÚ __contains__)rAÚiterablerÚseenZseen_addÚelementÚkrrrrôs   z EnvironmentInfo._unique_everseen)Nr)T)N)!rr r rOrBrRrprÃ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ôrrrrr%1s:       -        -r%)r)r)!rOrr0ÚplatformríÚdistutils.errorsr!Z&pkg_resources.extern.packaging.versionrZsetuptools.extern.six.movesrZmonkeyrÚsystemrÚenvironrPréÚ ImportErrorr"r#Z_msvc9_suppress_errorsZdistutils.msvc9compilerrrr r/r4r'r=rSrkr%rrrrÚs>      + /& %[b