
    =Og[                     .   	 d dl Z d dlZd dlmZmZmZmZmZ d dlm	Z	m
Z
 d dlmZ dZ	 d dlZdZeZej        Zej        Zej        Zej        ZnP# e$ rH 	 d dlZd dlZdZeZej        Zej        Zej        Zej        Zn# e$ r  ej        d           Y nw xY wY nw xY werej        ej        ej        ej        fZ d Z!d	 Z"d
 Z# G d d          Z$d Z%d Z&d Z' G d de	          Z( e%            dk    r  ej)        d           e(Z*d dl+m(Z( d dl+m$Z$ dS dS )    N)DistutilsExecErrorDistutilsPlatformErrorCompileErrorLibError	LinkError)	CCompilergen_lib_options)logFTzWarning: Can't read registry to find the necessary compiler setting
Make sure that Python modules winreg, win32api or win32con are installed.c                     	 	 t          | |          }n# t          $ r Y d S w xY wg }d}	 	 t          ||          }n# t          $ r Y nw xY w|                    |           |dz  }=|S Nr   T   )RegOpenKeyExRegError
RegEnumKeyappend)basekeyhandleLiks         //usr/lib64/python3.11/distutils/msvccompiler.py	read_keysr   6   s    'dC((   tt
A	A	61%%AA 	 	 	E			Q Hs    
""< 
A	A	c                    	 	 t          | |          }n# t          $ r Y d S w xY wi }d}	 	 t          ||          \  }}}n# t          $ r Y n=w xY w|                                }t	          |          |t	          |          <   |dz  }_|S r   )r   r   RegEnumValuelowerconvert_mbcs)r   r   r   dr   namevaluetypes           r   read_valuesr"   G   s    dC((   tt
A	A	 ,VQ 7 7D% 	 	 	E	zz|| ,U 3 3,t

	Q Hs    
""A   
AAc                 f    t          | dd           }|	  |d          } n# t          $ r Y nw xY w| S )Ndecodembcs)getattrUnicodeError)sdecs     r   r   r   \   sQ    
!Xt
$
$C
	FAA 	 	 	D	Hs   ! 
..c                   &    e Zd Zd Zd Zd Zd ZdS )MacroExpanderc                 >    i | _         |                     |           d S N)macrosload_macros)selfversions     r   __init__zMacroExpander.__init__f   s#    !!!!!    c                 j    t           D ]*}t          ||          }|r||         | j        d|z  <    d S +d S )Nz$(%s))HKEYSr"   r.   )r0   macropathr   r   r   s         r   	set_macrozMacroExpander.set_macroj   sR     	 	DD$''A /0vGeO,	 	r3   c                     d|z  }|                      d|dz   d           |                      d|dz   d           d}|                      d|d	           	 |d
k    r|                      d|d           n|                      d|d           n!# t          $ r}t          d          d }~ww xY wd}t          D ]Y}	 t	          ||          }n# t
          $ r Y  w xY wt          |d          }t          ||d|          }	|	d         | j        d<   Zd S )Nz%Software\Microsoft\VisualStudio\%0.1fVCInstallDirz	\Setup\VC
productdirVSInstallDirz	\Setup\VSz Software\Microsoft\.NETFrameworkFrameworkDirinstallrootg      @FrameworkSDKDirzsdkinstallrootv1.1sdkinstallroota  Python was built with Visual Studio 2003;
extensions must be built with a compiler than can generate compatible binaries.
Visual Studio 2003 was not found on this system. If you have Cygwin installed,
you can try compiling with MingW32, by passing "-c mingw32" to setup.py.z.Software\Microsoft\NET Framework Setup\Productr   \r1   z$(FrameworkVersion))	r8   KeyErrorr   r5   r   r   r   r"   r.   )
r0   r1   vsbasenetexcpr   hr   r   s
             r   r/   zMacroExpander.load_macrosq   sq   9GC~v'<lKKK~v'<lKKK1~sM:::
	M}}0#7KLLLL0#7GHHH 	M 	M 	M(LM M M	M > 	> 	>D q))   Q""CDaaa"566A129DK-..	> 	>s*   5B
 

B(B##B(7C
CCc                 p    | j                                         D ]\  }}|                    ||          }|S r-   )r.   itemsreplace)r0   r(   r   vs       r   subzMacroExpander.sub   s;    K%%'' 	  	 DAq		!QAAr3   N)__name__
__module____qualname__r2   r8   r/   rL    r3   r   r+   r+   e   sP        " " "  > > >8    r3   r+   c                  x   	 d} t           j                            |           }|dk    rdS |t          |           z   }t           j        |d                              dd          \  }}t          |d d                   dz
  }|dk    r|dz  }t          |dd	                   d
z  }|dk    rd}|dk    r||z   S d S )NzMSC v.    r            g      $@r   )sysr1   findlensplitint)prefixr   r(   restmajorVersionminorVersions         r   get_build_versionrb      s    
 F  ABwwq	CKKAk!""o##C++GAtq"v;;?Lrq1v;;%Lqql**4r3   c                      	 d} t           j                            |           }|dk    rdS t           j                            d|          }t           j        |t          |           z   |         S )Nz bit (rR   Intel))rY   r1   rZ   r[   )r^   r   js      r   get_build_architecturerg      sc    
 F  ABwwwa  A;qV}Q''r3   c                     	 g }| D ]:}t           j                            |          }||vr|                    |           ;|S r-   )osr7   normpathr   )pathsreduced_pathsrF   nps       r   normalize_and_reduce_pathsrn      sX    
 M % %Wa  ]""  $$$r3   c                       e Zd Z	 dZi ZdgZg dZdgZdgZeez   ez   ez   Z	dZ
dZdZd	Zd
xZZdZddZd Z	 	 ddZ	 	 ddZ	 	 	 d dZ	 	 	 	 	 	 	 	 	 	 d!dZd Zd Zd Zd"dZd Zd#dZd ZdS )$MSVCCompilermsvcz.c)z.ccz.cppz.cxx.rcz.mcz.resz.objz.libz.dllz%s%sz.exer   c                 N   t          j        | |||           t                      | _        t	                      | _        | j        dk    rC| j        dk    r!d| _        t          | j                  | _        nd| _        d| j        z  | _	        nd| j        dz   z  | _	        d| _
        d S )	Nrd      zSoftware\Microsoft\VisualStudiozSoftware\Microsoft\DevstudiozVisual Studio version %szMicrosoft SDK compiler %srS   F)r   r2   rb   _MSVCCompiler__versionrg   _MSVCCompiler__arch_MSVCCompiler__rootr+   _MSVCCompiler__macros_MSVCCompiler__productinitialized)r0   verbosedry_runforces       r   r2   zMSVCCompiler.__init__   s    D'7E:::*,,,..;'!!~""@ -dn = ==7$.HDNN 9DNQ<NODN r3   c                    g | _         dt          j        v rGdt          j        v r9|                     d          r$d| _        d| _        d| _        d| _        d| _        n| 	                    d          | _         t          | j                   d	k    rt          d
| j        z            |                     d          | _        |                     d          | _        |                     d          | _        |                     d          | _        |                     d          | _        |                     d           |                     d           	 t          j        d                             d          D ]}| j                             |           n# t           $ r Y nw xY wt#          | j                   | _         d                    | j                   t          j        d<   d | _        | j        dk    rg d| _        g d| _        ng d| _        g d| _        g d| _        | j        dk    r
g d| _        n	g d| _        dg| _        d| _        d S )NDISTUTILS_USE_SDKMSSdkzcl.exezlink.exezlib.exezrc.exezmc.exer7   r   zxPython was built with %s, and extensions need to be built with the same version of the compiler, but it isn't installed.libinclude;rd   )/nologo/Ox/MD/W3/GX/DNDEBUG)r   /Od/MDdr   r   /Z7/D_DEBUG)r   r   r   r   /GS-r   )r   r   r   r   r   r   r   )/DLLr   z/INCREMENTAL:NOrt   )r   r   /INCREMENTAL:no/DEBUG)r   r   r   z	/pdb:Noner   r   T)_MSVCCompiler__pathsri   environfind_execclinkerr   rcmcget_msvc_pathsr[   r   ry   set_path_env_varr\   r   rB   rn   joinpreprocess_optionsrv   compile_optionscompile_options_debugldflags_sharedru   ldflags_shared_debugldflags_staticrz   )r0   rF   s     r   
initializezMSVCCompiler.initialize   s   "*,,BJ1F1F4==YaKbKb1F DG$DK DHDGDGG..v66DL4<  A%%, .J .( ) ) )
 mmH--DG--
33DK}}Y//DHmmH--DGmmH--DG!!%(((!!),,,	Z'--c22 ' '##A&&&&' 	 	 	D	1$,?? XXdl33
6"&;'!!$1 $1 $1D *= *= *=D&&$1 $1 $1D *= *= *=D& EDD>Q) ) )D%%) ) )D% !*ls   AF 
F#"F# c                     |d}g }|D ]s}t           j                            |          \  }}t           j                            |          d         }|t           j                            |          d          }|| j        vrt          d|z            |rt           j                            |          }|| j        v r<|	                    t           j        
                    ||| j        z                        || j        v r=|	                    t           j        
                    ||| j        z                        8|	                    t           j        
                    ||| j        z                        u|S )Nr   r   zDon't know how to compile %s)ri   r7   splitext
splitdriveisabssrc_extensionsr   basename_rc_extensionsr   r   res_extension_mc_extensionsobj_extension)r0   source_filenames	strip_dir
output_dir	obj_namessrc_namer   exts           r   object_filenameszMSVCCompiler.object_filenames7  s    Bz	( 	L 	LH'**H55KT37%%d++A.Dd++,,-D$--- #$BX$MNNN /w''..d)))  "',,
04t7I0I#K #K L L L L+++  "',,
04t7I0I#K #K L L L L   "',,
04t7I0I#K #K L L L Lr3   Nc	                    | j         s|                                  |                     ||||||          }	|	\  }}
}}}|pg }|                    d           |r|                    | j                   n|                    | j                   |
D ];}	 ||         \  }}n# t          $ r Y w xY w|rt          j	        
                    |          }|| j        v rd|z   }n|| j        v rd|z   }n|| j        v rQ|}d|z   }	 |                     | j        g|z   |gz   |gz              n!# t           $ r}t#          |          d }~ww xY w|| j        v rt          j	                            |          }t          j	                            |          }	 |                     | j        gd|d|gz   |gz              t          j	                            t          j	                            |                    \  }}t          j	                            ||dz             }|                     | j        gd|z   gz   |gz              n!# t           $ r}t#          |          d }~ww xY wt#          d|d	|          d
|z   }	 |                     | j        g|z   |z   ||gz   |z              # t           $ r}t#          |          d }~ww xY w|
S )Nz/cz/Tcz/Tpz/foz-hz-rrr   zDon't know how to compile z to z/Fo)rz   r   _setup_compiler   extendr   r   rB   ri   r7   abspath_c_extensions_cpp_extensionsr   spawnr   r   r   r   dirnamer   r   r   r   r   )r0   sourcesr   r.   include_dirsdebugextra_preargsextra_postargsdependscompile_infoobjectspp_optsbuildcompile_optsobjsrcr   	input_opt
output_optmsgh_dirrc_dirr   _rc_files                            r   compilezMSVCCompiler.compileV  s     	OO**:v|+2G^M M:F7%$*T""" 	6 :;;;; 4555 ?	( ?	(C :SS    + gooc**d(((!CK		,,,!CK		+++	"S[
,JJy72 *| ,/8k : ; ; ; ;) , , ,&s+++,+++ ,,--,JJy $eT6: ;>AU C D D D g..0@0@#0F0FGGGD! gllFD5LAAGJJy %} -07y 9 : : : : * , , ,&s+++, #l&)cc33$0 1 1 1 J(

DG9|3g=%z23)* + + + + & ( ( ("3'''( s[   B  
B-,B-&D))
E3EEB.I
I!II!)J,,
K
6KK
c                    | j         s|                                  |                     ||          \  }}|                     ||          }|                     ||          rN|d|z   gz   }|r	 	 |                     | j        g|z              d S # t          $ r}t          |          d }~ww xY wt          j
        d|           d S )N)r   /OUT:skipping %s (up-to-date))rz   r   _fix_object_argslibrary_filename
_need_linkr   r   r   r   r
   r   )	r0   r   output_libnamer   r   target_langoutput_filenamelib_argsr   s	            r   create_static_libzMSVCCompiler.create_static_lib  s      	OO $ 5 5gz J J*//;E 0 G G ??7O44 		C'O";!<<H $

DH:011111% $ $ $smm#$ I0/BBBBBs   /B 
B-B((B-c                 (   | j         s|                                  |                     ||          \  }}|                     |||          }|\  }}}|r%|                     dt          |          z              t          | |||          }| t          j        	                    ||          }| 
                    ||          r|t          j        k    r"|	r| j        dd          }n!| j        dd          }n|	r| j        }n| j        }g }|pg D ]}|                    d|z              ||z   |z   |z   d|z   gz   }|t          j                            t          j                            |                    \  }}t          j        	                    t          j                            |d                   |                     |                    }|                    d|z              |
r|
|d d<   |r|                    |           |                     t          j                            |                     	 |                     | j        g|z              d S # t0          $ r}t3          |          d }~ww xY wt5          j        d|           d S )Nz5I don't know what to do with 'runtime_library_dirs': r   z/EXPORT:r   r   z/IMPLIB:r   )rz   r   r   _fix_lib_argswarnstrr	   ri   r7   r   r   r   
EXECUTABLEr   r   r   r   r   r   r   r   mkpathr   r   r   r   r
   r   )r0   target_descr   r   r   	librarieslibrary_dirsruntime_library_dirsexport_symbolsr   r   r   
build_tempr   
fixed_argslib_optsldflagsexport_optssymld_argsdll_namedll_extimplib_filer   s                           r   linkzMSVCCompiler.link  s     	OO $ 5 5gz J J*''	<(<> >
:D7L"6 	5IIN2334 5 5 5 #4#/1E#,. . ! gll:GGO??7O44 ,	Ci222 6"7;GG"1!""5GG 2"7GG"1GK&," 5 5"":#34444)K7")O";!<=G )&(g&6&6G$$_55'7 '7#7 gllGOOGAJ//))(335 5 
[ 8999 ,+ /~...KK88999%

DK=7233333% % % %nn$% I0/BBBBBs   <I 
I:&I55I:c                     d|z   S )Nz	/LIBPATH:rP   r0   dirs     r   library_dir_optionzMSVCCompiler.library_dir_option  s    S  r3   c                      t          d          )Nz<don't know how to set runtime library search path for MSVC++)r   r   s     r   runtime_library_dir_optionz'MSVCCompiler.runtime_library_dir_option  s    $LN N 	Nr3   c                 ,    |                      |          S r-   )r   )r0   r   s     r   library_optionzMSVCCompiler.library_option  s    $$S)))r3   c                     |r|dz   |g}n|g}|D ]_}|D ]Z}t           j                            ||                     |                    }t           j                            |          r|c c S [`d S )N_d)ri   r7   r   r   exists)r0   dirsr   r   	try_namesr   r   libfiles           r   find_library_filezMSVCCompiler.find_library_file"  s      	tS)III 	 	C! # #',,sD,A,A4,H,HII7>>'** #"NNNNN## 4r3   c                    	 | j         D ]b}t          j                            t          j                            |          |          }t          j                            |          r|c S ct          j        d                             d          D ]b}t          j                            t          j                            |          |          }t          j                            |          r|c S c|S )NPathr   )r   ri   r7   r   r   isfiler   r\   )r0   exerF   fns       r   r   zMSVCCompiler.find_exe4  s    	  	 	Abgooa00#66Bw~~b!! 			 F#))#.. 	 	Abgooa0055Bw~~b!! 			 
r3   x86c                    	 t           sg S |dz   }| j        dk    rd| j        | j        fz  }n| j        d|d}t          D ]q}t	          ||          }|r]| j        dk    r5| j                            ||                                       d          c S ||                             d          c S r| j        dk    r9t          D ]1}t	          |d| j        z            |                     d	            n2g S )
Nz dirsrt   z6%s\%0.1f\VC\VC_OBJECTS_PLATFORM_INFO\Win32\Directoriesz.\6.0\Build System\Components\Platforms\Win32 (z)\Directoriesr   rS   z%s\6.0zIt seems you have Visual Studio 6 installed, but the expected registry settings are not present.
You must at least run the Visual Studio GUI once so that these entries are created.)	_can_read_regru   rw   r5   r"   rx   rL   r\   r   )r0   r7   platformr   r   r   s         r   r   zMSVCCompiler.get_msvc_pathsJ  sE   	
  	Ig~>QLk4>23CC 26hhhHC  	. 	.DD#&&A .>Q&&=,,QtW55;;C@@@@@T7==-----	. >Q  tY%<==III = > > > E J 	r3   c                     	 |dk    r|                      d          }n|                      |          }|r$d                    |          t          j        |<   d S d S )Nr   libraryr   )r   r   ri   r   )r0   r   rF   s      r   r   zMSVCCompiler.set_path_env_varn  sh    	 5==##I..AA##D))A 	+"xx{{BJt	+ 	+r3   )r   r   r   )r   r   )NNNr   NNN)Nr   N)
NNNNNr   NNNN)r   )r  )rM   rN   rO   compiler_typeexecutablesr   r   r   r   r   r   r   static_lib_extensionshared_lib_extensionstatic_lib_formatshared_lib_formatexe_extensionr2   r   r   r   r   r   r   r   r   r  r   r   r   rP   r3   r   rp   rp      s       6 M K FM---OWNWN $o5$%'56NMM!!,22)M! ! ! !$<  <  < D $%$&   @ HIAER R R Rp &* !&*C C C C: "&  LC LC LC LCf! ! !N N N* * *   $  ," " " "H+ + + + +r3   rp   g       @z3Importing new compiler from distutils.msvc9compiler)rp   )r+   ),rY   ri   distutils.errorsr   r   r   r   r   distutils.ccompilerr   r	   	distutilsr
   r	  winreghkey_mod	OpenKeyExr   EnumKeyr   	EnumValuer   errorr   ImportErrorwin32apiwin32coninfo
HKEY_USERSHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_CLASSES_ROOTr5   r   r"   r   r+   rb   rg   rn   rp   r   OldMSVCCompilerdistutils.msvc9compilerrP   r3   r   <module>r'     s   ' ' ' ' ' ' ' ' ' ' ' ' ' '                     8MMMMH#LJ#L|HH 8 8 88,(
,> 8 8 8 7 	8 	8 	8 	8 	888"  ) '(')E
  "  *  + + + + + + + +Z  2( ( (  s+ s+ s+ s+ s+9 s+ s+ s+l #CICDDD"O44444455555555 s5   $A B(A=<B=BBBBB