K iRUdZddlmZddlZddlZddlZddlZddlZddlZddl m Z m Z ddl m Z ddlZe rddlmZmZe sej&dk(r ddlZddlmZnGd d ZeZd ed <Gd dZGddZGddZGdde ZGddZy)zo Environment info about Microsoft Compilers. >>> getfixture('windows_only') >>> ei = EnvironmentInfo('amd64') ) annotationsN) TYPE_CHECKING TypedDict)unique_everseen) LiteralString NotRequiredWindows)environceZdZdZdZdZdZy)winregN)__name__ __module__ __qualname__ HKEY_USERSHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_CLASSES_ROOTU/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/setuptools/msvc.pyr r s  ! rr zdict[str, str]r ceZdZdZej ddj Zd dZe dZ dZ dZ d ddZ d dd Zdd Zy ) PlatformInfoz Current and Target Architectures information. Parameters ---------- arch: str Target architecture. processor_architecturecN|jjdd|_y)Nx64amd64)lowerreplacearch)selfr s r__init__zPlatformInfo.__init__5sJJL((8 rcX|j|jjddzdS)zs Return Target CPU architecture. Return ------ str Target CPU _N)r findr!s r target_cpuzPlatformInfo.target_cpu8s(yy,q0233rc |jdk(S)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 |jdk(S)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((rcl|jdk(r|rdS|jdk(r|rdSd|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*rr\x64\r.r!hidex86rs r current_dirzPlatformInfo.current_dirZsR$  E)g    G+ d&&'(  rcl|jdk(r|rdS|jdk(r|rdSd|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*rrr2r3r+r4s r target_dirzPlatformInfo.target_dirrsL$5(W  7*s doo&'  rc|rdn |j}|j|k(rdS|jjdd|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. r*rr3r$)r/r(r8r)r!forcex86currents r cross_dirzPlatformInfo.cross_dirsQ $%)9)9')  "**42gYaA rNreturnNone)FFr>strF)r rr__doc__r getrr/r"propertyr(r,r0r6r8r<rrrrr)sW'++6;AACK9 4 4 ( ) 0 0 rrceZdZdZej ej ejejfZ ddZ e ddZ e dZ e dZe dZe ddZe ddZe d Ze d Ze dd Zdd Zd Zy) RegistryInfoz Microsoft Visual Studio related registry information. Parameters ---------- platform_info: PlatformInfo "PlatformInfo" instance. c||_yN)pi)r! platform_infos rr"zRegistryInfo.__init__s rcy)z Microsoft Visual Studio root registry key. Return ------ str Registry key VisualStudiorr's r visualstudiozRegistryInfo.visualstudiosrcVtjj|jdS)z Microsoft Visual Studio SxS registry key. Return ------ str Registry key SxS)ospathjoinrNr's rsxszRegistryInfo.sxssww||D--u55rcVtjj|jdS)z| Microsoft Visual C++ VC7 registry key. Return ------ str Registry key VC7rQrRrSrTr's rvczRegistryInfo.vcww||DHHe,,rcVtjj|jdS)z Microsoft Visual Studio VS7 registry key. Return ------ str Registry key VS7rWr's rvszRegistryInfo.vsrYrcy)z Microsoft Visual C++ for Python registry key. Return ------ str Registry key zDevDiv\VCForPythonrr's r vc_for_pythonzRegistryInfo.vc_for_pythons%rcy)zq Microsoft SDK registry key. Return ------ str Registry key zMicrosoft SDKsrr's r microsoft_sdkzRegistryInfo.microsoft_sdks rcVtjj|jdS)z Microsoft Windows/Platform SDK registry key. Return ------ str Registry key r rQrRrSr`r's r windows_sdkzRegistryInfo.windows_sdksww||D.. ::rcVtjj|jdS)z Microsoft .NET Framework SDK registry key. Return ------ str Registry key NETFXSDKrbr's r netfx_sdkzRegistryInfo.netfx_sdk sww||D.. ;;rcy)z Microsoft Windows Kits Roots registry key. Return ------ str Registry key zWindows Kits\Installed Rootsrr's rwindows_kits_rootszRegistryInfo.windows_kits_rootss/rc|jjs|rdnd}tjj d|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)rJr0rQrRrS)r!keyr*node64s r microsoftzRegistryInfo.microsoft"s5 ww--/3Mww||J SAArc  tj}tj}tj}|j}|j D]>}d} ||||d|} tj||d|r ||cScSy#t $rC|jjs$ ||||dd|}n#t $rYYwxYwYYvwxYw#t $rYnwxYw |s||#|r ||wwxYw)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_READOpenKeyCloseKeyroHKEYSOSErrorrJr0 QueryValueEx) r!rmnamekey_readopenkeyclosekeymshkeybkeys rlookupzRegistryInfo.lookup5s ??..?? ^^JJ #DD tRWa: #**46q9TN# #& ww--/!&tRT]AxH"! !    TNTNsZB !C #C/CC C CCCC C&#C6%C&&C66 DNr=r@rB)r rrrCr rrrrrtr"rErNrTrXr\r^r`rcrfrhror~rrrrGrGs   !!   E    6 6 - - - - % %     ; ; < < / /B&'rrGceZdZdZej ddZej ddZej deZdd dZ dZ d Z d!d Z e d Zed Zed ZdZdZed"dZedZed#dZedZedZedZedZedZedZedZedZed$dZed$dZ d$dZ!e d%dZ"y)& 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)Nc||_|jj|_|j|_|xs|j x|_|_yrI)rirJfind_programdata_vs_versknown_vs_paths_find_latest_available_vs_vervs_vervc_ver)r! registry_infors rr"zSystemInfo.__init__qsG''**";;=%+$Rd.P.P.RR dkrc|j}|s+|jstjj dt |}|j |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_verzsf++- t22""997 k"t**+gr""rc |jj}|jj|jj|jjf}g}t j |jj|D]'\}} tj|||dtj}|5tj|\}}} t|D][} tjt 5t#tj$|| d} | |vr|j'| ddd]t|D]X} tjt 5t#tj(|| } | |vr|j'| dddZ ddd*t+|S#t$rYBwxYw#1swYxYw#1swYxYw#1swYhxYw)z Find Microsoft Visual Studio versions available in registry. Return ------ list of float Versions rN)rrorXr^r\ itertoolsproductrtr rrrqru QueryInfoKeyrange contextlibsuppress ValueErrorfloat EnumValueappendEnumKeyr) r!r{vckeysvs_versr|rmr}subkeysvaluesr$ivers rrzSystemInfo.find_reg_vs_verssWW  ''**dgg33TWWZZ@"**477==&A 0ID# ~~dBsGQH 0%+%8%8%>"v0A#,,Z80#F$4$4T1$=a$@Ag-#NN3/000 w0A#,,Z80#FNN4$;<g-#NN3/000 0 0  0"g   00 00 0 0sO ,F::AG";8G 31G"$5G  G": GG G G"G G""G, ci}d} tj|}|D]} tjj ||d}t |dd5}t j|}dddd}tjtjj |d|||j|d <|S#t$r|cYSwxYw#1swYmxYw#ttf$rYwxYw) 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.jsonrtzutf-8)encodingNinstallationPath VC\Tools\MSVCinstallationVersion) rQlistdirrurRrSopenjsonload_as_float_versionKeyError) r! vs_versions instances_dir hashed_namesrw state_path state_filestatevs_paths rrz#SystemInfo.find_programdata_vs_verss)+ T  ::m4L ! D WW\\-|L *dW=2 IIj1E2 23 277<<1ABCD2259N3OPQ (1   22X&  s;C/CC&AC CCC CC0/C0cZtdj|jdddS)z Return a string version as a simplified float version (major.minor) Parameters ---------- version: str Version. Return ------ float version .N)rrSsplit)versions rrzSystemInfo._as_float_versions(SXXgmmC0!4566rctjj|jd|jd}|j j |j j|jdxs|S)zp Microsoft Visual Studio directory. Return ------ str path Microsoft Visual Studio 0.1f)rQrRrSProgramFilesx86rrr~r\)r!defaults r VSInstallDirzSystemInfo.VSInstallDirs]'',,  $@KGKrc|jxs|j}tjj |s!d}t j j||S)zm Microsoft Visual C++ directory. Return ------ str path z(Microsoft Visual C++ directory not found) _guess_vc_guess_vc_legacyrQrRisdirrrr)r!rRmsgs r VCInstallDirzSystemInfo.VCInstallDirsO~~:4#8#8#:ww}}T" > rc|jdkry |j|j}tj j |d} t j|d}|j||_ tj j ||S#t$r|j}YwxYw#ttf$rYywxYw)zl Locate Visual C++ for VS2017+. Return ------ str path ,@rrr) rrrrrQrRrSrrrru IndexError)r!vs_dirguess_vcrs rrzSystemInfo._guess_vc s ;;$  '((5F 77<<(89 ZZ)"-F008DK77<<&1 1 '&&F '$  s$B A B5B21B25CCctjj|jd|jdd}tjj|j j |jd}|j j|d}|r tjj|dn|}|j j|j j|jdxs|S)z{ Locate Visual C++ for versions prior to 2017. Return ------ str path rrz\VC installdirVC) rQrRrSrrrr^r~rX)r!rreg_path python_vc default_vcs rrzSystemInfo._guess_vc_legacy*s'',,  ' D'9 =  77<< 5 5$++d9KMGGNN8\: 6?RWW\\)T2W ww~~dggjjT[[,>@NJNrc|jdkry|jdk(ry|jdk(ry|jdk(ry|jd k\ry y ) 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@sR ;;# ' [[D  [[D  [[D  [[D  rct|jtjj|jdS)zt Microsoft Windows SDK last version. Return ------ str version lib)_use_last_dir_namerQrRrS WindowsSdkDirr's rWindowsSdkLastVersionz SystemInfo.WindowsSdkLastVersionVs*&&rww||D4F4F'NOOrcd}|jD]Y}tjj|jj d|}|jj |d}|sYn|rtjj|s~tjj|jj|jd}|jj |d}|r tjj|d}|rtjj|sv|jD]g}|d|jd}d |}tjj|j|}tjj|sf|}i|rtjj|sb|jD]S}d |}tjj|j|}tjj|sR|}U|s*tjj|jd }|S) zn Microsoft Windows SDK directory. Return ------ str path rvinstallationfolderrrWinSDKNrzMicrosoft SDKs\Windows Kits\zMicrosoft SDKs\Windows\v PlatformSDK) rrQrRrSrrcr~rr^rrfindrr)r!sdkdirrlocrR install_baseintverds rrzSystemInfo.WindowsSdkDirbs )) C'',,tww22auI>CWW^^C)=>F   RWW]]6277<< 5 5$++d9KMD77>>$ =LlH=RWW]]62-- -syy~.6vh?GGLL!2!2D977==#F   RWW]]62-- 23%8GGLL!2!2D977==#F   WW\\$"3"3]CF rcd|jdkrd}d}nBd}|jdkrdnd}|jjd|jd d }d |d |}g}|jd k\rJ|jD];}|t j j|jj||gz }=|jD]?}|t j j|jjd|d|gz }A|D]$}|jj|d}|s"|cSy)zy Microsoft Windows SDK executable directory. Return ------ str path r#r(rTF)rr5r3-z WinSDK-NetFxToolsrrArN) rrJr6rNetFxSdkVersionrQrRrSrrfrrcr~) r!netfxverr r5fxregpathsrrRexecpaths rWindowsSDKExecutablePathz#SystemInfo.WindowsSDKExecutablePaths8 ;;$ HDH"kkT1duG77&&4&AII$PSTDH:U4& 1 ;;$ ++ GRWW\\$''*;*;S"EFF G)) LC dgg&9&9Qse1:rJK KH L Dww~~d,@AH rctjj|jj|j dd}|jj |dxsdS)zl Microsoft Visual F# directory. Return ------ str path rz \Setup\F# productdirr)rQrRrSrrNrr~)r!rRs rFSharpInstallDirzSystemInfo.FSharpInstallDirsJww||DGG00dkk$5Gy2QRww~~dL17R7rc|jdk\rdnd}|D]?}|jj|jjd|}|s9|xsdcSy)zt Microsoft Universal CRT SDK directory. Return ------ str path r)1081rkitsrootrN)rrr~rh)r!versrrs rUniversalCRTSdkDirzSystemInfo.UniversalCRTSdkDirs^ ${{d2| $CWW^^DGG$>$>(3%@PQF|# $ rct|jtjj|jdS)z Microsoft Universal C Runtime SDK last version. Return ------ str version r)rrQrRrSrr's rUniversalCRTSdkLastVersionz%SystemInfo.UniversalCRTSdkLastVersions*&&rww||D4K4KU'STTrc(|jdk\rdSdS)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  rcd}|jD]W}tjj|jj |}|jj |d}|sV|S|S)zu Microsoft .NET Framework SDK directory. Return ------ str path rkitsinstallationfolder)rrQrRrSrrfr~)r!rrrs r NetFxSdkDirzSystemInfo.NetFxSdkDirsc'' C'',,tww00#6CWW^^C)ABF    rctjj|jd}|jj |jj dxs|S)zw Microsoft .NET Framework 32bit directory. Return ------ str path zMicrosoft.NET\Frameworkframeworkdir32rQrRrSrrr~rXr!guess_fws rFrameworkDir32zSystemInfo.FrameworkDir32sB77<< -GHww~~dggjj*:;GxGrctjj|jd}|jj |jj dxs|S)zw Microsoft .NET Framework 64bit directory. Return ------ str path zMicrosoft.NET\Framework64frameworkdir64r r s rFrameworkDir64zSystemInfo.FrameworkDir64sB77<< -IJww~~dggjj*:;GxGrc$|jdS)z Microsoft .NET Framework 32bit versions. Return ------ tuple of str versions _find_dot_net_versionsr's rFrameworkVersion32zSystemInfo.FrameworkVersion32#**2..rc$|jdS)z Microsoft .NET Framework 64bit versions. Return ------ tuple of str versions @rr's rFrameworkVersion64zSystemInfo.FrameworkVersion64/rrc||jj|jjd|}t|d|}|xs|j |dxsd}|j dk\r|dfS|j dk\r|j dd d k7rd d fS|d fS|j d k(ry|j dk(ryy)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)r  v2.0.50727g @)zv3.0r!r)rr~rXgetattrrrr)r!bitsreg_ver dot_net_dirrs rrz!SystemInfo._find_dot_net_versions;s''..|D6-BCdl4&$9: H00cBHb ;;$ ;  [[D #&99;r?d#:z0SystemInfo._use_last_dir_name..jsF ww}}RWW\\$9:##F+  sAANr)reversedrQrnext)rRr+ matching_dirss`` rrzSystemInfo._use_last_dir_nameYs4" $RZZ%56 M4(.B.rrIr=)r>zdict[float, str])r>ztuple[LiteralString, ...]r>z str | None)r>ztuple[str, ...])r)#r rrrCr rDrrrr"rrr staticmethodrrErrrrrrrrrrrrr rrrrrrrrrrr_s W[[2 &F7;;~r2L!gkk"5|DOS#(>(T77 LL""<O,* P P((T""H 8 8( U U  " H H H H / / / /<//rrc@eZdZUded<ded<ded<ded<ded<y) _EnvironmentDictrAincluderlibpathrRzNotRequired[str | None]py_vcruntime_redistN)r rr__annotations__rrrr3r3ss L H L I00rr3ceZdZdZdd dZedZedZedZedZ edZ ed Z ed Z ed Z ed Zed ZedZdZedZedZedZedZedZedZedZedZedZedZedZedZed!dZd"d#dZdZ y)$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. Nct||_t|j|_t |j||_|j |kr!d}tjj|y)Nz.No suitable Microsoft Visual C++ version found) rrJrGrrsirrrr)r!r r vc_min_vererrs rr"zEnvironmentInfo.__init__s]t$tww'TWWf- ;; #BC""99#> > $rc.|jjS)zk Microsoft Visual Studio. Return ------ float version )r;rr's rrzEnvironmentInfo.vs_verww~~rc.|jjS)zp Microsoft Visual C++ version. Return ------ float version )r;rr's rrzEnvironmentInfo.vc_verr?rcddg}|jdk\r2|jjdd}|dgz }|dgz }|d|gz }|Dcgc]6}tjj |j j|8c}Scc}w)zu Microsoft Visual Studio Tools. Return ------ list of str paths z Common7\IDEz Common7\ToolsrTr5rz1Common7\IDE\CommonExtensions\Microsoft\TestWindowzTeam Tools\Performance Tools)rrJr6rQrRrSr;r)r!paths arch_subdirrRs rVSToolszEnvironmentInfo.VSToolss !12 ;;$ ''--d-EK JK KE 56 6E 5k]CD DEEJKT TWW1148KKKs ;Bctjj|jjdtjj|jjdgS)z Microsoft Visual C++ & Microsoft Foundation Class Includes. Return ------ list of str paths IncludezATLMFC\Include)rQrRrSr;rr's r VCIncludeszEnvironmentInfo.VCIncludessG GGLL--y 9 GGLL--/@ A  rcd|jdk\r|jjd}n|jjd}d|d|g}|jdk\r |d|gz }|Dcgc]6}tjj |j j|8c}Scc}w) z Microsoft Visual C++ & Microsoft Foundation Class Libraries. Return ------ list of str paths .@Trr5Libz ATLMFC\Librz Lib\store)rrJr8rQrRrSr;r)r!rDrCrRs r VCLibrarieszEnvironmentInfo.VCLibrariess ;;$ '',,,6K'',,T,:K{m$K=&AB ;;$  ;-01 1EEJKT TWW1148KKKs/;B-c|jdkrgStjj|jj dgS)z Microsoft Visual C++ store references Libraries. Return ------ list of str paths rzLib\store\references)rrQrRrSr;rr's r VCStoreRefszEnvironmentInfo.VCStoreRefss8 ;; I TWW113JKLLrc|j}tjj|jdg}|j dkrdnd}|j j|}|r1|tjj|jd|gz }|j dk(rOd|j jd}|tjj|j|gz }|S|j dk\r|j jjd d j}tjjd d |d }|tjj|j||j jdzgz }|j j|j jk7rK|tjj|j||j jdzgz }|S|tjj|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 VCPackagesrTFBinrrLrJrrbinHostz%srK)r;rQrRrSrrrJr<r6r/rupperr8r()r!r;toolsr:rDrRhost_idhost_dirs rVCToolszEnvironmentInfo.VCToolss(WWboo|<=;;$.4Egg''1  bggll2??c+4GHI IE ;;$ ,,T,:;H  R__h9K9KPT9K9U.UV Eww""dgg&8&88GGLLDGG4G4GD4G4Q)Q  bggll2??E:; ;E rc|jdkrU|jjdd}tjj |j jd|gS|jjd}tjj |j jd}|j}tjj ||d|gS)zw Microsoft Windows SDK Libraries. Return ------ list of str paths rTrBrMrKrum) rrJr8rQrRrSr;r _sdk_subdir)r!rDrlibvers r OSLibrarieszEnvironmentInfo.OSLibraries-s ;;$ '',,Tt,DKGGLL!6!6#k]8KLM M'',,,6K'',,tww44e >ww%%'''--$-7K &D'',,tww44d; ; ;;, &ww$$& "gg11$D1I )+7D'',,tww44d; ; [[D 77<< 5 5u=D''--$-7KWW22F'',,tx }%=> > 77 + +''22 2 ,sHHc@|jj}|r|dSdS)zu Microsoft Windows SDK version subdir. Return ------ str subdir r3r)r;rr!ucrtvers rr]zEnvironmentInfo._sdk_subdirs&''//#*7)222rc|jdkDrgStjj|jj dgS)zs Microsoft Windows SDK Setup. Return ------ list of str paths rSetup)rrQrRrSr;rr's rSdkSetupzEnvironmentInfo.SdkSetups7 ;; I TWW22G<==rcZ|j}|j}|jdkr'd}|j xr|j }nB|jxs|j }|j dk(xs|j dk(}g}|rE||jDcgc],}tjj|j|.c}z }|rE||jDcgc],}tjj|j|.c}z }|Scc}wcc}w)zv Microsoft .NET Framework Tools. Return ------ list of str paths rTr)rJr;rr,r0r/r(rrQrRrSrrr)r!rJr; include32 include64rWrs rFxToolszEnvironmentInfo.FxToolssWW WW ;;$ I,,..Jr7H7H7J3JI((*Ab.?.?.AI'1MR]]g5MI  @B@U@U9< R..4 E  @B@U@U9< R..4 E s $1D#+1D(c|jdks|jjsgS|jj d}t j j|jjd|gS)z~ Microsoft .Net Framework SDK Libraries. Return ------ list of str paths rTrKzlib\um)rr;r rJr8rQrRrS)r!rDs rNetFxSDKLibrariesz!EnvironmentInfo.NetFxSDKLibrariessa ;; TWW%8%8Igg((T(2  TWW00VK=2IJKKrc|jdks|jjsgStjj |jjdgS)z} Microsoft .Net Framework SDK Includes. Return ------ list of str paths rz include\um)rr;r rQrRrSr's rNetFxSDKIncludesz EnvironmentInfo.NetFxSDKIncludessC ;; TWW%8%8I TWW00-@AArcltjj|jjdgS)z Microsoft Visual Studio Team System Database. Return ------ list of str paths z VSTSDB\Deploy)rQrRrSr;rr's rVsTDbzEnvironmentInfo.VsTDb s' TWW113CDEErc|jdkrgS|jdkr3|jj}|jj d}n|jj }d}d|jdd|}t jj||g}|jdk\r%|t jj||d gz }|S) zn Microsoft Build Engine. Return ------ list of str paths rrJTrLrzMSBuild\rz\binRoslyn) rr;rrJr6rrQrRrS)r! base_pathrDrRbuilds rMSBuildzEnvironmentInfo.MSBuilds ;; I [[4 //I''--d-;K,,IK4;;t,D >i./ ;;$  bggll9dH=> >E rc|jdkrgStjj|jj dgS)zt Microsoft HTML Help Workshop. Return ------ list of str paths rzHTML Help Workshop)rrQrRrSr;rr's rHTMLHelpWorkshopz EnvironmentInfo.HTMLHelpWorkshop4s8 ;; I TWW446JKLLrc(|jdkrgS|jjd}tjj |j jd}|j}tjj ||d|gS)z Microsoft Universal C Runtime SDK Libraries. Return ------ list of str paths rTrKrucrt) rrJr8rQrRrSr;r _ucrt_subdir)r!rDrrvs r UCRTLibrarieszEnvironmentInfo.UCRTLibrariesCsx ;; Igg((T(2 ggll47755u=## SWIT+"?@AArc|jdkrgStjj|jj d}tjj||j dgS)z Microsoft Universal C Runtime SDK Include. Return ------ list of str paths rr4r)rrQrRrSr;rr)r!r4s r UCRTIncludeszEnvironmentInfo.UCRTIncludesUsY ;; I'',,tww999E W):):(;4&@ABBrc@|jj}|r|dSdS)z Microsoft Universal C Runtime SDK version subdir. Return ------ str subdir r3r)r;rrus rrzEnvironmentInfo._ucrt_subdires&''44#*7)222rc`d|jcxkDrdkDrgS|jjgS)zk Microsoft Visual F#. Return ------ list of str paths rr)rr;rr's rFSharpzEnvironmentInfo.FSharprs4 $++ $ $I %(())rc@d|jd|jjdjdg}|jj }t jj|jdd}t jj|r[t jj|t j|d}||t jj|d gz }|t jj|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.dllTrKr3z\Toolsz\Redistronecoreredistz Microsoft.VC z.CRTc3hK|])\}}tjj||+ywrI)rQrRrS)r)r+crt_dirrDrs rr,z2EnvironmentInfo.VCRuntimeRedist..s0 ! GGLLgy A s/2N)rrJr8stripr;rrQrRdirnamerrrSrintrrrr.filterisfile)r!prefixes tools_path redist_pathcrt_dirscandidate_pathsrDrs @@rVCRuntimeRedistzEnvironmentInfo.VCRuntimeRedistsN  }E2 gg((T(288> WW)) ggooj&8&8J&OP 77== %'',,{BJJ{4KB4OPK bggll; &JK KHRWW\\*h7884;;+,D 13t{{+b01 6  %.%6%6x%J F277>>?;TBBrct|jd|j|j|j|j g||jd|j |j|j|j|jg||jd|j |j|j|jg||jd|j|j|j|j |j"|j|j$|j&|j(g |}|j*dk\r|j,r|j,|d<|S)z Return environment dict. Parameters ---------- exists: bool It True, only return existing paths. Return ------ dict environment r4rr5rR)r4rr5rRr6)r3 _build_pathsrHrerrrNr_r}rrrPrmrZrErrqryrrrrr)r!existsenvs r return_envzEnvironmentInfo.return_envsR%%OOOO%%))   !!$$$$LL&&**  %%!!4<<1A1A4>>R ""LLLLJJMMMMLLLL))KK 7* V ;;" !5!5)-)=)=C% & rctjj|}tj|dj t j}tj||}|r-ttt jj|n|}|s2|jd}tjj|t!|} t jj#| 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_iterabler rDrrQpathseprorrRrrVrrrrrS) r!rwspec_path_listsr spec_paths env_pathsrC extant_pathsr unique_pathss rrzEnvironmentInfo._build_pathss.__22?C KKb)// ;  I6=CtF277==%89 ZZ\N"@AC""99#> >&|4 zz|,,r)Nrr=r0)T)rboolr>r3)!r rrrCr"rErrrErHrNrPrZr_rermrqrpr]ryr}rrrrrrrrrrrrrrrr9r9{s.?    LL&    LL( M M00dCC&2%%N ' '!3F 3 3 > >< L L B B F F6 M MBB" C C 3 3 * * C CD;z-rr9)rC __future__rrrrrQos.pathplatformtypingrrmore_itertoolsrdistutils.errorsrtyping_extensionsrrsystemr r dictr7rrGrr3r9rrrrs# +*<*i7!! #fG^$v v rzzzQ/Q/h1y1E -E -r