\bgv|UdZddlmZddlZddlZddlZddlZddlZddlZddl m Z m Z ddl m Z ddlZe rddlmZmZe sejdkr ddlZddlmZnGd d ZeZd ed <Gd dZGddZGddZGdde ZGddZdS)zo Environment info about Microsoft Compilers. >>> getfixture('windows_only') >>> ei = EnvironmentInfo('amd64') ) annotationsN) TYPE_CHECKING TypedDict)unique_everseen) LiteralString NotRequiredWindows)environceZdZdZdZdZdZdS)winregN)__name__ __module__ __qualname__ HKEY_USERSHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_CLASSES_ROOT`/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/setuptools/msvc.pyr r s'  ! rr zdict[str, str]r ceZdZdZejddZddZe dZ dZ d Z ddd Z ddd ZddZdS) PlatformInfoz Current and Target Architectures information. Parameters ---------- arch: str Target architecture. processor_architecturereturnNonec`|dd|_dS)Nx64amd64)lowerreplacearch)selfr"s r__init__zPlatformInfo.__init__5s%JJLL((88 rcV|j|jddzdS)zs Return Target CPU architecture. Return ------ str Target CPU _N)r"findr#s r target_cpuzPlatformInfo.target_cpu8s*y,,q02233rc|jdkS)z Return True if target CPU is x86 32 bits.. Return ------ bool CPU is x86 32 bits x86r*r)s r target_is_x86zPlatformInfo.target_is_x86Ds%''rc|jdkS)z Return True if current CPU is x86 32 bits.. Return ------ bool CPU is x86 32 bits r, current_cpur)s rcurrent_is_x86zPlatformInfo.current_is_x86Os5((rFstrcR|jdkr|rdn|jdkr|rdn d|jzS)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,rr\x64\%sr0r#hidex86rs r current_dirzPlatformInfo.current_dirZsJ$ E))g) B G+++$**  rcR|jdkr|rdn|jdkr|rdn d|jzS)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,rrr5r6r-r7s r target_dirzPlatformInfo.target_dirrsG$5((W( B7**s*$/)  rc|rdn|j}|j|krdn*|dd|zS)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_)r1r*r;r!)r#forcex86currents r cross_dirzPlatformInfo.cross_dirsR $9%%)9')) B""**471BCC rNrr)FFrr3F)r rr__doc__r getr r1r$propertyr*r.r2r9r;r@rrrrr)s'+6;;AACCK9999 4 4X 4 ( ( ( ) ) )     0     0      rrc*eZdZdZejejejejfZ ddZ e ddZ e dZ e dZe d Ze dd Ze dd Ze d Ze d Ze ddZddZdZdS) RegistryInfoz Microsoft Visual Studio related registry information. Parameters ---------- platform_info: PlatformInfo "PlatformInfo" instance. rrc||_dSN)pi)r# platform_infos rr$zRegistryInfo.__init__s rr3cdS)z Microsoft Visual Studio root registry key. Return ------ str Registry key VisualStudiorr)s r visualstudiozRegistryInfo.visualstudios ~rcLtj|jdS)z Microsoft Visual Studio SxS registry key. Return ------ str Registry key SxS)ospathjoinrOr)s rsxszRegistryInfo.sxssw||D-u555rcLtj|jdS)z| Microsoft Visual C++ VC7 registry key. Return ------ str Registry key VC7rRrSrTrUr)s rvczRegistryInfo.vcw||DHe,,,rcLtj|jdS)z Microsoft Visual Studio VS7 registry key. Return ------ str Registry key VS7rXr)s rvszRegistryInfo.vsrZrcdS)z Microsoft Visual C++ for Python registry key. Return ------ str Registry key zDevDiv\VCForPythonrr)s r vc_for_pythonzRegistryInfo.vc_for_pythons %$rcdS)zq Microsoft SDK registry key. Return ------ str Registry key zMicrosoft SDKsrr)s r microsoft_sdkzRegistryInfo.microsoft_sdks  rcLtj|jdS)z Microsoft Windows/Platform SDK registry key. Return ------ str Registry key r rRrSrTrar)s r windows_sdkzRegistryInfo.windows_sdksw||D. :::rcLtj|jdS)z Microsoft .NET Framework SDK registry key. Return ------ str Registry key NETFXSDKrcr)s r netfx_sdkzRegistryInfo.netfx_sdk sw||D. ;;;rcdS)z Microsoft Windows Kits Roots registry key. Return ------ str Registry key zWindows Kits\Installed Rootsrr)s rwindows_kits_rootszRegistryInfo.windows_kits_rootss /.rFc|js|rdnd}tjd|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 r Wow6432NodeSoftware Microsoft)rKr2rRrSrT)r#keyr,node64s r microsoftzRegistryInfo.microsoft"s? w--//I3IMw||J SAAArc tj}tj}tj}|j}|jD]}d} ||||d|}nV#t $rI|js+ ||||dd|}n#t $rYYgwxYwYmYnwxYw tj ||d|r||cScS#t $rYnwxYw |r ||#|r ||wwxYwdS)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 NrT) r KEY_READOpenKeyCloseKeyrpHKEYSOSErrorrKr2 QueryValueEx) r#rnnamekey_readopenkeyclosekeymshkeybkeys rlookupzRegistryInfo.lookup5s ?.? ^J # #DD wtRRWWa::   w--//!&wtRRT]]AxHH"!!! !H   #*466q9#HTNNNNNN###    #HTNNN#HTNNNN#tsYA#B#4B  B# BB#BB#"B#'C C!C3 C!!C33DNrArBrC)r rrrDr rrrrrur$rFrOrUrYr]r_rardrgrirprrrrrHrHs  !  E       X  6 6X 6 - -X - - -X - % % %X %    X   ; ;X ; < <X < / / /X /BBBB&'''''rrHc*eZdZdZejddZejddZejdeZd%d&d Z d Z d Z d'd Z e dZedZedZdZdZed(dZedZed)dZedZedZedZedZedZedZedZedZed*d!Zed*d"Z d*d#Z!e d+d$Z"dS), 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)Nrrc||_|jj|_||_|p|x|_|_dSrJ)rirKfind_programdata_vs_versknown_vs_paths_find_latest_available_vs_vervs_vervc_ver)r# registry_infors rr$zSystemInfo.__init__qsM'*";;==%+$Rd.P.P.R.RR dkkkrc|}|s&|jstjdt |}||jt|dS)zm Find the latest VC version Return ------ float version z%No Microsoft Visual C++ version found)find_reg_vs_versr distutilserrorsDistutilsPlatformErrorsetupdatesorted)r# reg_vc_versvc_verss rrz(SystemInfo._find_latest_available_vs_verzsz++--  t2 "997 k""t*+++gr""rc |jj}|jj|jj|jjf}g}t j|jj|D]w\}} tj |||dtj }n#t$rY>wxYw|5tj |\}}} t|D]t} tjt 5t#tj|| d} | |vr|| dddn #1swxYwYut|D]n} tjt 5t#tj|| } | |vr|| dddn #1swxYwYo dddn #1swxYwYyt+|S)z Find Microsoft Visual Studio versions available in registry. Return ------ list of float Versions rN)rrprYr_r] itertoolsproductrur rsrrrv QueryInfoKeyrange contextlibsuppress ValueErrorfloat EnumValueappendEnumKeyr) r#r|vckeysvs_versr}rnr~subkeysvaluesr&ivers rrzSystemInfo.find_reg_vs_verssW '*dg3TWZ@"*47=&AA 0 0ID# ~dBBsGGQHH     0 0%+%8%>%>"v00A#,Z8800#F$4T1$=$=a$@AAg--#NN3///000000000000000w00A#,Z8800#FN4$;$;<<g--#NN3///0000000000000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0gsn*B BBAF=AD&  F=&D* *F=-D* ..F==C>c|td|dddS)z Return a string version as a simplified float version (major.minor) Parameters ---------- version: str Version. Return ------ float version .N)rrTsplit)versions rrzSystemInfo._as_float_versions3SXXgmmC00!455666rctj|jd|jz}|j|jjd|jzp|S)zp Microsoft Visual Studio directory. Return ------ str path zMicrosoft Visual Studio %0.1f%0.1f)rRrSrTProgramFilesx86rrrr])r#defaults r VSInstallDirzSystemInfo.VSInstallDirsQ',,  "ADK"O   w~~dgj'DK*?@@KGKrc|p|}tj|s!d}t j||S)zm Microsoft Visual C++ directory. Return ------ str path z(Microsoft Visual C++ directory not found) _guess_vc_guess_vc_legacyrRrSisdirrrr)r#rSmsgs r VCInstallDirzSystemInfo.VCInstallDirs[~~:4#8#8#:#:w}}T"" ?> > rc|jdkrdS |j|j}n#t$r |j}YnwxYwtj|d} t j|d}|||_ tj||S#ttf$rYdSwxYw)zl Locate Visual C++ for VS2017+. Return ------ str path ,@rrr) rrrrrRrSrTrrrrv IndexError)r#vs_dirguess_vcrs rrzSystemInfo._guess_vc s ;$  2 '(5FF ' ' '&FFF '7<<(899 Z))"-F0088DK7<<&11 1$   22 s"66AB..CCctj|jd|jz}tj|jjd|jz}|j|d}|r tj|dn|}|j|jjd|jzp|S)z{ Locate Visual C++ for versions prior to 2017. Return ------ str path z Microsoft Visual Studio %0.1f\VCr installdirVC) rRrSrTrrrr_rrY)r#rreg_path python_vc default_vcs rrzSystemInfo._guess_vc_legacy*s',,  "E "S   7<< 5w7LMMGNN8\:: 6?LRW\\)T222W w~~dgj'DK*?@@NJNrtuple[LiteralString, ...]c|jdkrdS|jdkrdS|jdkrdS|jdkrdS|jd krd Sd S) z Microsoft Windows SDK versions for specified MSVC++ version. Return ------ tuple of str versions "@)z7.0z6.1z6.0a$@)z7.1z7.0a&@)z8.0z8.0a(@)8.1z8.1ar)z10.0rrrr)s rWindowsSdkVersionzSystemInfo.WindowsSdkVersion?sd ;#  '' [D  = [D  = [D  = [D  =rrcr|tj|jdS)zt Microsoft Windows SDK last version. Return ------ str version lib)_use_last_dir_namerRrSrT WindowsSdkDirr)s rWindowsSdkLastVersionz SystemInfo.WindowsSdkLastVersionUs+&&rw||D4F'N'NOOOr str | Nonec6d}|jD]N}tj|jjd|z}|j|d}|rnO|rtj|sotj|jjd|j z}|j|d}|r tj|d}|rtj|sr|jD]j}|d| d}d |z}tj|j |}tj|r|}k|rtj|sU|jD]M}d |z}tj|j |}tj|r|}N|s%tj|j d }|S) zn Microsoft Windows SDK directory. Return ------ str path rzv%sinstallationfolderrrWinSDKNrzMicrosoft SDKs\Windows Kits\%szMicrosoft SDKs\Windows\v%s PlatformSDK) rrRrSrTrrdrrr_rrfindrr)r#sdkdirrlocrS install_baseintverds rrzSystemInfo.WindowsSdkDiras )  C',,tw2ECK@@CW^^C)=>>F   >RW]]622 >7<< 5w7LMMD7>>$ ==L >lH== RW]]622 -  -syy~~-.86AGLL!2D997==##F RW]]622 -  4s:GLL!2D997==##F DW\\$"3]CCF rc|jdkrd}d}n-d}|jdkrdnd}|jd|}d ||d d fz}g}|jd kr9|jD]1}|t j|jj ||gz }2|j D]4}|t j|jj d |z|gz }5|D]#}|j |d}|r|cS$dS)zy Microsoft Windows SDK executable directory. Return ------ str path r#r(rTF)rr8zWinSDK-NetFx%dTools%sr=-rzv%sArN) rrKr9r!NetFxSdkVersionrRrSrTrrgrrdr) r#netfxverr"r8fxregpathsrrSexecpaths rWindowsSDKExecutablePathz#SystemInfo.WindowsSDKExecutablePaths> ;$  HDDH"kT11dduG7&&4&AAD $$,,tS2I2I'J J ;$  + G GRW\\$'*;S"EEFF) N NC dg&96C<LLM MHH  Dw~~d,@AAH  trctj|jjd|jz}|j|dpdS)zl Microsoft Visual F# directory. Return ------ str path z%0.1f\Setup\F# productdirr)rRrSrTrrOrr)r#rSs rFSharpInstallDirzSystemInfo.FSharpInstallDirsAw||DG02Cdk2QRRw~~dL117R7rc|jdkrdnd}|D]2}|j|jjd|z}|r|pdcS3dS)zt Microsoft Universal CRT SDK directory. Return ------ str path r)1081rz kitsroot%srN)rrrri)r#versrrs rUniversalCRTSdkDirzSystemInfo.UniversalCRTSdkDirsm ${d22|| $ $CW^^DG$> s@RSSF $|### $trcr|tj|jdS)z Microsoft Universal C Runtime SDK last version. Return ------ str version r)rrRrSrTrr)s rUniversalCRTSdkLastVersionz%SystemInfo.UniversalCRTSdkLastVersions+&&rw||D4KU'S'STTTrc |jdkrdndS)z Microsoft .NET Framework SDK versions. Return ------ tuple of str versions r) z4.7.2z4.7.1z4.7z4.6.2z4.6.1z4.6z4.5.2z4.5.1z4.5rrr)s rrzSystemInfo.NetFxSdkVersions"{d"" X W rcd}|jD]K}tj|jj|}|j|d}|rnL|S)zu Microsoft .NET Framework SDK directory. Return ------ str path rkitsinstallationfolder)rrRrSrTrrgr)r#rrrs r NetFxSdkDirzSystemInfo.NetFxSdkDirsb'  C',,tw0#66CW^^C)ABBF   rctj|jd}|j|jjdp|S)zw Microsoft .NET Framework 32bit directory. Return ------ str path zMicrosoft.NET\Frameworkframeworkdir32rRrSrTrrrrYr#guess_fws rFrameworkDir32zSystemInfo.FrameworkDir32s>7<< -GHHw~~dgj*:;;GxGrctj|jd}|j|jjdp|S)zw Microsoft .NET Framework 64bit directory. Return ------ str path zMicrosoft.NET\Framework64frameworkdir64r r s rFrameworkDir64zSystemInfo.FrameworkDir64s>7<< -IJJw~~dgj*:;;GxGrtuple[str, ...]c,|dS)z Microsoft .NET Framework 32bit versions. Return ------ tuple of str versions _find_dot_net_versionsr)s rFrameworkVersion32zSystemInfo.FrameworkVersion32"**2...rc,|dS)z Microsoft .NET Framework 64bit versions. Return ------ tuple of str versions @rr)s rFrameworkVersion64zSystemInfo.FrameworkVersion64.rrcd|j|jjd|z}t|d|z}|p||dpd}|jdkr|dfS|jdkr&|dd d krd n|d fS|jd krdS|jdkrdSdS)z Find Microsoft .NET Framework versions. Parameters ---------- bits: int Platform number of bits: 32 or 64. Return ------ tuple of str versions zframeworkver%dzFrameworkDir%dvrrzv4.0rNrv4z v4.0.30319v3.5r)r v2.0.50727g @)zv3.0r r)rrrYgetattrrrr )r#bitsreg_ver dot_net_dirrs rrz!SystemInfo._find_dot_net_versions:s'..-=-DEEd$4t$;<< H00cBBHb ;$  ;  [D #&99;;rr?d#:#:<<VK K [C  '' [C  ''rrcfdttjD}t|dpdS)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 c3K|]X}tjtj|?|T|VYdSrJ)rRrSrrT startswith).0dir_namerSprefixs r z0SystemInfo._use_last_dir_name..iss  w}}RW\\$99:: ##F++        rNr)reversedrRrnext)rSr* matching_dirss`` rrzSystemInfo._use_last_dir_nameXsZ"     $RZ%5%566   M4((.B.rrJrA)rr)rrrr)rr)r)#r rrrDr rErrrr$rrr staticmethodrrFrrrrrrrrrrrrrrrrrrrrrrrr_s  W[2 & &F7;~r22L!gk"5|DDOSSSSS###(>((((T77\7 LLXL"X"<OOO*X* P PX P(((X(T""X"H 8 8X 8X( U UX U  X X" H HX H H HX H / / /X / / / /X /<///\///rrcBeZdZUded<ded<ded<ded<ded<dS) _EnvironmentDictr3includerlibpathrSzNotRequired[str | None]py_vcruntime_redistN)r rr__annotations__rrrr2r2rsBLLL HHHLLL III000000rr2cDeZdZdZd'd(dZedZedZed Zed Z ed Z ed Z ed Z edZ edZedZedZdZedZedZedZedZedZedZedZedZedZedZedZedZed)d Zd*d+d%Zd&Z dS),EnvironmentInfoaY 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. Nrrrct||_t|j|_t |j||_|j|kr!d}tj |dS)Nz.No suitable Microsoft Visual C++ version found) rrKrHrrsirrrr)r#r"r vc_min_vererrs rr$zEnvironmentInfo.__init__sft$$tw''TWf-- ; # #BC"99#>> > $ #rc|jjS)zk Microsoft Visual Studio. Return ------ float version )r:rr)s rrzEnvironmentInfo.vs_verw~rc|jjS)zp Microsoft Visual C++ version. Return ------ float version )r:rr)s rrzEnvironmentInfo.vc_verr>rcddg}jdkr1jdd}|dgz }|dgz }|d|zgz }fd |DS) zu Microsoft Visual Studio Tools. Return ------ list of str paths z Common7\IDEz Common7\ToolsrTr8rz1Common7\IDE\CommonExtensions\Microsoft\TestWindowzTeam Tools\Performance ToolszTeam Tools\Performance Tools%scdg|],}tjjj|-SrrRrSrTr:rr(rSr#s r z+EnvironmentInfo.VSTools...KKKT TW1488KKKr)rrKr9)r#paths arch_subdirs` rVSToolszEnvironmentInfo.VSToolss !12 ;$  '--d-EEK JK KE 56 6E 7+EF FEKKKKUKKKKrctj|jjdtj|jjdgS)z Microsoft Visual C++ & Microsoft Foundation Class Includes. Return ------ list of str paths IncludezATLMFC\IncluderRrSrTr:rr)s r VCIncludeszEnvironmentInfo.VCIncludess? GLL-y 9 9 GLL-/@ A A  rcjdkrjd}njd}d|zd|zg}jdkr |d|zgz }fd |DS) z Microsoft Visual C++ & Microsoft Foundation Class Libraries. Return ------ list of str paths .@Trr8Lib%sz ATLMFC\Lib%srz Lib\store%scdg|],}tjjj|-SrrLrDs rrEz/EnvironmentInfo.VCLibraries..rFr)rrKr;)r#rHrGs` r VCLibrarieszEnvironmentInfo.VCLibrariess ;$  ',,,66KK',,T,::K;&+(EF ;$   n{23 3EKKKKUKKKKrcr|jdkrgStj|jjdgS)z Microsoft Visual C++ store references Libraries. Return ------ list of str paths rzLib\store\references)rrRrSrTr:rr)s r VCStoreRefszEnvironmentInfo.VCStoreRefss5 ;  I TW13JKKLLrc|j}tj|jdg}|jdkrdnd}|j|}|r,|tj|jd|zgz }|jdkrHd|jdz}|tj|j|gz }n|jdkr|j rd nd }|tj|j||j d zgz }|jj |jj krE|tj|j||jd zgz }n)|tj|jd gz }|S) zr Microsoft Visual C++ Tools. Return ------ list of str paths VCPackagesrTFBin%srrQrOz bin\HostX86%sz bin\HostX64%srPBin) r:rRrSrTrrrKr@r9r2r;r1r*)r#r:toolsr>rHrShost_dirs rVCToolszEnvironmentInfo.VCToolssWbo|<<=;$..44Eg''11  L bgll2?Gk4IJJK KE ;$  TW000>>>D bgll2?D99: :EE [D $(G$:$:$<$<R  BR   R_h9K9KPT9K9U9U.UVV Ew"dg&888GLLDG4G4GD4G4Q4Q)Q bgll2?E::; ;E rc|jdkrJ|jdd}tj|jjd|zgS|jd}tj|jjd}|j}tj||d|gS)zw Microsoft Windows SDK Libraries. Return ------ list of str paths rTrArRrPrum) rrKr;rRrSrTr:r _sdk_subdir)r#rHrlibvers r OSLibrarieszEnvironmentInfo.OSLibraries#s ;$  ',,Tt,DDKGLL!6+8MNNO O',,,66K',,tw4e<> > > >w%%'' <'--$-77K[(D',,tw4d;; ; ; ; ;, & &w$$&& J "g11$D1II +k9D',,tw4d;; ; ; ; ; [D 7<< 5u==D'--$-77KW2F',,tvv{{%CDD D D D 7 + 3'2 2 2 2 2 2 3 3rc,|jj}|rd|zndS)zu Microsoft Windows SDK version subdir. Return ------ str subdir %s\r)r:rr#ucrtvers rr`zEnvironmentInfo._sdk_subdirs#'/%,4  "4rcr|jdkrgStj|jjdgS)zs Microsoft Windows SDK Setup. Return ------ list of str paths rSetup)rrRrSrTr:rr)s rSdkSetupzEnvironmentInfo.SdkSetups4 ;  I TW2G<<==rct|j}|j|jdkr-d}| o| }n>|p|}|jdkp |jdk}g}|r|fdjDz }|r|fdjDz }|S)zv Microsoft .NET Framework Tools. Return ------ list of str paths rTrcZg|]'}tjj|(Sr)rRrSrTrr(rr:s rrEz+EnvironmentInfo.FxTools..99< R.44rcZg|]'}tjj|(Sr)rRrSrTrr~s rrEz+EnvironmentInfo.FxTools..rr) rKr:rr.r2r1r*rr)r#rK include32 include64r[r:s @rFxToolszEnvironmentInfo.FxToolss W W ;$  I,,...Jr7H7H7J7J3JII((**Ab.?.?.A.AI'1MR]g5MI   @B@U E   @B@U E rc|jdks |jjsgS|jd}t j|jjd|zgS)z~ Microsoft .Net Framework SDK Libraries. Return ------ list of str paths rTrPzlib\um%s)rr:rrKr;rRrSrT)r#rHs rNetFxSDKLibrariesz!EnvironmentInfo.NetFxSDKLibrariess[ ;  TW%8 Ig((T(22  TW0+ 2KLLMMrc|jdks |jjsgStj|jjdgS)z} Microsoft .Net Framework SDK Includes. Return ------ list of str paths rz include\um)rr:rrRrSrTr)s rNetFxSDKIncludesz EnvironmentInfo.NetFxSDKIncludess> ;  TW%8 I TW0-@@AArcXtj|jjdgS)z Microsoft Visual Studio Team System Database. Return ------ list of str paths z VSTSDB\DeployrCr)s rVsTDbzEnvironmentInfo.VsTDbs# TW13CDDEErc\|jdkrgS|jdkr(|jj}|jd}n|jj}d}d|j|fz}t j||g}|jdkr%|t j||dgz }|S)zn Microsoft Build Engine. Return ------ list of str paths rrOTrQrzMSBuild\%0.1f\bin%sRoslyn) rr:rrKr9rrRrSrT)r# base_pathrHrSbuilds rMSBuildzEnvironmentInfo.MSBuilds ;  I [4  /I'--d-;;KK,IK%k(BBi../ ;$   bgll9dH==> >E rcr|jdkrgStj|jjdgS)zt Microsoft HTML Help Workshop. Return ------ list of str paths rzHTML Help Workshop)rrRrSrTr:rr)s rHTMLHelpWorkshopz EnvironmentInfo.HTMLHelpWorkshop*s5 ;  I TW46JKKLLrc|jdkrgS|jd}tj|jjd}|j}tj||d|gS)z Microsoft Universal C Runtime SDK Libraries. Return ------ list of str paths rTrPrucrt) rrKr;rRrSrTr:r _ucrt_subdir)r#rHrrxs r UCRTLibrarieszEnvironmentInfo.UCRTLibraries9st ;  Ig((T(22 gll475u==# S"EFFGGrc|jdkrgStj|jjd}tj|d|jzgS)z Microsoft Universal C Runtime SDK Include. Return ------ list of str paths rr3z%sucrt)rrRrSrTr:rr)r#r3s r UCRTIncludeszEnvironmentInfo.UCRTIncludesKsQ ;  I',,tw99EE Wh1B&BCCDDrc,|jj}|rd|zndS)z Microsoft Universal C Runtime SDK version subdir. Return ------ str subdir rvr)r:rrws rrzEnvironmentInfo._ucrt_subdir[s#'4%,4  "4rcJd|jcxkrdkrnngS|jjgS)zk Microsoft Visual F#. Return ------ list of str paths rr)rr:rr)s rFSharpzEnvironmentInfo.FSharphs; $+ $ $ $ $ $ $ $ $ $I())rrc$d|jz|jddg}|jj}t j| dd}t j |r]t j |t j |d}||t j |dgz }|t j |d gz }d |jd zzd t|jd zzf}fd tj||D}t#t%t jj|d S)z{ Microsoft Visual C++ runtime redistributable dll. Returns the first suitable path found or None. zvcruntime%d0.dllTrPr=z\Toolsz\RedistronecoreredistzMicrosoft.VC%d.CRT c3bK|])\}}tj||V*dSrJ)rRrSrT)r(r*crt_dirrH vcruntimes rr+z2EnvironmentInfo.VCRuntimeRedist..sO  ! GLLgy A A      rN)rrKr;stripr:rrRrSdirnamer!rrTrintrrrr-filterisfile)r#prefixes tools_path redist_pathcrt_dirscandidate_pathsrHrs @@rVCRuntimeRedistzEnvironmentInfo.VCRuntimeRedistwsl'4 g((T(2288>> W) gooj&8&8J&O&OPP 7== % % L',,{BJ{4K4KB4OPPK bgll; &J&JK KHRW\\*h7788 !DK"$4 5 C $4$4r$9 :      %.%6x%J%J   F27>?;;TBBBrTexistsboolr2ct|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 |}|jdkr|jr |j|d<|S)z Return environment dict. Parameters ---------- exists: bool It True, only return existing paths. Return ------ dict environment r3rr4rS)r3rr4rSr5)r2 _build_pathsrMrfrrrTrbrrrrVrnr]rIrrrr{rrrrr)r#renvs r return_envzEnvironmentInfo.return_envs9%%OO%)    !!$$L&*   %%!4<1A4>R ""LLJMMLL)K 7* * * V ;"  !5 )-)=C% & rctj|}tj|dt j}tj||}|r,ttt j j |n|}|s6d| z}tj|t!|} t j| S)aC 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. Parameters ---------- name: str Environment variable name spec_path_lists: list of str Paths exists: bool It True, only return existing paths. Return ------ str Pathsep-separated paths rz %s environment variable is empty)rchain from_iterabler rErrRpathseprprrSrupperrrrrrT) r#rxspec_path_listsr spec_paths env_pathsrG extant_pathsr unique_pathss rrzEnvironmentInfo._build_pathss._22?CC Kb))// ;;  I66=CNtF27=%88999  ?4tzz||CC"99#>> >&|44 z|,,,r)NrrAr/)T)rrrr2)!r rrrDr$rFrrrIrMrTrVr]rbrfrnrrrqr`r{rrrrrrrrrrrrrrrrr8r8zs".?????  X   X LLXL&   X  LLXL( M MX M''X'RIIXI&X2%%X%N ' 'X '!3!3!3F 5 5X 5 > >X >X< N NX N B BX B F FX FX6 M MX MHHXH" E EX E 5 5X 5 * *X * C C CX CD;;;;;z-----rr8)rD __future__rrrrrRos.pathplatformtypingrrmore_itertoolsrdistutils.errorsrtyping_extensionsrrsystemr r dictr6rrHrr2r8rrrrs0#""""" ++++++++******=<<<<<<<< %**i77MMM!!!!!!!! #dffG$$$$v v v v v v v v rzzzzzzzzzP/P/P/P/P/P/P/P/f11111y111| -| -| -| -| -| -| -| -| -| -r