
    =Og:                         	 d dl Z d dlZd dlZd dlT d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZ d dlmZ  G d	 d
          ZdZddZddddddZd ZddZd Zd ZdS )    N)*)spawn)	move_file)mkpath)newer_group)split_quotedexecute)logc                      e Zd Z	 dZdZdZdZdZdZdZ	dZ
ddddddZg dZd@dZd	 Zd
 Zd Zd ZdAdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z dAdZ!d Z"d Z#d Z$d  Z%	 	 dBd!Z&	 	 	 dCd"Z'd# Z(	 	 dDd$Z)d%Z*d&Z+d'Z,	 	 	 	 	 	 	 	 	 	 dEd(Z-	 	 	 	 	 	 	 	 	 	 dEd)Z.	 	 	 	 	 	 	 	 	 	 dEd*Z/	 	 	 	 	 	 	 	 dFd+Z0d, Z1d- Z2d. Z3	 	 dGd/Z4dHd0Z5dId2Z6dId3Z7dId4Z8	 	 dJd6Z9dKd8Z:d9 Z;d: Z<dLd;Z=d< Z>d= Z?dMd?Z@dS )N	CCompilerNcc++objc).cz.ccz.cppz.cxxz.m)r   r   r   r   c                    || _         || _        || _        d | _        g | _        g | _        g | _        g | _        g | _        g | _	        | j
                                        D ]#}|                     || j
        |                    $d S N)dry_runforceverbose
output_dirmacrosinclude_dirs	librarieslibrary_dirsruntime_library_dirsobjectsexecutableskeysset_executable)selfr   r   r   keys        ,/usr/lib64/python3.11/distutils/ccompiler.py__init__zCCompiler.__init__U   s    
      %'! #((** 	< 	<CT%5c%:;;;;	< 	<    c                     	 |D ]F}|| j         vrt          d|d| j        j                  |                     |||                    Gd S )Nzunknown executable 'z' for class )r   
ValueError	__class____name__r   )r    kwargsr!   s      r"   set_executableszCCompiler.set_executablesy   sw    	2  	2 	2C$*** jssDN33"5 6 6 6VC[1111		2 	2r$   c                     t          |t                    r t          | |t          |                     d S t          | ||           d S r   )
isinstancestrsetattrr   )r    r!   values      r"   r   zCCompiler.set_executable   sL    eS!! 	&D#|E2233333D#u%%%%%r$   c                 H    d}| j         D ]}|d         |k    r|c S |dz  }d S )Nr      )r   )r    nameidefns       r"   _find_macrozCCompiler._find_macro   s>    K 	 	DAw$FAAtr$   c                 
   	 |D ]~}t          |t                    rOt          |          dv r>t          |d         t                    s|d         t          |d         t                    st	          d|z  dz   dz             d S )N)r1      r1   r   zinvalid macro definition '%s': z.must be tuple (string,), (string, string), or z(string, None))r,   tuplelenr-   	TypeError)r    definitionsr4   s      r"   _check_macro_definitionsz"CCompiler._check_macro_definitions   s    	   	( 	(DtU++ (YY&((!47C00 )48GOQ-- 5D!BT!IF!G&!' ( ( ( 5D	( 	(r$   c                 ~    	 |                      |          }|| j        |= | j                            ||f           d S r   r5   r   append)r    r2   r/   r3   s       r"   define_macrozCCompiler.define_macro   sJ    	 d##=AD%=)))))r$   c                     	 |                      |          }|| j        |= |f}| j                            |           d S r   r>   )r    r2   r3   undefns       r"   undefine_macrozCCompiler.undefine_macro   sM    	 d##=A6"""""r$   c                 <    	 | j                             |           d S r   )r   r?   r    dirs     r"   add_include_dirzCCompiler.add_include_dir   &    	
 	  %%%%%r$   c                 &    	 |d d          | _         d S r   r   r    dirss     r"   set_include_dirszCCompiler.set_include_dirs   s    	 !Gr$   c                 <    	 | j                             |           d S r   )r   r?   )r    libnames     r"   add_libraryzCCompiler.add_library   s%    	 	g&&&&&r$   c                 &    	 |d d          | _         d S r   )r   )r    libnamess     r"   set_librarieszCCompiler.set_libraries   s    	
 "!!!r$   c                 <    	 | j                             |           d S r   )r   r?   rE   s     r"   add_library_dirzCCompiler.add_library_dir  rH   r$   c                 &    	 |d d          | _         d S r   )r   rK   s     r"   set_library_dirszCCompiler.set_library_dirs  s    	 !Gr$   c                 <    	 | j                             |           d S r   )r   r?   rE   s     r"   add_runtime_library_dirz!CCompiler.add_runtime_library_dir  s&    	 	!((-----r$   c                 &    	 |d d          | _         d S r   )r   rK   s     r"   set_runtime_library_dirsz"CCompiler.set_runtime_library_dirs  s    	
 %)G!!!r$   c                 <    	 | j                             |           d S r   )r   r?   )r    objects     r"   add_link_objectzCCompiler.add_link_object   s%    	
 	F#####r$   c                 &    	 |d d          | _         d S r   )r   )r    r   s     r"   set_link_objectszCCompiler.set_link_objects(  s    	
 qqqzr$   c                    	 || j         }n$t          |t                    st          d          || j        }n1t          |t
                    r|| j        pg z   }nt          d          || j        }nEt          |t
          t          f          rt          |          | j        pg z   }nt          d          |g }|                     |d|          }t          ||          }i }	t          t          |                    D ]p}
||
         }||
         }t          j                            |          d         }|                     t          j                            |                     ||f|	|<   q|||||	fS )N%'output_dir' must be a string or None/'macros' (if supplied) must be a list of tuples6'include_dirs' (if supplied) must be a list of stringsr   )	strip_dirr   r1   )r   r,   r-   r:   r   listr   r8   object_filenamesgen_preprocess_optionsranger9   ospathsplitextr   dirname)r    outdirr   incdirssourcesdependsextrar   pp_optsbuildr3   srcobjexts                 r"   _setup_compilezCCompiler._setup_compile6  s   I>_FFFC(( 	ECDDD>[FF%% 	Ot{0b1FFMNNN?'GG$// 	L7mmt'8'>B?GGJL L L =E ''139 ( ; ; )99s7||$$ 	$ 	$A!*C!*C'""3''*CKK,,---sE#JJww55r$   c                 8    |dgz   }|rdg|d d<   |r||d d<   |S )Nz-cz-gr    )r    rs   debugbeforecc_argss        r"   _get_cc_argszCCompiler._get_cc_argsa  s?    TF" 	!&GBQBK 	! GBQBKr$   c                 ~   	 || j         }n$t          |t                    st          d          || j        }n1t          |t
                    r|| j        pg z   }nt          d          || j        }nEt          |t
          t          f          rt          |          | j        pg z   }nt          d          |||fS )Nrb   rc   rd   )r   r,   r-   r:   r   rf   r   r8   )r    r   r   r   s       r"   _fix_compile_argszCCompiler._fix_compile_argsj  s    	 JJJ,, 	ECDDD>[FF%% 	Ot{0b1FFMNNN,LLtUm44 	L--1B1HbILLJL L L 6<//r$   c                 :    	 |                      ||          }|i fS )N)r   )rg   )r    rp   r   rq   r   s        r"   _prep_compilezCCompiler._prep_compile  s-    	 ''J'GG
 {r$   c                     	 t          |t          t          f          st          d          t          |          }|| j        }n$t          |t
                    st          d          ||fS )Nz,'objects' must be a list or tuple of stringsrb   )r,   rf   r8   r:   r   r-   )r    r   r   s      r"   _fix_object_argszCCompiler._fix_object_args  sv    	
 'D%=11 	LJKKKw--JJJ,, 	ECDDD$$r$   c                    	 || j         }nEt          |t          t          f          rt          |          | j         pg z   }nt	          d          || j        }nEt          |t          t          f          rt          |          | j        pg z   }nt	          d          || j        }nEt          |t          t          f          rt          |          | j        pg z   }nt	          d          |||fS )Nz3'libraries' (if supplied) must be a list of stringsz6'library_dirs' (if supplied) must be a list of stringsz>'runtime_library_dirs' (if supplied) must be a list of strings)r   r,   rf   r8   r:   r   r   )r    r   r   r   s       r"   _fix_lib_argszCCompiler._fix_lib_args  s6   	 II	D%=11 	Ii((DN,@bAIIGI I I ,LLtUm44 	L..$2C2IrJLLJL L L  '#'#<  ,tUm<< 	9$()=$>$>%)%>%D"%F    8 9 9 9 <)=>>r$   c                 n    	 | j         rdS | j        rt          ||d          }nt          ||          }|S )NTnewer)missing)r   r   r   )r    r   output_filer   s       r"   
_need_linkzCCompiler._need_link  sL    	 : 	4| ;#Wk7KKK#Wk::Lr$   c                 P   	 t          |t                    s|g}d }t          | j                  }|D ]s}t          j                            |          \  }}| j                            |          }	 | j        	                    |          }||k     r|}|}d# t          $ r Y pw xY w|S r   )r,   rf   r9   language_orderrj   rk   rl   language_mapgetindexr&   )	r    rp   langr   sourcebaserw   extlangextindexs	            r"   detect_languagezCCompiler.detect_language  s    	 '4(( 	 iGD'(( 		 		F((00ID#'++C00G.44W==e##"D$E   s   1$B
B#"B#c                     	 d S r   rz   )r    r   r   r   r   extra_preargsextra_postargss          r"   
preprocesszCCompiler.preprocess  s    	 	r$   c	           	          	 |                      ||||||          \  }}	}}
}|                     |
||          }|	D ]9}	 ||         \  }}n# t          $ r Y w xY w|                     ||||||
           :|	S r   )rx   r~   KeyError_compile)r    rp   r   r   r   r{   r   r   rq   r   rs   rt   r}   rv   ru   rw   s                   r"   compilezCCompiler.compile  s    /	f ##Jg$+^= = 	8% ##GUMBB 	K 	KC :SS   MM#sC.'JJJJ s   A


AAc                     	 d S r   rz   )r    rv   ru   rw   r}   r   rs   s          r"   r   zCCompiler._compileC  s    - 	r$   c                     	 d S r   rz   )r    r   output_libnamer   r{   target_langs         r"   create_static_libzCCompiler.create_static_libI  s    	, 	r$   shared_objectshared_library
executablec                     	 t           r   NotImplementedError)r    target_descr   output_filenamer   r   r   r   export_symbolsr{   r   r   
build_tempr   s                 r"   linkzCCompiler.linki  s    *	V "!r$   c                     |                      t          j        ||                     |d          |||||||	|
||           d S )Nshared)lib_type)r   r   SHARED_LIBRARYlibrary_filename)r    r   r   r   r   r   r   r   r{   r   r   r   r   s                r"   link_shared_libzCCompiler.link_shared_lib  s_     			)*G'''JJ\+? %[	J 	J 	J 	J 	Jr$   c                 \    |                      t          j        |||||||||	|
||           d S r   )r   r   SHARED_OBJECT)r    r   r   r   r   r   r   r   r{   r   r   r   r   s                r"   link_shared_objectzCCompiler.link_shared_object  sK     			))7!:\+? %[		J 	J 	J 	J 	Jr$   c                     |                      t          j        ||                     |          ||||d |||	d |
           d S r   )r   r   
EXECUTABLEexecutable_filename)r    r   output_prognamer   r   r   r   r{   r   r   r   s              r"   link_executablezCCompiler.link_executable  sX     			)&**?;;Z\+?k	K 	K 	K 	K 	Kr$   c                     	 t           r   r   rE   s     r"   library_dir_optionzCCompiler.library_dir_option      	 "!r$   c                     	 t           r   r   rE   s     r"   runtime_library_dir_optionz$CCompiler.runtime_library_dir_option  r   r$   c                     	 t           r   r   )r    libs     r"   library_optionzCCompiler.library_option  r   r$   c                    	 dd l }|g }|g }|g }|g }|                    d|d          \  }}t          j        |d          }		 |D ]}
|	                    d|
z             |	                    d|z             |	                                 n# |	                                 w xY w	 |                     |g|          }n# t          $ r Y d	S w xY w	 |                     |d
||           n# t          t          f$ r Y d	S w xY wdS )Nr   r   T)textwz#include "%s"
z=int main (int argc, char **argv) {
    %s();
    return 0;
}
rJ   Fza.out)r   r   )tempfilemkstemprj   fdopenwritecloser   CompileErrorr   	LinkErrorr:   )r    funcnameincludesr   r   r   r   fdfnamefinclr   s               r"   has_functionzCCompiler.has_function  s   	 	HLIL$$T8$$??	EIb#
	  6 6-45555GG 
     GGIIIIAGGIIII	llE7lFFGG 	 	 	55		  '+4.: ! < < < < 9% 	 	 	55	ts0   5B B'+C 
CCC0 0DDc                     	 t           r   r   )r    rL   r   r{   s       r"   find_library_filezCCompiler.find_library_file$  s    	 "!r$    c                    |d}g }|D ]}t           j                            |          \  }}t           j                            |          d         }|t           j                            |          d          }|| j        vrt          d|d|d          |rt           j                            |          }|                    t           j        	                    ||| j
        z                        |S )Nr   r1   zunknown file type 'z	' (from 'z'))rj   rk   rl   
splitdriveisabssrc_extensionsUnknownFileErrorbasenamer?   joinobj_extension)r    source_filenamesre   r   	obj_namessrc_namer   rw   s           r"   rg   zCCompiler.object_filenamesO  s   J	( 
	F 
	FH((22ID#7%%d++A.Dd++,,-D$---&&>Acc888LN N N .w''--RW\\**.1C*CE E F F F Fr$   c                     |rt           j                            |          }t           j                            ||| j        z             S r   )rj   rk   r   r   shared_lib_extensionr    r   re   r   s       r"   shared_object_filenamez CCompiler.shared_object_filename`  s=     	2w''11Hw||J43L(LMMMr$   c                     |rt           j                            |          }t           j                            ||| j        pdz             S )Nr   )rj   rk   r   r   exe_extensionr   s       r"   r   zCCompiler.executable_filenamef  sB     	2w''11Hw||JD4F4L"(MNNNr$   staticc                    |dvrt          d          t          | |dz             }t          | |dz             }t          j                            |          \  }}|||fz  }	|rd}t          j                            |||	          S )N)r   r   dylib
xcode_stubz?'lib_type' must be "static", "shared", "dylib", or "xcode_stub"_lib_format_lib_extensionr   )r&   getattrrj   rk   splitr   )
r    rO   r   re   r   fmtrw   rF   r   filenames
             r"   r   zCCompiler.library_filenamel  s     FFF[] ] ]dH}455dH'7788GMM'**	T$$ 	Cw||JX666r$   r1   c                 .    t          j        |           d S r   )r
   r{   )r    msglevels      r"   announcezCCompiler.announce  s    	#r$   c                 8    ddl m} |rt          |           d S d S )Nr   )DEBUG)distutils.debugr   print)r    r   r   s      r"   debug_printzCCompiler.debug_print  s5    )))))) 	#JJJJJ	 	r$   c                 J    t           j                            d|z             d S )Nzwarning: %s
)sysstderrr   )r    r   s     r"   warnzCCompiler.warn  s#    
3./////r$   c                 4    t          |||| j                   d S r   )r	   r   )r    funcargsr   r   s        r"   r	   zCCompiler.execute  s    dC.....r$   c                 2    t          || j                   d S N)r   )r   r   )r    cmds     r"   r   zCCompiler.spawn  s    c4<((((((r$   c                 0    t          ||| j                  S r  )r   r   )r    ru   dsts      r"   r   zCCompiler.move_file  s    c4<8888r$     c                 4    t          ||| j                   d S r  )r   r   )r    r2   modes      r"   r   zCCompiler.mkpath  s    tT4<000000r$   )r   r   r   r   )NNNNN)NNNr   NNN)Nr   N)
NNNNNr   NNNN)NNNNr   NNN)NNNN)r   )r   r   )r   r   r   )r1   )Nr1   )r	  )Ar(   
__module____qualname__compiler_typer   r   static_lib_extensionr   static_lib_formatshared_lib_formatr   r   r   r#   r*   r   r5   r<   r@   rC   rG   rM   rP   rS   rU   rW   rY   r[   r^   r`   rx   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rg   r   r   r   r   r   r   r	   r   r   r   rz   r$   r"   r   r      s       * M4 NMM !"""#	 L *))N"< "< "< "<H2 2 2@& & &  ( ( ("* * * *# # #$& & &$ $ $' ' ' % % %& & &$ $ $. . ., , ,$ $ $" " ")6 )6 )6V  0 0 0@    % % %" ?  ?  ?D    0 ;?IM    8<:>-1B B B BH   EI/3   8 $M%NJ "&  9" 9" 9" 9"B $("&%)-1'+&*'+#'$(J J J J0 '+%)(,04*.!")-*.&*'+J J J J. $("&%)-1&*'+$(K K K K," " "" " "" " " BF26* * * *X" " " "V   "N N N NO O O O 2:137 7 7 7&     
0 0 0/ / / /) ) )9 9 91 1 1 1 1 1r$   r   ))zcygwin.*unix)posixr  )ntmsvcc                     	 | t           j        } |t          j        }t          D ]3\  }}t          j        ||          t          j        ||           |c S 4dS )Nr  )rj   r2   r   platform_default_compilersrematch)osnamer  patterncompilers       r"   get_default_compilerr    so     ~</  8GX&&28GV$$0OOO 1 6r$   )unixccompilerUnixCCompilerzstandard UNIX-style compiler)_msvccompilerMSVCCompilerzMicrosoft Visual C++)cygwinccompilerCygwinCCompilerz'Cygwin port of GNU C Compiler for Win32)r#  Mingw32CCompilerz(Mingw32 port of GNU C Compiler for Win32)bcppcompilerBCPPCompilerzBorland C++ Compiler)r  r  cygwinmingw32bcppc                     	 ddl m}  g }t                                          D ].}|                    d|z   d t          |         d         f           /|                                  | |          }|                    d           d S )Nr   )FancyGetoptz	compiler=r7   zList of available compilers:)distutils.fancy_getoptr,  compiler_classr   r?   sort
print_help)r,  	compilersr  pretty_printers       r"   show_compilersr3    s     322222I"'')) 8 8+h.(2157 	8 	8 	8 	8NN [++N<=====r$   c                    	 | t           j        } 	 |t          |           }t          |         \  }}}n,# t          $ r d| z  }||d|z  z   }t          |          w xY w	 d|z   }t          |           t          j        |         }	t          |	          |         }
n?# t          $ r t          d|z            t          $ r t          d|d|d          w xY w |
d ||          S )Nz5don't know how to compile C/C++ code on platform '%s'z with '%s' compilerz
distutils.z4can't compile C/C++ code: unable to load module '%s'z0can't compile C/C++ code: unable to find class 'z' in module '')rj   r2   r  r.  r   DistutilsPlatformError
__import__r   modulesvarsImportErrorDistutilsModuleError)platr  r   r   r   module_name
class_namelong_descriptionr   moduleklasss              r"   new_compilerrB    sO   	 |w	*+D11H6DX6N3j"2"2 * * *EL-88C$S)))	*="[0K   [)VZ(   "D  	  = = =""#-::{{{<= = 	== 5w&&&s   "4 )A!;B <Cc                    	 g }| D ]}t          |t                    rdt          |          cxk    rdk    sn t          d|z            t          |          dk    r|                    d|d         z             wt          |          dk    r?|d         |                    d|d         z             |                    d|z             |D ]}|                    d|z             |S )	Nr1   r7   zPbad macro definition '%s': each element of 'macros' list must be a 1- or 2-tuplez-U%sr   z-D%sz-D%s=%sz-I%s)r,   r8   r9   r:   r?   )r   r   rs   macrorF   s        r"   rh   rh     s    ( G 2 25%(( 	Q#e**-A-A-A-A-A-A-A-AJ  
 u::??NN6E!H,----ZZ1__Qxva01111
 y50111 % %v|$$$$Nr$   c                 ,   	 g }|D ]*}|                     |                     |                     +|D ]G}|                     |          }t          |t                    r||z   }2|                     |           H|D ]}t
          j                            |          \  }}	|rH|                     |g|	          }
|
r|                     |
           U| 	                    d|z             n|                     | 
                    |                     |S )Nz6no library file corresponding to '%s' found (skipping))r?   r   r   r,   rf   rj   rk   r   r   r   r   )r  r   r   r   lib_optsrF   optr   lib_dirlib_namelib_files              r"   gen_lib_optionsrK  8  sK    H : :33C889999# ! !11#66c4   	!#~HHOOC      
; 
; gmmC00( 	;117)XFFH =)))) 68;< = = = = OOH33S99::::Or$   )NN)NNr   r   r   )r   rj   r  distutils.errorsdistutils.spawnr   distutils.file_utilr   distutils.dir_utilr   distutils.dep_utilr   distutils.utilr   r	   	distutilsr
   r   r  r  r.  r3  rB  rh   rK  rz   r$   r"   <module>rS     so  1
                 ! ! ! ! ! ! ) ) ) ) ) ) % % % % % % * * * * * * 0 0 0 0 0 0 0 0      E1 E1 E1 E1 E1 E1 E1 E1X    0?7JK7
 
> > >"*' *' *' *'Z* * *Z$ $ $ $ $r$   