ó
    µ'Ôi�§  ã                  ó„  • % S 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rSSK	J
r
JrJr  SSKJr  SSKJr  SSKJr  SSKr\
(       a  SS	KJrJr  \
(       d   \R0                  " 5       S
:X  a  SSKrSSKJr  O " S S5      r\" 5       rS\S'    " S S5      r " S S5      r " S S5      r " S S\5      r  " S S5      r!g)zo
Environment info about Microsoft Compilers.

>>> getfixture('windows_only')
>>> ei = EnvironmentInfo('amd64')
é    )ÚannotationsN)ÚTYPE_CHECKINGÚ	TypedDictÚoverload)Úunique_everseené   )ÚStrPath)Úpy310)ÚLiteralStringÚNotRequiredÚ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   ó    ÚN/var/www/surfInsights/venv3-11/lib/python3.13/site-packages/setuptools/msvc.pyr   r   #   s   † Øˆ
Ø ÐØ!ÐØ Ór   r   zdict[str, str]r   c                  ó¶   • \ rS rSrSr\R                  " SS5      R                  5       rSS jr	\
SS j5       rSS jrSS jrSSS	 jjrSSS
 jjrSSS jjrSrg)ÚPlatformInfoé,   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 )NÚx64Úamd64)ÚlowerÚreplaceÚarch)Úselfr(   s     r   Ú__init__ÚPlatformInfo.__init__8   s   € Ø—J‘J“L×(Ñ(¨°Ó8ˆ�	r   c                óX   • U R                   U R                   R                  S5      S-   S $ )zC
Return Target CPU architecture.

Return
------
str
    Target CPU
Ú_r   N)r(   Úfind©r)   s    r   Ú
target_cpuÚPlatformInfo.target_cpu;   s(   € ð �y‰y˜Ÿ™Ÿ™¨Ó,¨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
Úx86©r0   r/   s    r   Útarget_is_x86ÚPlatformInfo.target_is_x86G   s   € ð �‰ %Ñ'Ð'r   c                ó    • U R                   S:H  $ )zX
Return True if current CPU is x86 32 bits..

Return
------
bool
    CPU is x86 32 bits
r3   ©Úcurrent_cpur/   s    r   Úcurrent_is_x86ÚPlatformInfo.current_is_x86R   s   € ð ×Ñ 5Ñ(Ð(r   c                ó„   • U R                   S:X  a	  U(       a  S$ U R                   S:X  a	  U(       a  S$ SU R                    3$ )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)
r3   r"   r%   ú\x64Ú\r8   ©r)   Úhidex86r$   s      r   Úcurrent_dirÚPlatformInfo.current_dir]   sR   € ð$ × Ñ  EÓ)®gð ð	
ð × Ñ  GÓ+¶ð ð	
ð
 �d×&Ñ&Ð'Ð(ð	
r   c                ó„   • U R                   S:X  a	  U(       a  S$ U R                   S:X  a	  U(       a  S$ SU R                    3$ )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)
r3   r"   r%   r=   r>   r4   r?   s      r   Ú
target_dirÚPlatformInfo.target_diru   sL   € ð$ —‘ 5Ó(®Wð ð	
ð —‘ 7Ó*®sð ð	
ð
 �d—o‘oÐ&Ð'ð	
r   c                ó˜   • U(       a  SOU R                   nU R                  U:X  a  S$ U R                  5       R                  SSU S3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.
r3   r"   r>   r-   )r9   r0   rD   r'   )r)   Úforcex86Úcurrents      r   Ú	cross_dirÚPlatformInfo.cross_dir�   sQ   € ö  $‘%¨×)9Ñ)9ˆð �‰ 'Ó)ð ð	
ð —‘Ó"×*Ñ*¨4°2°g°Y¸a°ÓAð	
r   )r(   N)r(   ÚstrÚreturnÚNone©rL   rK   )rL   Úbool)FF©F)r   r   r   r   Ú__doc__r   Úgetr&   r9   r*   Úpropertyr0   r5   r:   rA   rD   rI   r   r   r   r   r   r   ,   sZ   † ñð —+’+Ð6¸Ó;×AÑAÓC€Kô9ð ó	4ó ð	4ô	(ô	)ö
ö0
÷0
ñ 
r   r   c                  óz  • \ rS rSrSr\R                  \R                  \R                  \R                  4r
SS jr\SS j5       r\SS j5       r\SS j5       r\SS j5       r\SS j5       r\SS	 j5       r\SS
 j5       r\SS j5       r\SS j5       r\SSS jj5       r\SSS jj5       rSSS jjrSS jrSrg)ÚRegistryInfoé¥   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                óV   • [         R                  R                  U R                  S5      $ )zO
Microsoft Visual Studio SxS registry key.

Return
------
str
    Registry key
ÚSxS)ÚosÚpathÚjoinr_   r/   s    r   ÚsxsÚRegistryInfo.sxsÅ   s   € ô �w‰w�|‰|˜D×-Ñ-¨uÓ5Ð5r   c                óV   • [         R                  R                  U R                  S5      $ )zL
Microsoft Visual C++ VC7 registry key.

Return
------
str
    Registry key
ÚVC7©rc   rd   re   rf   r/   s    r   ÚvcÚRegistryInfo.vcÑ   ó   € ô �w‰w�|‰|˜DŸH™H eÓ,Ð,r   c                óV   • [         R                  R                  U R                  S5      $ )zO
Microsoft Visual Studio VS7 registry key.

Return
------
str
    Registry key
ÚVS7rj   r/   s    r   ÚvsÚRegistryInfo.vsÝ   rm   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                óV   • [         R                  R                  U R                  S5      $ )zR
Microsoft Windows/Platform SDK registry key.

Return
------
str
    Registry key
r   ©rc   rd   re   rv   r/   s    r   Úwindows_sdkÚRegistryInfo.windows_sdk  s   € ô �w‰w�|‰|˜D×.Ñ.°	Ó:Ð:r   c                óV   • [         R                  R                  U R                  S5      $ )zP
Microsoft .NET Framework SDK registry key.

Return
------
str
    Registry key
ÚNETFXSDKry   r/   s    r   Ú	netfx_sdkÚRegistryInfo.netfx_sdk  s   € ô �w‰w�|‰|˜D×.Ñ.°
Ó;Ð;r   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                ó   • g rX   r   ©r)   Úkeyr3   s      r   Ú	microsoftÚRegistryInfo.microsoft%  s   € ØQTr   c                ó   • g rX   r   r„   s      r   r†   r‡   '  s   € Ø=@r   c                óš   • U R                   R                  5       (       d  U(       a  SOSn[        R                  R	                  SUSU5      $ )z½
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"   ÚWow6432NodeÚSoftwareÚ	Microsoft)rZ   r:   rc   rd   re   )r)   r…   r3   Únode64s       r   r†   r‡   )  s8   € ð  —w‘w×-Ñ-×/Ñ/¶3‘¸MˆÜ�w‰w�|‰|˜J¨°¸SÓAÐAr   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                  " X‚5      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 | None
    value
Nr   T)
r   ÚKEY_READÚOpenKeyÚCloseKeyr†   ÚHKEYSÚOSErrorrZ   r:   ÚQueryValueEx)	r)   r…   ÚnameÚkey_readÚopenkeyÚclosekeyÚmsÚhkeyÚbkeys	            r   ÚlookupÚRegistryInfo.lookup<  s  € ô  —?‘?ˆÜ—.‘.ˆÜ—?‘?ˆØ�^‰^ˆØ—J”JˆDØˆDð	Ù˜t R¨£W¨a°Ó:�ð#Ü×*Ò*¨4Ó6°qÑ9ö Ù˜T—Nò ñ# ð& øô ó Ø—w‘w×-Ñ-×/Ñ/ð!Ù& t¨R°°T«]¸A¸xÓHšøÜ"ó !Û ð!úò ðûô ó ÙðúØæÙ˜T–Nñ ø–4Ù˜T•Nð úsT   ÁBÁ C&Â)C#Â:CÃ
CÃC#ÃCÃC#Ã"C#Ã&
C3Ã0D
Ã2C3Ã3D
Ä
DrY   N)r[   r   rL   rM   )rL   r   rP   )r…   r   r3   rO   rL   r   )r…   rK   r3   rO   rL   rK   )r…   rK   r•   rK   rL   ú
str | None)r   r   r   r   rQ   r   r   r   r   r   r’   r*   rS   r_   rf   rk   rp   rs   rv   rz   r~   r�   r   r†   rœ   r   r   r   r   rU   rU   ¥   s  † ñð 	×ÑØ× Ñ Ø×!Ñ!Ø× Ñ ð	€Eô ð ó	ó ð	ð ó	6ó ð	6ð ó	-ó ð	-ð ó	-ó ð	-ð ó	%ó ð	%ð ó	 ó ð	 ð ó	;ó ð	;ð ó	<ó ð	<ð ó	/ó ð	/ð ÝTó ØTØÝ@ó Ø@öB÷&'r   rU   c                  ó(  • \ rS rSrSr\R                  " SS5      r\R                  " SS5      r\R                  " S\5      r	 S!     S"S jjr
S	 rS#S
 jrS$S jr\S 5       r\S%S j5       r\S%S j5       rS rS r\S&S j5       r\S%S j5       r\S%S j5       r\S'S j5       r\S%S j5       r\S'S j5       r\S%S j5       r\S&S j5       r\S'S j5       r\S%S j5       r\S%S j5       r\S(S j5       r \S(S j5       r!S(S jr"\S)S*S jj5       r#S r$g)+Ú
SystemInfoif  zÊ
Microsoft Windows and Visual Studio related system information.

Parameters
----------
registry_info: RegistryInfo
    "RegistryInfo" instance.
vc_ver: float
    Required Microsoft Visual C++ version.
ÚWinDirr"   ÚProgramFileszProgramFiles(x86)Nc                óº   • Xl         U R                   R                  U l        U R                  5       U l        U=(       d    U R	                  5       =U l        U l        g rX   )ÚrirZ   Úfind_programdata_vs_versÚknown_vs_pathsÚ_find_latest_available_vs_verÚvs_verÚvc_ver)r)   Úregistry_infor©   s      r   r*   ÚSystemInfo.__init__x  sG   € ð  ŒØ—'‘'—*‘*ˆŒà"×;Ñ;Ó=ˆÔð %+×$R¨d×.PÑ.PÓ.RÐRˆŒ�d•kr   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      $ )z=
Find the latest VC version

Return
------
float
    version
z%No Microsoft Visual C++ version found)Úfind_reg_vs_versr¦   Ú	distutilsÚerrorsÚDistutilsPlatformErrorÚsetÚupdateÚmax)r)   Úreg_vc_versÚvc_verss      r   r§   Ú(SystemInfo._find_latest_available_vs_verƒ  sa   € ð ×+Ñ+Ó-ˆæ˜t×2×2Ü×"Ñ"×9Ñ9Ø7óð ô �kÓ"ˆØ�‰�t×*Ñ*Ô+Ü�7‹|Ð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†   rk   rs   rp   Ú	itertoolsÚproductr’   r   r�   r�   r“   ÚQueryInfoKeyÚrangeÚ
contextlibÚsuppressÚ
ValueErrorÚfloatÚ	EnumValueÚappendÚEnumKeyÚsorted)r)   r™   ÚvckeysÚvs_versrš   r…   r›   ÚsubkeysÚvaluesr-   ÚiÚvers               r   r­   ÚSystemInfo.find_reg_vs_vers—  sw  € ð �W‰W×ÑˆØ—'‘'—*‘*˜dŸg™g×3Ñ3°T·W±W·Z±ZÐ@ˆØˆÜ"×*Ò*¨4¯7©7¯=©=¸&×A‰IˆDðÜ—~’~ d¨B¨s«G°Q¼¿¹ÓH�ò Ü%+×%8Ò%8¸Ó%>Ñ"� Ü˜vž�AÜ#×,Ò,¬ZÕ8Ü#¤F×$4Ò$4°TÓ$=¸aÑ$@ÓA˜ØÓ-Ø#ŸN™N¨3Ô/÷ 9Ñ8ñ 'ô
 ˜wž�AÜ#×,Ò,¬ZÕ8Ü#¤F§N¢N°4Ó$;Ó<˜ØÓ-Ø#ŸN™N¨3Ô/÷ 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                óö  • 0 nSn [         R                  " U5      nU H�  n [         R                  R	                  X$S5      n[        USSS9 n[        R                  " U5      nSSS5        WS   n[         R                  " [         R                  R	                  US5      5        UXR                  US	   5      '   MŸ     U$ ! [         a    Us $ f = f! , (       d  f       Nu= 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)ÚencodingNÚinstallationPathúVC\Tools\MSVCÚinstallationVersion)
rc   Úlistdirr“   rd   re   Ú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ˆð	ÜŸ:š: mÓ4ˆLó !ˆDðäŸW™WŸ\™\¨-¸|ÓL�
Ü˜* d°WÒ=ÀÜ ŸIšI jÓ1�E÷ >àÐ 2Ñ3�ô —
’
œ2Ÿ7™7Ÿ<™<¨Ð1AÓBÔCð ð ×2Ñ2°5Ð9NÑ3OÓPÓQñ !ð( Ðøô1 ó 	àÒð	ú÷ >Õ=ûô œXÐ&ó âðús;   †C ¢+C$ÁCÁ$AC$ÃCÃCÃ
C!	ÃC$Ã$C8Ã7C8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¿   re   Úsplit)Úversions    r   rÕ   ÚSystemInfo._as_float_versionà  s(   € ô �S—X‘X˜gŸm™m¨CÓ0°°!Ð4Ó5Ó6Ð6r   c                óü   • [         R                  R                  U R                  SU R                  S 35      nU R
                  R                  U R
                  R                  U R                  S 5      =(       d    U$ )z@
Microsoft Visual Studio directory.

Return
------
str
    path
úMicrosoft Visual Studio ú0.1f)rc   rd   re   ÚProgramFilesx86r¨   r¤   rœ   rp   )r)   Údefaults     r   ÚVSInstallDirÚSystemInfo.VSInstallDirñ  s]   € ô —'‘'—,‘,Ø× Ñ Ð$<¸T¿[¹[ÈÐ<NÐ"Oó
ˆð
 �w‰w�~‰~˜dŸg™gŸj™j¨T¯[©[¸Ð,>Ó@×KÀGÐKr   c                óÞ   • U R                  5       =(       d    U R                  5       n[        R                  R	                  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_legacyrc   rd   Úisdirr®   r¯   r°   )r)   rd   Úmsgs      r   ÚVCInstallDirÚSystemInfo.VCInstallDir  sR   € ð �~‰~Ó×: 4×#8Ñ#8Ó#:ˆä�w‰w�}‰}˜T×"Ñ"Ø<ˆCÜ×"Ñ"×9Ñ9¸#Ó>Ð>àˆr   c                óš  • U R                   S::  a  g U R                  U R                      n[        R
                  R                  US5      n [        R                  " U5      S   nU R                  U5      U l	        [        R
                  R                  X#5      $ ! [         a    U R                  n N‡f = f! [        [        4 a     gf = f)z<
Locate Visual C++ for VS2017+.

Return
------
str
    path
ç      ,@r"   rÏ   éÿÿÿÿ)r¨   r¦   rÖ   rê   rc   rd   re   rÑ   rÕ   r©   r“   Ú
IndexError)r)   Úvs_dirÚguess_vcr©   s       r   rí   ÚSystemInfo._guess_vc  s´   € ð �;‰;˜$ÓØð	'à×(Ñ(¨¯©Ñ5ˆFô
 —7‘7—<‘< Ð(8Ó9ˆð	ä—Z’Z Ó)¨"Ñ-ˆFØ×0Ñ0°Ó8ˆDŒKÜ—7‘7—<‘< Ó1Ð1øô ó 	'à×&Ñ&ŠFð	'ûô œÐ$ó 	Ùð	ús$   “B ÁAB7 ÂB4Â3B4Â7C
Ã	C
c                ó  • [         R                  R                  U R                  SU R                  S S35      n[         R                  R                  U R
                  R                  U R                  S 5      nU R
                  R                  US5      nU(       a   [         R                  R                  US5      OUnU R
                  R                  U R
                  R                  U R                  S 5      =(       d    U$ )zK
Locate Visual C++ for versions prior to 2017.

Return
------
str
    path
ræ   rç   z\VCÚ
installdirÚVC)	rc   rd   re   rè   r¨   r¤   rs   rœ   rk   )r)   ré   Úreg_pathÚ	python_vcÚ
default_vcs        r   rî   ÚSystemInfo._guess_vc_legacy3  s´   € ô —'‘'—,‘,Ø× Ñ Ø'¨¯©°DÐ'9¸Ð=ó
ˆô —7‘7—<‘< §¡× 5Ñ 5¸$¿+¹+ÀdÐ9KÓMˆØ—G‘G—N‘N 8¨\Ó:ˆ	Þ6?”R—W‘W—\‘\ )¨TÔ2ÀWˆ
ð �w‰w�~‰~˜dŸg™gŸj™j¨T¯[©[¸Ð,>Ó@×NÀJÐ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
ç      "@)z7.0z6.1z6.0aç      $@)z7.1z7.0aç      &@)z8.0z8.0aç      (@)ú8.1z8.1arô   )z10.0r  r   ©r¨   r/   s    r   ÚWindowsSdkVersionÚSystemInfo.WindowsSdkVersionI  sR   € ð �;‰;˜#ÓØ'Ø�[‰[˜DÓ Ø Ø�[‰[˜DÓ Ø Ø�[‰[˜DÓ Ø Ø�[‰[˜DÓ Ø Ør   c                ót   • U R                  [        R                  R                  U R                  S5      5      $ )zD
Microsoft Windows SDK last version.

Return
------
str
    version
Úlib)Ú_use_last_dir_namerc   rd   re   ÚWindowsSdkDirr/   s    r   ÚWindowsSdkLastVersionÚ SystemInfo.WindowsSdkLastVersion_  s*   € ð ×&Ñ&¤r§w¡w§|¡|°D×4FÑ4FÈÓ'NÓOÐOr   c                ó"  • SnU R                    H_  n[        R                  R                  U R                  R
                  SU 35      nU R                  R                  US5      nU(       d  M_    O   U(       a$  [        R                  R                  U5      (       dƒ  [        R                  R                  U R                  R                  U R                  S 5      nU R                  R                  US5      nU(       a   [        R                  R                  US5      nU(       a$  [        R                  R                  U5      (       d~  U R                    Hn  nUSUR                  S5       nS	U 3n[        R                  R                  U R                  U5      n[        R                  R                  U5      (       d  Ml  UnMp     U(       a$  [        R                  R                  U5      (       dj  U R                    HZ  nS
U 3n[        R                  R                  U R                  U5      n[        R                  R                  U5      (       d  MX  UnM\     U(       d*  [        R                  R                  U R                  S5      nU$ )z>
Microsoft Windows SDK directory.

Return
------
str
    path
r"   ÚvÚinstallationfolderrç   rû   ÚWinSDKNrà   zMicrosoft SDKs\Windows Kits\zMicrosoft SDKs\Windows\vÚPlatformSDK)r  rc   rd   re   r¤   rz   rœ   rï   rs   r©   Úrfindr¢   rñ   )r)   ÚsdkdirrÉ   Úlocrd   Úinstall_baseÚintverÚds           r   r  ÚSystemInfo.WindowsSdkDirk  sÄ  € ð  ˆØ×)Ô)ˆCä—'‘'—,‘,˜tŸw™w×2Ñ2°a¸°u°IÓ>ˆCØ—W‘W—^‘^ CÐ)=Ó>ˆFßˆvÙñ *ö œRŸW™WŸ]™]¨6×2Ñ2ä—7‘7—<‘< §¡× 5Ñ 5¸$¿+¹+ÀdÐ9KÓMˆDØŸ7™7Ÿ>™>¨$°Ó=ˆLÞÜŸ™Ÿ™ l°HÓ=�ÞœRŸW™WŸ]™]¨6×2Ñ2à×-Ô-�ØÐ-˜sŸy™y¨›~Ð.�Ø6°v°hÐ?�Ü—G‘G—L‘L ×!2Ñ!2°DÓ9�Ü—7‘7—=‘= ×#Ó#Ø’Fñ .ö œRŸW™WŸ]™]¨6×2Ñ2à×-Ô-�Ø2°3°%Ð8�Ü—G‘G—L‘L ×!2Ñ!2°DÓ9�Ü—7‘7—=‘= ×#Ó#Ø’Fñ	 .ö
 ä—W‘W—\‘\ $×"3Ñ"3°]ÓCˆFØˆr   c                óx  • U R                   S::  a  SnSnO@SnU R                   S::  a  SOSnU R                  R                  SUS9R                  S	S
5      nSU SU 3n/ nU R                   S:¼  aK  U R                   H;  nU[
        R                  R                  U R                  R                  Xd5      /-  nM=     U R                   H@  nU[
        R                  R                  U R                  R                  SU S3U5      /-  nMB     U H*  nU R                  R                  US5      nU(       d  M(  Us  $    g)zP
Microsoft Windows SDK executable directory.

Return
------
str | None
    path
r  r   r"   é(   r  TF)r$   r@   r>   Ú-zWinSDK-NetFxÚToolsrô   r  ÚAr  N)r¨   rZ   rA   r'   ÚNetFxSdkVersionrc   rd   re   r¤   r~   r  rz   rœ   )	r)   Únetfxverr(   r@   ÚfxÚregpathsrÉ   rd   Úexecpaths	            r   ÚWindowsSDKExecutablePathÚ#SystemInfo.WindowsSDKExecutablePath–  s%  € ð �;‰;˜$ÓØˆHØ‰DàˆHØ"Ÿk™k¨TÓ1‘d°uˆGØ—7‘7×&Ñ&¨4¸Ð&ÐA×IÑIÈ$ÐPSÓTˆDØ˜H˜: U¨4¨&Ð1ˆð ˆØ�;‰;˜$ÓØ×+Ô+�ØœRŸW™WŸ\™\¨$¯'©'×*;Ñ*;¸SÓEÐFÑF’ñ ,ð ×)Ô)ˆCØœŸ™Ÿ™ d§g¡g×&9Ñ&9¸Q¸s¸eÀ1¸:ÀrÓJÐKÑKŠHñ *ó ˆDØ—w‘w—~‘~ dÐ,@ÓAˆHßˆxØ’ñ ð
 r   c                óÐ   • [         R                  R                  U R                  R                  U R
                  S S35      nU R                  R                  US5      =(       d    S$ )z<
Microsoft Visual F# directory.

Return
------
str
    path
rç   z	\Setup\F#Ú
productdirr"   )rc   rd   re   r¤   r_   r¨   rœ   )r)   rd   s     r   ÚFSharpInstallDirÚSystemInfo.FSharpInstallDir»  sJ   € ô �w‰w�|‰|˜DŸG™G×0Ñ0°d·k±kÀ$Ð5GÀyÐ2QÓRˆØ�w‰w�~‰~˜d LÓ1×7°RÐ7r   c                óº   • U R                   S:¼  a  SOSnU HA  nU R                  R                  U R                  R                  SU 35      nU(       d  M?  Us  $    g)zK
Microsoft Universal CRT SDK directory.

Return
------
str | None
    path
rô   )Ú10Ú81r   ÚkitsrootN)r¨   r¤   rœ   r�   )r)   ÚversrÉ   r  s       r   ÚUniversalCRTSdkDirÚSystemInfo.UniversalCRTSdkDirÈ  sV   € ð  $Ÿ{™{¨dÓ2‰|¸ˆó ˆCØ—W‘W—^‘^ D§G¡G×$>Ñ$>À(È3È%Ð@PÓQˆFßˆvØ’ñ ð
 r   c                óÊ   •  U R                  [        R                  R                  U R                  S5      5      $ ! [
         a  n[        R                  " US5        e SnAff = f)zP
Microsoft Universal C Runtime SDK last version.

Return
------
str
    version
r  úCannot find UniversalCRTSdkDirN)r  rc   rd   re   r1  Ú	TypeErrorr
   Úadd_note)r)   Úexs     r   ÚUniversalCRTSdkLastVersionÚ%SystemInfo.UniversalCRTSdkLastVersionÝ  sP   € ð	Ø×*Ñ*¬2¯7©7¯<©<¸×8OÑ8OÐQVÓ+WÓXÐXøÜó 	Ü�NŠN˜2Ð?Ô@Øûð	ús   ‚8; »
A"ÁAÁA"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   r  r/   s    r   r!  ÚSystemInfo.NetFxSdkVersioní  s%   € ð �{‰{˜dÓ"ð Xð	
ð ð	
r   c                óä   • SnU R                    H]  n[        R                  R                  U R                  R
                  U5      nU R                  R                  US5      nU(       d  M\    U$    U$ )zL
Microsoft .NET Framework SDK directory.

Return
------
str | None
    path
r"   Úkitsinstallationfolder)r!  rc   rd   re   r¤   r~   rœ   )r)   r  rÉ   r  s       r   ÚNetFxSdkDirÚSystemInfo.NetFxSdkDirþ  s`   € ð  ˆØ×'Ô'ˆCÜ—'‘'—,‘,˜tŸw™w×0Ñ0°#Ó6ˆCØ—W‘W—^‘^ CÐ)AÓBˆFßˆvØØˆñ (ð
 ˆr   c                óÈ   • [         R                  R                  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©rc   rd   re   r¡   r¤   rœ   rk   ©r)   Úguess_fws     r   ÚFrameworkDir32ÚSystemInfo.FrameworkDir32  sB   € ô —7‘7—<‘< §¡Ð-GÓHˆð �w‰w�~‰~˜dŸg™gŸj™jÐ*:Ó;×G¸xÐGr   c                óÈ   • [         R                  R                  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Úframeworkdir64rB  rC  s     r   ÚFrameworkDir64ÚSystemInfo.FrameworkDir64   sB   € ô —7‘7—<‘< §¡Ð-IÓJˆð �w‰w�~‰~˜dŸg™gŸj™jÐ*:Ó;×G¸xÐ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.FrameworkVersion320  ó   € ð ×*Ñ*¨2Ó.Ð.r   c                ó$   • U R                  S5      $ )zS
Microsoft .NET Framework 64bit versions.

Return
------
tuple of str
    versions
é@   rM  r/   s    r   ÚFrameworkVersion64ÚSystemInfo.FrameworkVersion64<  rQ  r   c                óš  • U R                   R                  U R                   R                  SU 35      n[        U SU 3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
ÚframeworkverÚFrameworkDirr  r"   r  zv4.0r  Nrá   Úv4z
v4.0.30319úv3.5r  )rZ  ú
v2.0.50727g       @)zv3.0r[  r   )r¤   rœ   rk   Úgetattrr  r¨   r&   )r)   ÚbitsÚreg_verÚdot_net_dirrÉ   s        r   rN  Ú!SystemInfo._find_dot_net_versionsH  sÃ   € ð —'‘'—.‘. §¡§¡¨|¸D¸6Ð-BÓCˆÜ˜d l°4°&Ð$9Ó:ˆØ×H˜×0Ñ0°¸cÓB×HÀbˆð �;‰;˜$ÓØ˜�;ÐØ�[‰[˜DÓ Ø#&§9¡9£;¨r° ?°dÓ#:�<ÀVÐKÐKÀÀVÐKÐKØ�[‰[˜CÓØ'Ø�[‰[˜CÓØ'Ør   c                ór   ^ ^• U U4S j[        [        R                  " T 5      5       5       n[        US5      $ )zÍ
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
c              3  óà   >#   • U  Hc  n[         R                  R                  [         R                  R                  TU5      5      (       d  MG  UR	                  T5      (       d  M_  Uv •  Me     g 7frX   )rc   rd   rï   re   Ú
startswith)Ú.0Údir_namerd   Úprefixs     €€r   Ú	<genexpr>Ú0SystemInfo._use_last_dir_name.<locals>.<genexpr>w  sN   øé € ð 
â6�Ü�w‰w�}‰}œRŸW™WŸ\™\¨$°Ó9×:ó ð ×#Ñ# F×+÷ ‰HÚ6ùs   ƒAA.ÁA.Á%	A.r"   )Úreversedrc   rÑ   Únext)rd   rf  Úmatching_dirss   `` r   r  ÚSystemInfo._use_last_dir_namef  s/   ù€ õ"
ä$¤R§Z¢Z°Ó%5Ô6ó
ˆô �M 2Ó&Ð&r   )r¦   rZ   r¤   r©   r¨   rX   )rª   rU   r©   zfloat | NonerL   rM   )rL   zlist[float])rL   zdict[float, str]rN   )rL   ztuple[LiteralString, ...]©rL   rž   )rL   ztuple[str, ...])r"   )rd   r	   rf  rK   rL   rK   )%r   r   r   r   rQ   r   rR   r¡   r¢   rè   r*   r§   r­   r¥   ÚstaticmethodrÕ   rS   rê   rñ   rí   rî   r  r  r  r&  r*  r1  r8  r!  r>  rE  rI  rO  rT  rN  r  r   r   r   r   r    r    f  sà  † ñ	ð �[Š[˜ 2Ó&€FØ—;’;˜~¨rÓ2€LØ—k’kÐ"5°|ÓD€Oð CGð	SØ)ð	SØ3?ð	Sà	õ	Sòô(ô>(ðT ñ7ó ð7ð  óLó ðLð" óó ðò"ò<Oð, óó ðð* ó	Pó ð	Pð ó(ó ð(ðT ó"ó ð"ðH ó
8ó ð
8ð óó ðð( óó ðð ó
ó ð
ð  óó ðð" óHó ðHð óHó ðHð ó	/ó ð	/ð ó	/ó ð	/ôð< õ'ó ó'r   r    c                  óH   • \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S	rg
)Ú_EnvironmentDicti€  rK   Úincluder  Úlibpathrd   zNotRequired[str | None]Úpy_vcruntime_redistr   N)r   r   r   r   Ú__annotations__r   r   r   r   rp  rp  €  s   ‡ ØƒLØ	ƒHØƒLØ
ƒIØ0Ö0r   rp  c                  óÔ  • \ rS rSrSrS!S"S j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#S j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5       r\S$S j5       r\S#S j5       r\S 5       r\S%S j5       rS&S'S j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   rZ   rU   r¤   r    Úsir©   r®   r¯   r°   )r)   r(   r©   Ú
vc_min_verÚerrs        r   r*   ÚEnvironmentInfo.__init__   s]   € Ü˜tÓ$ˆŒÜ˜tŸw™wÓ'ˆŒÜ˜TŸW™W fÓ-ˆŒà�;‰;˜Ó#ØBˆCÜ×"Ñ"×9Ñ9¸#Ó>Ð>ð $r   c                ó.   • U R                   R                  $ )z;
Microsoft Visual Studio.

Return
------
float
    version
)rx  r¨   r/   s    r   r¨   ÚEnvironmentInfo.vs_ver©  ó   € ð �w‰w�~‰~Ðr   c                ó.   • U R                   R                  $ )z@
Microsoft Visual C++ version.

Return
------
float
    version
)rx  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 3/-  nU Vs/ s H7  n[        R                  R                  U R                  R                  U5      PM9     sn$ s  snf )zE
Microsoft Visual Studio Tools.

Return
------
list of str
    paths
zCommon7\IDEzCommon7\Toolsrô   T©r@   r$   z1Common7\IDE\CommonExtensions\Microsoft\TestWindowzTeam Tools\Performance Tools)r¨   rZ   rA   rc   rd   re   rx  rê   )r)   ÚpathsÚarch_subdirrd   s       r   ÚVSToolsÚEnvironmentInfo.VSToolsÁ  s–   € ð  Ð!1Ð2ˆà�;‰;˜$ÓØŸ'™'×-Ñ-°dÀÐ-ÐEˆKØÐJÐKÑKˆEØÐ5Ð6Ñ6ˆEØÐ5°k°]ÐCÐDÑDˆEáEJÓKÂU¸T”—‘—‘˜TŸW™W×1Ñ1°4Ö8ÁUÑKÐKùÒKs   Á>B	c                óÒ   • [         R                  R                  U R                  R                  S5      [         R                  R                  U R                  R                  S5      /$ )zb
Microsoft Visual C++ & Microsoft Foundation Class Includes.

Return
------
list of str
    paths
ÚIncludezATLMFC\Include)rc   rd   re   rx  rñ   r/   s    r   Ú
VCIncludesÚEnvironmentInfo.VCIncludesÕ  sG   € ô �G‰G�L‰L˜Ÿ™×-Ñ-¨yÓ9Ü�G‰G�L‰L˜Ÿ™×-Ñ-Ð/@ÓAð
ð 	
r   c                ób  • U R                   S:¼  a  U R                  R                  SS9nOU R                  R                  SS9nSU 3SU 3/nU R                   S:¼  a	  USU 3/-  nU Vs/ s H7  n[        R                  R                  U R                  R                  U5      PM9     sn$ s  snf )	zc
Microsoft Visual C++ & Microsoft Foundation Class Libraries.

Return
------
list of str
    paths
ç      .@T©r$   ©r@   ÚLibz
ATLMFC\Librô   z	Lib\store)r¨   rZ   rD   rc   rd   re   rx  rñ   )r)   r„  rƒ  rd   s       r   ÚVCLibrariesÚEnvironmentInfo.VCLibrariesä  s§   € ð �;‰;˜$ÓØŸ'™'×,Ñ,°Ð,Ð6‰KàŸ'™'×,Ñ,°TÐ,Ð:ˆKØ�{�mÐ$¨°K°=Ð&AÐBˆà�;‰;˜$ÓØ˜ ; -Ð0Ð1Ñ1ˆEáEJÓKÂU¸T”—‘—‘˜TŸW™W×1Ñ1°4Ö8ÁUÑKÐKùÒKs   Á+>B,c                ó�   • U R                   S:  a  / $ [        R                  R                  U R                  R
                  S5      /$ )zW
Microsoft Visual C++ store references Libraries.

Return
------
list of str
    paths
rô   zLib\store\references)r¨   rc   rd   re   rx  rñ   r/   s    r   ÚVCStoreRefsÚEnvironmentInfo.VCStoreRefsù  s8   € ð �;‰;˜ÓØˆIÜ—‘—‘˜TŸW™W×1Ñ1Ð3JÓKÐLÐLr   c           	     ó¤  • U R                   n[        R                  R                  UR                  S5      /nU R
                  S::  a  SOSnU R                  R                  U5      nU(       a1  U[        R                  R                  UR                  SU 35      /-  nU R
                  S:X  aL  SU R                  R                  SS9 3nU[        R                  R                  UR                  U5      /-  nU$ U R
                  S:¼  Ga  U R                  R                  R                  S	S
5      R                  5       n[        R                  R                  SSU S35      nU[        R                  R                  UR                  XpR                  R                  SS9-  5      /-  nU R                  R                  U R                  R                  :w  aG  U[        R                  R                  UR                  XpR                  R                  SS9-  5      /-  nU$ U[        R                  R                  UR                  S5      /-  nU$ )ak  
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
Ú
VCPackagesr  TFÚBinrô   rŽ  rŒ  r%   r$   ÚbinÚHostz%sr�  )rx  rc   rd   re   rñ   r¨   rZ   rI   rA   r9   r'   ÚupperrD   r0   )r)   rx  ÚtoolsrG   r„  rd   Úhost_idÚhost_dirs           r   ÚVCToolsÚEnvironmentInfo.VCTools  sÞ  € ð( �W‰WˆÜ—‘—‘˜bŸo™o¨|Ó<Ð=ˆàŸ;™;¨$Ó.‘4°EˆØ—g‘g×'Ñ'¨Ó1ˆÞØ”b—g‘g—l‘l 2§?¡?°c¸+¸Ð4GÓHÐIÑIˆEà�;‰;˜$ÓØ˜Ÿ™×,Ñ,°TÐ,Ð:Ð;Ð<ˆDØ”b—g‘g—l‘l 2§?¡?°DÓ9Ð:Ñ:ˆEð& ˆð# �[‰[˜DÔ Ø—g‘g×)Ñ)×1Ñ1°'¸5ÓA×GÑGÓIˆGÜ—w‘w—|‘| E¨T°'°¸"Ð+=Ó>ˆHØÜ—‘—‘˜RŸ_™_¨h¿¹×9KÑ9KÐPTÐ9KÐ9UÑ.UÓVðñ ˆEð �w‰w×"Ñ" d§g¡g×&8Ñ&8Ó8ØÜ—G‘G—L‘LØŸ™¨·G±G×4GÑ4GÈDÐ4GÐ4QÑ)Qóðñ �ð ˆð ”b—g‘g—l‘l 2§?¡?°EÓ:Ð;Ñ;ˆEàˆr   c                óÂ  • U R                   S::  aR  U R                  R                  SSS9n[        R                  R                  U R                  R                  SU 35      /$ U R                  R                  SS9n[        R                  R                  U R                  R                  S5      nU R                  n[        R                  R                  X# SU 35      /$ )zG
Microsoft Windows SDK Libraries.

Return
------
list of str
    paths
r  Tr‚  r�  r�  r  Úum)	r¨   rZ   rD   rc   rd   re   rx  r  Ú_sdk_subdir)r)   r„  r  Úlibvers       r   ÚOSLibrariesÚEnvironmentInfo.OSLibraries:  sµ   € ð �;‰;˜$ÓØŸ'™'×,Ñ,°T¸tÐ,ÐDˆKÜ—G‘G—L‘L §¡×!6Ñ!6¸#¸k¸]Ð8KÓLÐMÐMð Ÿ'™'×,Ñ,°Ð,Ð6ˆKÜ—'‘'—,‘,˜tŸw™w×4Ñ4°eÓ<ˆCØ×%Ñ%ˆFÜ—G‘G—L‘L ¨°°;°-Ð&@ÓAÐBÐBr   c                óÖ  • [         R                  R                  U R                  R                  S5      nU R
                  S::  a"  U[         R                  R                  US5      /$ U R
                  S:¼  a  U R                  nOSn[         R                  R                  X S35      [         R                  R                  X S35      [         R                  R                  X S35      /$ )	zE
Microsoft Windows SDK Include.

Return
------
list of str
    paths
rq  r  Úglrô   r"   Úsharedr¡  Úwinrt)rc   rd   re   rx  r  r¨   r¢  )r)   rq  Úsdkvers      r   Ú
OSIncludesÚEnvironmentInfo.OSIncludesN  s´   € ô —'‘'—,‘,˜tŸw™w×4Ñ4°iÓ@ˆà�;‰;˜$ÓØœRŸW™WŸ\™\¨'°4Ó8Ð9Ð9ð �{‰{˜dÓ"Ø×)Ñ)‘à�ä—‘—‘˜W¨°Ð&7Ó8Ü—‘—‘˜W¨° mÓ4Ü—‘—‘˜W¨°Ð&6Ó7ðð r   c                óð  • [         R                  R                  U R                  R                  S5      n/ nU R
                  S::  a  X R                  -  nU R
                  S:¼  a$  U[         R                  R                  US5      /-  nU R
                  S:¼  aÝ  UU[         R                  R                  U R                  R                  S5      [         R                  R                  USS5      [         R                  R                  US	S5      [         R                  R                  US
S5      [         R                  R                  U R                  R                  SSU R
                  S SSS5      /-  nU$ )zM
Microsoft Windows SDK Libraries Paths.

Return
------
list of str
    paths
Ú
Referencesr  r  zCommonConfiguration\Neutralrô   ÚUnionMetadataz'Windows.Foundation.UniversalApiContractz1.0.0.0z%Windows.Foundation.FoundationContractz,Windows.Networking.Connectivity.WwanContractÚExtensionSDKszMicrosoft.VCLibsrç   ÚCommonConfigurationÚneutral)rc   rd   re   rx  r  r¨   r¤  )r)   Úrefrr  s      r   Ú	OSLibpathÚEnvironmentInfo.OSLibpathh  s'  € ô �g‰g�l‰l˜4Ÿ7™7×0Ñ0°,Ó?ˆØˆà�;‰;˜#ÓØ×'Ñ'Ñ'ˆGà�;‰;˜$ÓØœŸ™Ÿ™ SÐ*HÓIÐJÑJˆGà�;‰;˜$ÓØØÜ—‘—‘˜TŸW™W×2Ñ2°OÓDÜ—‘—‘˜SÐ"KÈYÓWÜ—‘—‘˜SÐ"IÈ9ÓUÜ—‘—‘ØÐGÈóô —‘—‘Ø—G‘G×)Ñ)Ø#Ø&Ø—{‘{ 4Ð(Ø Ø)Øóðñ ˆ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.SdkTools�  s   € ô �D—O‘OÓ%Ó&Ð&r   c              #  óN  #   • U R                   S:  aJ  U R                   S::  a  SOSn[        R                  R                  U R                  R
                  U5      v •  U R                  R                  5       (       dT  U R                  R                  SS9nSU 3n[        R                  R                  U R                  R
                  U5      v •  U R                   S;   ax  U R                  R                  5       (       a  SnOU R                  R                  SSS	9nS
U 3n[        R                  R                  U R                  R
                  U5      v •  O˜U R                   S:¼  aˆ  [        R                  R                  U R                  R
                  S5      nU R                  R                  SS9nU R                  R                  n[        R                  R                  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Œ  r  r—  zBin\x86Tr�  )r  r  r"   r‚  zBin\NETFX 4.0 ToolsN)r¨   rc   rd   re   rx  r  rZ   r:   rA   r5   r  r&  )r)   Úbin_dirr„  rd   rª  s        r   r¸  ÚEnvironmentInfo._sdk_toolsœ  s�  é € ð �;‰;˜ÓØ#Ÿ{™{¨dÓ2‘e¸
ˆGÜ—'‘'—,‘,˜tŸw™w×4Ñ4°gÓ>Ò>à�w‰w×%Ñ%×'Ñ'ØŸ'™'×-Ñ-°$Ð-Ð7ˆKØ˜˜Ð&ˆDÜ—'‘'—,‘,˜tŸw™w×4Ñ4°dÓ;Ò;à�;‰;˜,Ó&Ø�w‰w×$Ñ$×&Ñ&Ø ‘à"Ÿg™g×1Ñ1¸$ÀDÐ1ÐI�Ø)¨+¨Ð7ˆDÜ—'‘'—,‘,˜tŸw™w×4Ñ4°dÓ;Ó;à�[‰[˜DÓ Ü—7‘7—<‘< §¡× 5Ñ 5°uÓ=ˆDØŸ'™'×-Ñ-°$Ð-Ð7ˆKØ—W‘W×2Ñ2ˆFÜ—'‘'—,‘,˜t x°¨}Ð%=Ó>Ò>à�7‰7×+×+Ø—'‘'×2Ñ2Ó2ð ,ùs   ‚H#H%c                óJ   • U R                   R                  nU(       a  U S3$ S$ )zE
Microsoft Windows SDK version subdir.

Return
------
str
    subdir
r>   r"   )rx  r  ©r)   Úucrtvers     r   r¢  ÚEnvironmentInfo._sdk_subdir¿  s&   € ð —'‘'×/Ñ/ˆÞ#*�7�)˜2�Ð2°Ð2r   c                ó�   • U R                   S:”  a  / $ [        R                  R                  U R                  R
                  S5      /$ )zC
Microsoft Windows SDK Setup.

Return
------
list of str
    paths
r  ÚSetup)r¨   rc   rd   re   rx  r  r/   s    r   ÚSdkSetupÚEnvironmentInfo.SdkSetupÌ  s7   € ð �;‰;˜ÓØˆIä—‘—‘˜TŸW™W×2Ñ2°GÓ<Ð=Ð=r   c                óª  • 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(       aH  UUR                   Vs/ s H-  n[        R                  R                  UR                  U5      PM/     sn-  nU(       aH  UUR                   Vs/ s H-  n[        R                  R                  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  Tr%   )rZ   rx  r¨   r5   r:   r9   r0   rO  rc   rd   re   rE  rT  rI  )r)   rZ   rx  Ú	include32Ú	include64r›  rÉ   s          r   ÚFxToolsÚEnvironmentInfo.FxToolsÛ  s  € ð �W‰WˆØ�W‰Wˆà�;‰;˜$ÓØˆIØ×,Ñ,Ó.Ô.×J°r×7HÑ7HÓ7JÔ3J‰Ià×(Ñ(Ó*×A¨b×.?Ñ.?Ó.AˆIØŸ™¨'Ñ1×M°R·]±]ÀgÑ5MˆIàˆÞØØ@B×@UÒ@UóÚ@U¸”—‘—‘˜R×.Ñ.°Ö4Ñ@Uññ ˆEö ØØ@B×@UÒ@UóÚ@U¸”—‘—‘˜R×.Ñ.°Ö4Ñ@Uññ ˆEð ˆùòùòs   Ã4EÄ4Ec                óþ   • U R                   S:  d  U R                  R                  (       d  / $ U R                  R	                  SS9n[
        R                  R                  U R                  R                  SU 35      /$ )zN
Microsoft .Net Framework SDK Libraries.

Return
------
list of str
    paths
rô   Tr�  zlib\um)r¨   rx  r>  rZ   rD   rc   rd   re   )r)   r„  s     r   ÚNetFxSDKLibrariesÚ!EnvironmentInfo.NetFxSDKLibrariesú  sa   € ð �;‰;˜Ó T§W¡W×%8×%8ØˆIà—g‘g×(Ñ(¨TÐ(Ð2ˆÜ—‘—‘˜TŸW™W×0Ñ0°V¸K¸=Ð2IÓJÐKÐKr   c                óÆ   • U R                   S:  d  U R                  R                  (       d  / $ [        R                  R                  U R                  R                  S5      /$ )zM
Microsoft .Net Framework SDK Includes.

Return
------
list of str
    paths
rô   z
include\um)r¨   rx  r>  rc   rd   re   r/   s    r   ÚNetFxSDKIncludesÚ EnvironmentInfo.NetFxSDKIncludes
  sC   € ð �;‰;˜Ó T§W¡W×%8×%8ØˆIä—‘—‘˜TŸW™W×0Ñ0°-Ó@ÐAÐAr   c                ól   • [         R                  R                  U R                  R                  S5      /$ )zT
Microsoft Visual Studio Team System Database.

Return
------
list of str
    paths
zVSTSDB\Deploy)rc   rd   re   rx  rê   r/   s    r   ÚVsTDbÚEnvironmentInfo.VsTDb  s'   € ô —‘—‘˜TŸW™W×1Ñ1Ð3CÓDÐEÐEr   c                ó¨  • 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                   S SU 3n[        R                  R                  X5      /nU R                   S:¼  a$  U[        R                  R                  XS	5      /-  nU$ )
z>
Microsoft Build Engine.

Return
------
list of str
    paths
r  rŒ  TrŽ  r"   zMSBuild\rç   z\binÚRoslyn)	r¨   rx  rè   rZ   rA   rê   rc   rd   re   )r)   Ú	base_pathr„  rd   Úbuilds        r   ÚMSBuildÚEnvironmentInfo.MSBuild%  s¶   € ð �;‰;˜ÓØˆIØ�[‰[˜4ÓØŸ™×/Ñ/ˆIØŸ'™'×-Ñ-°dÐ-Ð;‰KàŸ™×,Ñ,ˆIØˆKà˜4Ÿ;™; tÐ,¨D°°Ð>ˆÜ—‘—‘˜iÓ.Ð/ˆà�;‰;˜$Óà”b—g‘g—l‘l 9°HÓ=Ð>Ñ>ˆEàˆr   c                ó�   • U R                   S:  a  / $ [        R                  R                  U R                  R
                  S5      /$ )zD
Microsoft HTML Help Workshop.

Return
------
list of str
    paths
r  zHTML Help Workshop)r¨   rc   rd   re   rx  rè   r/   s    r   ÚHTMLHelpWorkshopÚ EnvironmentInfo.HTMLHelpWorkshopA  s8   € ð �;‰;˜ÓØˆIä—‘—‘˜TŸW™W×4Ñ4Ð6JÓKÐLÐLr   c                óx  • U R                   S:  a  / $ U R                  R                  SS9n [        R                  R                  U R                  R                  S5      nU R                  n[        R                  R                  X$ SU 35      /$ ! [         a  n[        R                  " US5        e SnAff = f)zS
Microsoft Universal C Runtime SDK Libraries.

Return
------
list of str
    paths
rô   Tr�  r  r4  NÚucrt)r¨   rZ   rD   rc   rd   re   rx  r1  r5  r
   r6  Ú_ucrt_subdir)r)   r„  r  r7  rÀ  s        r   ÚUCRTLibrariesÚEnvironmentInfo.UCRTLibrariesP  s¡   € ð �;‰;˜ÓØˆIà—g‘g×(Ñ(¨TÐ(Ð2ˆð	Ü—'‘'—,‘,˜tŸw™w×9Ñ9¸5ÓAˆCð ×#Ñ#ˆÜ—‘—‘˜S I¨T°+°Ð"?Ó@ÐAÐAøô	 ó 	Ü�NŠN˜2Ð?Ô@Øûð	ús   ­4B Â
B9ÂB4Â4B9c                ó>  • U R                   S:  a  / $  [        R                  R                  U R                  R
                  S5      n[        R                  R                  XR                   S35      /$ ! [         a  n[        R                  " US5        e SnAff = f)zQ
Microsoft Universal C Runtime SDK Include.

Return
------
list of str
    paths
rô   rq  r4  NrÞ  )
r¨   rc   rd   re   rx  r1  r5  r
   r6  rß  )r)   rq  r7  s      r   ÚUCRTIncludesÚEnvironmentInfo.UCRTIncludesf  s‚   € ð �;‰;˜ÓØˆIð	Ü—g‘g—l‘l 4§7¡7×#=Ñ#=¸yÓIˆGô —‘—‘˜W×):Ñ):Ð(;¸4Ð&@ÓAÐBÐBøô ó 	Ü�NŠN˜2Ð?Ô@Øûð	ús   ”4A5 Á5
BÁ?BÂBc                óJ   • U R                   R                  nU(       a  U S3$ S$ )zQ
Microsoft Universal C Runtime SDK version subdir.

Return
------
str
    subdir
r>   r"   )rx  r8  r¿  s     r   rß  ÚEnvironmentInfo._ucrt_subdirz  s&   € ð —'‘'×4Ñ4ˆÞ#*�7�)˜2�Ð2°Ð2r   c                óf   • SU R                   s=:”  a  S:”  a   / $   U R                  R                  /$ )z;
Microsoft Visual F#.

Return
------
list of str
    paths
r  r  )r¨   rx  r*  r/   s    r   ÚFSharpÚEnvironmentInfo.FSharp‡  s4   € ð �$—+‘+Õ$ Ô$ØˆIð %ð —‘×(Ñ(Ð)Ð)r   c                óF  ^^• SU R                    S3mU R                  R                  SS9R                  S5      m/ nU R                  R
                  n[        R                  R                  UR                  SS5      5      n[        R                  R                  U5      (       a[  [        R                  R                  U[        R                  " U5      S   5      nX[        R                  R                  US	5      /-  nU[        R                  R                  US
5      /-  nSU R                   S-   S3S[        U R                  5      S-   S34nUU4S j[        R                   " X5       5       n[#        [%        [        R                  R&                  U5      S5      $ )zc
Microsoft Visual C++ runtime redistributable dll.

Returns the first suitable path found or None.
Ú	vcruntimez0.dllTr�  r>   z\Toolsz\Redistrõ   ÚonecoreÚredistzMicrosoft.VCé
   z.CRTc              3  ól   >#   • U  H)  u  p[         R                  R                  UTUT5      v •  M+     g 7frX   )rc   rd   re   )rd  rf  Úcrt_dirr„  rë  s      €€r   rg  Ú2EnvironmentInfo.VCRuntimeRedist.<locals>.<genexpr>³  s1   øé € ð 
â%JÑ!�ô �G‰G�L‰L˜ ¨g°y×AÐAÚ%Jùs   ƒ14N)r©   rZ   rD   Ústriprx  rñ   rc   rd   Údirnamer'   rï   re   rÑ   Úintr¨   r¸   r¹   rj  ÚfilterÚisfile)r)   ÚprefixesÚ
tools_pathÚredist_pathÚcrt_dirsÚcandidate_pathsr„  rë  s         @@r   ÚVCRuntimeRedistÚEnvironmentInfo.VCRuntimeRedist–  sM  ù€ ð   §¡˜}¨EÐ2ˆ	Ø—g‘g×(Ñ(¨TÐ(Ð2×8Ñ8¸Ó>ˆð ˆØ—W‘W×)Ñ)ˆ
Ü—g‘g—o‘o j×&8Ñ&8¸ÀJÓ&OÓPˆÜ�7‰7�=‰=˜×%Ñ%äŸ'™'Ÿ,™, {´B·J²J¸{Ó4KÈBÑ4OÓPˆKØ¤b§g¡g§l¡l°;À	Ó&JÐKÑKˆHà”R—W‘W—\‘\ *¨hÓ7Ð8Ñ8ˆð ˜4Ÿ;™;¨Ñ+Ð,¨DÐ1àœ3˜tŸ{™{Ó+¨bÑ0Ð1°Ð6ð
ˆõ
ä%.×%6Ò%6°xÔ%Jó
ˆô ”Fœ2Ÿ7™7Ÿ>™>¨?Ó;¸TÓBÐBr   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,                  (       a  U R,                  US'   U$ )z‹
Return environment dict.

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

Return
------
dict
    environment
rq  r  rr  rd   )rq  r  rr  rd   é   rs  )rp  Ú_build_pathsr‰  r«  rã  rÏ  r�  r¤  rÉ  rà  rÌ  r“  r´  rž  r…  rÒ  r¹  rÄ  rØ  rÛ  rè  r¨   rü  )r)   ÚexistsÚenvs      r   Ú
return_envÚEnvironmentInfo.return_env¹  sR  € ô Ø×%Ñ%Øà—O‘OØ—O‘OØ×%Ñ%Ø×)Ñ)ð	ð ó	ð ×!Ñ!Øà×$Ñ$Ø×$Ñ$Ø—L‘LØ×&Ñ&Ø×*Ñ*ðð ó
ð ×%Ñ%ØØ×!Ñ! 4§<¡<°×1AÑ1AÀ4Ç>Á>ÐRØóð
 ×"Ñ"Øà—L‘LØ—L‘LØ—J‘JØ—M‘MØ—M‘MØ—L‘LØ—L‘LØ×)Ñ)Ø—K‘Kð
ð óñ7*
ˆðV �;‰;˜"Ó ×!5×!5Ø)-×)=Ñ)=ˆCÐ%Ñ&Øˆ
r   c                ó  • [         R                  R                  U5      n[        R                  " US5      R                  [        R                  5      n[         R                  " XE5      nU(       a-  [        [        [        R                  R                  U5      5      OUnU(       d2  UR                  5        S3n[        R                  R                  U5      e[!        U5      n	[        R                  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 environment variable is empty)r¸   ÚchainÚfrom_iterabler   rR   râ   rc   Úpathsepr·  rõ  rd   rï   rš  r®   r¯   r°   r   re   )
r)   r•   Úspec_path_listsr  Ú
spec_pathsÚ	env_pathsrƒ  Úextant_pathsrð   Úunique_pathss
             r   r   ÚEnvironmentInfo._build_pathsö  s¬   € ô. —_‘_×2Ñ2°?ÓCˆ
Ü—K’K  bÓ)×/Ñ/´·
±
Ó;ˆ	Ü—’ 
Ó6ˆÞ=C”tœF¤2§7¡7§=¡=°%Ó8Ô9ÈˆÞØ—Z‘Z“\�NÐ"@ÐAˆCÜ×"Ñ"×9Ñ9¸#Ó>Ð>Ü& |Ó4ˆÜ�z‰z�‰˜|Ó,Ð,r   )rZ   r¤   rx  )Nr   )rL   rM   rN   )rL   z	list[str]rm  )T)r  rO   rL   rp  )#r   r   r   r   rQ   r*   rS   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   rv  rv  ˆ  s  † ñö.?ð ñ	ó ð	ð ñ	ó ð	ð ñLó ðLð& ñ
ó ð
ð ñLó ðLð( ñMó ðMð ñ0ó ð0ðd ñCó ðCð& ñó ðð2 ñ%ó ð%ðN ñ	'ó ð	'ò!3ðF ó
3ó ð
3ð ñ>ó ð>ð ñó ðð< ñLó ðLð ñBó ðBð ñ	Fó ð	Fð ñó ðð6 ñMó ðMð óBó ðBð* óCó ðCð& ó
3ó ð
3ð ñ*ó ð*ð ó Có ð CöD;õz-r   rv  )"rQ   Ú
__future__r   r¼   r¸   rÓ   rc   Úos.pathÚplatformÚtypingr   r   r   Úmore_itertoolsr   Ú_pathr	   Úcompatr
   Údistutils.errorsr®   Útyping_extensionsr   r   Úsystemr   r   Údictrt  r   rU   r    rp  rv  r   r   r   Ú<module>r     s©   ðòõ #ã Û Û Û 	Û Û ß 5Ñ 5å *å Ý ã æß<ö ˜ŸšÓ*¨iÓ7ÛÞ÷!ñ !ñ #›f€Gˆ^Ó$÷v
ñ v
÷r~ñ ~÷BW'ñ W'ôt1�yô 1÷M
-ò M
-r   