Ë
    óÇ:j�§  ã                  ón  — U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	m
Z
mZmZ ddlmZ ddlmZ ddlmZ ddlZe
rdd	lmZmZ e
s ej0                  «       d
k(  rddlZddlmZ n G d„ d«      Z e«       Zded<    G d„ d«      Z G d„ d«      Z G d„ d«      Z G d„ de«      Z  G d„ d«      Z!y)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                  ó   — e Zd ZdZdZdZdZy)ÚwinregN)Ú__name__Ú
__module__Ú__qualname__Ú
HKEY_USERSÚHKEY_CURRENT_USERÚHKEY_LOCAL_MACHINEÚHKEY_CLASSES_ROOT© ó    úd/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/setuptools/msvc.pyr   r   #   s   „ Øˆ
Ø ÐØ!ÐØ Ñr   r   zdict[str, str]r   c                  óš   — e Zd ZdZ ej
                  dd«      j                  «       Zdd„Ze	dd„«       Z
dd„Zdd„Zddd„Zddd	„Zddd
„Zy)ÚPlatformInfoz�
    Current and Target Architectures information.

    Parameters
    ----------
    arch: str
        Target architecture.
    Úprocessor_architectureÚ c                óN   — |j                  «       j                  dd«      | _        y )NÚx64Úamd64)ÚlowerÚreplaceÚarch)Úselfr$   s     r   Ú__init__zPlatformInfo.__init__8   s   € Ø—J‘J“L×(Ñ(¨°Ó8ˆ�	r   c                óX   — | j                   | j                   j                  d«      dz   d S )zs
        Return Target CPU architecture.

        Return
        ------
        str
            Target CPU
        Ú_r   N)r$   Úfind©r%   s    r   Ú
target_cpuzPlatformInfo.target_cpu;   s(   € ð �y‰y˜Ÿ™Ÿ™¨Ó,¨qÑ0Ð2Ð3Ð3r   c                ó    — | j                   dk(  S )z‡
        Return True if target CPU is x86 32 bits..

        Return
        ------
        bool
            CPU is x86 32 bits
        Úx86©r+   r*   s    r   Útarget_is_x86zPlatformInfo.target_is_x86G   s   € ð �‰ %Ñ'Ð'r   c                ó    — | j                   dk(  S )zˆ
        Return True if current CPU is x86 32 bits..

        Return
        ------
        bool
            CPU is x86 32 bits
        r-   ©Úcurrent_cpur*   s    r   Úcurrent_is_x86zPlatformInfo.current_is_x86R   s   € ð ×Ñ 5Ñ(Ð(r   c                ól   — | j                   dk(  r|rdS | j                   dk(  r|rdS d| j                   › �S )uk  
        Current platform specific subfolder.

        Parameters
        ----------
        hidex86: bool
            return '' and not 'Â†' if architecture is x86.
        x64: bool
            return 'd' and not 'md64' if architecture is amd64.

        Return
        ------
        str
            subfolder: '	arget', or '' (see hidex86 parameter)
        r-   r   r!   ú\x64ú\r1   ©r%   Úhidex86r    s      r   Úcurrent_dirzPlatformInfo.current_dir]   sR   € ð$ × Ñ  EÒ)©gð ð	
ð × Ñ  GÒ+±ð ð	
ð
 �d×&Ñ&Ð'Ð(ð	
r   c                ól   — | j                   dk(  r|rdS | j                   dk(  r|rdS d| j                   › �S )ar  
        Target platform specific subfolder.

        Parameters
        ----------
        hidex86: bool
            return '' and not '\x86' if architecture is x86.
        x64: bool
            return '\x64' and not '\amd64' if architecture is amd64.

        Return
        ------
        str
            subfolder: '\current', or '' (see hidex86 parameter)
        r-   r   r!   r5   r6   r.   r7   s      r   Ú
target_dirzPlatformInfo.target_diru   sL   € ð$ —‘ 5Ò(©Wð ð	
ð —‘ 7Ò*©sð ð	
ð
 �d—o‘oÐ&Ð'ð	
r   c                óŒ   — |rdn| j                   }| j                  |k(  rdS | j                  «       j                  dd|› d�«      S )ap  
        Cross platform specific subfolder.

        Parameters
        ----------
        forcex86: bool
            Use 'x86' as current architecture even if current architecture is
            not x86.

        Return
        ------
        str
            subfolder: '' if target architecture is current architecture,
            '\current_target' if not.
        r-   r   r6   r(   )r2   r+   r;   r#   )r%   Úforcex86Úcurrents      r   Ú	cross_dirzPlatformInfo.cross_dir�   sQ   € ñ  $‘%¨×)9Ñ)9ˆð �‰ 'Ò)ð ð	
ð —‘Ó"×*Ñ*¨4°2°g°Y¸a°ÓAð	
r   N)r$   ÚstrÚreturnÚNone©rA   r@   )rA   Úbool)FF©F)r   r   r   Ú__doc__r   Úgetr"   r2   r&   Úpropertyr+   r/   r3   r9   r;   r?   r   r   r   r   r   ,   sW   „ ñð �'—+‘+Ð6¸Ó;×AÑAÓC€Kó9ð ò	4ó ð	4ó	(ó	)ô
ô0
õ0
r   r   c                  óP  — e Zd ZdZej
                  ej                  ej                  ej                  fZ	dd„Z
edd„«       Zedd„«       Zedd„«       Zedd„«       Zedd„«       Zedd„«       Zedd	„«       Zedd
„«       Zedd„«       Zeddd„«       Zeddd„«       Zddd„Zdd„Zy)ÚRegistryInfozŸ
    Microsoft Visual Studio related registry information.

    Parameters
    ----------
    platform_info: PlatformInfo
        "PlatformInfo" instance.
    c                ó   — || _         y ©N)Úpi)r%   Úplatform_infos     r   r&   zRegistryInfo.__init__¶   s	   € Øˆ�r   c                 ó   — y)z€
        Microsoft Visual Studio root registry key.

        Return
        ------
        str
            Registry key
        ÚVisualStudior   r*   s    r   ÚvisualstudiozRegistryInfo.visualstudio¹   s   € ð r   c                óV   — t         j                  j                  | j                  d«      S )z
        Microsoft Visual Studio SxS registry key.

        Return
        ------
        str
            Registry key
        ÚSxS)ÚosÚpathÚjoinrQ   r*   s    r   ÚsxszRegistryInfo.sxsÅ   s   € ô �w‰w�|‰|˜D×-Ñ-¨uÓ5Ð5r   c                óV   — t         j                  j                  | j                  d«      S )z|
        Microsoft Visual C++ VC7 registry key.

        Return
        ------
        str
            Registry key
        ÚVC7©rT   rU   rV   rW   r*   s    r   ÚvczRegistryInfo.vcÑ   ó   € ô �w‰w�|‰|˜DŸH™H eÓ,Ð,r   c                óV   — t         j                  j                  | j                  d«      S )z
        Microsoft Visual Studio VS7 registry key.

        Return
        ------
        str
            Registry key
        ÚVS7rZ   r*   s    r   ÚvszRegistryInfo.vsÝ   r\   r   c                 ó   — y)zƒ
        Microsoft Visual C++ for Python registry key.

        Return
        ------
        str
            Registry key
        zDevDiv\VCForPythonr   r*   s    r   Úvc_for_pythonzRegistryInfo.vc_for_pythoné   s   € ð %r   c                 ó   — y)zq
        Microsoft SDK registry key.

        Return
        ------
        str
            Registry key
        zMicrosoft SDKsr   r*   s    r   Úmicrosoft_sdkzRegistryInfo.microsoft_sdkõ   s   € ð  r   c                óV   — t         j                  j                  | j                  d«      S )z‚
        Microsoft Windows/Platform SDK registry key.

        Return
        ------
        str
            Registry key
        r   ©rT   rU   rV   rc   r*   s    r   Úwindows_sdkzRegistryInfo.windows_sdk  s   € ô �w‰w�|‰|˜D×.Ñ.°	Ó:Ð:r   c                óV   — t         j                  j                  | j                  d«      S )z€
        Microsoft .NET Framework SDK registry key.

        Return
        ------
        str
            Registry key
        ÚNETFXSDKre   r*   s    r   Ú	netfx_sdkzRegistryInfo.netfx_sdk  s   € ô �w‰w�|‰|˜D×.Ñ.°
Ó;Ð;r   c                 ó   — y)z€
        Microsoft Windows Kits Roots registry key.

        Return
        ------
        str
            Registry key
        zWindows Kits\Installed Rootsr   r*   s    r   Úwindows_kits_rootszRegistryInfo.windows_kits_roots  s   € ð /r   c                 ó   — y rL   r   ©r%   Úkeyr-   s      r   Ú	microsoftzRegistryInfo.microsoft%  s   € ØQTr   c                 ó   — y rL   r   rm   s      r   ro   zRegistryInfo.microsoft'  s   € Ø=@r   c                ó†   — | j                   j                  «       s|rdnd}t        j                  j	                  d|d|«      S )a  
        Return key in Microsoft software registry.

        Parameters
        ----------
        key: str
            Registry key path where look.
        x86: bool
            Force x86 software registry.

        Return
        ------
        str
            Registry key
        r   ÚWow6432NodeÚSoftwareÚ	Microsoft)rM   r3   rT   rU   rV   )r%   rn   r-   Únode64s       r   ro   zRegistryInfo.microsoft)  s5   € ð  —w‘w×-Ñ-Ô/±3‘¸MˆÜ�w‰w�|‰|˜J¨°¸SÓAÐAr   c           	     ó  — t         j                  }t         j                  }t         j                  }| j                  }| j
                  D ]>  }d}	  || ||«      d|«      }	 t        j                  ||«      d   |r ||«       c S c S  y# t        $ rC | j                  j                  «       s$	  || ||d«      d|«      }n# t        $ r Y Y Œ…w xY wY Œ‹Y Œvw xY w# t        $ r Y nw xY w	 |sŒ¤ ||«       Œ­# |r	 ||«       w w xY w)a%  
        Look for values in registry in Microsoft software registry.

        Parameters
        ----------
        key: str
            Registry key path where look.
        name: str
            Value name to find.

        Return
        ------
        str | None
            value
        Nr   T)
r   ÚKEY_READÚOpenKeyÚCloseKeyro   ÚHKEYSÚOSErrorrM   r3   ÚQueryValueEx)	r%   rn   ÚnameÚkey_readÚopenkeyÚclosekeyÚmsÚhkeyÚbkeys	            r   Úlookupz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øñ Ù˜T•Nð úsZ   ÁBÁ!CÂ#CÂ/CÃCÃ	CÃCÃCÃCÃCÃ	C&Ã#C6Ã%C&Ã&C6Ã6DN)rN   r   rA   rB   )rA   r   rE   )rn   r   r-   rD   rA   r   )rn   r@   r-   rD   rA   r@   )rn   r@   r}   r@   rA   ú
str | None)r   r   r   rF   r   r   r   r   r   rz   r&   rH   rQ   rW   r[   r_   ra   rc   rf   ri   rk   r   ro   r„   r   r   r   rJ   rJ   ¥   s  „ ñð 	×ÑØ× Ñ Ø×!Ñ!Ø× Ñ ð	€Eó ð ò	ó ð	ð ò	6ó ð	6ð ò	-ó ð	-ð ò	-ó ð	-ð ò	%ó ð	%ð ò	 ó ð	 ð ò	;ó ð	;ð ò	<ó ð	<ð ò	/ó ð	/ð ÛTó ØTØÛ@ó Ø@ôBô&'r   rJ   c                  óô  — e Zd ZdZ ej
                  dd«      Z ej
                  dd«      Z ej
                  de«      Z	 d	 	 	 	 	 d d„Z	d„ Z
d!d	„Zd"d
„Zed„ «       Zed#d„«       Zed#d„«       Zd„ Zd„ Zed$d„«       Zed#d„«       Zed#d„«       Zed%d„«       Zed#d„«       Zed%d„«       Zed#d„«       Zed$d„«       Zed%d„«       Zed#d„«       Zed#d„«       Zed&d„«       Zed&d„«       Z d&d„Z!ed'd(d„«       Z"y))Ú
SystemInfozê
    Microsoft Windows and Visual Studio related system information.

    Parameters
    ----------
    registry_info: RegistryInfo
        "RegistryInfo" instance.
    vc_ver: float
        Required Microsoft Visual C++ version.
    ÚWinDirr   ÚProgramFileszProgramFiles(x86)Nc                ó²   — || _         | j                   j                  | _        | j                  «       | _        |xs | j	                  «       x| _        | _        y rL   )ÚrirM   Úfind_programdata_vs_versÚknown_vs_pathsÚ_find_latest_available_vs_verÚvs_verÚvc_ver)r%   Úregistry_infor�   s      r   r&   zSystemInfo.__init__x  sI   € ð  ˆŒØ—'‘'—*‘*ˆŒà"×;Ñ;Ó=ˆÔð %+Ò$R¨d×.PÑ.PÓ.RÐRˆŒ�d•kr   c                óÞ   — | j                  «       }|s+| j                  st        j                  j	                  d«      ‚t        |«      }|j                  | j                  «       t        |«      S )zm
        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Ž   z(SystemInfo._find_latest_available_vs_verƒ  sa   € ð ×+Ñ+Ó-ˆá˜t×2Ò2Ü×"Ñ"×9Ñ9Ø7óð ô �kÓ"ˆØ�‰�t×*Ñ*Ô+Ü�7‹|Ðr   c           
     óÞ  — | j                   j                  }| j                   j                  | j                   j                  | j                   j                  f}g }t        j                  | j                   j                  |«      D �]'  \  }}	 t        j                  | ||«      dt        j                  «      }|5  t        j                  |«      \  }}}	t        |«      D ][  }
t        j                  t         «      5  t#        t        j$                  ||
«      d   «      }||vr|j'                  |«       ddd«       Œ] t        |«      D ]X  }
t        j                  t         «      5  t#        t        j(                  ||
«      «      }||vr|j'                  |«       ddd«       ŒZ 	 ddd«       �Œ* t+        |«      S # t        $ r Y �ŒBw xY w# 1 sw Y   ŒôxY w# 1 sw Y   Œ—xY w# 1 sw Y   �ŒhxY w)z˜
        Find Microsoft Visual Studio versions available in registry.

        Return
        ------
        list of float
            Versions
        r   N)r‹   ro   r[   ra   r_   Ú	itertoolsÚproductrz   r   rx   rw   r{   ÚQueryInfoKeyÚrangeÚ
contextlibÚsuppressÚ
ValueErrorÚfloatÚ	EnumValueÚappendÚEnumKeyÚsorted)r%   r�   ÚvckeysÚvs_versr‚   rn   rƒ   ÚsubkeysÚvaluesr(   ÚiÚvers               r   r“   zSystemInfo.find_reg_vs_vers—  s®  € ð �W‰W×ÑˆØ—'‘'—*‘*˜dŸg™g×3Ñ3°T·W±W·Z±ZÐ@ˆØˆÜ"×*Ñ*¨4¯7©7¯=©=¸&ÓAó 	0‰IˆD�#ðÜ—~‘~ d©B¨s«G°Q¼¿¹ÓH�ð ñ 0Ü%+×%8Ñ%8¸Ó%>Ñ"�˜ Ü˜v›ò 0�AÜ#×,Ñ,¬ZÓ8ñ 0Ü#¤F×$4Ñ$4°T¸1Ó$=¸aÑ$@ÓA˜Ø gÑ-Ø#ŸN™N¨3Ô/÷0ð 0ð0ô
 ˜w›ò 0�AÜ#×,Ñ,¬ZÓ8ñ 0Ü#¤F§N¡N°4¸Ó$;Ó<˜Ø gÑ-Ø#ŸN™N¨3Ô/÷0ð 0ñ0÷0ñ 0ð	0ô" �g‹Ðøô ò Úðú÷
0ð 0ú÷
0ð 0ú÷0ñ 0úsO   Â,F:Â:AG"Ã;8G
	Ä31G"Å$5G	Æ
G"Æ:	GÇGÇ
GÇG"ÇGÇG"Ç"G,	c                óæ  — i }d}	 t        j                  |«      }|D ]Ÿ  }	 t         j                  j	                  ||d«      }t        |dd¬«      5 }t        j                  |«      }ddd«       d   }t        j                  t         j                  j	                  |d«      «       ||| j                  |d	   «      <   Œ¡ |S # t        $ r |cY S w xY w# 1 sw Y   ŒmxY w# t        t        f$ r Y ŒÒw xY w)
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)
rT   Úlistdirr{   rU   rV   ÚopenÚjsonÚloadÚ_as_float_versionÚKeyError)	r%   Úvs_versionsÚinstances_dirÚhashed_namesr}   Ú
state_pathÚ
state_fileÚstateÚvs_paths	            r   rŒ   z#SystemInfo.find_programdata_vs_vers¶  sþ   € ð )+ˆØTˆð	ÜŸ:™: mÓ4ˆLð !ò 	ˆDðäŸW™WŸ\™\¨-¸¸|ÓL�
Ü˜* d°WÔ=ð 2ÀÜ ŸI™I jÓ1�E÷2àÐ 2Ñ3�ô —
‘
œ2Ÿ7™7Ÿ<™<¨Ð1AÓBÔCð ð ˜D×2Ñ2°5Ð9NÑ3OÓPÒQð	ð( Ðøô1 ò 	àÒð	ú÷2ð 2ûô œXÐ&ò áðús;   †C ¡/CÁCÁ&ACÃCÃCÃC	ÃCÃC0Ã/C0c                óZ   — t        dj                  | j                  d«      dd «      «      S )zç
        Return a string version as a simplified float version (major.minor)

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

        Return
        ------
        float
            version
        ú.Né   )r¤   rV   Úsplit)Úversions    r   r¹   zSystemInfo._as_float_versionà  s(   € ô �S—X‘X˜gŸm™m¨CÓ0°°!Ð4Ó5Ó6Ð6r   c                óò   — t         j                  j                  | j                  d| j                  d›�«      }| j
                  j                  | j
                  j                  | j                  d›«      xs |S )zp
        Microsoft Visual Studio directory.

        Return
        ------
        str
            path
        úMicrosoft Visual Studio ú0.1f)rT   rU   rV   ÚProgramFilesx86r�   r‹   r„   r_   )r%   Údefaults     r   ÚVSInstallDirzSystemInfo.VSInstallDirñ  s]   € ô —'‘'—,‘,Ø× Ñ Ð$<¸T¿[¹[ÈÐ<NÐ"Oó
ˆð
 �w‰w�~‰~˜dŸg™gŸj™j¨T¯[©[¸Ð,>Ó@ÒKÀGÐKr   c                óÊ   — | j                  «       xs | j                  «       }t        j                  j	                  |«      s!d}t
        j                  j                  |«      ‚|S )zm
        Microsoft Visual C++ directory.

        Return
        ------
        str
            path
        z(Microsoft Visual C++ directory not found)Ú	_guess_vcÚ_guess_vc_legacyrT   rU   Úisdirr”   r•   r–   )r%   rU   Úmsgs      r   ÚVCInstallDirzSystemInfo.VCInstallDir  sO   € ð �~‰~ÓÒ: 4×#8Ñ#8Ó#:ˆä�w‰w�}‰}˜TÔ"Ø<ˆCÜ×"Ñ"×9Ñ9¸#Ó>Ð>àˆr   c                ó”  — | j                   dk  ry	 | j                  | j                      }t        j
                  j                  |d«      }	 t	        j                  |«      d   }| j                  |«      | _	        t        j
                  j                  ||«      S # t        $ r | j                  }Y Œ†w xY w# t        t        f$ r Y yw xY w)zl
        Locate Visual C++ for VS2017+.

        Return
        ------
        str
            path
        ç      ,@r   r³   éÿÿÿÿ)r�   r�   rº   rÌ   rT   rU   rV   rµ   r¹   r�   r{   Ú
IndexError)r%   Úvs_dirÚguess_vcr�   s       r   rÎ   z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B5 ÂB2Â1B2Â5CÃCc                óô  — t         j                  j                  | j                  d| j                  d›d�«      }t         j                  j                  | j
                  j                  | j                  d›«      }| j
                  j                  |d«      }|r t         j                  j                  |d«      n|}| j
                  j                  | j
                  j                  | j                  d›«      xs |S )z{
        Locate Visual C++ for versions prior to 2017.

        Return
        ------
        str
            path
        rÈ   rÉ   z\VCÚ
installdirÚVC)	rT   rU   rV   rÊ   r�   r‹   ra   r„   r[   )r%   rË   Úreg_pathÚ	python_vcÚ
default_vcs        r   rÏ   z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                ó¤   — | j                   dk  ry| j                   dk(  ry| j                   dk(  ry| j                   dk(  ry| j                   d	k\  ry
y)z—
        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   ÚWindowsSdkVersionzSystemInfo.WindowsSdkVersionI  sR   € ð �;‰;˜#ÒØ'Ø�[‰[˜DÒ Ø Ø�[‰[˜DÒ Ø Ø�[‰[˜DÒ Ø Ø�[‰[˜DÒ Ø Ør   c                ót   — | j                  t        j                  j                  | j                  d«      «      S )zt
        Microsoft Windows SDK last version.

        Return
        ------
        str
            version
        Úlib)Ú_use_last_dir_namerT   rU   rV   ÚWindowsSdkDirr*   s    r   ÚWindowsSdkLastVersionz SystemInfo.WindowsSdkLastVersion_  s*   € ð ×&Ñ&¤r§w¡w§|¡|°D×4FÑ4FÈÓ'NÓOÐOr   c                ó¤  — d}| j                   D ]Y  }t        j                  j                  | j                  j
                  d|› �«      }| j                  j                  |d«      }|sŒY n |rt        j                  j                  |«      s~t        j                  j                  | j                  j                  | j                  d›«      }| j                  j                  |d«      }|r t        j                  j                  |d«      }|rt        j                  j                  |«      sv| j                   D ]g  }|d|j                  d«       }d	|› �}t        j                  j                  | j                  |«      }t        j                  j                  |«      sŒf|}Œi |rt        j                  j                  |«      sb| j                   D ]S  }d
|› �}t        j                  j                  | j                  |«      }t        j                  j                  |«      sŒR|}ŒU |s*t        j                  j                  | j                  d«      }|S )zn
        Microsoft Windows SDK directory.

        Return
        ------
        str
            path
        r   ÚvÚinstallationfolderrÉ   rÚ   ÚWinSDKNrÃ   zMicrosoft SDKs\Windows Kits\zMicrosoft SDKs\Windows\vÚPlatformSDK)ræ   rT   rU   rV   r‹   rf   r„   rÐ   ra   r�   Úrfindr‰   rÒ   )r%   Úsdkdirr®   ÚlocrU   Úinstall_baseÚintverÚds           r   rê   zSystemInfo.WindowsSdkDirk  sÂ  € ð  ˆØ×)Ñ)ò 	ˆCä—'‘'—,‘,˜tŸw™w×2Ñ2°a¸°u°IÓ>ˆCØ—W‘W—^‘^ CÐ)=Ó>ˆFÚÙð	ñ œRŸW™WŸ]™]¨6Ô2ä—7‘7—<‘< §¡× 5Ñ 5¸$¿+¹+ÀdÐ9KÓMˆDØŸ7™7Ÿ>™>¨$°Ó=ˆLÙÜŸ™Ÿ™ l°HÓ=�ÙœRŸW™WŸ]™]¨6Ô2à×-Ñ-ò �ØÐ-˜sŸy™y¨›~Ð.�Ø6°v°hÐ?�Ü—G‘G—L‘L ×!2Ñ!2°DÓ9�Ü—7‘7—=‘= Õ#Ø‘Fðñ œRŸW™WŸ]™]¨6Ô2à×-Ñ-ò �Ø2°3°%Ð8�Ü—G‘G—L‘L ×!2Ñ!2°DÓ9�Ü—7‘7—=‘= Õ#Ø‘Fð	ñ
 ä—W‘W—\‘\ $×"3Ñ"3°]ÓCˆFØˆr   c                ód  — | j                   dk  rd}d}nBd}| j                   dk  rdnd}| j                  j                  d|¬«      j                  d	d
«      }d|› d|› �}g }| j                   dk\  rJ| j                  D ];  }|t
        j                  j                  | j                  j                  ||«      gz  }Œ= | j                  D ]?  }|t
        j                  j                  | j                  j                  d|› d�|«      gz  }ŒA |D ]$  }| j                  j                  |d«      }|sŒ"|c S  y)z€
        Microsoft Windows SDK executable directory.

        Return
        ------
        str | None
            path
        râ   é#   r   é(   rã   TF)r    r8   r6   ú-zWinSDK-NetFxÚToolsrÔ   rí   ÚArî   N)r�   rM   r9   r#   ÚNetFxSdkVersionrT   rU   rV   r‹   ri   ræ   rf   r„   )	r%   Únetfxverr$   r8   ÚfxÚregpathsr®   rU   Úexecpaths	            r   ÚWindowsSDKExecutablePathz#SystemInfo.WindowsSDKExecutablePath–  s8  € ð �;‰;˜$ÒØˆHØ‰DàˆHØ"Ÿk™k¨TÒ1‘d°uˆGØ—7‘7×&Ñ&¨4¸Ð&ÓA×IÑIÈ$ÐPSÓTˆDØ˜H˜: U¨4¨&Ð1ˆð ˆØ�;‰;˜$ÒØ×+Ñ+ò G�ØœRŸW™WŸ\™\¨$¯'©'×*;Ñ*;¸SÀ"ÓEÐFÑF‘ðGð ×)Ñ)ò 	LˆCØœŸ™Ÿ™ d§g¡g×&9Ñ&9¸Q¸s¸eÀ1¸:ÀrÓJÐKÑK‰Hð	Lð ò 	 ˆDØ—w‘w—~‘~ dÐ,@ÓAˆHÚØ’ð	 ð
 r   c                óÆ   — t         j                  j                  | j                  j                  | j
                  d›d�«      }| j                  j                  |d«      xs dS )zl
        Microsoft Visual F# directory.

        Return
        ------
        str
            path
        rÉ   z	\Setup\F#Ú
productdirr   )rT   rU   rV   r‹   rQ   r�   r„   )r%   rU   s     r   ÚFSharpInstallDirz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                óª   — | j                   dk\  rdnd}|D ];  }| j                  j                  | j                  j                  d|› �«      }|sŒ9|c S  y)z{
        Microsoft Universal CRT SDK directory.

        Return
        ------
        str | None
            path
        rÔ   )Ú10Ú81r   ÚkitsrootN)r�   r‹   r„   rk   )r%   Úversr®   rò   s       r   ÚUniversalCRTSdkDirzSystemInfo.UniversalCRTSdkDirÈ  sY   € ð  $Ÿ{™{¨dÒ2‰|¸ˆð ò 	ˆCØ—W‘W—^‘^ D§G¡G×$>Ñ$>À(È3È%Ð@PÓQˆFÚØ’ð	ð
 r   c                óÆ   — 	 | j                  t        j                  j                  | j                  d«      «      S # t
        $ r}t        j                  |d«       ‚ d}~ww xY w)z€
        Microsoft Universal C Runtime SDK last version.

        Return
        ------
        str
            version
        rè   úCannot find UniversalCRTSdkDirN)ré   rT   rU   rV   r  Ú	TypeErrorr
   Úadd_note)r%   Úexs     r   ÚUniversalCRTSdkLastVersionz%SystemInfo.UniversalCRTSdkLastVersionÝ  sP   € ð	Ø×*Ñ*¬2¯7©7¯<©<¸×8OÑ8OÐQVÓ+WÓXÐXøÜò 	Ü�N‰N˜2Ð?Ô@Øûð	ús   ‚8; »	A ÁAÁA c                ó(   — | j                   dk\  rdS dS )z�
        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ý   zSystemInfo.NetFxSdkVersioní  s%   € ð �{‰{˜dÒ"ð Xð	
ð ð	
r   c                óÖ   — d}| j                   D ]W  }t        j                  j                  | j                  j
                  |«      }| j                  j                  |d«      }|sŒV |S  |S )z|
        Microsoft .NET Framework SDK directory.

        Return
        ------
        str | None
            path
        r   Úkitsinstallationfolder)rý   rT   rU   rV   r‹   ri   r„   )r%   rò   r®   ró   s       r   ÚNetFxSdkDirzSystemInfo.NetFxSdkDirþ  sc   € ð  ˆØ×'Ñ'ò 	ˆCÜ—'‘'—,‘,˜tŸw™w×0Ñ0°#Ó6ˆCØ—W‘W—^‘^ CÐ)AÓBˆFÚØØˆð	ð
 ˆr   c                ó¾   — t         j                  j                  | j                  d«      }| j                  j                  | j                  j                  d«      xs |S )zw
        Microsoft .NET Framework 32bit directory.

        Return
        ------
        str
            path
        zMicrosoft.NET\FrameworkÚframeworkdir32©rT   rU   rV   rˆ   r‹   r„   r[   ©r%   Úguess_fws     r   ÚFrameworkDir32zSystemInfo.FrameworkDir32  sB   € ô —7‘7—<‘< §¡Ð-GÓHˆð �w‰w�~‰~˜dŸg™gŸj™jÐ*:Ó;ÒG¸xÐGr   c                ó¾   — t         j                  j                  | j                  d«      }| j                  j                  | j                  j                  d«      xs |S )zw
        Microsoft .NET Framework 64bit directory.

        Return
        ------
        str
            path
        zMicrosoft.NET\Framework64Úframeworkdir64r  r  s     r   ÚFrameworkDir64zSystemInfo.FrameworkDir64   sB   € ô —7‘7—<‘< §¡Ð-IÓJˆð �w‰w�~‰~˜dŸg™gŸj™jÐ*:Ó;ÒG¸xÐGr   c                ó$   — | j                  d«      S )zƒ
        Microsoft .NET Framework 32bit versions.

        Return
        ------
        tuple of str
            versions
        é    ©Ú_find_dot_net_versionsr*   s    r   ÚFrameworkVersion32zSystemInfo.FrameworkVersion320  ó   € ð ×*Ñ*¨2Ó.Ð.r   c                ó$   — | j                  d«      S )zƒ
        Microsoft .NET Framework 64bit versions.

        Return
        ------
        tuple of str
            versions
        é@   r!  r*   s    r   ÚFrameworkVersion64zSystemInfo.FrameworkVersion64<  r$  r   c                ó|  — | j                   j                  | j                   j                  d|› �«      }t        | d|› �«      }|xs | j	                  |d«      xs d}| j
                  dk\  r|dfS | j
                  dk\  r|j                  «       dd	 d
k7  rddfS |dfS | j
                  dk(  ry| j
                  dk(  ryy)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à   )r,  ú
v2.0.50727g       @)zv3.0r-  r   )r‹   r„   r[   Úgetattrré   r�   r"   )r%   ÚbitsÚreg_verÚdot_net_dirr®   s        r   r"  z!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                ón   ‡ ‡— ˆ ˆfd„t        t        j                  ‰ «      «      D «       }t        |d«      S )a-  
        Return name of the last dir in path or '' if no dir found.

        Parameters
        ----------
        path: StrPath
            Use dirs in this path
        prefix: str
            Use only dirs starting by this prefix

        Return
        ------
        str
            name
        c              3  ó¾   •K  — | ]T  }t         j                  j                  t         j                  j                  ‰|«      «      r|j	                  ‰«      r|–— ŒV y ­wrL   )rT   rU   rÐ   rV   Ú
startswith)Ú.0Údir_namerU   Úprefixs     €€r   ú	<genexpr>z0SystemInfo._use_last_dir_name.<locals>.<genexpr>w  sF   øè ø€ ò 
àÜ�w‰w�}‰}œRŸW™WŸ\™\¨$°Ó9Ô:Ø×#Ñ# FÔ+ô ñ
ùs   ƒAAr   )ÚreversedrT   rµ   Únext)rU   r7  Úmatching_dirss   `` r   ré   zSystemInfo._use_last_dir_namef  s/   ù€ ô"
ä$¤R§Z¡Z°Ó%5Ó6ô
ˆô �M 2Ó&Ð&r   rL   )r‘   rJ   r�   zfloat | NonerA   rB   )rA   zlist[float])rA   zdict[float, str]rC   )rA   ztuple[LiteralString, ...]©rA   r…   )rA   ztuple[str, ...])r   )rU   r	   r7  r@   rA   r@   )#r   r   r   rF   r   rG   rˆ   r‰   rÊ   r&   rŽ   r“   rŒ   Ústaticmethodr¹   rH   rÌ   rÒ   rÎ   rÏ   ræ   rë   rê   r  r  r  r  rý   r  r  r  r#  r'  r"  ré   r   r   r   r‡   r‡   f  sæ  „ ñ	ð ˆW�[‰[˜ 2Ó&€FØ�7—;‘;˜~¨rÓ2€LØ!�g—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                  ó@   — e Zd ZU ded<   ded<   ded<   ded<   ded<   y)	Ú_EnvironmentDictr@   Úincluderè   ÚlibpathrU   zNotRequired[str | None]Úpy_vcruntime_redistN)r   r   r   Ú__annotations__r   r   r   r?  r?  €  s   … ØƒLØ	ƒHØƒLØ
ƒIØ0Ô0r   r?  c                  óº  — e Zd ZdZdd d„Zed„ «       Zed„ «       Zed„ «       Zed„ «       Z	ed„ «       Z
ed	„ «       Zed
„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zd„ Zed!d„«       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed"d„«       Zed"d„«       Zed!d„«       Zed„ «       Zed#d„«       Zd$d%d„Zd„ Z y)&ÚEnvironmentInfoaY  
    Return environment variables for specified Microsoft Visual C++ version
    and platform : Lib, Include, Path and libpath.

    This function is compatible with Microsoft Visual C++ 9.0 to 14.X.

    Script created by analysing Microsoft environment configuration files like
    "vcvars[...].bat", "SetEnv.Cmd", "vcbuildtools.bat", ...

    Parameters
    ----------
    arch: str
        Target architecture.
    vc_ver: float
        Required Microsoft Visual C++ version. If not set, autodetect the last
        version.
    vc_min_ver: float
        Minimum Microsoft Visual C++ version.
    Nc                óî   — t        |«      | _        t        | j                  «      | _        t	        | j                  |«      | _        | j                  |k  r!d}t        j                  j                  |«      ‚y )Nz.No suitable Microsoft Visual C++ version found)
r   rM   rJ   r‹   r‡   Úsir�   r”   r•   r–   )r%   r$   r�   Ú
vc_min_verÚerrs        r   r&   zEnvironmentInfo.__init__   s]   € Ü˜tÓ$ˆŒÜ˜tŸw™wÓ'ˆŒÜ˜TŸW™W fÓ-ˆŒà�;‰;˜Ò#ØBˆCÜ×"Ñ"×9Ñ9¸#Ó>Ð>ð $r   c                ó.   — | j                   j                  S )zk
        Microsoft Visual Studio.

        Return
        ------
        float
            version
        )rG  r�   r*   s    r   r�   zEnvironmentInfo.vs_ver©  ó   € ð �w‰w�~‰~Ðr   c                ó.   — | j                   j                  S )zp
        Microsoft Visual C++ version.

        Return
        ------
        float
            version
        )rG  r�   r*   s    r   r�   zEnvironmentInfo.vc_verµ  rK  r   c                ó  — ddg}| j                   dk\  r2| j                  j                  dd¬«      }|dgz  }|dgz  }|d|› �gz  }|D �cg c]6  }t        j                  j                  | j                  j                  |«      ‘Œ8 c}S c c}w )zu
        Microsoft Visual Studio Tools.

        Return
        ------
        list of str
            paths
        zCommon7\IDEzCommon7\ToolsrÔ   T©r8   r    z1Common7\IDE\CommonExtensions\Microsoft\TestWindowzTeam Tools\Performance Tools)r�   rM   r9   rT   rU   rV   rG  rÌ   )r%   ÚpathsÚarch_subdirrU   s       r   ÚVSToolszEnvironmentInfo.VSToolsÁ  s’   € ð  Ð!1Ð2ˆà�;‰;˜$ÒØŸ'™'×-Ñ-°dÀÐ-ÓEˆKØÐJÐKÑKˆEØÐ5Ð6Ñ6ˆEØÐ5°k°]ÐCÐDÑDˆEàEJÖK¸T”—‘—‘˜TŸW™W×1Ñ1°4Õ8ÒKÐKùÒKs   Á
;Bc                óÒ   — t         j                  j                  | j                  j                  d«      t         j                  j                  | j                  j                  d«      gS )z’
        Microsoft Visual C++ & Microsoft Foundation Class Includes.

        Return
        ------
        list of str
            paths
        ÚIncludezATLMFC\Include)rT   rU   rV   rG  rÒ   r*   s    r   Ú
VCIncludeszEnvironmentInfo.VCIncludesÕ  sG   € ô �G‰G�L‰L˜Ÿ™×-Ñ-¨yÓ9Ü�G‰G�L‰L˜Ÿ™×-Ñ-Ð/@ÓAð
ð 	
r   c                ód  — | j                   dk\  r| j                  j                  d¬«      }n| j                  j                  d¬«      }d|› �d|› �g}| j                   dk\  r	|d|› �gz  }|D �cg c]6  }t        j                  j                  | j                  j                  |«      ‘Œ8 c}S c c}w )	z“
        Microsoft Visual C++ & Microsoft Foundation Class Libraries.

        Return
        ------
        list of str
            paths
        ç      .@T©r    ©r8   ÚLibz
ATLMFC\LibrÔ   z	Lib\store)r�   rM   r;   rT   rU   rV   rG  rÒ   )r%   rP  rO  rU   s       r   ÚVCLibrarieszEnvironmentInfo.VCLibrariesä  s£   € ð �;‰;˜$ÒØŸ'™'×,Ñ,°Ð,Ó6‰KàŸ'™'×,Ñ,°TÐ,Ó:ˆKØ�{�mÐ$¨°K°=Ð&AÐBˆà�;‰;˜$ÒØ˜ ; -Ð0Ð1Ñ1ˆEàEJÖK¸T”—‘—‘˜TŸW™W×1Ñ1°4Õ8ÒKÐKùÒKs   Á/;B-c                óŽ   — | j                   dk  rg S t        j                  j                  | j                  j
                  d«      gS )z‡
        Microsoft Visual C++ store references Libraries.

        Return
        ------
        list of str
            paths
        rÔ   zLib\store\references)r�   rT   rU   rV   rG  rÒ   r*   s    r   ÚVCStoreRefszEnvironmentInfo.VCStoreRefsù  s8   € ð �;‰;˜ÒØˆIÜ—‘—‘˜TŸW™W×1Ñ1Ð3JÓKÐLÐLr   c                ó¨  — | j                   }t        j                  j                  |j                  d«      g}| j
                  dk  rdnd}| j                  j                  |«      }|r1|t        j                  j                  |j                  d|› �«      gz  }| j
                  dk(  rOd| j                  j                  d¬«      › �}|t        j                  j                  |j                  |«      gz  }|S | j
                  dk\  �r| j                  j                  j                  d	d
«      j                  «       }t        j                  j                  dd|› d�«      }|t        j                  j                  |j                  || j                  j                  d¬«      z  «      gz  }| j                  j                  | j                  j                  k7  rK|t        j                  j                  |j                  || j                  j                  d¬«      z  «      gz  }|S |t        j                  j                  |j                  d«      gz  }|S )aÛ  
        Microsoft Visual C++ Tools.

        Return
        ------
        list of str
            paths

        When host CPU is ARM, the tools should be found for ARM.

        >>> getfixture('windows_only')
        >>> mp = getfixture('monkeypatch')
        >>> mp.setattr(PlatformInfo, 'current_cpu', 'arm64')
        >>> ei = EnvironmentInfo(arch='irrelevant')
        >>> paths = ei.VCTools
        >>> any('HostARM64' in path for path in paths)
        True
        Ú
VCPackagesrá   TFÚBinrÔ   rX  rV  r!   r    ÚbinÚHostz%srW  )rG  rT   rU   rV   rÒ   r�   rM   r?   r9   r2   r#   Úupperr;   r+   )r%   rG  Útoolsr=   rP  rU   Úhost_idÚhost_dirs           r   ÚVCToolsz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ØŸ™¨°D·G±G×4GÑ4GÈDÐ4GÓ4QÑ)Qóðñ �ð ˆð ”b—g‘g—l‘l 2§?¡?°EÓ:Ð;Ñ;ˆEàˆr   c                óÎ  — | j                   dk  rU| j                  j                  dd¬«      }t        j                  j                  | j                  j                  d|› �«      gS | j                  j                  d¬«      }t        j                  j                  | j                  j                  d«      }| j                  }t        j                  j                  ||› d|› �«      gS )zw
        Microsoft Windows SDK Libraries.

        Return
        ------
        list of str
            paths
        rá   TrN  rY  rW  rè   Úum)	r�   rM   r;   rT   rU   rV   rG  rê   Ú_sdk_subdir)r%   rP  rè   Úlibvers       r   ÚOSLibrariesz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                óØ  — t         j                  j                  | j                  j                  d«      }| j
                  dk  r"|t         j                  j                  |d«      gS | j
                  dk\  r| j                  }nd}t         j                  j                  ||› d�«      t         j                  j                  ||› d�«      t         j                  j                  ||› d�«      gS )	zu
        Microsoft Windows SDK Include.

        Return
        ------
        list of str
            paths
        r@  rá   ÚglrÔ   r   Úsharedrh  Úwinrt)rT   rU   rV   rG  rê   r�   ri  )r%   r@  Úsdkvers      r   Ú
OSIncludesz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                óì  — t         j                  j                  | j                  j                  d«      }g }| j
                  dk  r|| j                  z  }| j
                  dk\  r$|t         j                  j                  |d«      gz  }| j
                  dk\  rÝ||t         j                  j                  | j                  j                  d«      t         j                  j                  |dd«      t         j                  j                  |d	d«      t         j                  j                  |d
d«      t         j                  j                  | j                  j                  dd| j
                  d›ddd«      gz  }|S )z}
        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)rT   rU   rV   rG  rê   r�   rk  )r%   ÚrefrA  s      r   Ú	OSLibpathzEnvironmentInfo.OSLibpathh  s)  € ô �g‰g�l‰l˜4Ÿ7™7×0Ñ0°,Ó?ˆØˆà�;‰;˜#ÒØ�t×'Ñ'Ñ'ˆ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   — t        | j                  «       «      S )zs
        Microsoft Windows SDK Tools.

        Return
        ------
        list of str
            paths
        )ÚlistÚ
_sdk_toolsr*   s    r   ÚSdkToolszEnvironmentInfo.SdkTools�  s   € ô �D—O‘OÓ%Ó&Ð&r   c              #  ó:  K  — | j                   dk  rI| j                   dk  rdnd}t        j                  j                  | j                  j
                  |«      –— | j                  j                  «       sW| j                  j                  d¬«      }d|› �}t        j                  j                  | j                  j
                  |«      –— | j                   dv rv| j                  j                  «       rd}n| j                  j                  dd¬	«      }d
|› �}t        j                  j                  | j                  j
                  |«      –— n›| j                   dk\  rŒt        j                  j                  | j                  j
                  d«      }| j                  j                  d¬«      }| j                  j                  }t        j                  j                  ||› |› �«      –— | j                  j                  r| j                  j                  –— yy­w)zˆ
        Microsoft Windows SDK Tools paths generator.

        Return
        ------
        generator of str
            paths
        rV  râ   r_  zBin\x86TrW  )rá   râ   r   rN  zBin\NETFX 4.0 ToolsN)r�   rT   rU   rV   rG  rê   rM   r3   r9   r/   rë   r  )r%   Úbin_dirrP  rU   rp  s        r   r|  z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                   j                  }|r|› d�S dS )zu
        Microsoft Windows SDK version subdir.

        Return
        ------
        str
            subdir
        r6   r   )rG  rë   ©r%   Úucrtvers     r   ri  zEnvironmentInfo._sdk_subdir¿  s&   € ð —'‘'×/Ñ/ˆÙ#*�7�)˜2�Ð2°Ð2r   c                óŽ   — | j                   dkD  rg S t        j                  j                  | j                  j
                  d«      gS )zs
        Microsoft Windows SDK Setup.

        Return
        ------
        list of str
            paths
        rà   ÚSetup)r�   rT   rU   rV   rG  rê   r*   s    r   ÚSdkSetupzEnvironmentInfo.SdkSetupÌ  s7   € ð �;‰;˜ÒØˆIä—‘—‘˜TŸW™W×2Ñ2°GÓ<Ð=Ð=r   c                óZ  — | j                   }| j                  }| j                  dk  r'd}|j                  «        xr |j	                  «        }nB|j                  «       xs |j	                  «       }|j
                  dk(  xs |j                  dk(  }g }|rE||j                  D �cg c],  }t        j                  j                  |j                  |«      ‘Œ. c}z  }|rE||j                  D �cg c],  }t        j                  j                  |j                  |«      ‘Œ. c}z  }|S c c}w c c}w )zv
        Microsoft .NET Framework Tools.

        Return
        ------
        list of str
            paths
        rá   Tr!   )rM   rG  r�   r/   r3   r2   r+   r#  rT   rU   rV   r  r'  r  )r%   rM   rG  Ú	include32Ú	include64rc  r®   s          r   ÚFxToolsz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öØ9<”—‘—‘˜R×.Ñ.°Õ4òñ ˆEñ ØØ@B×@UÑ@UöØ9<”—‘—‘˜R×.Ñ.°Õ4òñ ˆEð ˆùòùòs   Â$1D#Ã+1D(c                óø   — | j                   dk  s| j                  j                  sg S | j                  j	                  d¬«      }t
        j                  j                  | j                  j                  d|› �«      gS )z~
        Microsoft .Net Framework SDK Libraries.

        Return
        ------
        list of str
            paths
        rÔ   TrW  zlib\um)r�   rG  r  rM   r;   rT   rU   rV   )r%   rP  s     r   ÚNetFxSDKLibrariesz!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                óº   — | j                   dk  s| j                  j                  sg S t        j                  j                  | j                  j                  d«      gS )z}
        Microsoft .Net Framework SDK Includes.

        Return
        ------
        list of str
            paths
        rÔ   z
include\um)r�   rG  r  rT   rU   rV   r*   s    r   ÚNetFxSDKIncludesz EnvironmentInfo.NetFxSDKIncludes
  sC   € ð �;‰;˜Ò T§W¡W×%8Ò%8ØˆIä—‘—‘˜TŸW™W×0Ñ0°-Ó@ÐAÐAr   c                ól   — t         j                  j                  | j                  j                  d«      gS )z„
        Microsoft Visual Studio Team System Database.

        Return
        ------
        list of str
            paths
        zVSTSDB\Deploy)rT   rU   rV   rG  rÌ   r*   s    r   ÚVsTDbzEnvironmentInfo.VsTDb  s'   € ô —‘—‘˜TŸW™W×1Ñ1Ð3CÓDÐEÐEr   c                ó¬  — | j                   dk  rg S | j                   dk  r3| j                  j                  }| j                  j	                  d¬«      }n| j                  j
                  }d}d| j                   d›d|› �}t        j                  j                  ||«      g}| j                   dk\  r%|t        j                  j                  ||d	«      gz  }|S )
zn
        Microsoft Build Engine.

        Return
        ------
        list of str
            paths
        rã   rV  TrX  r   zMSBuild\rÉ   z\binÚRoslyn)	r�   rG  rÊ   rM   r9   rÌ   rT   rU   rV   )r%   Ú	base_pathrP  rU   Úbuilds        r   ÚMSBuildzEnvironmentInfo.MSBuild%  sº   € ð �;‰;˜ÒØˆIØ�[‰[˜4ÒØŸ™×/Ñ/ˆIØŸ'™'×-Ñ-°dÐ-Ó;‰KàŸ™×,Ñ,ˆIØˆKà˜4Ÿ;™; tÐ,¨D°°Ð>ˆÜ—‘—‘˜i¨Ó.Ð/ˆà�;‰;˜$Òà”b—g‘g—l‘l 9¨d°HÓ=Ð>Ñ>ˆEàˆr   c                óŽ   — | j                   dk  rg S t        j                  j                  | j                  j
                  d«      gS )zt
        Microsoft HTML Help Workshop.

        Return
        ------
        list of str
            paths
        râ   zHTML Help Workshop)r�   rT   rU   rV   rG  rÊ   r*   s    r   ÚHTMLHelpWorkshopz EnvironmentInfo.HTMLHelpWorkshopA  s8   € ð �;‰;˜ÒØˆIä—‘—‘˜TŸW™W×4Ñ4Ð6JÓKÐLÐLr   c                óz  — | j                   dk  rg S | j                  j                  d¬«      }	 t        j                  j                  | j                  j                  d«      }| j                  }t        j                  j                  ||› d|› �«      gS # t        $ r}t        j                  |d«       ‚ d}~ww xY w)zƒ
        Microsoft Universal C Runtime SDK Libraries.

        Return
        ------
        list of str
            paths
        rÔ   TrW  rè   r  NÚucrt)r�   rM   r;   rT   rU   rV   rG  r  r  r
   r  Ú_ucrt_subdir)r%   rP  rè   r  r‚  s        r   ÚUCRTLibrarieszEnvironmentInfo.UCRTLibrariesP  s£   € ð �;‰;˜ÒØˆIà—g‘g×(Ñ(¨TÐ(Ó2ˆð	Ü—'‘'—,‘,˜tŸw™w×9Ñ9¸5ÓAˆCð ×#Ñ#ˆÜ—‘—‘˜S W I¨T°+°Ð"?Ó@ÐAÐAøô	 ò 	Ü�N‰N˜2Ð?Ô@Øûð	ús   ¯4B Â	B:ÂB5Â5B:c                ó:  — | j                   dk  rg S 	 t        j                  j                  | j                  j
                  d«      }t        j                  j                  || j                  › d�«      gS # t        $ r}t        j                  |d«       ‚ d}~ww xY w)z�
        Microsoft Universal C Runtime SDK Include.

        Return
        ------
        list of str
            paths
        rÔ   r@  r  Nr˜  )
r�   rT   rU   rV   rG  r  r  r
   r  r™  )r%   r@  r  s      r   ÚUCRTIncludesz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                   j                  }|r|› d�S dS )z�
        Microsoft Universal C Runtime SDK version subdir.

        Return
        ------
        str
            subdir
        r6   r   )rG  r  r�  s     r   r™  zEnvironmentInfo._ucrt_subdirz  s&   € ð —'‘'×4Ñ4ˆÙ#*�7�)˜2�Ð2°Ð2r   c                ó`   — d| j                   cxkD  rdkD  rg S  | j                  j                  gS )zk
        Microsoft Visual F#.

        Return
        ------
        list of str
            paths
        râ   rã   )r�   rG  r  r*   s    r   ÚFSharpzEnvironmentInfo.FSharp‡  s4   € ð �$—+‘+Ô$ Ò$ØˆIð %ð —‘×(Ñ(Ð)Ð)r   c                ó@  ‡‡— d| j                   › d�Š| j                  j                  d¬«      j                  d«      Šg }| j                  j
                  }t        j                  j                  |j                  dd«      «      }t        j                  j                  |«      r[t        j                  j                  |t        j                  |«      d   «      }||t        j                  j                  |d	«      gz  }|t        j                  j                  |d
«      gz  }d| j                   dz  › d�dt        | j                  «      dz  › d�f}ˆˆfd„t        j                   ||«      D «       }t#        t%        t        j                  j&                  |«      d«      S )z{
        Microsoft Visual C++ runtime redistributable dll.

        Returns the first suitable path found or None.
        Ú	vcruntimez0.dllTrW  r6   z\Toolsz\RedistrÕ   ÚonecoreÚredistzMicrosoft.VCé
   z.CRTc              3  óh   •K  — | ])  \  }}t         j                  j                  |‰|‰«      –— Œ+ y ­wrL   )rT   rU   rV   )r5  r7  Úcrt_dirrP  r¡  s      €€r   r8  z2EnvironmentInfo.VCRuntimeRedist.<locals>.<genexpr>³  s0   øè ø€ ò 
á!�˜ô �G‰G�L‰L˜ ¨g°y×Añ
ùs   ƒ/2N)r�   rM   r;   ÚstriprG  rÒ   rT   rU   Údirnamer#   rÐ   rV   rµ   Úintr�   r�   rž   r:  ÚfilterÚisfile)r%   ÚprefixesÚ
tools_pathÚredist_pathÚcrt_dirsÚcandidate_pathsrP  r¡  s         @@r   ÚVCRuntimeRedistzEnvironmentInfo.VCRuntimeRedist–  sN  ù€ ð   §¡˜}¨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                óä  — t        | j                  d| j                  | j                  | j                  | j
                  g|«      | j                  d| j                  | j                  | j                  | j                  | j                  g|«      | j                  d| j                  | j                  | j                  | j                  g|«      | j                  d| j                  | j                  | j                  | j                   | j"                  | j                  | j$                  | j&                  | j(                  g	|«      ¬«      }| j*                  dk\  r| j,                  r| j,                  |d<   |S )zÛ
        Return environment dict.

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

        Return
        ------
        dict
            environment
        r@  rè   rA  rU   )r@  rè   rA  rU   é   rB  )r?  Ú_build_pathsrT  rq  rœ  r�  rZ  rk  r‰  rš  r‹  r\  ry  rf  rQ  r�  r}  r…  r”  r–  rŸ  r�   r±  )r%   ÚexistsÚenvs      r   Ú
return_envz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                óð  — t         j                  j                  |«      }t        j                  |d«      j                  t        j                  «      }t        j                  ||«      }|r-t        t        t        j                  j                  |«      «      n|}|s2|j                  «       › d�}t        j                  j                  |«      ‚t!        |«      }	t        j                  j#                  |	«      S )aC  
        Given an environment variable name and specified paths,
        return a pathsep-separated string of paths containing
        unique, extant, directories from those paths and from
        the environment variable. Raise an error if no paths
        are resolved.

        Parameters
        ----------
        name: str
            Environment variable name
        spec_path_lists: list of str
            Paths
        exists: bool
            It True, only return existing paths.

        Return
        ------
        str
            Pathsep-separated paths
        r   z environment variable is empty)r�   ÚchainÚfrom_iterabler   rG   rÅ   rT   Úpathsepr{  rª  rU   rÐ   rb  r”   r•   r–   r   rV   )
r%   r}   Úspec_path_listsrµ  Ú
spec_pathsÚ	env_pathsrO  Úextant_pathsrÑ   Úunique_pathss
             r   r´  zEnvironmentInfo._build_pathsö  s®   € ô. —_‘_×2Ñ2°?ÓCˆ
Ü—K‘K  bÓ)×/Ñ/´·
±
Ó;ˆ	Ü—‘ 
¨IÓ6ˆÙ=C”tœF¤2§7¡7§=¡=°%Ó8Ô9ÈˆÙØ—Z‘Z“\�NÐ"@ÐAˆCÜ×"Ñ"×9Ñ9¸#Ó>Ð>Ü& |Ó4ˆÜ�z‰z�‰˜|Ó,Ð,r   )Nr   )rA   rB   rC   )rA   z	list[str]r<  )T)rµ  rD   rA   r?  )!r   r   r   rF   r&   rH   r�   r�   rQ  rT  rZ  r\  rf  rk  rq  ry  r}  r|  ri  r…  r‰  r‹  r�  r�  r”  r–  rš  rœ  r™  rŸ  r±  r·  r´  r   r   r   rE  rE  ˆ  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   rE  )"rF   Ú
__future__r   r¡   r�   r·   rT   Úos.pathÚplatformÚtypingr   r   r   Úmore_itertoolsr   Ú_pathr	   Úcompatr
   Údistutils.errorsr”   Útyping_extensionsr   r   Úsystemr   r   ÚdictrC  r   rJ   r‡   r?  rE  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   