VULN_CHECK_I913V6 C<}&UdZddlmZddlZddlZddlZddlZddlZddlZddl m Z m Z m Z ddl mZddlmZddlmZddlZe rdd lmZmZe sejd kr ddlZdd lmZnGd d ZeZded<GddZGddZGddZGdde Z GddZ!dS)zo Environment info about Microsoft Compilers. >>> getfixture('windows_only') >>> ei = EnvironmentInfo('amd64') ) annotationsN) TYPE_CHECKING TypedDictoverload)unique_everseen)StrPath)py310) LiteralString NotRequiredWindows)environceZdZdZdZdZdZdS)winregN)__name__ __module__ __qualname__ HKEY_USERSHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_CLASSES_ROOTa/builddir/build/BUILD/cloudlinux-venv-1.0.11/venv/lib/python3.11/site-packages/setuptools/msvc.pyrr#s'  ! rrzdict[str, str]rceZdZdZejddZddZe dd Z dd Z dd Z dddZ dddZdddZdS) PlatformInfoz Current and Target Architectures information. Parameters ---------- arch: str Target architecture. processor_architecturearchstrreturnNonec`|dd|_dS)Nx64amd64)lowerreplacer)selfrs r__init__zPlatformInfo.__init__8s%JJLL((88 rcV|j|jddzdS)zs Return Target CPU architecture. Return ------ str Target CPU _rN)rfindr(s r target_cpuzPlatformInfo.target_cpu;s*y,,q02233rboolc|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_x86Gs%''rc|jdkS)z Return True if current CPU is x86 32 bits.. Return ------ bool CPU is x86 32 bits r1 current_cpur-s rcurrent_is_x86zPlatformInfo.current_is_x86Rs5((rFcR|jdkr|rdn|jdkr|rdn d|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) r1rr%\x64\r5r(hidex86r$s r current_dirzPlatformInfo.current_dir]sM$ E))g) B G+++(d&((  rcR|jdkr|rdn|jdkr|rdn d|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) r1rr%r9r:r2r;s r target_dirzPlatformInfo.target_dirusJ$5((W( B7**s*'do''  rc|rdn|j}|j|krdn+|dd|dS)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. r1rr:r+)r6r.r?r')r(forcex86currents r cross_dirzPlatformInfo.cross_dirsU $9%%)9')) B""**4gAA rN)rr r!r"r!r )r!r/)FFF)rrr__doc__rgetr&r6r)propertyr.r3r7r=r?rCrrrrr,s'+6;;AACCK9999 4 4 4X 4 ( ( ( ( ) ) ) )     0     0       rrcleZdZdZejejejejfZ ddZ e ddZ e dd Z e dd Ze dd Ze dd Ze dd Ze ddZe ddZe ddZedd dZedd!dZdd!dZd"dZdS)# RegistryInfoz Microsoft Visual Studio related registry information. Parameters ---------- platform_info: PlatformInfo "PlatformInfo" instance. platform_inforr!r"c||_dSN)pi)r(rKs rr)zRegistryInfo.__init__s rr cdS)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)ospathjoinrQr-s rsxszRegistryInfo.sxssw||D-u555rcLtj|jdS)z| Microsoft Visual C++ VC7 registry key. Return ------ str Registry key VC7rTrUrVrWr-s rvczRegistryInfo.vcw||DHe,,,rcLtj|jdS)z Microsoft Visual Studio VS7 registry key. Return ------ str Registry key VS7rZr-s rvszRegistryInfo.vsr\rcdS)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 rTrUrVrcr-s r windows_sdkzRegistryInfo.windows_sdksw||D. :::rcLtj|jdS)z Microsoft .NET Framework SDK registry key. Return ------ str Registry key NETFXSDKrer-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 /.rFkeyr1r/cdSrMrr(rlr1s r microsoftzRegistryInfo.microsoft%sQTQTrr cdSrMrrns rrozRegistryInfo.microsoft's=@Src|js|rdnd}tjd|d|S)a Return key in Microsoft software registry. Parameters ---------- key: str Registry key path where look. x86: bool Force x86 software registry. Return ------ str Registry key r Wow6432NodeSoftware Microsoft)rNr7rTrUrV)r(rlr1node64s rrozRegistryInfo.microsoft)s? w--//I3IMw||J SAAArname str | Nonec 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 | None value NrT) rKEY_READOpenKeyCloseKeyroHKEYSOSErrorrNr7 QueryValueEx) r(rlrvkey_readopenkeyclosekeymshkeybkeys rlookupzRegistryInfo.lookup<s ?.? ^J # #DD wtRRWWa::   w--//!&wtRRT]]AxHH"!!! !H   #*466q9#HTNNNNNN###    #HTNNN#HTNNNN#tsYA#B#4B  B# BB#BB#"B#'C C!C3 C!!C33DN)rKrr!r")r!r rE)rlr r1r/r!r )rlr r1r/r!r )rlr rvr r!rw)rrrrFrrrrrr|r)rHrQrWr[r_rarcrfrirkrrorrrrrJrJs  !  E       X  6 6 6X 6 - - -X - - - -X - % % %X %    X   ; ; ;X ; < < <X < / / /X /TTTTXT @@@@X@BBBBB&''''''rrJcFeZdZdZejddZejddZejdeZ d.d/d Z dZ d0dZ d1dZ e dZed2dZed2dZdZdZed3dZed2dZed2dZed4dZed2dZed4d Zed2d!Zed3d"Zed4d#Zed2d$Zed2d%Zed5d'Zed5d(Z d5d)Z!e d6d7d-Z"dS)8 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)N registry_inforJvc_ver float | Noner!r"c||_|jj|_||_|p|x|_|_dSrM)rirNfind_programdata_vs_versknown_vs_paths_find_latest_available_vs_vervs_verr)r(rrs rr)zSystemInfo.__init__xsO '*";;==%+$Rd.P.P.R.RR dkkkrc|}|s&|jstjdt |}||jt|S)zm Find the latest VC version Return ------ float version z%No Microsoft Visual C++ version found)find_reg_vs_versr distutilserrorsDistutilsPlatformErrorsetupdatemax)r( reg_vc_versvc_verss rrz(SystemInfo._find_latest_available_vs_versu++--  t2 "997 k""t*+++7||r list[float]c |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)rror[rar_ itertoolsproductr|rrzryr} QueryInfoKeyrange contextlibsuppress ValueErrorfloat EnumValueappendEnumKeysorted) r(rvckeysvs_versrrlrsubkeysvaluesr+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)rrVsplit)versions rrzSystemInfo._as_float_versions3SXXgmmC00!455666rr ctj|jd|jd}|j|jj|jdp|S)zp Microsoft Visual Studio directory. Return ------ str path Microsoft Visual Studio 0.1f)rTrUrVProgramFilesx86rrrr_)r(defaults r VSInstallDirzSystemInfo.VSInstallDirsX',,  "OT["O"O"O   w~~dgjT[*?*?@@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_legacyrTrUisdirrrr)r(rUmsgs 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 ,@rr) rrrrrTrUrVrrrr} IndexError)r(vs_dirguess_vcrs rrzSystemInfo._guess_vcs ;$  2 '(5FF ' ' '&FFF '7<<(899 Z))"-F0088DK7<<&11 1$   22 s"66AB..CCctj|jd|jdd}tj|jj|jd}|j|d}|r tj|dn|}|j|jj|jdp|S)z{ Locate Visual C++ for versions prior to 2017. Return ------ str path rrz\VC installdirVC) rTrUrVrrrrarr[)r(rreg_path python_vc default_vcs rrzSystemInfo._guess_vc_legacy3s',,  = = = = =   7<< 5$+7L7LMMGNN8\:: 6?LRW\\)T222W w~~dgjT[*?*?@@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.WindowsSdkVersionIsd ;#  '' [D  = [D  = [D  = [D  =rrcr|tj|jdS)zt Microsoft Windows SDK last version. Return ------ str version lib)_use_last_dir_namerTrUrV WindowsSdkDirr-s rWindowsSdkLastVersionz SystemInfo.WindowsSdkLastVersion_s+&&rw||D4F'N'NOOOrc4d}|jD]N}tj|jjd|}|j|d}|rnO|rtj|sntj|jj|j d}|j|d}|r tj|d}|rtj|sr|jD]j}|d| d}d |}tj|j |}tj|r|}k|rtj|sU|jD]M}d |}tj|j |}tj|r|}N|s%tj|j d }|S) zn Microsoft Windows SDK directory. Return ------ str path rvinstallationfolderrrWinSDKNrzMicrosoft SDKs\Windows Kits\zMicrosoft SDKs\Windows\v PlatformSDK) rrTrUrVrrfrrrarrfindrr)r(sdkdirrlocrU install_baseintverds rrzSystemInfo.WindowsSdkDirks )  C',,tw2III>>CW^^C)=>>F   >RW]]622 >7<< 5$+7L7LMMD7>>$ ==L >lH== RW]]622 -  -syy~~-.?v??GLL!2D997==##F RW]]622 -  8388GLL!2D997==##F DW\\$"3]CCF rrwc |jdkrd}d}nAd}|jdkrdnd}|jd|d d }d |d |}g}|jd kr9|jD]1}|t j|jj ||gz }2|j D]5}|t j|jj d|d|gz }6|D]#}|j |d}|r|cS$dS)z Microsoft Windows SDK executable directory. Return ------ str | None path r#r(rTF)r$r<r:-z WinSDK-NetFxToolsrrArN) rrNr=r'NetFxSdkVersionrTrUrVrrirrfr) r(netfxverrr<fxregpathsrrUexecpaths rWindowsSDKExecutablePathz#SystemInfo.WindowsSDKExecutablePathsK ;$  HDDH"kT11dduG7&&4&AAII$PSTTD 1H 1 14 1 1 ;$  + G GRW\\$'*;S"EEFF) L LC dg&9:s:::rJJK KHH  Dw~~d,@AAH  trctj|jj|jdd}|j|dpdS)zl Microsoft Visual F# directory. Return ------ str path rz \Setup\F# productdirr)rTrUrVrrQrr)r(rUs rFSharpInstallDirzSystemInfo.FSharpInstallDirsGw||DG0dk2Q2Q2Q2QRRw~~dL117R7rc|jdkrdnd}|D]0}|j|jjd|}|r|cS1dS)z{ Microsoft Universal CRT SDK directory. Return ------ str | None path r)1081rkitsrootN)rrrrk)r(versrrs rUniversalCRTSdkDirzSystemInfo.UniversalCRTSdkDirsj ${d22||  CW^^DG$>@P3@P@PQQF   trc |tj|jdS#t $r}t j|dd}~wwxYw)z Microsoft Universal C Runtime SDK last version. Return ------ str version rCannot find UniversalCRTSdkDirN)rrTrUrVr TypeErrorr add_note)r(exs rUniversalCRTSdkLastVersionz%SystemInfo.UniversalCRTSdkLastVersionsd **27<<8OQV+W+WXX X    N2? @ @ @  s7: AAAc |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)z| Microsoft .NET Framework SDK directory. Return ------ str | None path rkitsinstallationfolder)rrTrUrVrrir)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\Frameworkframeworkdir32rTrUrVrrrr[r(guess_fws rFrameworkDir32zSystemInfo.FrameworkDir32s>7<< -GHHw~~dgj*:;;GxGrctj|jd}|j|jjdp|S)zw Microsoft .NET Framework 64bit directory. Return ------ str path zMicrosoft.NET\Framework64frameworkdir64rrs rFrameworkDir64zSystemInfo.FrameworkDir64 s>7<< -IJJw~~dgj*:;;GxGrtuple[str, ...]c,|dS)z Microsoft .NET Framework 32bit versions. Return ------ tuple of str versions _find_dot_net_versionsr-s rFrameworkVersion32zSystemInfo.FrameworkVersion320**2...rc,|dS)z Microsoft .NET Framework 64bit versions. Return ------ tuple of str versions @r&r-s rFrameworkVersion64zSystemInfo.FrameworkVersion64<r)rcd|j|jjd|}t|d|}|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 frameworkver FrameworkDirrrrzv4.0rNrv4z v4.0.30319v3.5r)r1 v2.0.50727g @)zv3.0r2r)rrr[getattrrrr&)r(bitsreg_ver dot_net_dirrs rr'z!SystemInfo._find_dot_net_versionsHs'..-BD-B-BCCd$94$9$9:: H00cBBHb ;$  ;  [D #&99;;rr?d#:#:<<VK K [C  '' [C  ''rrrUr prefixcfdttjD}t|dS)a- Return name of the last dir in path or '' if no dir found. Parameters ---------- path: StrPath Use dirs in this path prefix: str Use only dirs starting by this prefix Return ------ str name c3K|]X}tjtj|?|T|VYdSrM)rTrUrrV startswith).0dir_namerUr7s r z0SystemInfo._use_last_dir_name..wss  w}}RW\\$99:: ##F++        rr)reversedrTrnext)rUr7 matching_dirss`` rrzSystemInfo._use_last_dir_namefsU"     $RZ%5%566   M2&&&rrM)rrJrrr!r")r!r)r!rrD)r!rr!rw)r!r#)r)rUr r7r r!r )#rrrrFrrGrrrr)rrr staticmethodrrHrrrrrrrrr rrrrrr"r(r,r'rrrrrrfs  W[2 & &F7;~r22L!gk"5|DDOCG S S S S S(>((((T77\7 LLLXL"X"<OOO,X* P P PX P(((X(T"""X"H 8 8 8X 8X(   X    X X" H H HX H H H HX H / / /X / / / /X /<''''\'''rrcBeZdZUded<ded<ded<ded<ded<dS) _EnvironmentDictr includerlibpathrUzNotRequired[str | None]py_vcruntime_redistN)rrr__annotations__rrrrDrDsBLLL HHHLLL III000000rrDcLeZdZdZd)d*dZedZedZed Zed Z ed Z ed Z ed Z edZ edZedZedZdZed+dZedZedZedZedZedZedZedZed,dZed,dZed+dZed Zed-d"Zd.d/d'Zd(Z dS)0EnvironmentInfoaY 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. Nrr!r"ct||_t|j|_t |j||_|j|kr!d}tj |dS)Nz.No suitable Microsoft Visual C++ version found) rrNrJrrsirrrr)r(rr vc_min_vererrs rr)zEnvironmentInfo.__init__sft$$tw''TWf-- ; # #BC"99#>> > $ #rc|jjS)zk Microsoft Visual Studio. Return ------ float version )rLrr-s rrzEnvironmentInfo.vs_verw~rc|jjS)zp Microsoft Visual C++ version. Return ------ float version )rLrr-s rrzEnvironmentInfo.vc_verrPrcddg}jdkr1jdd}|dgz }|dgz }|d|gz }fd|DS) zu Microsoft Visual Studio Tools. Return ------ list of str paths z Common7\IDEz Common7\ToolsrTr<r$z1Common7\IDE\CommonExtensions\Microsoft\TestWindowzTeam Tools\Performance Toolscdg|],}tjjj|-SrrTrUrVrLrr;rUr(s r z+EnvironmentInfo.VSTools...KKKT TW1488KKKr)rrNr=)r(paths arch_subdirs` rVSToolszEnvironmentInfo.VSToolss !12 ;$  '--d-EEK JK KE 56 6E CkCCD DEKKKKUKKKKrctj|jjdtj|jjdgS)z Microsoft Visual C++ & Microsoft Foundation Class Includes. Return ------ list of str paths IncludezATLMFC\IncluderTrUrVrLrr-s r VCIncludeszEnvironmentInfo.VCIncludess? GLL-y 9 9 GLL-/@ A A  rcjdkrjd}njd}d|d|g}jdkr |d|gz }fd |DS) z Microsoft Visual C++ & Microsoft Foundation Class Libraries. Return ------ list of str paths .@Tr$r<Libz ATLMFC\Librz Lib\storecdg|],}tjjj|-Srr^rVs rrWz/EnvironmentInfo.VCLibraries..rXr)rrNr?)r(rZrYs` r VCLibrarieszEnvironmentInfo.VCLibrariess ;$  ',,,66KK',,T,::K${$$&AK&A&AB ;$   0;001 1EKKKKUKKKKrcr|jdkrgStj|jjdgS)z Microsoft Visual C++ store references Libraries. Return ------ list of str paths rzLib\store\references)rrTrUrVrLrr-s r VCStoreRefszEnvironmentInfo.VCStoreRefss5 ;  I TW13JKKLLrc|j}tj|jdg}|jdkrdnd}|j|}|r,|tj|jd|gz }|jdkrId|jd}|tj|j|gz }n/|jdkr|jj d d  }tjd d |d }|tj|j||j dzgz }|jj |jj krE|tj|j||jdzgz }n)|tj|jdgz }|S)a Microsoft Visual C++ Tools. Return ------ list of str paths When host CPU is ARM, the tools should be found for ARM. >>> getfixture('windows_only') >>> mp = getfixture('monkeypatch') >>> mp.setattr(PlatformInfo, 'current_cpu', 'arm64') >>> ei = EnvironmentInfo(arch='irrelevant') >>> paths = ei.VCTools >>> any('HostARM64' in path for path in paths) True VCPackagesrTFBinrrcrar%r$binHostz%srb)rLrTrUrVrrrNrCr=r6r'upperr?r.)r(rLtoolsrArZrUhost_idhost_dirs rVCToolszEnvironmentInfo.VCToolss(Wbo|<<=;$..44Eg''11  J bgll2?4G+4G4GHHI IE ;$  <,,T,::<> > > >w%%'' <'--$-77K&&&D',,tw4d;; ; ; ; ;, & &w$$&& J "g11$D1II 7+77D',,tw4d;; ; ; ; ; [D 7<< 5u==D'--$-77KW2F',,t%= %=%=>> > > > 7 + 3'2 2 2 2 2 2 3 3rr c,|jj}|r|dndS)zu Microsoft Windows SDK version subdir. Return ------ str subdir r:r)rLrr(ucrtvers rruzEnvironmentInfo._sdk_subdirs#'/#*272rcr|jdkrgStj|jjdgS)zs Microsoft Windows SDK Setup. Return ------ list of str paths rSetup)rrTrUrVrLrr-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 rTr%cZg|]'}tjj|(Sr)rTrUrVrr;rrLs rrWz+EnvironmentInfo.FxTools..99< R.44rcZg|]'}tjj|(Sr)rTrUrVr"rs rrWz+EnvironmentInfo.FxTools..rr) rNrLrr3r7r6r.r(r,)r(rN include32 include64rorLs @rFxToolszEnvironmentInfo.FxToolss W W ;$  I,,...Jr7H7H7J7J3JII((**Ab.?.?.A.AI'1MR]g5MI   @B@U E   @B@U E rc|jdks |jjsgS|jd}t j|jjd|gS)z~ Microsoft .Net Framework SDK Libraries. Return ------ list of str paths rTrbzlib\um)rrLrrNr?rTrUrV)r(rZs rNetFxSDKLibrariesz!EnvironmentInfo.NetFxSDKLibrariess_ ;  TW%8 Ig((T(22  TW02IK2I2IJJKKrc|jdks |jjsgStj|jjdgS)z} Microsoft .Net Framework SDK Includes. Return ------ list of str paths rz include\um)rrLrrTrUrVr-s rNetFxSDKIncludesz EnvironmentInfo.NetFxSDKIncludes s> ;  TW%8 I TW0-@@AArcXtj|jjdgS)z Microsoft Visual Studio Team System Database. Return ------ list of str paths z VSTSDB\DeployrUr-s rVsTDbzEnvironmentInfo.VsTDbs# TW13CDDEErc`|jdkrgS|jdkr(|jj}|jd}n|jj}d}d|jdd|}t j||g}|jdkr%|t j||d gz }|S) zn Microsoft Build Engine. Return ------ list of str paths rraTrcrzMSBuild\rz\binRoslyn) rrLrrNr=rrTrUrV)r( base_pathrZrUbuilds rMSBuildzEnvironmentInfo.MSBuild%s ;  I [4  /I'--d-;;KK,IK>4;>>>>>i../ ;$   bgll9dH==> >E rcr|jdkrgStj|jjdgS)zt Microsoft HTML Help Workshop. Return ------ list of str paths rzHTML Help Workshop)rrTrUrVrLrr-s rHTMLHelpWorkshopz EnvironmentInfo.HTMLHelpWorkshopAs5 ;  I TW46JKKLLr list[str]cT|jdkrgS|jd} tj|jjd}n(#t$r}tj |dd}~wwxYw|j }tj||d|gS)z Microsoft Universal C Runtime SDK Libraries. Return ------ list of str paths rTrbrrNucrt) rrNr?rTrUrVrLrrr r _ucrt_subdir)r(rZrrrs r UCRTLibrarieszEnvironmentInfo.UCRTLibrariesPs ;  Ig((T(22  ',,tw95AACC    N2? @ @ @  # SW"?"?+"?"?@@AAs*A A:A55A:c|jdkrgS tj|jjd}n(#t $r}tj|dd}~wwxYwtj||j dgS)z Microsoft Universal C Runtime SDK Include. Return ------ list of str paths rrErNr) rrTrUrVrLrrr rr)r(rErs r UCRTIncludeszEnvironmentInfo.UCRTIncludesfs ;  I gll47#=yIIGG    N2? @ @ @   W):&@&@&@AABBs*: AAAc,|jj}|r|dndS)z Microsoft Universal C Runtime SDK version subdir. Return ------ str subdir r:r)rLrrs rrzEnvironmentInfo._ucrt_subdirzs#'4#*272rcJd|jcxkrdkrnngS|jjgS)zk Microsoft Visual F#. Return ------ list of str paths rr)rrLr r-s rFSharpzEnvironmentInfo.FSharps; $+ $ $ $ $ $ $ $ $ $I())rrwc*d|jd|jddg}|jj}t j| dd}t j |r]t j |t j |d}||t j |d gz }|t j |d gz }d |jd zd d t|jd zd f}fdtj||D}t#t%t jj|dS)z{ Microsoft Visual C++ runtime redistributable dll. Returns the first suitable path found or None. vcruntimez0.dllTrbr:z\Toolsz\Redistronecoreredistz Microsoft.VC z.CRTc3bK|])\}}tj||V*dSrM)rTrUrV)r;r7crt_dirrZrs rr=z2EnvironmentInfo.VCRuntimeRedist..sO  ! GLLgy A A      rN)rrNr?striprLrrTrUdirnamer'rrVrintrrrr?filterisfile)r(prefixes tools_path redist_pathcrt_dirscandidate_pathsrZrs @@rVCRuntimeRedistzEnvironmentInfo.VCRuntimeRedists~3 222 g((T(2288>> W) gooj&8&8J&O&OPP 7== % % L',,{BJ{4K4KB4OPPK bgll; &J&JK KHRW\\*h7788 24;+ 1 1 1 63t{++b0 6 6 6      %.%6x%J%J   F27>?;;TBBBrTexistsr/rDct|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 rErrFrU)rErrFrUrG)rD _build_pathsr_r}rrrfrwrrrrhrrrr[rrrrrrrr)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|}|s6| d}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 environment variable is empty)rchain from_iterablerrGrrTpathseprrrUrrnrrrrrV) r(rvspec_path_listsr spec_paths env_pathsrY extant_pathsr unique_pathss rrzEnvironmentInfo._build_pathss._22?CC Kb))// ;;  I66=CNtF27=%88999  ?ZZ\\AAAC"99#>> >&|44 z|,,,r)Nr)r!r"rD)r!rrA)T)rr/r!rD)!rrrrFr)rHrrr[r_rfrhrrrwr}rrrrurrrrrrrrrrrrrrrrrrJrJs8.?????  X   X LLXL&   X  LLXL( M MX M00X0dCCXC&X2%%X%N ' 'X '!3!3!3F 3 3 3X 3 > >X >X< L LX L B BX B F FX FX6 M MX MBBBXB*CCCXC& 3 3 3X 3 * *X * C C CX CD;;;;;z-----rrJ)"rF __future__rrrrrTos.pathplatformtypingrrrmore_itertoolsr_pathr compatr distutils.errorsrtyping_extensionsr r systemrrdictrHrrJrrDrJrrrrsZ#""""" 5555555555******=<<<<<<<< %**i77MMM!!!!!!!! #dffG$$$$v v v v v v v v r~~~~~~~~BW'W'W'W'W'W'W'W't11111y111M -M -M -M -M -M -M -M -M -M -r