
    ϶vgv                    |   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 ddlmZ ddlZe
rddlmZmZ e
s ej                    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dS )zo
Environment info about Microsoft Compilers.

>>> getfixture('windows_only')
>>> ei = EnvironmentInfo('amd64')
    )annotationsN)TYPE_CHECKING	TypedDict)unique_everseen)LiteralStringNotRequiredWindows)environc                      e Zd ZdZdZdZdZdS )winregN)__name__
__module____qualname__
HKEY_USERSHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_CLASSES_ROOT     L/var/www/pixelcanvas.ch/venv/lib/python3.11/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                                          ZddZe	d             Z
d Zd	 ZdddZdddZddZdS )PlatformInfoz
    Current and Target Architectures information.

    Parameters
    ----------
    arch: str
        Target architecture.
    processor_architecture returnNonec                `    |                                                     dd          | _        d S )Nx64amd64)lowerreplacearch)selfr"   s     r   __init__zPlatformInfo.__init__5   s%    JJLL((88			r   c                V    | j         | j                             d          dz   d         S )zs
        Return Target CPU architecture.

        Return
        ------
        str
            Target CPU
        _   N)r"   findr#   s    r   
target_cpuzPlatformInfo.target_cpu8   s*     y,,q02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_x86D   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_x86O   s     5((r   Fstrc                R    | j         dk    r|rdn| j         dk    r|rdn	d| j         z  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\%sr0   r#   hidex86r   s      r   current_dirzPlatformInfo.current_dirZ   sJ    $  E))g) B  G+++ $**	
r   c                R    | j         dk    r|rdn| j         dk    r|rdn	d| j         z  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_dirr   sG    $ 5((W( B 7**s* $/)	
r   c                    |rdn| j         }| j        |k    rdn*|                                                     dd|z            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   \z\%s_)r1   r*   r;   r!   )r#   forcex86currents      r   	cross_dirzPlatformInfo.cross_dir   sR      $9%%)9 ')) B""**471BCC	
r   Nr   r   )FFr   r3   F)r   r   r   __doc__r
   getr    r1   r$   propertyr*   r.   r2   r9   r;   r@   r   r   r   r   r   )   s          '+6;;AACCK9 9 9 9 	4 	4 X	4	( 	( 	(	) 	) 	)
 
 
 
 
0
 
 
 
 
0
 
 
 
 
 
r   r   c                  *   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             Zed             Zed	             Zedd
            Zedd            Zed             Zed             Zedd            ZddZd ZdS )RegistryInfoz
    Microsoft Visual Studio related registry information.

    Parameters
    ----------
    platform_info: PlatformInfo
        "PlatformInfo" instance.
    r   r   c                    || _         d S N)pi)r#   platform_infos     r   r$   zRegistryInfo.__init__   s    r   r3   c                    dS )z
        Microsoft Visual Studio root registry key.

        Return
        ------
        str
            Registry key
        VisualStudior   r)   s    r   visualstudiozRegistryInfo.visualstudio   s	     ~r   c                L    t           j                            | j        d          S )z
        Microsoft Visual Studio SxS registry key.

        Return
        ------
        str
            Registry key
        SxS)ospathjoinrO   r)   s    r   sxszRegistryInfo.sxs   s     w||D-u555r   c                L    t           j                            | j        d          S )z|
        Microsoft Visual C++ VC7 registry key.

        Return
        ------
        str
            Registry key
        VC7rR   rS   rT   rU   r)   s    r   vczRegistryInfo.vc        w||DHe,,,r   c                L    t           j                            | j        d          S )z
        Microsoft Visual Studio VS7 registry key.

        Return
        ------
        str
            Registry key
        VS7rX   r)   s    r   vszRegistryInfo.vs   rZ   r   c                    dS )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                    dS )zq
        Microsoft SDK registry key.

        Return
        ------
        str
            Registry key
        zMicrosoft SDKsr   r)   s    r   microsoft_sdkzRegistryInfo.microsoft_sdk   s
      r   c                L    t           j                            | j        d          S )z
        Microsoft Windows/Platform SDK registry key.

        Return
        ------
        str
            Registry key
        r	   rR   rS   rT   ra   r)   s    r   windows_sdkzRegistryInfo.windows_sdk   s     w||D.	:::r   c                L    t           j                            | j        d          S )z
        Microsoft .NET Framework SDK registry key.

        Return
        ------
        str
            Registry key
        NETFXSDKrc   r)   s    r   	netfx_sdkzRegistryInfo.netfx_sdk
  s     w||D.
;;;r   c                    dS )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   Fc                    | j                                         s|rdnd}t          j                            d|d|          S )a  
        Return key in Microsoft software registry.

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

        Return
        ------
        str
            Registry key
        r   Wow6432NodeSoftware	Microsoft)rK   r2   rR   rS   rT   )r#   keyr,   node64s       r   	microsoftzRegistryInfo.microsoft"  s?      w--//I3IMw||JSAAAr   c           	        t           j        }t           j        }t           j        }| j        }| j        D ]}d}	  || ||          d|          }nV# t          $ rI | j                                        s+	  || ||d          d|          }n# t          $ r Y Y gw xY wY mY nw xY w	 t          j	        ||          d         |r ||           c S c S # t          $ r Y nw xY w	 |r ||           # |r ||           w w xY wdS )a  
        Look for values in registry in Microsoft software registry.

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

        Return
        ------
        str
            value
        Nr   T)
r   KEY_READOpenKeyCloseKeyrp   HKEYSOSErrorrK   r2   QueryValueEx)	r#   rn   namekey_readopenkeyclosekeymshkeybkeys	            r   lookupzRegistryInfo.lookup5  s     ?.?^J 	# 	#DD	wtRRWWa::   w--// !&wtRRT]]AxHH" ! ! ! ! H	 #*466q9  #HTNNNNNN# # #     #HTNNN  #HTNNNN#tsY   A#B#4BB#
BB#BB#"B#'C
C!C3 C!!C33DNrA   rB   rC   )r   r   r   rD   r   r   r   r   r   ru   r$   rF   rO   rU   rY   r]   r_   ra   rd   rg   ri   rp   r   r   r   r   rH   rH      s         	 ! 	E        	 	 	 X	 	6 	6 X	6 	- 	- X	- 	- 	- X	- 	% 	% 	% X	% 	  	  	  X	  	; 	; X	; 	< 	< X	< 	/ 	/ 	/ X	/B B B B&' ' ' ' 'r   rH   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 Zd'dZed             Zed             Zed             Zd Zd Zed(d            Ze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             Zed*d!            Zed*d"            Z d*d#Z!ed+d$            Z"dS ),
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)Nr   r   c                    || _         | j         j        | _        |                                 | _        |p|                                 x| _        | _        d S rJ   )rirK   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__q  sM    '*";;== %+$Rd.P.P.R.RRdkkkr   c                    |                                  }|s&| j        st          j                            d          t          |          }|                    | j                   t          |          d         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sorted)r#   reg_vc_versvc_verss      r   r   z(SystemInfo._find_latest_available_vs_verz  sz     ++-- 	t2 	"997   k""t*+++gr""r   c           
        | j         j        }| j         j        | j         j        | j         j        f}g }t          j        | j         j        |          D ]w\  }}	 t          j	        | ||          dt          j
                  }n# t          $ r Y >w xY w|5  t          j        |          \  }}}	t          |          D ]t}
t          j        t                     5  t#          t          j        ||
          d                   }||vr|                    |           ddd           n# 1 swxY w Y   ut          |          D ]n}
t          j        t                     5  t#          t          j        ||
                    }||vr|                    |           ddd           n# 1 swxY w Y   o	 ddd           n# 1 swxY w Y   yt+          |          S )z
        Find Microsoft Visual Studio versions available in registry.

        Return
        ------
        list of float
            Versions
        r   N)r   rp   rY   r_   r]   	itertoolsproductru   r   rs   rr   rv   QueryInfoKeyrange
contextlibsuppress
ValueErrorfloat	EnumValueappendEnumKeyr   )r#   r|   vckeysvs_versr}   rn   r~   subkeysvaluesr&   ivers               r   r   zSystemInfo.find_reg_vs_vers  s    W'*dg3TWZ@"*47=&AA 	0 	0ID#~dBBsGGQHH    0 0%+%8%>%>"v 0 0A#,Z88 0 0#F$4T1$=$=a$@AAg--#NN3///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 w 0 0A#,Z88 0 0#FN4$;$;<<g--#NN3///0 0 0 0 0 0 0 0 0 0 0 0 0 0 000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 gsn   *B
BBAF=AD&	F=&D**F=-D*..F=<F$	F=$F((F=+F(,F==G	G	dict[float, str]c                   i }d}	 t          j        |          }n# t          $ r |cY S w xY w|D ]}	 t           j                            ||d          }t          |dd          5 }t          j        |          }ddd           n# 1 swxY w Y   |d         }t          j        t           j                            |d                     |||                     |d	                   <   # t          t          f$ r Y w xY w|S )
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)
rR   listdirrv   rS   rT   openjsonload_as_float_versionKeyError)	r#   vs_versionsinstances_dirhashed_namesrx   
state_path
state_filestatevs_paths	            r   r   z#SystemInfo.find_programdata_vs_vers  sq    )+T	:m44LL 	 	 		 ! 	 	DW\\-|LL
*dW=== 2 Ij11E2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 23 
27<<1ABBCCC  D2259N3OPPQQ X&    sB    **3C*%B:C*B
	
C*B
	AC**C>=C>c                |    t          d                    |                     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   rT   split)versions    r   r   zSystemInfo._as_float_version  s3     SXXgmmC00!455666r   c                    t           j                            | j        d| j        z            }| j                            | j        j        d| j        z            p|S )zp
        Microsoft Visual Studio directory.

        Return
        ------
        str
            path
        zMicrosoft Visual Studio %0.1f%0.1f)rR   rS   rT   ProgramFilesx86r   r   r   r]   )r#   defaults     r   VSInstallDirzSystemInfo.VSInstallDir  sQ     ',, "ADK"O
 

 w~~dgj'DK*?@@KGKr   c                    |                                  p|                                 }t          j                            |          s!d}t
          j                            |          |S )zm
        Microsoft Visual C++ directory.

        Return
        ------
        str
            path
        z(Microsoft Visual C++ directory not found)	_guess_vc_guess_vc_legacyrR   rS   isdirr   r   r   )r#   rS   msgs      r   VCInstallDirzSystemInfo.VCInstallDir  s[     ~~:4#8#8#:#:w}}T"" 	?<C"99#>>>r   c                   | j         dk    rdS 	 | j        | j                  }n# t          $ r
 | j        }Y nw xY wt          j                            |d          }	 t	          j        |          d         }|                     |          | _	        t          j                            ||          S # t          t          f$ r Y dS w xY w)zl
        Locate Visual C++ for VS2017+.

        Return
        ------
        str
            path
              ,@r   r   r   )r   r   r   r   rR   rS   rT   r   r   r   rv   
IndexError)r#   vs_dirguess_vcr   s       r   r   zSystemInfo._guess_vc  s     ;$2	'(5FF 	' 	' 	'&FFF	' 7<<(899	Z))"-F0088DK7<<&111$ 	 	 	22	s   " 66AB. .CCc                   t           j                            | j        d| j        z            }t           j                            | j        j        d| j        z            }| j                            |d          }|r t           j                            |d          n|}| j                            | j        j        d| j        z            p|S )z{
        Locate Visual C++ for versions prior to 2017.

        Return
        ------
        str
            path
        z Microsoft Visual Studio %0.1f\VCr   
installdirVC)	rR   rS   rT   r   r   r   r_   r   rY   )r#   r   reg_path	python_vc
default_vcs        r   r   zSystemInfo._guess_vc_legacy*  s     ',, "E"S
 

 7<< 5w7LMMGNN8\::	6?LRW\\)T222W
 w~~dgj'DK*?@@NJNr   tuple[LiteralString, ...]c                    | j         dk    rdS | j         dk    rdS | j         dk    rdS | j         dk    rdS | j         d	k    rd
S dS )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.WindowsSdkVersion?  sd     ;#''[D   =[D   =[D   =[D   =rr   c                r    |                      t          j                            | j        d                    S )zt
        Microsoft Windows SDK last version.

        Return
        ------
        str
            version
        lib)_use_last_dir_namerR   rS   rT   WindowsSdkDirr)   s    r   WindowsSdkLastVersionz SystemInfo.WindowsSdkLastVersionU  s+     &&rw||D4F'N'NOOOr   
str | Nonec                6   d}| j         D ]N}t          j                            | j        j        d|z            }| j                            |d          }|r nO|rt          j                            |          sot          j                            | j        j        d| j	        z            }| j                            |d          }|r t          j                            |d          }|rt          j                            |          sr| j         D ]j}|d|
                    d                   }d	|z  }t          j                            | j        |          }t          j                            |          r|}k|rt          j                            |          sU| j         D ]M}d
|z  }t          j                            | j        |          }t          j                            |          r|}N|s%t          j                            | j        d          }|S )zn
        Microsoft Windows SDK directory.

        Return
        ------
        str
            path
        r   zv%sinstallationfolderr   r   WinSDKNr   zMicrosoft SDKs\Windows Kits\%szMicrosoft SDKs\Windows\v%sPlatformSDK)r   rR   rS   rT   r   rd   r   r   r_   r   rfindr   r   )r#   sdkdirr   locrS   install_baseintverds           r   r   zSystemInfo.WindowsSdkDira  s     ) 	 	C',,tw2ECK@@CW^^C)=>>F  	>RW]]622 	>7<< 5w7LMMD7>>$==L >lH== 	RW]]622 	-  -syy~~-.86AGLL!2D997==## F 	RW]]622 	-  4s:GLL!2D997==## F 	DW\\$"3]CCFr   c                   | j         dk    rd}d}n-d}| j         dk    rdnd}| j                            d|          }d	||                    d
d          fz  }g }| j         dk    r9| j        D ]1}|t
          j                            | j        j	        ||          gz  }2| j
        D ]4}|t
          j                            | j        j        d|z  |          gz  }5|D ]#}| j                            |d          }|r|c S $dS )zy
        Microsoft Windows SDK executable directory.

        Return
        ------
        str
            path
        r   #   r   (   r   TF)r   r8   zWinSDK-NetFx%dTools%sr=   -r   zv%sAr   N)r   rK   r9   r!   NetFxSdkVersionrR   rS   rT   r   rg   r   rd   r   )	r#   netfxverr"   r8   fxregpathsr   rS   execpaths	            r   WindowsSDKExecutablePathz#SystemInfo.WindowsSDKExecutablePath  s>    ;$HDDH"kT11dduG7&&4&AAD$$,,tS2I2I'JJ ;$+ G GRW\\$'*;S"EEFF) 	N 	NCdg&96C<LLMMHH  	  	 Dw~~d,@AAH    tr   c                    t           j                            | j        j        d| j        z            }| j                            |d          pdS )zl
        Microsoft Visual F# directory.

        Return
        ------
        str
            path
        z%0.1f\Setup\F#
productdirr   )rR   rS   rT   r   rO   r   r   )r#   rS   s     r   FSharpInstallDirzSystemInfo.FSharpInstallDir  sA     w||DG02Cdk2QRRw~~dL117R7r   c                    | j         dk    rdnd}|D ]2}| j                            | j        j        d|z            }|r|pdc S 3dS )zt
        Microsoft Universal CRT SDK directory.

        Return
        ------
        str
            path
        r   )1081r   z
kitsroot%sr   N)r   r   r   ri   )r#   versr   r   s       r   UniversalCRTSdkDirzSystemInfo.UniversalCRTSdkDir  sm      ${d22||  	$ 	$CW^^DG$>s@RSSF $|###$ tr   c                r    |                      t          j                            | j        d                    S )z
        Microsoft Universal C Runtime SDK last version.

        Return
        ------
        str
            version
        r   )r   rR   rS   rT   r  r)   s    r   UniversalCRTSdkLastVersionz%SystemInfo.UniversalCRTSdkLastVersion  s+     &&rw||D4KU'S'STTTr   c                     | j         dk    rdn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W	
r   c                    d}| j         D ]K}t          j                            | j        j        |          }| j                            |d          }|r nL|S )zu
        Microsoft .NET Framework SDK directory.

        Return
        ------
        str
            path
        r   kitsinstallationfolder)r   rR   rS   rT   r   rg   r   )r#   r   r   r   s       r   NetFxSdkDirzSystemInfo.NetFxSdkDir  sb     ' 	 	C',,tw0#66CW^^C)ABBF r   c                    t           j                            | j        d          }| j                            | j        j        d          p|S )zw
        Microsoft .NET Framework 32bit directory.

        Return
        ------
        str
            path
        zMicrosoft.NET\Frameworkframeworkdir32rR   rS   rT   r   r   r   rY   r#   guess_fws     r   FrameworkDir32zSystemInfo.FrameworkDir32  s>     7<<-GHH w~~dgj*:;;GxGr   c                    t           j                            | j        d          }| j                            | j        j        d          p|S )zw
        Microsoft .NET Framework 64bit directory.

        Return
        ------
        str
            path
        zMicrosoft.NET\Framework64frameworkdir64r  r  s     r   FrameworkDir64zSystemInfo.FrameworkDir64  s>     7<<-IJJ w~~dgj*:;;GxGr   tuple[str, ...]c                ,    |                      d          S )z
        Microsoft .NET Framework 32bit versions.

        Return
        ------
        tuple of str
            versions
            _find_dot_net_versionsr)   s    r   FrameworkVersion32zSystemInfo.FrameworkVersion32"       **2...r   c                ,    |                      d          S )z
        Microsoft .NET Framework 64bit versions.

        Return
        ------
        tuple of str
            versions
        @   r  r)   s    r   FrameworkVersion64zSystemInfo.FrameworkVersion64.  r  r   c                d   | j                             | j         j        d|z            }t          | d|z            }|p|                     |d          pd}| j        dk    r|dfS | j        dk    r&|                                dd	         d
k    rdn|dfS | j        dk    rdS | j        dk    rdS dS )z
        Find Microsoft .NET Framework versions.

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

        Return
        ------
        tuple of str
            versions
        zframeworkver%dzFrameworkDir%dvr   r   zv4.0r   Nr   v4z
v4.0.30319v3.5r   )r  
v2.0.50727g       @)zv3.0r   r   )r   r   rY   getattrr   r   r    )r#   bitsreg_verdot_net_dirr   s        r   r  z!SystemInfo._find_dot_net_versions:  s     '..-=-DEEd$4t$;<<H00cBBHb ;$;[D  #&99;;rr?d#:#:<<VKK[C''[C''rr   c                      fdt          t          j                             D             }t          |d          pdS )a)  
        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     K   | ]X}t           j                            t           j                            |                    ?|                              T|V  Yd S rJ   )rR   rS   r   rT   
startswith).0dir_namerS   prefixs     r   	<genexpr>z0SystemInfo._use_last_dir_name.<locals>.<genexpr>i  ss       
 
w}}RW\\$99::
 ##F++	

 
 
 
 
 
r   Nr   )reversedrR   r   next)rS   r*  matching_dirss   `` r   r   zSystemInfo._use_last_dir_nameX  sZ    "
 
 
 
 
$RZ%5%566
 
 
 M4((.B.r   rJ   rA   )r   r   )r   r   r   r   )r   r  )r   )#r   r   r   rD   r
   rE   r   r   r   r$   r   r   r   staticmethodr   rF   r   r   r   r   r   r   r   r   r   r  r  r   r  r  r  r  r  r  r   r   r   r   r   r   _  s       	 	 W[2&&F7;~r22L!gk"5|DDOS S S S S# # #(  >( ( ( (T 7 7 \7  L L XL"   X"  <O O O*    X* 	P 	P X	P ( ( ( X(T " " X"H 
8 
8 X
8   X( 	U 	U X	U 
 
 X
    X" H H XH H H XH 	/ 	/ 	/ X	/ 	/ 	/ 	/ X	/   < / / / \/ / /r   r   c                  B    e Zd ZU ded<   ded<   ded<   ded<   ded<   dS )	_EnvironmentDictr3   includer   libpathrS   zNotRequired[str | None]py_vcruntime_redistN)r   r   r   __annotations__r   r   r   r2  r2  r  sB         LLLHHHLLLIII000000r   r2  c                  D   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             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ed)d             Zd*d+d%Zd& Z dS ),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.
    Nr   r   r   c                    t          |          | _        t          | j                  | _        t	          | j        |          | _        | j        |k     r!d}t          j        	                    |          d S )Nz.No suitable Microsoft Visual C++ version found)
r   rK   rH   r   r   sir   r   r   r   )r#   r"   r   
vc_min_vererrs        r   r$   zEnvironmentInfo.__init__  sf    t$$tw''TWf--;##BC"99#>>> $#r   c                    | j         j        S )zk
        Microsoft Visual Studio.

        Return
        ------
        float
            version
        )r:  r   r)   s    r   r   zEnvironmentInfo.vs_ver       w~r   c                    | j         j        S )zp
        Microsoft Visual C++ version.

        Return
        ------
        float
            version
        )r:  r   r)   s    r   r   zEnvironmentInfo.vc_ver  r>  r   c                     ddg} j         dk    r1 j                            dd          }|dgz  }|dgz  }|d|z  gz  } fd	|D             S )
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 ToolszTeam Tools\Performance Tools%sc                d    g | ],}t           j                            j        j        |          -S r   rR   rS   rT   r:  r   r(  rS   r#   s     r   
<listcomp>z+EnvironmentInfo.VSTools.<locals>.<listcomp>  .    KKKTTW1488KKKr   )r   rK   r9   )r#   pathsarch_subdirs   `  r   VSToolszEnvironmentInfo.VSTools  s      !12;$'--d-EEKJKKE566E7+EFFEKKKKUKKKKr   c                    t           j                            | j        j        d          t           j                            | j        j        d          gS )z
        Microsoft Visual C++ & Microsoft Foundation Class Includes.

        Return
        ------
        list of str
            paths
        IncludezATLMFC\IncluderR   rS   rT   r:  r   r)   s    r   
VCIncludeszEnvironmentInfo.VCIncludes  s?     GLL-y99GLL-/@AA
 	
r   c                      j         dk    r j                            d          }n j                            d          }d|z  d|z  g} j         dk    r	|d|z  gz  } fd	|D             S )
z
        Microsoft Visual C++ & Microsoft Foundation Class Libraries.

        Return
        ------
        list of str
            paths
              .@Tr   r8   Lib%szATLMFC\Lib%sr   zLib\store%sc                d    g | ],}t           j                            j        j        |          -S r   rL  rD  s     r   rE  z/EnvironmentInfo.VCLibraries.<locals>.<listcomp>  rF  r   )r   rK   r;   )r#   rH  rG  s   `  r   VCLibrarieszEnvironmentInfo.VCLibraries  s     ;$',,,66KK',,T,::K;&+(EF;$n{233EKKKKUKKKKr   c                r    | j         dk     rg S t          j                            | j        j        d          gS )z
        Microsoft Visual C++ store references Libraries.

        Return
        ------
        list of str
            paths
        r   zLib\store\references)r   rR   rS   rT   r:  r   r)   s    r   VCStoreRefszEnvironmentInfo.VCStoreRefs  s5     ;ITW13JKKLLr   c                   | j         }t          j                            |j        d          g}| j        dk    rdnd}| j                            |          }|r,|t          j                            |j        d|z            gz  }| j        dk    rHd| j                            d          z  }|t          j                            |j        |          gz  }n| j        dk    r| j        	                                rd	nd
}|t          j                            |j        || j        
                    d          z            gz  }| j        j        | j        j        k    rE|t          j                            |j        || j                            d          z            gz  }n)|t          j                            |j        d          gz  }|S )zr
        Microsoft Visual C++ Tools.

        Return
        ------
        list of str
            paths
        
VCPackagesr   TFBin%sr   rQ  rO  zbin\HostX86%szbin\HostX64%srP  Bin)r:  rR   rS   rT   r   r   rK   r@   r9   r2   r;   r1   r*   )r#   r:  toolsr>   rH  rS   host_dirs          r   VCToolszEnvironmentInfo.VCTools  s    Wbo|<<=;$..44Eg''11 	Lbgll2?Gk4IJJKKE;$TW000>>>Dbgll2?D99::EE[D  $(G$:$:$<$<R  BR  R_h9K9KPT9K9U9U.UVV E w"dg&888GLLDG4G4GD4G4Q4Q)Q   bgll2?E::;;Er   c                   | j         dk    rJ| j                            dd          }t          j                            | j        j        d|z            gS | j                            d          }t          j                            | j        j        d          }| j        }t          j                            ||d|          gS )zw
        Microsoft Windows SDK Libraries.

        Return
        ------
        list of str
            paths
        r   TrA  rR  rP  r   um)	r   rK   r;   rR   rS   rT   r:  r   _sdk_subdir)r#   rH  r   libvers       r   OSLibrarieszEnvironmentInfo.OSLibraries#  s     ;$',,Tt,DDKGLL!6+8MNNOO ',,,66K',,tw4e<<C%FGLL&&&++&FGGHHr   c                   t           j                            | j        j        d          }| j        dk    r"|t           j                            |d          gS | j        dk    r| j        }nd}t           j                            |d|z            t           j                            |d|z            t           j                            |d|z            gS )	zu
        Microsoft Windows SDK Include.

        Return
        ------
        list of str
            paths
        r3  r   glr   r   z%ssharedz%sumz%swinrt)rR   rS   rT   r:  r   r   r`  )r#   r3  sdkvers      r   
OSIncludeszEnvironmentInfo.OSIncludes7  s     ',,tw4i@@;$RW\\'48899 {d"")Wj6&9::Wfvo66Wi&&899 r   c                   t           j                            | j        j        d          }g }| j        dk    r
|| j        z  }| j        dk    r$|t           j                            |d          gz  }| j        dk    r||t           j                            | j        j        d          t           j                            |dd          t           j                            |d	d          t           j                            |d
d          t           j                            | j        j        ddd| j        z  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)rR   rS   rT   r:  r   r   rb  )r#   refr4  s      r   	OSLibpathzEnvironmentInfo.OSLibpathQ  s#    gll470,??;#t''G;$S*HIIJJG;$TW2ODDS"KYWWS"I9UUG  G)#&dk) )  G$ r   c                D    t          |                                           S )zs
        Microsoft Windows SDK Tools.

        Return
        ------
        list of str
            paths
        )list
_sdk_toolsr)   s    r   SdkToolszEnvironmentInfo.SdkToolsy  s     DOO%%&&&r   c              #    K   | j         dk     r;| j         dk    rdnd}t          j                            | j        j        |          V  | j                                        sL| j                            d          }d|z  }t          j                            | j        j        |          V  | j         dv rj| j        	                                rd	}n| j                            dd
          }d|z  }t          j                            | j        j        |          V  n| j         dk    rwt          j                            | j        j        d          }| j                            d          }| j        j
        }t          j                            |||          V  | j        j        r| j        j        V  dS dS )z
        Microsoft Windows SDK Tools paths generator.

        Return
        ------
        generator of str
            paths
        rO  r   rZ  zBin\x86TrP  rY  )r   r   r   rA  zBin\NETFX 4.0 Tools%sN)r   rR   rS   rT   r:  r   rK   r2   r9   r.   r   r   )r#   bin_dirrH  rS   re  s        r   rq  zEnvironmentInfo._sdk_tools  s      ;#{d22ee
G',,tw4g>>>>>w%%'' 	<'--$-77K[(D',,tw4d;;;;;;,&&w$$&& J "g11$D1II+k9D',,tw4d;;;;;;[D  7<< 5u==D'--$-77KW2F',,tvv{{%CDDDDD7+ 	3'222222	3 	3r   c                ,    | j         j        }|rd|z  ndS )zu
        Microsoft Windows SDK version subdir.

        Return
        ------
        str
            subdir
        %s\r   )r:  r   r#   ucrtvers     r   r`  zEnvironmentInfo._sdk_subdir  s#     '/%,4  "4r   c                r    | j         dk    rg S t          j                            | j        j        d          gS )zs
        Microsoft Windows SDK Setup.

        Return
        ------
        list of str
            paths
        r   Setup)r   rR   rS   rT   r:  r   r)   s    r   SdkSetupzEnvironmentInfo.SdkSetup  s4     ;ITW2G<<==r   c                t   | j         }| j        | j        dk    r-d}|                                 o|                                 }n>|                                p|                                }|j        dk    p
|j        dk    }g }|r|fdj        D             z  }|r|fdj        D             z  }|S )zv
        Microsoft .NET Framework Tools.

        Return
        ------
        list of str
            paths
        r   Tr   c                Z    g | ]'}t           j                            j        |          (S r   )rR   rS   rT   r  r(  r   r:  s     r   rE  z+EnvironmentInfo.FxTools.<locals>.<listcomp>  9       9<R.44  r   c                Z    g | ]'}t           j                            j        |          (S r   )rR   rS   rT   r  r~  s     r   rE  z+EnvironmentInfo.FxTools.<locals>.<listcomp>  r  r   )	rK   r:  r   r.   r2   r1   r*   r  r  )r#   rK   	include32	include64r[  r:  s        @r   FxToolszEnvironmentInfo.FxTools  s    WW;$I,,...Jr7H7H7J7J3JII((**Ab.?.?.A.AI'1MR]g5MI 	    @B@U   E  	    @B@U   E r   c                    | j         dk     s| j        j        sg S | j                            d          }t
          j                            | j        j        d|z            gS )z~
        Microsoft .Net Framework SDK Libraries.

        Return
        ------
        list of str
            paths
        r   TrP  zlib\um%s)r   r:  r  rK   r;   rR   rS   rT   )r#   rH  s     r   NetFxSDKLibrariesz!EnvironmentInfo.NetFxSDKLibraries  s[     ;TW%8Ig((T(22TW0+2KLLMMr   c                    | j         dk     s| j        j        sg S t          j                            | j        j        d          gS )z}
        Microsoft .Net Framework SDK Includes.

        Return
        ------
        list of str
            paths
        r   z
include\um)r   r:  r  rR   rS   rT   r)   s    r   NetFxSDKIncludesz EnvironmentInfo.NetFxSDKIncludes  s>     ;TW%8ITW0-@@AAr   c                X    t           j                            | j        j        d          gS )z
        Microsoft Visual Studio Team System Database.

        Return
        ------
        list of str
            paths
        zVSTSDB\DeployrC  r)   s    r   VsTDbzEnvironmentInfo.VsTDb  s#     TW13CDDEEr   c                \   | j         dk     rg S | j         dk     r(| j        j        }| j                            d          }n| j        j        }d}d| j         |fz  }t          j                            ||          g}| j         dk    r%|t          j                            ||d          gz  }|S )zn
        Microsoft Build Engine.

        Return
        ------
        list of str
            paths
        r   rO  TrQ  r   zMSBuild\%0.1f\bin%sRoslyn)	r   r:  r   rK   r9   r   rR   rS   rT   )r#   	base_pathrH  rS   builds        r   MSBuildzEnvironmentInfo.MSBuild  s     ;I[4/I'--d-;;KK,IK%k(BBi../;$bgll9dH==>>Er   c                r    | j         dk     rg S t          j                            | j        j        d          gS )zt
        Microsoft HTML Help Workshop.

        Return
        ------
        list of str
            paths
        r   zHTML Help Workshop)r   rR   rS   rT   r:  r   r)   s    r   HTMLHelpWorkshopz EnvironmentInfo.HTMLHelpWorkshop*  s5     ;ITW46JKKLLr   c                    | j         dk     rg S | j                            d          }t          j                            | j        j        d          }| j        }t          j                            ||d|          gS )z
        Microsoft Universal C Runtime SDK Libraries.

        Return
        ------
        list of str
            paths
        r   TrP  r   ucrt)	r   rK   r;   rR   rS   rT   r:  r  _ucrt_subdir)r#   rH  r   rx  s       r   UCRTLibrarieszEnvironmentInfo.UCRTLibraries9  st     ;Ig((T(22gll475u==#S"EFFGGr   c                    | j         dk     rg S t          j                            | j        j        d          }t          j                            |d| j        z            gS )z
        Microsoft Universal C Runtime SDK Include.

        Return
        ------
        list of str
            paths
        r   r3  z%sucrt)r   rR   rS   rT   r:  r  r  )r#   r3  s     r   UCRTIncludeszEnvironmentInfo.UCRTIncludesK  sQ     ;I',,tw99EEWh1B&BCCDDr   c                ,    | j         j        }|rd|z  ndS )z
        Microsoft Universal C Runtime SDK version subdir.

        Return
        ------
        str
            subdir
        rv  r   )r:  r  rw  s     r   r  zEnvironmentInfo._ucrt_subdir[  s#     '4%,4  "4r   c                J    d| j         cxk    rdk    rn ng S | j        j        gS )zk
        Microsoft Visual F#.

        Return
        ------
        list of str
            paths
        r   r   )r   r:  r   r)   s    r   FSharpzEnvironmentInfo.FSharph  s;     $+$$$$$$$$$I())r   r   c                $   d| j         z  | j                            d                              d          g }| j        j        }t          j                            |	                    dd                    }t          j        
                    |          r]t          j                            |t          j        |          d                   }||t          j                            |d          gz  }|t          j                            |d	          gz  }d
| j         dz  z  d
t          | j                  dz  z  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.
        zvcruntime%d0.dllTrP  r=   z\Toolsz\Redistr   onecoreredistzMicrosoft.VC%d.CRT
   c              3  b   K   | ])\  }}t           j                            ||          V  *d S rJ   )rR   rS   rT   )r(  r*  crt_dirrH  	vcruntimes      r   r+  z2EnvironmentInfo.VCRuntimeRedist.<locals>.<genexpr>  sO       
 
! GLLgyAA
 
 
 
 
 
r   N)r   rK   r;   stripr:  r   rR   rS   dirnamer!   r   rT   r   intr   r   r   r-  filterisfile)r#   prefixes
tools_pathredist_pathcrt_dirscandidate_pathsrH  r  s         @@r   VCRuntimeRedistzEnvironmentInfo.VCRuntimeRedistw  sl    '4	g((T(2288>> W)
gooj&8&8J&O&OPP7==%% 	L',,{BJ{4K4KB4OPPKbgll;	&J&JKKHRW\\*h7788 !DK"$45 C$4$4r$9:

 
 
 
 
%.%6x%J%J
 
 
 F27>?;;TBBBr   Texistsboolr2  c                   t          |                     d| j        | j        | j        | j        g|          |                     d| j        | j        | j        | j	        | j
        g|          |                     d| j        | j        | j        | j        g|          |                     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
        r3  r   r4  rS   )r3  r   r4  rS      r5  )r2  _build_pathsrM  rf  r  r  rT  rb  r  r  r  rV  rn  r]  rI  r  rr  r{  r  r  r  r   r  )r#   r  envs      r   
return_envzEnvironmentInfo.return_env  s9    %%OO%)	 	 	 !!$$L&* 
 
 %%!4<1A4>R 
 ""LLJMMLL)K
  7*
 *
 *
V ;"!5)-)=C%&
r   c                   t           j                            |          }t          j        |d                              t          j                  }t          j        ||          }|r,t          t          t          j
        j        |                    n|}|s6d|                                z  }t          j                            |          t!          |          }	t          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 %s environment variable is empty)r   chainfrom_iterabler
   rE   r   rR   pathseprp  r  rS   r   upperr   r   r   r   rT   )
r#   rx   spec_path_listsr  
spec_paths	env_pathsrG  extant_pathsr   unique_pathss
             r   r  zEnvironmentInfo._build_paths  s    . _22?CC
Kb))//
;;	
I66=CNtF27=%88999 	?4tzz||CC"99#>>>&|44z|,,,r   )Nr   rA   r/  )T)r  r  r   r2  )!r   r   r   rD   r$   rF   r   r   rI  rM  rT  rV  r]  rb  rf  rn  rr  rq  r`  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r8  r8  z  s"        .? ? ? ? ? 	 	 X	 	 	 X	 L L XL& 
 
 X
 L L XL( M M XM ' ' X'R I I XI&   X2 % % X%N 	' 	' X	'!3 !3 !3F 
5 
5 X
5 > > X>   X< N N XN B B XB 	F 	F X	F   X6 M M XM H H XH" E E XE 
5 
5 X
5 * * X*  C  C  C X CD; ; ; ; ;z- - - - -r   r8  )rD   
__future__r   r   r   r   rR   os.pathplatformtypingr   r   more_itertoolsr   distutils.errorsr   typing_extensionsr   r   systemr   r
   dictr6  r   rH   r   r2  r8  r   r   r   <module>r     s0     # " " " " "          				   + + + + + + + + * * * * * *     =<<<<<<<<  %**i77MMM! ! ! ! ! ! ! ! #dffG$$$$v
 v
 v
 v
 v
 v
 v
 v
rz z z z z z z zzP/ P/ P/ P/ P/ P/ P/ P/f1 1 1 1 1y 1 1 1|	- |	- |	- |	- |	- |	- |	- |	- |	- |	-r   