a [dg@sddlZddlmZddlmZmZddlmZmZm Z m Z ddl Z ddl Z ddl Z ddlZddlZddlZddlmZddlmZe dkrddlZdd lmZnGd d d ZeZeejjfZzdd lmZWneyYn0d dZ d-ddZ!ddZ"ddZ#dddddZ$ddZ%ddZ&ddZ'd d!Z(d.d#d$Z)Gd%d&d&Z*Gd'd(d(Z+Gd)d*d*Z,Gd+d,d,Z-dS)/N)open)listdirpathsep)joinisfileisdirdirname) LegacyVersion) get_unpatchedWindows)environc@seZdZdZdZdZdZdS)winregN)__name__ __module__ __qualname__ HKEY_USERSHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_CLASSES_ROOTrr9/usr/local/lib/python3.9/site-packages/setuptools/msvc.pyr*sr)Regc Csd}|d|f}zt|d}WnFtyfz|d|f}t|d}Wnty`d}Yn0Yn0|rt|d}t|r|Stt|S)Nz-Software\%sMicrosoft\DevDiv\VCForPython\%0.1f installdirz Wow6432Node\ vcvarsall.bat)r get_valueKeyErrorrrr msvc9_find_vcvarsall)versionZvc_basekey productdir vcvarsallrrrrAs     rx86c Osz"tt}|||g|Ri|WStjjy8YntyHYn0zt||WStjjy}zt|||WYd}~n d}~00dSN) r msvc9_query_vcvarsall distutilserrorsDistutilsPlatformError ValueErrorEnvironmentInfo return_env_augment_exception)verarchargskwargsZorigexcrrrr%ks  r%c CszttjddtjtjB}Wnty2YdS0d}d}|tD]}zt||\}}}Wnty|YqYn0|rJ|tj krJt |rJzt t |}Wnt tfyYqJYn0|dkrJ||krJ||}}qJWdn1s0Y||fS)Nz'Software\Microsoft\VisualStudio\SxS\VC7rNN)rOpenKeyrKEY_READZKEY_WOW64_32KEYOSError itertoolscount EnumValueZREG_SZrintfloatr) TypeError)r best_versionbest_dirivZvc_dirZvtrrrr_msvc14_find_vc2015s2      *rAc Cstdptd}|sdSz8tt|dddddd d d d d dg jddd}Wntjtt fypYdS0t|ddd}t |rd|fSdS)NProgramFiles(x86) ProgramFilesr2zMicrosoft Visual StudioZ Installerz vswhere.exez-latestz -prereleasez -requiresz1Microsoft.VisualStudio.Component.VC.Tools.x86.x64z -propertyinstallationPathz -products*mbcsstrict)encodingr'VCZ AuxiliaryZBuild) r get subprocess check_outputrdecodestripCalledProcessErrorr6UnicodeDecodeErrorr)rootpathrrr_msvc14_find_vc2017s(  rTx64ZarmZarm64)r#Z x86_amd64Zx86_armZ x86_arm64c Cst\}}d}|tvr t|}nd|vr,dnd}|rt|ddddd|dd }zd dl}|j|d d d }Wntttfyd}Yn0|st\}}|rt|d|dd }|sdSt|d}t|sdS|rt|sd}||fS)Namd64rUr#z..redistZMSVCz**zMicrosoft.VC14*.CRTzvcruntime140.dllrT) recursivezMicrosoft.VC140.CRTr2r) rTPLAT_SPEC_TO_RUNTIMErglob ImportErrorr6 LookupErrorrAr) plat_spec_r> vcruntimeZvcruntime_platZvcredistr[r=r"rrr_msvc14_find_vcvarsalls:      rac CsdtvrddtDSt|\}}|s6tjdz&tjd||tj dj ddd }Wn<tj y}z"tjd |j |WYd}~n d}~00d dd d | DD}|r||d<|S)NZDISTUTILS_USE_SDKcSsi|]\}}||qSrlower).0r valuerrr sz&_msvc14_get_vc_env..zUnable to find vcvarsall.batzcmd /u /c "{}" {} && set)stderrzutf-16lereplace)r'zError executing {}cSs$i|]\}}}|r|r||qSrrb)rdr r_rerrrrfscss|]}|dVqdS)=N) partition)rdlinerrr z%_msvc14_get_vc_env..py_vcruntime_redist)r itemsrar&r'r(rLrMformatSTDOUTrNrPcmd splitlines)r^r"r`outr1envrrr_msvc14_get_vc_envs8    rvc CsDz t|WStjjy>}zt|dWYd}~n d}~00dS)N,@)rvr&r'r(r,)r^r1rrrmsvc14_get_vc_env%s   rxcOsJdtjvr8ddl}t|jtdkr8|jjj|i|Stt |i|S)Nznumpy.distutilsrz1.11.2) sysmodulesZnumpyr __version__r&Z ccompilerZgen_lib_optionsr msvc14_gen_lib_options)r/r0Znprrrr|?s  r|rcCs|jd}d|vs"d|vrd}|jfit}d}|dkrj|ddkr`|d 7}q|d 7}n.|d kr|d 7}||d 7}n|dkr|d7}|f|_dS)Nrr"zvisual cz;Microsoft Visual C++ {version:0.1f} or greater is required.z-www.microsoft.com/download/details.aspx?id=%d"@Zia64rYz( 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 rwzd Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/)r/rcrplocalsfind)r1rr.messageZtmplZ msdownloadrrrr,Ls   r,c@s^eZdZeddZddZeddZ ddZ d d Z dd d Z dddZ dddZdS) PlatformInfoZprocessor_architecturercCs|dd|_dS)NrUrV)rcrhr.)selfr.rrr__init__|szPlatformInfo.__init__cCs|j|jdddS)Nr_r )r.rrrrr target_cpus zPlatformInfo.target_cpucCs |jdkSNr#rrrrr target_is_x86s zPlatformInfo.target_is_x86cCs |jdkSr current_cpurrrrcurrent_is_x86s zPlatformInfo.current_is_x86FcCs.|jdkr|rdS|jdkr$|r$dSd|jSNr#rrVz\x64z\%srrhidex86rUrrr current_dirszPlatformInfo.current_dircCs.|jdkr|rdS|jdkr$|r$dSd|jSrrrrrr target_dirszPlatformInfo.target_dircCs0|rdn|j}|j|krdS|dd|S)Nr#r\z\%s_)rrrrh)rforcex86currentrrr cross_dirszPlatformInfo.cross_dirN)FF)FF)F)rrrr rKrcrrpropertyrrrrrrrrrrrqs     rc@seZdZejejejejfZddZ e ddZ e ddZ e ddZ e d d Ze d d Ze d dZe ddZe ddZe ddZdddZddZdS) RegistryInfocCs ||_dSr$)pi)rZ platform_inforrrrszRegistryInfo.__init__cCsdS)NZ VisualStudiorrrrr visualstudios zRegistryInfo.visualstudiocCs t|jdS)NZSxS)rrrrrrsxss zRegistryInfo.sxscCs t|jdS)NZVC7rrrrrrvc s zRegistryInfo.vccCs t|jdS)NZVS7rrrrrvss zRegistryInfo.vscCsdS)NzDevDiv\VCForPythonrrrrr vc_for_python%s zRegistryInfo.vc_for_pythoncCsdS)NzMicrosoft SDKsrrrrr microsoft_sdk1s zRegistryInfo.microsoft_sdkcCs t|jdS)Nr rrrrrr windows_sdk=s zRegistryInfo.windows_sdkcCs t|jdS)NZNETFXSDKrrrrr netfx_sdkIs zRegistryInfo.netfx_sdkcCsdS)NzWindows Kits\Installed Rootsrrrrrwindows_kits_rootsUs zRegistryInfo.windows_kits_rootsFcCs$|js|rdnd}td|d|S)NrZ Wow6432NodeZSoftwareZ Microsoft)rrr)rr r#Znode64rrr microsoftaszRegistryInfo.microsoftc Cstj}tj}tj}|j}|jD]}d}z||||d|}Wn\ttfy|j sz||||dd|}WqttfyYYqYq0nYqYn0zLz$t ||dWW|r||SttfyYn0W|r||q|r||0qdS)NrT) rr5r4ZCloseKeyrHKEYSr6IOErrorrrZ QueryValueEx) rr nameZkey_readZopenkeyZclosekeymshkeybkeyrrrlookupts4    zRegistryInfo.lookupN)F)rrrrrrrrrrrrrrrrrrrrrrrrrrrs4          rc@s8eZdZeddZeddZedeZd6ddZdd Z d d Z d d Z e ddZ eddZeddZddZddZeddZeddZeddZeddZed d!Zed"d#Zed$d%Zed&d'Zed(d)Zed*d+Zed,d-Zed.d/Zed0d1Zd2d3Z e d7d4d5Z!dS)8 SystemInfoWinDirrrCrBNcCs2||_|jj|_||_|p$||_|_dSr$)rirfind_programdata_vs_versknown_vs_paths_find_latest_available_vs_vervs_vervc_ver)rZ registry_inforrrrrs    zSystemInfo.__init__cCs>|}|s|jstjdt|}||jt|dS)Nz%No Microsoft Visual C++ version foundrY)find_reg_vs_versrr&r'r(setupdatesorted)rZ reg_vc_versZvc_versrrrrs   z(SystemInfo._find_latest_available_vs_verc Csn|jj}|jj|jj|jjf}g}t|jj|D]0\}}zt |||dtj }Wnt t fypYq2Yn0|t |\}}} t|D]T} tt6tt|| d} | |vr|| Wdq1s0Yqt|D]T} tt4tt|| } | |vr"|| Wdq1s80YqWdq21sZ0Yq2t|S)Nr)rrrrrr7productrrr4r5r6rZ QueryInfoKeyrange contextlibsuppressr)r;r9appendZEnumKeyr) rrZvckeysZvs_versrr rZsubkeysvaluesr_r?r-rrrrs*    *   NzSystemInfo.find_reg_vs_versc Csi}d}z t|}Wnttfy.|YS0|D]}zpt||d}t|ddd}t|}Wdn1st0Y|d}tt|d||||d<Wq4tttfyYq4Yq40q4|S) Nz9C:\ProgramData\Microsoft\VisualStudio\Packages\_Instancesz state.jsonZrtzutf-8)rHrD VC\Tools\MSVCZinstallationVersion) rr6rrrjsonload_as_float_versionr) rZ vs_versionsZ instances_dirZ hashed_namesrZ state_pathZ state_filestateZvs_pathrrrrs*    ( z#SystemInfo.find_programdata_vs_verscCstd|dddS)N.)r;rsplit)rrrrrszSystemInfo._as_float_versioncCs.t|jd|j}|j|jjd|jp,|S)NzMicrosoft Visual Studio %0.1f%0.1f)rProgramFilesx86rrrr)rdefaultrrr VSInstallDir&s zSystemInfo.VSInstallDircCs,|p|}t|s(d}tj||S)Nz(Microsoft Visual C++ directory not found) _guess_vc_guess_vc_legacyrr&r'r()rrSmsgrrr VCInstallDir7s  zSystemInfo.VCInstallDirc Cs|jdkrdSz|j|j}Wnty6|j}Yn0t|d}z$t|d}|||_t||WStt t fyYdS0dS)NrwrrrY) rrrrrrrrr6r IndexError)rZvs_dirZguess_vcrrrrrIs       zSystemInfo._guess_vccCsbt|jd|j}t|jjd|j}|j|d}|rBt|dn|}|j|jjd|jp`|S)Nz Microsoft Visual Studio %0.1f\VCrrrI)rrrrrrr)rrZreg_pathZ python_vcZ default_vcrrrrgs zSystemInfo._guess_vc_legacycCsJ|jdkrdS|jdkrdS|jdkr*dS|jdkr8dS|jd krFd SdS) Nr})z7.0z6.1z6.0ar~)z7.1z7.0a&@)z8.0z8.0a(@)8.1z8.1arw)z10.0rrrrrrWindowsSdkVersion{s     zSystemInfo.WindowsSdkVersioncCs|t|jdSNlib)_use_last_dir_namer WindowsSdkDirrrrrWindowsSdkLastVersions z SystemInfo.WindowsSdkLastVersioncCs d}|jD],}t|jjd|}|j|d}|r q8q |rDt|stt|jjd|j}|j|d}|rtt|d}|rt|s|jD]6}|d|d}d|}t|j |}t|r|}q|rt|s|jD]$}d |}t|j |}t|r|}q|st|j d }|S) Nrzv%sinstallationfolderrrZWinSDKrzMicrosoft SDKs\Windows Kits\%szMicrosoft SDKs\Windows\v%sZ PlatformSDK) rrrrrrrrrfindrCr)rsdkdirr-locrSZ install_baseZintverdrrrrs6           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|SqdS)Nr#r(rTF)rUrzWinSDK-NetFx%dTools%sr-rwzv%sAr) rrrrhNetFxSdkVersionrrrrrr) rZnetfxverr.rZfxZregpathsr-rSZexecpathrrrWindowsSDKExecutablePaths"    z#SystemInfo.WindowsSDKExecutablePathcCs&t|jjd|j}|j|dp$dS)Nz%0.1f\Setup\F#r!r)rrrrr)rrSrrrFSharpInstallDirs zSystemInfo.FSharpInstallDircCsF|jdkrdnd}|D]*}|j|jjd|}|r|p:dSqdS)Nrw)Z10Z81rz kitsroot%sr)rrrr)rZversr-rrrrUniversalCRTSdkDirs  zSystemInfo.UniversalCRTSdkDircCs|t|jdSr)rrrrrrrUniversalCRTSdkLastVersion s z%SystemInfo.UniversalCRTSdkLastVersioncCs|jdkrdSdS)Nrw) z4.7.2z4.7.1z4.7z4.6.2z4.6.1z4.6z4.5.2z4.5.1z4.5rrrrrrrszSystemInfo.NetFxSdkVersioncCs8d}|jD](}t|jj|}|j|d}|r q4q |S)NrZkitsinstallationfolder)rrrrr)rrr-rrrr NetFxSdkDir's  zSystemInfo.NetFxSdkDircCs"t|jd}|j|jjdp |S)NzMicrosoft.NET\FrameworkZframeworkdir32rrrrrrZguess_fwrrrFrameworkDir329s zSystemInfo.FrameworkDir32cCs"t|jd}|j|jjdp |S)NzMicrosoft.NET\Framework64Zframeworkdir64rrrrrFrameworkDir64Is zSystemInfo.FrameworkDir64cCs |dS)N _find_dot_net_versionsrrrrFrameworkVersion32Ys zSystemInfo.FrameworkVersion32cCs |dS)N@rrrrrFrameworkVersion64es zSystemInfo.FrameworkVersion64cCs|j|jjd|}t|d|}|p6||dp6d}|jdkrJ|dfS|jdkrt|ddd krld n|d fS|jd krd S|jdkrdSdS)Nzframeworkver%dzFrameworkDir%dr@rrzv4.0r~rZv4z v4.0.30319v3.5r})r v2.0.50727g @)zv3.0r)rrrgetattrrrrc)rbitsZreg_verZ dot_net_dirr-rrrrqs     z!SystemInfo._find_dot_net_versionscs*fddttD}t|dp(dS)Nc3s*|]"}tt|r|r|VqdSr$)rr startswith)rdZdir_namerSprefixrrrls z0SystemInfo._use_last_dir_name..r)reversedrnext)rSrZ matching_dirsrrrrs  zSystemInfo._use_last_dir_name)N)r)"rrrr rKrrCrrrrr staticmethodrrrrrrrrrrrrrrrrrrrrrrrrrrsX    *      * "         rc@s^eZdZd>ddZeddZeddZed d Zed d Zed dZ eddZ eddZ eddZ eddZ eddZeddZddZeddZedd Zed!d"Zed#d$Zed%d&Zed'd(Zed)d*Zed+d,Zed-d.Zed/d0Zed1d2Zed3d4Zed5d6Zd?d8d9Zd:d;Ze d@dd}tj |dS)Nz.No suitable Microsoft Visual C++ version found) rrrrrsirr&r'r()rr.rZ vc_min_vererrrrrrs    zEnvironmentInfo.__init__cCs|jjSr$)rrrrrrrs zEnvironmentInfo.vs_vercCs|jjSr$)rrrrrrrs zEnvironmentInfo.vc_vercsVddg}jdkrDjjddd}|dg7}|dg7}|d|g7}fd d |DS) Nz Common7\IDEz Common7\ToolsrwTrrUz1Common7\IDE\CommonExtensions\Microsoft\TestWindowzTeam Tools\Performance ToolszTeam Tools\Performance Tools%scsg|]}tjj|qSrrrrrdrSrrr rmz+EnvironmentInfo.VSTools..)rrr)rpaths arch_subdirrrrVSToolss    zEnvironmentInfo.VSToolscCst|jjdt|jjdgS)NZIncludezATLMFC\Includerrrrrrr VCIncludess  zEnvironmentInfo.VCIncludescsbjdkrjjdd}njjdd}d|d|g}jdkrP|d|g7}fd d |DS) N.@TrUrLib%sz ATLMFC\Lib%srwz Lib\store%scsg|]}tjj|qSrrrrrrrrmz/EnvironmentInfo.VCLibraries..)rrr)rrrrrr VCLibrariess  zEnvironmentInfo.VCLibrariescCs|jdkrgSt|jjdgS)NrwzLib\store\references)rrrrrrrr VCStoreRefss zEnvironmentInfo.VCStoreRefscCs|j}t|jdg}|jdkr"dnd}|j|}|rL|t|jd|g7}|jdkr|d|jjdd}|t|j|g7}n|jdkr|jrd nd }|t|j||jjdd g7}|jj |jj kr|t|j||jjdd g7}n|t|jd g7}|S) NZ VCPackagesr~TFBin%srwrrz bin\HostX86%sz bin\HostX64%srBin) rrrrrrrrrrr)rrtoolsrrrSZhost_dirrrrVCTools%s,     zEnvironmentInfo.VCToolscCsh|jdkr.|jjddd}t|jjd|gS|jjdd}t|jjd}|j}t|d||fgSdS)Nr~Trr rrz%sum%s)rrrrrr _sdk_subdir)rrrZlibverrrr OSLibrariesJs zEnvironmentInfo.OSLibrariescCsht|jjd}|jdkr&|t|dgS|jdkr8|j}nd}t|d|t|d|t|d|gSdS) Nincluder~glrwrz%ssharedz%sumz%swinrt)rrrrr)rrsdkverrrr OSIncludes^s      zEnvironmentInfo.OSIncludescCst|jjd}g}|jdkr&||j7}|jdkr@|t|dg7}|jdkr||t|jjdt|ddt|d dt|d dt|jjd d d |jdddg7}|S)NZ Referencesr}rzCommonConfiguration\NeutralrwZ UnionMetadataz'Windows.Foundation.UniversalApiContractz1.0.0.0z%Windows.Foundation.FoundationContractz,Windows.Networking.Connectivity.WwanContractZ ExtensionSDKszMicrosoft.VCLibsrZCommonConfigurationZneutral)rrrrr)rreflibpathrrr OSLibpathvs2         zEnvironmentInfo.OSLibpathcCs t|Sr$)list _sdk_toolsrrrrSdkToolss zEnvironmentInfo.SdkToolsccs|jdkr,|jdkrdnd}t|jj|V|js\|jjdd}d|}t|jj|V|jdvr|jrvd }n|jjddd }d |}t|jj|VnB|jdkrt|jjd}|jjdd}|jj}t|d ||fV|jj r|jj VdS) Nrrr zBin\x86Trr )r~rrrzBin\NETFX 4.0 Tools%sz%s%s) rrrrrrrrrr)rZbin_dirrrSrrrrrs(     zEnvironmentInfo._sdk_toolscCs|jj}|rd|SdSNz%s\r)rrrucrtverrrrrs zEnvironmentInfo._sdk_subdircCs|jdkrgSt|jjdgS)Nr}ZSetup)rrrrrrrrSdkSetups zEnvironmentInfo.SdkSetupcs|j}|j|jdkr0d}| o,| }n$|p>|}|jdkpR|jdk}g}|rt|fddjD7}|r|fddjD7}|S)Nr~TrVcsg|]}tj|qSr)rrrdr-rrrrsz+EnvironmentInfo.FxTools..csg|]}tj|qSr)rrr r!rrrs) rrrrrrrrr)rrZ include32Z include64rrr!rFxToolss"    zEnvironmentInfo.FxToolscCs8|jdks|jjsgS|jjdd}t|jjd|gS)NrwTrzlib\um%s)rrrrrr)rrrrrNetFxSDKLibrariess z!EnvironmentInfo.NetFxSDKLibrariescCs&|jdks|jjsgSt|jjdgS)Nrwz include\um)rrrrrrrrNetFxSDKIncludess z EnvironmentInfo.NetFxSDKIncludescCst|jjdgS)Nz VSTSDB\DeployrrrrrVsTDb!s zEnvironmentInfo.VsTDbcCsv|jdkrgS|jdkr0|jj}|jjdd}n |jj}d}d|j|f}t||g}|jdkrr|t||dg7}|S)NrrTrrzMSBuild\%0.1f\bin%sZRoslyn)rrrrrrr)r base_pathrrSZbuildrrrMSBuild-s    zEnvironmentInfo.MSBuildcCs|jdkrgSt|jjdgS)NrzHTML Help Workshop)rrrrrrrrHTMLHelpWorkshopIs z EnvironmentInfo.HTMLHelpWorkshopcCsD|jdkrgS|jjdd}t|jjd}|j}t|d||fgS)NrwTrrz%sucrt%s)rrrrrr _ucrt_subdir)rrrrrrr UCRTLibrariesXs zEnvironmentInfo.UCRTLibrariescCs.|jdkrgSt|jjd}t|d|jgS)Nrwrz%sucrt)rrrrr))rrrrr UCRTIncludesjs zEnvironmentInfo.UCRTIncludescCs|jj}|rd|SdSr)rrrrrrr)zs zEnvironmentInfo._ucrt_subdircCs(d|jkrdkrnngS|jjgS)Nrr)rrrrrrrFSharps zEnvironmentInfo.FSharpc Csd|j}|jjddd}g}|jj}t|dd}t|rft |t |d}||t |dg7}|t |d g7}d |jd d t |j d f}t ||D]&\}}t ||||} t| r| SqdS) Nzvcruntime%d0.dllTrrz\Toolsz\RedistrYZonecorerWzMicrosoft.VC%d.CRT )rrrrOrrrrhrrrr:rr7rr) rr`rprefixesZ tools_pathZ redist_pathZcrt_dirsrZcrt_dirrSrrrVCRuntimeRedists  zEnvironmentInfo.VCRuntimeRedistTcCst|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}|jdkrt|jr|j|d<|S)NrrrrS)rrrrSr3rn)dict _build_pathsrrr+r$r rr"r*r#r rrrr%rrr'r(r,rrr/)rexistsrurrrr+sV   zEnvironmentInfo.return_envc Csptj|}t|dt}t||}|rs\      * &$'$ %s: