
    ǆi                       % S r SSKJr  SSKrSSKJrJr  SSKJrJ	r	J
r
Jr  SSKJr  SSKrSSKrSSKrSSKrSSKrSSKJr  SSKJr  \(       d   \R.                  " 5       S	:X  a  SSKrSS
KJr  O " S S5      r\" 5       rS\S'   S rS rSSSSS.rS rS r S r!S"S jr" " S S5      r# " S S5      r$ " S S5      r% " S  S!5      r&g)#a  
Improved support for Microsoft Visual C++ compilers.

Known supported compilers:
--------------------------
Microsoft Visual C++ 14.X:
    Microsoft Visual C++ Build Tools 2015 (x86, x64, arm)
    Microsoft Visual Studio Build Tools 2017 (x86, x64, arm, arm64)
    Microsoft Visual Studio Build Tools 2019 (x86, x64, arm, arm64)

This may also support compilers shipped with compatible Visual Studio versions.
    )annotationsN)listdirpathsep)joinisfileisdirdirname)CalledProcessError)TYPE_CHECKING)unique_everseenWindows)environc                  $    \ rS rSrSrSrSrSrSrg)winreg#   N )	__name__
__module____qualname____firstlineno__
HKEY_USERSHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_CLASSES_ROOT__static_attributes__r       _/home/dmtnaga/Documents/work/airagagent/rag_env/lib/python3.13/site-packages/setuptools/msvc.pyr   r   #   s    
 ! r   r   zdict[str, str]r   c                 f    [         R                  " [         R                  SS[         R                  [         R                  -  5      n SnSnU    [        R                  " 5        Ht  n [         R                  " X5      u  pEnU(       d  M&  U[         R                  :X  d  M<  [        U5      (       d  MN   [        [        U5      5      nUS:  d  Mk  Xq:  d  Mr  Xup!Mv     SSS5        X4$ ! [
         a     gf = f! [
         a       M)  f = f! [        [        4 a     M  f = f! , (       d  f       X4$ = f)0Python 3.8 "distutils/_msvccompiler.py" backportz'Software\Microsoft\VisualStudio\SxS\VC7r   NNN   )r   OpenKeyr   KEY_READKEY_WOW64_32KEYOSError	itertoolscount	EnumValueREG_SZr   intfloat
ValueError	TypeError)keybest_versionbest_dirivvc_dirvtversions           r   _msvc14_find_vc2015r6   ,   s   nn%%6OOf444	
 LH	"A & 0 0 82 qR6==(U6]]!%(mG b=W%;-4( # 
 !!%    
 #I.  
 !!s~   AC' D (C7D 
D  D 3D	D D D '
C43C47
DD DD 	DD DD  
D0c                    [         R                  " S5      =(       d    [         R                  " S5      n U (       d  gSnU H  n[        R                  " [        [
        [        5         [        R                  " [        U SSS5      SS	S
USSSS/	5      R                  SSS9R                  5       n[        USSS5      n[        U5      (       a  SU4sSSS5        s  $  SSS5        M     g! , (       d  f       M  = f)ad  Python 3.8 "distutils/_msvccompiler.py" backport

Returns "15, path" based on the result of invoking vswhere.exe
If no install is found, returns "None, None"

The version is returned to avoid unnecessarily changing the function
result. It may be ignored when the path is not None.

If vswhere.exe is not available, by definition, VS 2017 is not
installed.
ProgramFiles(x86)ProgramFilesr    )z1Microsoft.VisualStudio.Component.VC.Tools.x86.x64z)Microsoft.VisualStudio.Workload.WDExpresszMicrosoft Visual Studio	Installerzvswhere.exez-latestz-prereleasez	-requiresz	-propertyinstallationPathz	-products*mbcsstrict)encodingerrorsVC	AuxiliaryBuild   N)r   get
contextlibsuppressr
   r%   UnicodeDecodeError
subprocesscheck_outputr   decodestripr   )rootsuitable_components	componentpaths       r   _msvc14_find_vc2017rQ   J   s     ;;*+Jw{{>/JD
 )	  !3W>PQ''8+}U!&
) 
 9   dK9DT{{4x' RQ$ % RQ ). + RQs   'A)C**
C9	x86x64armarm64)rR   	x86_amd64x86_arm	x86_arm64c                   [        5       u  pSnU [        ;   a
  [        U    nO
SU ;   a  SOSnU(       a+  [        USSSSSUS	S
5	      n SSKnUR                  USS9S   nU(       d"  [        5       u  prU(       a  [        USUSS
5      nU(       d  g[        US5      n[        U5      (       d  gU(       a  [        U5      (       d  SnX4$ ! [        [
        [        4 a    Sn Nf = f)r   Namd64rS   rR   z..redistMSVCz**zMicrosoft.VC14*.CRTzvcruntime140.dllr   T)	recursivezMicrosoft.VC140.CRTr    zvcvarsall.bat)	rQ   PLAT_SPEC_TO_RUNTIMEr   globImportErrorr%   LookupErrorr6   r   )		plat_spec_r0   	vcruntimevcruntime_platvcredistr`   r/   	vcvarsalls	            r   _msvc14_find_vcvarsallri      s    %'KAI((-i8")Y"6E!

			(d	;B?I !4!6%"I X/I)F9--	1 Wk2 	I	s   C	 	C#"C#c                   S[         ;   a9  [         R                  " 5        VVs0 s H  u  pUR                  5       U_M     snn$ [        U 5      u  p4U(       d  [        R
                  R                  S5      e [        R                  " SR                  X05      [        R                  S9R                  SSS9nS
 UR                  5        5        VVVs0 s H)  u  pnU(       d  M  U(       d  M  UR                  5       U_M+     nnnnU(       a  XHS'   U$ s  snnf ! [        R                   a>  n[        R
                  R                  SR                  UR                  5      5      UeS	nAff = fs  snnnf )r   DISTUTILS_USE_SDKzUnable to find vcvarsall.batzcmd /u /c "{}" {} && set)stderrzutf-16lereplace)r@   zError executing {}Nc              3  B   #    U  H  oR                  S 5      v   M     g7f)=N)	partition).0lines     r   	<genexpr>%_msvc14_get_vc_env.<locals>.<genexpr>   s     O>NdnnS11>Ns   py_vcruntime_redist)r   itemslowerri   	distutilsr@   DistutilsPlatformErrorrI   rJ   formatSTDOUTrK   r
   cmd
splitlines)	rc   r.   valuerh   re   outexcrd   envs	            r   _msvc14_get_vc_envr      sG   g%5<]]_E_zs		U"_EE1)<I556TUU%%&--iC$$
 &I&
. 	 Pcnn>NOOMCE 	 			UO   %.!"J1 F (( 55 ''0
	
s0   D8A D E/%E/.E/E,.9E''E,c                     [        U 5      $ ! [        R                  R                   a  n[	        US5        e SnAff = f)z
Patched "distutils._msvccompiler._get_vc_env" for support extra
Microsoft Visual C++ 14.X compilers.

Set environment without use of "vcvarsall.bat".

Parameters
----------
plat_spec: str
    Target architecture.

Return
------
dict
    environment
      ,@N)r   rx   r@   ry   _augment_exception)rc   r   s     r   msvc14_get_vc_envr      s;    &!),,22 3%s   
 =8=c                d   U R                   S   nSUR                  5       ;   d  SUR                  5       ;   aq  SnUR                  " S0 [        5       D6nSnUS:X  a/  UR                  5       R	                  S5      S:  a  US	-  nO$US
-  nOUS:X  a  US-  nX5S-  -  nOUS:  a  US-  nU4U l         g)z`
Add details to the exception message to help guide the user
as to what action will resolve it.
r   rh   zvisual cz;Microsoft Visual C++ {version:0.1f} or greater is required.z-www.microsoft.com/download/details.aspx?id=%d      "@ia64r^   z( 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   r   zd Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/Nr   )argsrw   rz   localsfind)r   r5   archmessagetmpl
msdownloads         r   r   r      s     hhqkGgmmo%w}})FL++))D
c>zz|  (2- EE
 BB_CCGD((G_,G zCHr   c                      \ rS rSrSr\R                  " SS5      R                  5       rS r	\
S 5       rS rS rSS	 jrSS
 jrSS jrSrg)PlatformInfoi  zi
Current and Target Architectures information.

Parameters
----------
arch: str
    Target architecture.
processor_architecture c                N    UR                  5       R                  SS5      U l        g )NrS   rZ   )rw   rm   r   )selfr   s     r   __init__PlatformInfo.__init__!  s    JJL((8	r   c                X    U R                   U R                   R                  S5      S-   S $ )zC
Return Target CPU architecture.

Return
------
str
    Target CPU
rd      N)r   r   r   s    r   
target_cpuPlatformInfo.target_cpu$  s(     yy,q0233r   c                     U R                   S:H  $ )zW
Return True if target CPU is x86 32 bits..

Return
------
bool
    CPU is x86 32 bits
rR   r   r   s    r   target_is_x86PlatformInfo.target_is_x860  s     %''r   c                     U R                   S:H  $ )zX
Return True if current CPU is x86 32 bits..

Return
------
bool
    CPU is x86 32 bits
rR   current_cpur   s    r   current_is_x86PlatformInfo.current_is_x86;  s     5((r   c                    U R                   S:X  a	  U(       a  S$ U R                   S:X  a	  U(       a  S$ SU R                   -  $ )u  
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)
rR   r   rZ   \x64\%sr   r   hidex86rS   s      r   current_dirPlatformInfo.current_dirF  sO    $   E)g 	
   G+ 	

 $***	
r   c                    U R                   S:X  a	  U(       a  S$ U R                   S:X  a	  U(       a  S$ SU R                   -  $ )a  
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)
rR   r   rZ   r   r   r   r   s      r   
target_dirPlatformInfo.target_dir^  sI    $ 5(W 	
 7*s 	

 $//)	
r   c                    U(       a  SOU R                   nU R                  U:X  a  S$ U R                  5       R                  SSU-  5      $ )a  
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.
rR   r   \z\%s_)r   r   r   rm   )r   forcex86currents      r   	cross_dirPlatformInfo.cross_dirv  sN      $%)9)9 ') 	
 "**471BC	
r   )r   N)FFF)r   r   r   r   __doc__r   rE   rw   r   r   propertyr   r   r   r   r   r   r   r   r   r   r   r     sU     ++6;AACK9 	4 	4	(	)
0
0
r   r   c                     \ rS rSrSr\R                  \R                  \R                  \R                  4r
S r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       rSS jrS rSrg)RegistryInfoi  z
Microsoft Visual Studio related registry information.

Parameters
----------
platform_info: PlatformInfo
    "PlatformInfo" instance.
c                    Xl         g Npi)r   platform_infos     r   r   RegistryInfo.__init__  s    r   c                    g)zP
Microsoft Visual Studio root registry key.

Return
------
str
    Registry key
VisualStudior   r   s    r   visualstudioRegistryInfo.visualstudio  s     r   c                .    [        U R                  S5      $ )zO
Microsoft Visual Studio SxS registry key.

Return
------
str
    Registry key
SxS)r   r   r   s    r   sxsRegistryInfo.sxs  s     D%%u--r   c                .    [        U R                  S5      $ )zL
Microsoft Visual C++ VC7 registry key.

Return
------
str
    Registry key
VC7r   r   r   s    r   vcRegistryInfo.vc       DHHe$$r   c                .    [        U R                  S5      $ )zO
Microsoft Visual Studio VS7 registry key.

Return
------
str
    Registry key
VS7r   r   s    r   vsRegistryInfo.vs  r   r   c                    g)zS
Microsoft Visual C++ for Python registry key.

Return
------
str
    Registry key
zDevDiv\VCForPythonr   r   s    r   vc_for_pythonRegistryInfo.vc_for_python  s     %r   c                    g)zA
Microsoft SDK registry key.

Return
------
str
    Registry key
zMicrosoft SDKsr   r   s    r   microsoft_sdkRegistryInfo.microsoft_sdk  s      r   c                .    [        U R                  S5      $ )zR
Microsoft Windows/Platform SDK registry key.

Return
------
str
    Registry key
r   r   r   r   s    r   windows_sdkRegistryInfo.windows_sdk  s     D&&	22r   c                .    [        U R                  S5      $ )zP
Microsoft .NET Framework SDK registry key.

Return
------
str
    Registry key
NETFXSDKr   r   s    r   	netfx_sdkRegistryInfo.netfx_sdk  s     D&&
33r   c                    g)zP
Microsoft Windows Kits Roots registry key.

Return
------
str
    Registry key
zWindows Kits\Installed Rootsr   r   s    r   windows_kits_rootsRegistryInfo.windows_kits_roots  s     /r   c                r    U R                   R                  5       (       d  U(       a  SOSn[        SUSU5      $ )z
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   Wow6432NodeSoftware	Microsoft)r   r   r   )r   r.   rR   node64s       r   	microsoftRegistryInfo.microsoft  s0      ww--//3MJS99r   c           	     >   [         R                  n[         R                  n[         R                  nU R                  nU R
                   HB  nSn U" Xv" U5      SU5      n [         R                  " X5      S   U(       a  U" U5        s  $ s  $    g! [         aI    U R                  R                  5       (       d&   U" Xv" US5      SU5      n Nn! [         a      M  f = f M  f = f! [         a     Of = f U(       a
  U" U5        M  M  ! U(       a	  U" U5        f f = f)z
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
Nr   T)
r   r#   r"   CloseKeyr   HKEYSr%   r   r   QueryValueEx)	r   r.   namekey_readopenkeyclosekeymshkeybkeys	            r   lookupRegistryInfo.lookup!  s     ??..??^^JJDD	tRWa:#**46q9 TN # &   ww--//!&tRT]AxH" ! !   TN 4TN sT   B C&)C#:C
CC#CC#"C#&
C30D
2C33D

Dr   Nr   )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   r   r   r   r   r     s     	  !!  	E  	 	 	. 	. 	% 	% 	% 	% 	% 	% 	  	  	3 	3 	4 	4 	/ 	/:&'r   r   c                     \ rS rSrSr\R                  " SS5      r\R                  " SS5      r\R                  " S\5      r	S!S jr
S	 rS
 rS r\S 5       r\S 5       r\S 5       rS rS r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r \S 5       r!S r"\S"S j5       r#S r$g)#
SystemInfoiK  z
Microsoft Windows and Visual Studio related system information.

Parameters
----------
registry_info: RegistryInfo
    "RegistryInfo" instance.
vc_ver: float
    Required Microsoft Visual C++ version.
WinDirr   r9   r8   Nc                    Xl         U R                   R                  U l        U R                  5       U l        U=(       d    U R	                  5       =U l        U l        g r   )rir   find_programdata_vs_versknown_vs_paths_find_latest_available_vs_vervs_vervc_ver)r   registry_infor  s      r   r   SystemInfo.__init__]  sE    ''**";;= %+$Rd.P.P.RRdkr   c                    U R                  5       nU(       d0  U R                  (       d  [        R                  R	                  S5      e[        U5      nUR                  U R                  5        [        U5      S   $ )z=
Find the latest VC version

Return
------
float
    version
z%No Microsoft Visual C++ version foundr^   )find_reg_vs_versr   rx   r@   ry   setupdatesorted)r   reg_vc_versvc_verss      r   r  (SystemInfo._find_latest_available_vs_verf  sf     ++-t22""997  k"t**+gr""r   c           
        U R                   R                  nU R                   R                  U R                   R                  U R                   R                  4n/ n[
        R                  " U R                   R                  U5       GH.  u  pE [        R                  " XA" U5      S[        R                  5      nU   [        R                  " U5      u  pxn	[        U5       H^  n
[        R                  " [         5         [#        [        R$                  " Xj5      S   5      nX;  a  UR'                  U5        SSS5        M`     [        U5       H[  n
[        R                  " [         5         [#        [        R(                  " Xj5      5      nX;  a  UR'                  U5        SSS5        M]     SSS5        GM1     [+        U5      $ ! [         a     GML  f = f! , (       d  f       GM  = f! , (       d  f       M  = f! , (       d  f       GM  = f)zh
Find Microsoft Visual Studio versions available in registry.

Return
------
list of float
    Versions
r   N)r   r   r   r   r   r&   productr   r   r"   r#   r%   QueryInfoKeyrangerF   rG   r,   r+   r(   appendEnumKeyr
  )r   r   vckeysvs_versr   r.   r   subkeysvaluesrd   r1   vers               r   r  SystemInfo.find_reg_vs_versz  sw    WW''**dgg33TWWZZ@"**477==&AID~~dBsGQH %+%8%8%>"vA#,,Z8#F$4$4T$=a$@A-#NN3/ 98 '
 wA#,,Z8#FNN4$;<-#NN3/ 98 (  B" g  
 98
 98 sO   ,G:AG:<9G	54G:)6G(	G:
GG
G%	G:(
G72G::
H
	c                z   0 nSn [        U5      nU Hj  n [        X$S5      n[        USSS9 n[        R
                  " U5      nSSS5        WS   n[        [        US5      5        UXR                  US	   5      '   Ml     U$ ! [         a    Us $ f = f! , (       d  f       NV= f! [        [        4 a     M  f = f)
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.jsonrtzutf-8)r?   Nr;   VC\Tools\MSVCinstallationVersion)r   r%   r   openjsonload_as_float_versionKeyError)	r   vs_versionsinstances_dirhashed_namesr   
state_path
state_filestatevs_paths	            r   r   #SystemInfo.find_programdata_vs_vers  s     T	"=1L !D!-|D
*dW= IIj1E > 23 W&678  2259N3OPQ !( 1  		 >= X& s9   B B&B8B&BB
B#	B&&B:9B:c                Z    [        SR                  U R                  S5      SS 5      5      $ )z
Return a string version as a simplified float version (major.minor)

Parameters
----------
version: str
    Version.

Return
------
float
    version
.N   )r+   r   split)r5   s    r   r!  SystemInfo._as_float_version  s(     SXXgmmC0!4566r   c                    [        U R                  SU R                  -  5      nU R                  R	                  U R                  R
                  SU R                  -  5      =(       d    U$ )z@
Microsoft Visual Studio directory.

Return
------
str
    path
zMicrosoft Visual Studio %0.1f%0.1f)r   ProgramFilesx86r  r   r   r   )r   defaults     r   VSInstallDirSystemInfo.VSInstallDir  sP       "ADKK"O

 ww~~dggjj'DKK*?@KGKr   c                    U R                  5       =(       d    U R                  5       n[        U5      (       d!  Sn[        R                  R                  U5      eU$ )z=
Microsoft Visual C++ directory.

Return
------
str
    path
z(Microsoft Visual C++ directory not found)	_guess_vc_guess_vc_legacyr   rx   r@   ry   )r   rP   msgs      r   VCInstallDirSystemInfo.VCInstallDir  sH     ~~:4#8#8#:T{{<C""99#>>r   c                4   U R                   S::  a  g U R                  U R                      n[	        US5      n [        U5      S   nU R                  U5      U l        [	        X#5      $ ! [         a    U R                  n NTf = f! [        [        4 a     gf = f)z<
Locate Visual C++ for VS2017+.

Return
------
str
    path
r   r   r  r^   )
r  r   r"  r4  r   r   r!  r  r%   
IndexError)r   vs_dirguess_vcr  s       r   r7  SystemInfo._guess_vc  s     ;;$	'((5F
  01	X&r*F008DK))  	'&&F	' $ 		s"   A( .B (B BBBc                   [        U R                  SU R                  -  5      n[        U R                  R                  SU R                  -  5      nU R                  R                  US5      nU(       a  [        US5      OUnU R                  R                  U R                  R                  SU R                  -  5      =(       d    U$ )zK
Locate Visual C++ for versions prior to 2017.

Return
------
str
    path
z Microsoft Visual Studio %0.1f\VCr1  
installdirrA   )r   r2  r  r   r   r   r   )r   r3  reg_path	python_vc
default_vcs        r   r8  SystemInfo._guess_vc_legacy  s       "E"S

 --w/DEGGNN8\:	.7T)T*W
 ww~~dggjj'DKK*?@NJNr   c                    U R                   S::  a  gU R                   S:X  a  gU R                   S:X  a  gU R                   S:X  a  gU R                   S	:  a  g
g)zg
Microsoft Windows SDK versions for specified MSVC++ version.

Return
------
tuple of str
    versions
r   )z7.0z6.1z6.0ar   )z7.1z7.0a      &@)z8.0z8.0a      (@)8.1z8.1ar   )z10.0rJ  Nr  r   s    r   WindowsSdkVersionSystemInfo.WindowsSdkVersion+  sR     ;;#'[[D  [[D  [[D  [[D  r   c                L    U R                  [        U R                  S5      5      $ )zD
Microsoft Windows SDK last version.

Return
------
str
    version
lib)_use_last_dir_namer   WindowsSdkDirr   s    r   WindowsSdkLastVersion SystemInfo.WindowsSdkLastVersionA  s"     &&tD,>,>'FGGr   c                l   SnU R                    HK  n[        U R                  R                  SU-  5      nU R                  R	                  US5      nU(       d  MK    O   U(       a  [        U5      (       d\  [        U R                  R                  SU R                  -  5      nU R                  R	                  US5      nU(       a  [        US5      nU(       a  [        U5      (       dV  U R                    HF  nUSUR                  S5       nS	U-  n[        U R                  U5      n[        U5      (       d  MD  UnMH     U(       a  [        U5      (       dB  U R                    H2  nS
U-  n[        U R                  U5      n[        U5      (       d  M0  UnM4     U(       d  [        U R                  S5      nU$ )z>
Microsoft Windows SDK directory.

Return
------
str
    path
r   zv%sinstallationfolderr1  rB  WinSDKNr,  zMicrosoft SDKs\Windows Kits\%szMicrosoft SDKs\Windows\v%sPlatformSDK)rL  r   r   r   r   r   r   r  rfindr9   r:  )r   sdkdirr  locrP   install_baseintverds           r   rQ  SystemInfo.WindowsSdkDirM  s\    ))Ctww**ECK8CWW^^C)=>Fv * U6]]--w/DED77>>$=LlH5U6]]---syy~.86A**D188F . U6]]--4s:**D188F	 .
 $++];Fr   c                "   U R                   S::  a  SnSnO0SnU R                   S::  a  SOSnU R                  R                  SUS9nS	XR                  S
S5      4-  n/ nU R                   S:  a7  U R                   H'  nU[        U R                  R                  Xd5      /-  nM)     U R                   H+  nU[        U R                  R                  SU-  U5      /-  nM-     U H*  nU R                  R                  US5      nU(       d  M(  Us  $    g)zI
Microsoft Windows SDK executable directory.

Return
------
str
    path
rH  r   r   (   rI  TF)rS   r   zWinSDK-NetFx%dTools%sr   -r   zv%sArU  N)r  r   r   rm   NetFxSdkVersionr   r   r   rL  r   r   )	r   netfxverr   r   fxregpathsr  rP   execpaths	            r   WindowsSDKExecutablePath#SystemInfo.WindowsSDKExecutablePathx  s	    ;;$HDH"kkT1duG77&&4&AD$,,tS2I'JJ ;;$++T$''"3"3S=>> , ))Cdgg116C<DEEH * Dww~~d,@AHx 
 r   c                    [        U R                  R                  SU R                  -  5      nU R                  R	                  US5      =(       d    S$ )z<
Microsoft Visual F# directory.

Return
------
str
    path
z%0.1f\Setup\F#
productdirr   )r   r   r   r  r   )r   rP   s     r   FSharpInstallDirSystemInfo.FSharpInstallDir  s>     DGG((*;dkk*IJww~~dL17R7r   c                    U R                   S:  a  SOSnU HJ  nU R                  R                  U R                  R                  SU-  5      nU(       d  M?  U=(       d    Ss  $    g)zD
Microsoft Universal CRT SDK directory.

Return
------
str
    path
r   )1081r   z
kitsroot%sr   N)r  r   r   r   )r   versr  rY  s       r   UniversalCRTSdkDirSystemInfo.UniversalCRTSdkDir  sY      ${{d2| CWW^^DGG$>$>s@RSFv|# 
 r   c                L    U R                  [        U R                  S5      5      $ )zP
Microsoft Universal C Runtime SDK last version.

Return
------
str
    version
rO  )rP  r   rq  r   s    r   UniversalCRTSdkLastVersion%SystemInfo.UniversalCRTSdkLastVersion  s"     &&tD,C,CU'KLLr   c                *    U R                   S:  a  S$ S$ )zQ
Microsoft .NET Framework SDK versions.

Return
------
tuple of str
    versions
r   )	z4.7.2z4.7.1z4.7z4.6.2z4.6.1z4.6z4.5.2z4.5.1z4.5r   rK  r   s    r   rb  SystemInfo.NetFxSdkVersion  s%     {{d" X	
 	
r   c                    SnU R                    HI  n[        U R                  R                  U5      nU R                  R	                  US5      nU(       d  MH    U$    U$ )zE
Microsoft .NET Framework SDK directory.

Return
------
str
    path
r   kitsinstallationfolder)rb  r   r   r   r   )r   rY  r  rZ  s       r   NetFxSdkDirSystemInfo.NetFxSdkDir  sX     ''Ctww((#.CWW^^C)ABFv (
 r   c                    [        U R                  S5      nU R                  R                  U R                  R                  S5      =(       d    U$ )zG
Microsoft .NET Framework 32bit directory.

Return
------
str
    path
zMicrosoft.NET\Frameworkframeworkdir32r   r   r   r   r   r   guess_fws     r   FrameworkDir32SystemInfo.FrameworkDir32  s:     %?@ ww~~dggjj*:;GxGr   c                    [        U R                  S5      nU R                  R                  U R                  R                  S5      =(       d    U$ )zG
Microsoft .NET Framework 64bit directory.

Return
------
str
    path
zMicrosoft.NET\Framework64frameworkdir64r~  r  s     r   FrameworkDir64SystemInfo.FrameworkDir64  s:     %AB ww~~dggjj*:;GxGr   c                $    U R                  S5      $ )zS
Microsoft .NET Framework 32bit versions.

Return
------
tuple of str
    versions
    _find_dot_net_versionsr   s    r   FrameworkVersion32SystemInfo.FrameworkVersion32       **2..r   c                $    U R                  S5      $ )zS
Microsoft .NET Framework 64bit versions.

Return
------
tuple of str
    versions
@   r  r   s    r   FrameworkVersion64SystemInfo.FrameworkVersion64  r  r   c                   U R                   R                  U R                   R                  SU-  5      n[        U SU-  5      nU=(       d    U R	                  US5      =(       d    SnU R
                  S:  a  US4$ U R
                  S:  a  UR                  5       SS	 S
:w  a  SS4$ US4$ U R
                  S:X  a  gU R
                  S:X  a  gg)z
Find Microsoft .NET Framework versions.

Parameters
----------
bits: int
    Platform number of bits: 32 or 64.

Return
------
tuple of str
    versions
zframeworkver%dzFrameworkDir%dr2   r   rI  zv4.0r   Nr-  v4z
v4.0.30319v3.5r   )r  
v2.0.50727g       @)zv3.0r  )r   r   r   getattrrP  r  rw   )r   bitsreg_verdot_net_dirr  s        r   r  !SystemInfo._find_dot_net_versions&  s     ''..-=-DEd$4t$;<H00cBHb ;;$;[[D #&99;r?d#:<VKKVKK[[C'[[C'r   c                n   ^ ^ U U4S j[        [        T 5      5       5       n[        US5      =(       d    S$ )z
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
c              3     >#    U  H;  n[        [        TU5      5      (       d  M  UR                  T5      (       d  M7  Uv   M=     g 7fr   )r   r   
startswith)rq   dir_namerP   prefixs     r   rs   0SystemInfo._use_last_dir_name.<locals>.<genexpr>U  s<      
3T$)* /7/B/B6/J H3s   AA	ANr   )reversedr   next)rP   r  matching_dirss   `` r   rP  SystemInfo._use_last_dir_nameD  s/    "
$WT]3

 M4(.B.r   )r   r   r   r  r  r   r   )%r   r   r   r   r   r   rE   r   r9   r2  r   r  r  r   staticmethodr!  r   r4  r:  r7  r8  rL  rR  rQ  rg  rk  rq  rt  rb  rz  r  r  r  r  r  rP  r   r   r   r   r   r   K  s   	 [[2&F;;~r2Lkk"5|DOS#(>(T 7 7  L L"  "<O*  * 	H 	H ( (T " "H 
8 
8  ( 	M 	M 
 
   " H H H H 	/ 	/ 	/ 	/< / /r   r   c                     \ rS rSrSrS!S jr\S 5       r\S 5       r\S 5       r	\S 5       r
\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rS r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rS"S jr S r!S r"g)#EnvironmentInfoi]  a  
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.
Nc                    [        U5      U l        [        U R                  5      U l        [	        U R                  U5      U l        U R                  U:  a!  Sn[        R                  R                  U5      eg )Nz.No suitable Microsoft Visual C++ version found)
r   r   r   r   r   sir  rx   r@   ry   )r   r   r  
vc_min_vererrs        r   r   EnvironmentInfo.__init__u  s]    t$tww'TWWf-;;#BC""99#>> $r   c                .    U R                   R                  $ )z;
Microsoft Visual Studio.

Return
------
float
    version
)r  r  r   s    r   r  EnvironmentInfo.vs_ver~       ww~~r   c                .    U R                   R                  $ )z@
Microsoft Visual C++ version.

Return
------
float
    version
)r  r  r   s    r   r  EnvironmentInfo.vc_ver  r  r   c                    SS/nU R                   S:  a/  U R                  R                  SSS9nUS/-  nUS/-  nUSU-  /-  nU Vs/ s H#  n[        U R                  R
                  U5      PM%     sn$ s  snf )	zE
Microsoft Visual Studio Tools.

Return
------
list of str
    paths
zCommon7\IDEzCommon7\Toolsr   Tr   rS   z1Common7\IDE\CommonExtensions\Microsoft\TestWindowzTeam Tools\Performance ToolszTeam Tools\Performance Tools%s)r  r   r   r   r  r4  )r   pathsarch_subdirrP   s       r   VSToolsEnvironmentInfo.VSTools  s      !12;;$''--d-EKJKKE566E7+EFFE=BCUTTWW))40UCCCs   *A5c                    [        U R                  R                  S5      [        U R                  R                  S5      /$ )zb
Microsoft Visual C++ & Microsoft Foundation Class Includes.

Return
------
list of str
    paths
IncludezATLMFC\Include)r   r  r:  r   s    r   
VCIncludesEnvironmentInfo.VCIncludes  s7     %%y1%%'89
 	
r   c                :   U R                   S:  a  U R                  R                  SS9nOU R                  R                  SS9nSU-  SU-  /nU R                   S:  a	  USU-  /-  nU Vs/ s H#  n[        U R                  R
                  U5      PM%     sn$ s  snf )	zc
Microsoft Visual C++ & Microsoft Foundation Class Libraries.

Return
------
list of str
    paths
      .@TrS   r   Lib%szATLMFC\Lib%sr   zLib\store%s)r  r   r   r   r  r:  )r   r  r  rP   s       r   VCLibrariesEnvironmentInfo.VCLibraries  s     ;;$'',,,6K'',,T,:K;&+(EF;;$n{233E=BCUTTWW))40UCCCs   +*Bc                h    U R                   S:  a  / $ [        U R                  R                  S5      /$ )zW
Microsoft Visual C++ store references Libraries.

Return
------
list of str
    paths
r   zLib\store\references)r  r   r  r:  r   s    r   VCStoreRefsEnvironmentInfo.VCStoreRefs  s0     ;;ITWW))+BCDDr   c           	     H   U R                   n[        UR                  S5      /nU R                  S::  a  SOSnU R                  R                  U5      nU(       a  U[        UR                  SU-  5      /-  nU R                  S:X  a8  SU R                  R                  SS9-  nU[        UR                  U5      /-  nU$ U R                  S:  a  U R                  R                  5       (       a  S	OS
nU[        UR                  X`R                  R                  SS9-  5      /-  nU R                  R                  U R                  R                  :w  a3  U[        UR                  X`R                  R                  SS9-  5      /-  nU$ U[        UR                  S5      /-  nU$ )zB
Microsoft Visual C++ Tools.

Return
------
list of str
    paths

VCPackagesr   TFBin%sr   r  r  zbin\HostX86%szbin\HostX64%sr  Bin)r  r   r:  r  r   r   r   r   r   r   r   )r   r  toolsr   r  rP   host_dirs          r   VCToolsEnvironmentInfo.VCTools  s|    WWboo|45;;$.4Egg''1d2??Gk,ABCCE;;$TWW000>>Dd2??D122E   [[D $(GG$:$:$<$< BR  d2??Hww7I7Id7I7S,STUUEww""dgg&8&88(WW5H5HT5H5R*RS   d2??E233Er   c                N   U R                   S::  a>  U R                  R                  SSS9n[        U R                  R
                  SU-  5      /$ U R                  R                  SS9n[        U R                  R
                  S5      nU R                  n[        X#< SU< 35      /$ )zG
Microsoft Windows SDK Libraries.

Return
------
list of str
    paths
r   Tr  r  r  rO  um)r  r   r   r   r  rQ  _sdk_subdir)r   r  rO  libvers       r   OSLibrariesEnvironmentInfo.OSLibraries  s     ;;$'',,Tt,DK..+0EFGG '',,,6Ktww,,e4C%%F&+>?@@r   c                   [        U R                  R                  S5      nU R                  S::  a  U[        US5      /$ U R                  S:  a  U R                  nOSn[        USU-  5      [        USU-  5      [        USU-  5      /$ )	zE
Microsoft Windows SDK Include.

Return
------
list of str
    paths
includer   glr   r   z%ssharedz%sumz%swinrt)r   r  rQ  r  r  )r   r  sdkvers      r   
OSIncludesEnvironmentInfo.OSIncludes  s     tww,,i8;;$T'4011 {{d"))Wj612Wfvo.Wi&01 r   c                   [        U R                  R                  S5      n/ nU R                  S::  a  X R                  -  nU R                  S:  a  U[        US5      /-  nU R                  S:  az  UU[        U R                  R                  S5      [        USS5      [        US	S5      [        US
S5      [        U R                  R                  SSSU R                  -  SSS5      /-  nU$ )zM
Microsoft Windows SDK Libraries Paths.

Return
------
list of str
    paths

Referencesr   rH  zCommonConfiguration\Neutralr   UnionMetadataz'Windows.Foundation.UniversalApiContractz1.0.0.0z%Windows.Foundation.FoundationContractz,Windows.Networking.Connectivity.WwanContractExtensionSDKszMicrosoft.VCLibsr1  CommonConfigurationneutral)r   r  rQ  r  r  )r   reflibpaths      r   	OSLibpathEnvironmentInfo.OSLibpath0  s     477((,7;;#'''G;;$S"@ABBG;;$TWW**O<SCYOSA9MSH)TGG))#&dkk) ) G  r   c                4    [        U R                  5       5      $ )zC
Microsoft Windows SDK Tools.

Return
------
list of str
    paths
)list
_sdk_toolsr   s    r   SdkToolsEnvironmentInfo.SdkToolsV  s     DOO%&&r   c              #    #    U R                   S:  a6  U R                   S::  a  SOSn[        U R                  R                  U5      v   U R                  R                  5       (       d@  U R                  R                  SS9nSU-  n[        U R                  R                  U5      v   U R                   S;   ad  U R                  R                  5       (       a  S	nOU R                  R                  SSS
9nSU-  n[        U R                  R                  U5      v   OrU R                   S:  ab  [        U R                  R                  S5      nU R                  R                  SS9nU R                  R                  n[        X4< U< 35      v   U R                  R                  (       a  U R                  R                  v   gg7f)zX
Microsoft Windows SDK Tools paths generator.

Return
------
generator of str
    paths
r  rH  r  zBin\x86Tr  r  )r   rH  r   r  zBin\NETFX 4.0 Tools%sN)
r  r   r  rQ  r   r   r   r   rR  rg  )r   bin_dirr  rP   r  s        r   r  EnvironmentInfo._sdk_toolsb  sa     ;;#{{d2e
Gtww,,g66ww%%''''--$-7K[(Dtww,,d33;;,&ww$$&& "gg11$D1I+k9Dtww,,d33[[D --u5D''--$-7KWW22Ftv{;<<77++''222 ,s   GGc                J    U R                   R                  nU(       a  SU-  $ S$ )zE
Microsoft Windows SDK version subdir.

Return
------
str
    subdir
%s\r   )r  rR  r   ucrtvers     r   r  EnvironmentInfo._sdk_subdir  s%     ''//%, 4"4r   c                h    U R                   S:  a  / $ [        U R                  R                  S5      /$ )zC
Microsoft Windows SDK Setup.

Return
------
list of str
    paths
r   Setup)r  r   r  rQ  r   s    r   SdkSetupEnvironmentInfo.SdkSetup  s/     ;;ITWW**G455r   c                V   U R                   nU R                  nU R                  S::  a4  SnUR                  5       (       + =(       a    UR	                  5       (       + nOLUR                  5       =(       d    UR	                  5       nUR
                  S:H  =(       d    UR                  S:H  n/ nU(       a3  XRR                   Vs/ s H  n[        UR                  U5      PM     sn-  nU(       a3  XRR                   Vs/ s H  n[        UR                  U5      PM     sn-  nU$ s  snf s  snf )zF
Microsoft .NET Framework Tools.

Return
------
list of str
    paths
r   TrZ   )r   r  r  r   r   r   r   r  r   r  r  r  )r   r   r  	include32	include64r  r  s          r   FxToolsEnvironmentInfo.FxTools  s     WWWW;;$I,,..Jr7H7H7J3JI((*Ab.?.?.AI'1MR]]g5MI>S>ST>Ssd2,,c2>STTE>S>ST>Ssd2,,c2>STTE UTs     D!: D&c                    U R                   S:  d  U R                  R                  (       d  / $ U R                  R	                  SS9n[        U R                  R                  SU-  5      /$ )zN
Microsoft .Net Framework SDK Libraries.

Return
------
list of str
    paths
r   Tr  zlib\um%s)r  r  rz  r   r   r   )r   r  s     r   NetFxSDKLibraries!EnvironmentInfo.NetFxSDKLibraries  sW     ;;TWW%8%8Igg((T(2TWW((+*CDEEr   c                    U R                   S:  d  U R                  R                  (       d  / $ [        U R                  R                  S5      /$ )zM
Microsoft .Net Framework SDK Includes.

Return
------
list of str
    paths
r   z
include\um)r  r  rz  r   r   s    r   NetFxSDKIncludes EnvironmentInfo.NetFxSDKIncludes  s;     ;;TWW%8%8ITWW((-899r   c                D    [        U R                  R                  S5      /$ )zT
Microsoft Visual Studio Team System Database.

Return
------
list of str
    paths
zVSTSDB\Deploy)r   r  r4  r   s    r   VsTDbEnvironmentInfo.VsTDb  s     TWW))+;<==r   c                T   U R                   S:  a  / $ U R                   S:  a0  U R                  R                  nU R                  R	                  SS9nOU R                  R
                  nSnSU R                   U4-  n[        X5      /nU R                   S:  a  U[        XS5      /-  nU$ )z>
Microsoft Build Engine.

Return
------
list of str
    paths
rI  r  Tr  r   zMSBuild\%0.1f\bin%sRoslyn)r  r  r2  r   r   r4  r   )r   	base_pathr  rP   builds        r   MSBuildEnvironmentInfo.MSBuild  s     ;;I[[4//I''--d-;K,,IK%k(BBi&';;$d9H566Er   c                h    U R                   S:  a  / $ [        U R                  R                  S5      /$ )zD
Microsoft HTML Help Workshop.

Return
------
list of str
    paths
rH  zHTML Help Workshop)r  r   r  r2  r   s    r   HTMLHelpWorkshop EnvironmentInfo.HTMLHelpWorkshop  s0     ;;ITWW,,.BCDDr   c                    U R                   S:  a  / $ U R                  R                  SS9n[        U R                  R
                  S5      nU R                  n[        X#< SU< 35      /$ )zS
Microsoft Universal C Runtime SDK Libraries.

Return
------
list of str
    paths
r   Tr  rO  ucrt)r  r   r   r   r  rq  _ucrt_subdir)r   r  rO  r  s       r   UCRTLibrariesEnvironmentInfo.UCRTLibraries  sb     ;;Igg((T(2477--u5##S=>??r   c                    U R                   S:  a  / $ [        U R                  R                  S5      n[        USU R                  -  5      /$ )zQ
Microsoft Universal C Runtime SDK Include.

Return
------
list of str
    paths
r   r  z%sucrt)r  r   r  rq  r  )r   r  s     r   UCRTIncludesEnvironmentInfo.UCRTIncludes$  sF     ;;Itww119=Wh):)::;<<r   c                J    U R                   R                  nU(       a  SU-  $ S$ )zQ
Microsoft Universal C Runtime SDK version subdir.

Return
------
str
    subdir
r  r   )r  rt  r  s     r   r  EnvironmentInfo._ucrt_subdir4  s%     ''44%, 4"4r   c                f    SU R                   s=:  a  S:  a   / $   U R                  R                  /$ )z;
Microsoft Visual F#.

Return
------
list of str
    paths
rH  rI  )r  r  rk  r   s    r   FSharpEnvironmentInfo.FSharpA  s4     $++$$I % (())r   c                @   SU R                   -  nU R                  R                  SS9R                  S5      n/ nU R                  R
                  n[        UR                  SS5      5      n[        U5      (       a(  [        U[        U5      S   5      nX5[        US5      /-  nU[        US	5      /-  nS
U R                   S-  -  S
[        U R                  5      S-  -  4n[        R                  " X65       H%  u  px[        XrX5      n	[        U	5      (       d  M#  U	s  $    g)zO
Microsoft Visual C++ runtime redistributable dll.

Return
------
str
    path
zvcruntime%d0.dllTr  r   z\Toolsz\Redistr^   onecorer[   zMicrosoft.VC%d.CRT
   N)r  r   r   rL   r  r:  r	   rm   r   r   r   r*   r  r&   r  r   )
r   re   r  prefixes
tools_pathredist_pathcrt_dirsr  crt_dirrP   s
             r   VCRuntimeRedistEnvironmentInfo.VCRuntimeRedistP  s    '4	gg((T(288> WW))
j00JGH{GK,@,DEKd;	&BCCHT*h/00 !DKK"$45 C$4r$9:
  )00DOFW@Dd||  E r   c                   [        U R                  SU R                  U R                  U R                  U R
                  /U5      U R                  SU R                  U R                  U R                  U R                  U R                  /U5      U R                  SU R                  U R                  U R                  U R                  /U5      U R                  SU R                  U R                  U R                  U R                   U R"                  U R                  U R$                  U R&                  U R(                  /	U5      S9nU R*                  S:  a)  [-        U R.                  5      (       a  U R.                  US'   U$ )z
Return environment dict.

Parameters
----------
exists: bool
    It True, only return existing paths.

Return
------
dict
    environment
r  rO  r  rP   )r  rO  r  rP   r!   ru   )dict_build_pathsr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r"  )r   existsr   s      r   
return_envEnvironmentInfo.return_envv  sZ    %%OOOO%%))	 	 !!$$$$LL&&** 
 %%!!4<<1A1A4>>R
 ""LLLLJJMMMMLLLL))KK
 7*
V ;;"(<(<!=!=)-)=)=C%&
r   c                   [         R                  R                  U5      n[        R                  " US5      R                  [        5      n[         R                  " XE5      nU(       a  [        [        [        U5      5      OUnU(       d2  SUR                  5       -  n[        R                  R                  U5      e[        U5      n	[        R                  " U	5      $ )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.

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
r   z %s environment variable is empty)r&   chainfrom_iterabler   rE   r.  r   r  filterr   upperrx   r@   ry   r   r   )
r   r   spec_path_listsr'  
spec_paths	env_pathsr  extant_pathsr9  unique_pathss
             r   r&  EnvironmentInfo._build_paths  s    . __22?C
KKb)//8	
65;tF5%014tzz|CC""99#>>&|4||L))r   )r   r   r  )Nr   )T)#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  r  r  r  r  r  r  r"  r(  r&  r   r   r   r   r  r  ]  s   .? 	 	 	 	 D D& 
 
 D D( E E # #J A A&  2 # #J 	' 	'!3F 
5 
5 6 6  4 F F : : 	> 	>  6 E E @ @" = = 
5 
5 * * # #J;z*r   r  r  )'r   
__future__r   r  osr   r   os.pathr   r   r   r	   rI   r
   rF   platformr&   distutils.errorsrx   typingr    setuptools.extern.more_itertoolsr   systemr   r   r%  __annotations__r6   rQ   r_   ri   r   r   r   r   r   r   r  r   r   r   <module>r>     s    #   0 0 )        < *i7! ! #fG^$"<,` 	 2 j<4$Nv
 v
rz zzO/ O/du	* u	*r   