ó
    Á›‘hŸ¢  ã                  óh  • % 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  SSKJr  SSKr\
(       a  SSKJr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 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)Úunique_everseen)Ú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   ó    ÚSC:\Users\psant\Downloads\Noiseback\school\venv\Lib\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 5       rS rS rSSS	 jjrSSS
 jjrSS 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__5   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
Ú_é   N)r$   Úfind©r%   s    r   Ú
target_cpuÚPlatformInfo.target_cpu8   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©r-   r,   s    r   Útarget_is_x86ÚPlatformInfo.target_is_x86D   s   € ð �‰ %Ñ'Ð'r   c                ó    • U R                   S:H  $ )zX
Return True if current CPU is x86 32 bits..

Return
------
bool
    CPU is x86 32 bits
r0   ©Úcurrent_cpur,   s    r   Úcurrent_is_x86ÚPlatformInfo.current_is_x86O   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)
r0   r   r!   ú\x64Ú\r5   ©r%   Úhidex86r    s      r   Úcurrent_dirÚPlatformInfo.current_dirZ   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)
r0   r   r!   r:   r;   r1   r<   s      r   Ú
target_dirÚPlatformInfo.target_dirr   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.
r0   r   r;   r)   )r6   r-   rA   r#   )r%   Úforcex86Úcurrents      r   Ú	cross_dirÚPlatformInfo.cross_dirŠ   sQ   € ö  $‘%¨×)9Ñ)9ˆð �‰ 'Ó)ð ð	
ð —‘Ó"×*Ñ*¨4°2°g°Y¸a°ÓAð	
r   )r$   N©ÚreturnÚNone)FF©rI   Ústr©F)r   r   r   r   Ú__doc__r
   Úgetr"   r6   r&   Úpropertyr-   r2   r7   r>   rA   rF   r   r   r   r   r   r   )   sU   † ñð —+’+Ð6¸Ó;×AÑAÓC€Kô9ð ñ	4ó ð	4ò	(ò	)ö
ö0
÷0
r   r   c                  ó.  • \ rS rSrSr\R                  \R                  \R                  \R                  4r
SS jr\SS j5       r\S 5       r\S 5       r\S 5       r\SS j5       r\SS	 j5       r\S
 5       r\S 5       r\SS j5       rSS jrS 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©r`   ra   rb   rc   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
ÚVS7rg   r,   s    r   ÚvsÚRegistryInfo.vsÚ   rj   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	   ©r`   ra   rb   rs   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
ÚNETFXSDKrv   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                óš   • 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: str
    Force x86 software registry.

Return
------
str
    Registry key
r   ÚWow6432NodeÚSoftwareÚ	Microsoft)rW   r7   r`   ra   rb   )r%   Úkeyr0   Únode64s       r   Ú	microsoftÚRegistryInfo.microsoft"  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
    value
Nr   T)
r   ÚKEY_READÚOpenKeyÚCloseKeyr†   ÚHKEYSÚOSErrorrW   r7   ÚQueryValueEx)	r%   r„   ÚnameÚkey_readÚopenkeyÚclosekeyÚmsÚhkeyÚbkeys	            r   ÚlookupÚRegistryInfo.lookup5  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rV   NrH   rK   rM   )r   r   r   r   rN   r   r   r   r   r   rŒ   r&   rP   r\   rc   rh   rm   rp   rs   rw   r{   r~   r†   r–   r   r   r   r   rR   rR   ¢   sø   † ñð 	×ÑØ× Ñ Ø×!Ñ!Ø× Ñ ð	€Eô ð ó	ó ð	ð ñ	6ó ð	6ð ñ	-ó ð	-ð ñ	-ó ð	-ð ó	%ó ð	%ð ó	 ó ð	 ð ñ	;ó ð	;ð ñ	<ó ð	<ð ó	/ó ð	/ôBõ&'r   rR   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
 rS#S jr\S 5       r\S 5       r\S 5       rS rS r\S$S j5       r\S 5       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 5       r\S&S j5       r \S&S j5       r!S&S jr"\S'S j5       r#S r$g)(Ú
SystemInfoi_  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 rU   )ÚrirW   Úfind_programdata_vs_versÚknown_vs_pathsÚ_find_latest_available_vs_verÚvs_verÚvc_ver)r%   Úregistry_infor¢   s      r   r&   ÚSystemInfo.__init__q  sE   € ØŒØ—'‘'—*‘*ˆŒà"×;Ñ;Ó=ˆÔð %+×$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      S   $ )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Úsorted)r%   Úreg_vc_versÚvc_verss      r   r    Ú(SystemInfo._find_latest_available_vs_verz  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†   rh   rp   rm   Ú	itertoolsÚproductrŒ   r   rŠ   r‰   r�   ÚQueryInfoKeyÚrangeÚ
contextlibÚsuppressÚ
ValueErrorÚfloatÚ	EnumValueÚappendÚEnumKeyr­   )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)
r`   Úlistdirr�   ra   rb   Ú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¹   rb   Ú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)r`   ra   rb   ÚProgramFilesx86r¡   r�   r–   rm   )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_legacyr`   ra   Úisdirr¨   r©   rª   )r%   ra   Ú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Ï   rã   r`   ra   rb   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)	r`   ra   rb   rá   r¡   r�   rp   r–   rh   )r%   râ   Úreg_pathÚ	python_vcÚ
default_vcs        r   rç   ÚSystemInfo._guess_vc_legacy*  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.WindowsSdkVersion@  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_namer`   ra   rb   ÚWindowsSdkDirr,   s    r   ÚWindowsSdkLastVersionÚ SystemInfo.WindowsSdkLastVersionV  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   r`   ra   rb   r�   rw   r–   rè   rp   r¢   Úrfindr›   rê   )r%   ÚsdkdirrÂ   Úlocra   Úinstall_baseÚintverÚds           r   r  ÚSystemInfo.WindowsSdkDirb  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)zI
Microsoft Windows SDK executable directory.

Return
------
str
    path
rü   é#   r   é(   rý   TF)r    r=   r;   Ú-zWinSDK-NetFxÚToolsrí   r	  ÚAr
  N)r¡   rW   r>   r#   ÚNetFxSdkVersionr`   ra   rb   r�   r{   r   rw   r–   )	r%   Únetfxverr$   r=   ÚfxÚregpathsrÂ   ra   Ú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   )r`   ra   rb   r�   r\   r¡   r–   )r%   ra   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 HJ  nU R                  R                  U R                  R                  SU 35      nU(       d  M?  U=(       d    Ss  $    g)zD
Microsoft Universal CRT SDK directory.

Return
------
str
    path
rí   )Ú10Ú81r   Úkitsrootr   N)r¡   r�   r–   r~   )r%   ÚversrÂ   r  s       r   ÚUniversalCRTSdkDirÚSystemInfo.UniversalCRTSdkDir¿  s[   € ð  $Ÿ{™{¨dÓ2‰|¸ˆó ˆCØ—W‘W—^‘^ D§G¡G×$>Ñ$>À(È3È%Ð@PÓQˆFßˆvØ—| Ò#ñ ð
 r   c                ót   • U R                  [        R                  R                  U R                  S5      5      $ )zP
Microsoft Universal C Runtime SDK last version.

Return
------
str
    version
r  )r  r`   ra   rb   r*  r,   s    r   ÚUniversalCRTSdkLastVersionÚ%SystemInfo.UniversalCRTSdkLastVersionÔ  s*   € ð ×&Ñ&¤r§w¡w§|¡|°D×4KÑ4KÈUÓ'SÓTÐTr   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$ )zE
Microsoft .NET Framework SDK directory.

Return
------
str
    path
r   Úkitsinstallationfolder)r  r`   ra   rb   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©r`   ra   rb   rš   r�   r–   rh   ©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Úframeworkdir64r7  r8  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
r   ©Ú_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
é@   rA  r,   s    r   ÚFrameworkVersion64ÚSystemInfo.FrameworkVersion64/  rE  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ú   )rN  ú
v2.0.50727g       @)zv3.0rO  r   )r�   r–   rh   Úgetattrr  r¡   r"   )r%   ÚbitsÚreg_verÚdot_net_dirrÂ   s        r   rB  Ú!SystemInfo._find_dot_net_versions;  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                ó„   ^ ^• U U4S j[        [        R                  " 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  Hc  n[         R                  R                  [         R                  R                  TU5      5      (       d  MG  UR	                  T5      (       d  M_  Uv •  Me     g 7frU   )r`   ra   rè   rb   Ú
startswith)Ú.0Údir_namera   Úprefixs     €€r   Ú	<genexpr>Ú0SystemInfo._use_last_dir_name.<locals>.<genexpr>j  sN   øé € ð 
â6�Ü�w‰w�}‰}œRŸW™WŸ\™\¨$°Ó9×:ó ð ×#Ñ# F×+÷ ‰HÚ6ùs   ƒAA.ÁA.Á%	A.Nr   )Úreversedr`   rÊ   Únext)ra   rZ  Úmatching_dirss   `` r   r  ÚSystemInfo._use_last_dir_nameY  s4   ù€ õ"
ä$¤R§Z¢Z°Ó%5Ô6ó
ˆô �M 4Ó(×.¨BÐ.r   )rŸ   rW   r�   r¢   r¡   rU   rH   )rI   zdict[float, str])rI   ztuple[LiteralString, ...]©rI   z
str | None)rI   ztuple[str, ...])r   )%r   r   r   r   rN   r
   rO   rš   r›   rá   r&   r    r§   rž   ÚstaticmethodrÎ   rP   rã   rê   ræ   rç   r   r  r  r  r#  r*  r-  r  r3  r:  r>  rC  rH  rB  r  r   r   r   r   r™   r™   _  sÀ  † ñ	ð �[Š[˜ 2Ó&€FØ—;’;˜~¨rÓ2€LØ—k’kÐ"5°|ÓD€OöSò#ò(ô>(ðT ñ7ó ð7ð  ñLó ðLð" ñó ðò"ò<Oð, óó ðð* ñ	Pó ð	Pð ó(ó ð(ðT ñ"ó ð"ðH ñ
8ó ð
8ð ñó ðð( ñ	Uó ð	Uð ñ
ó ð
ð  ñó ðð" ñ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
)Ú_EnvironmentDictis  rL   Úincluder  Úlibpathra   zNotRequired[str | None]Úpy_vcruntime_redistr   N)r   r   r   r   Ú__annotations__r   r   r   r   rd  rd  s  s   ‡ ØƒLØ	ƒHØƒLØ
ƒIØ0Ö0r   rd  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 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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   rW   rR   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
)rl  r¡   r,   s    r   r¡   ÚEnvironmentInfo.vs_verœ  ó   € ð �w‰w�~‰~Ðr   c                ó.   • U R                   R                  $ )z@
Microsoft Visual C++ version.

Return
------
float
    version
)rl  r¢   r,   s    r   r¢   ÚEnvironmentInfo.vc_ver¨  rr  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¡   rW   r>   r`   ra   rb   rl  rã   )r%   ÚpathsÚarch_subdirra   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)r`   ra   rb   rl  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¡   rW   rA   r`   ra   rb   rl  rê   )r%   rx  rw  ra   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¡   r`   ra   rb   rl  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�  )rl  r`   ra   rb   rê   r¡   rW   rF   r>   r6   r#   ÚupperrA   r-   )r%   rl  ÚtoolsrD   rx  ra   Ú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û   Trv  rƒ  r�  r  Úum)	r¡   rW   rA   r`   ra   rb   rl  r  Ú_sdk_subdir)r%   rx  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
re  rû   Úglrí   r   Úsharedr•  Úwinrt)r`   ra   rb   rl  r  r¡   r–  )r%   re  Úsdkvers      r   Ú
OSIncludesÚEnvironmentInfo.OSIncludesA  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)r`   ra   rb   rl  r  r¡   r˜  )r%   Úrefrf  s      r   Ú	OSLibpathÚEnvironmentInfo.OSLibpath[  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   rv  zBin\NETFX 4.0 ToolsN)r¡   r`   ra   rb   rl  r  rW   r7   r>   r2   r  r  )r%   Úbin_dirrx  ra   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   )rl  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¡   r`   ra   rb   rl  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!   )rW   rl  r¡   r2   r7   r6   r-   rC  r`   ra   rb   r:  rH  r>  )r%   rW   rl  Ú	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¡   rl  r3  rW   rA   r`   ra   rb   )r%   rx  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¡   rl  r3  r`   ra   rb   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)r`   ra   rb   rl  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¡   rl  rá   rW   r>   rã   r`   ra   rb   )r%   Ú	base_pathrx  ra   Ú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¡   r`   ra   rb   rl  rá   r,   s    r   ÚHTMLHelpWorkshopÚ EnvironmentInfo.HTMLHelpWorkshop4  s8   € ð �;‰;˜ÓØˆIä—‘—‘˜TŸW™W×4Ñ4Ð6JÓKÐLÐLr   c                ó"  • 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      /$ )zS
Microsoft Universal C Runtime SDK Libraries.

Return
------
list of str
    paths
rí   Tr�  r  Úucrt)	r¡   rW   rA   r`   ra   rb   rl  r*  Ú_ucrt_subdir)r%   rx  r  r´  s       r   ÚUCRTLibrariesÚEnvironmentInfo.UCRTLibrariesC  sv   € ð �;‰;˜ÓØˆIà—g‘g×(Ñ(¨TÐ(Ð2ˆÜ�g‰g�l‰l˜4Ÿ7™7×5Ñ5°uÓ=ˆØ×#Ñ#ˆÜ—‘—‘˜S I¨T°+°Ð"?Ó@ÐAÐAr   c                óè   • U R                   S:  a  / $ [        R                  R                  U R                  R
                  S5      n[        R                  R                  XR                   S35      /$ )zQ
Microsoft Universal C Runtime SDK Include.

Return
------
list of str
    paths
rí   re  rÒ  )r¡   r`   ra   rb   rl  r*  rÓ  )r%   re  s     r   ÚUCRTIncludesÚEnvironmentInfo.UCRTIncludesU  sW   € ð �;‰;˜ÓØˆIä—'‘'—,‘,˜tŸw™w×9Ñ9¸9ÓEˆÜ—‘—‘˜W×):Ñ):Ð(;¸4Ð&@ÓAÐBÐBr   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   )rl  r-  r³  s     r   rÓ  ÚEnvironmentInfo._ucrt_subdire  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¡   rl  r#  r,   s    r   ÚFSharpÚEnvironmentInfo.FSharpr  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rU   )r`   ra   rb   )rX  rZ  Úcrt_dirrx  rß  s      €€r   r[  Ú2EnvironmentInfo.VCRuntimeRedist.<locals>.<genexpr>ž  s1   øé € ð 
â%JÑ!�ô �G‰G�L‰L˜ ¨g°y×AÐAÚ%Jùs   ƒ14N)r¢   rW   rA   Ústriprl  rê   r`   ra   Údirnamer#   rè   rb   rÊ   Úintr¡   r²   r³   r^  ÚfilterÚisfile)r%   ÚprefixesÚ
tools_pathÚredist_pathÚcrt_dirsÚcandidate_pathsrx  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
re  r  rf  ra   )re  r  rf  ra   é   rg  )rd  Ú_build_pathsr}  rŸ  r×  rÃ  r„  r˜  r½  rÔ  rÀ  r‡  r¨  r’  ry  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
   rO   rÛ   r`   Úpathsepr«  ré  ra   rè   rŽ  r¨   r©   rª   r   rb   )
r%   r�   Úspec_path_listsrõ  Ú
spec_pathsÚ	env_pathsrw  Ú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   )rW   r�   rl  )Nr   rH   ra  )T)rõ  ÚboolrI   rd  )#r   r   r   r   rN   r&   rP   r¡   r¢   ry  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   rj  rj  {  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   rj  )rN   Ú
__future__r   r¶   r²   rÌ   r`   Úos.pathÚplatformÚtypingr   r   Úmore_itertoolsr   Údistutils.errorsr¨   Útyping_extensionsr   r   Úsystemr   r
   Údictrh  r   rR   r™   rd  rj  r   r   r   Ú<module>r     s    ðòõ #ã Û Û Û 	Û Û ß +å *ã æß<ö ˜ŸšÓ*¨iÓ7ÛÞ÷!ñ !ñ #›f€Gˆ^Ó$÷v
ñ v
÷rzñ z÷zQ/ñ Q/ôh1�yô 1÷E
-ò E
-r   