509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \7¹  ã               @   sÂ   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mZ d dlmZmZ d dlmZ G d	d
„ d
ƒZd,Zd-dd„Zd.d/d0d1d2d œZd!d"„ Zd3d#d$„Zd%d&„ Zd'd(„ ZdS )4é    N)Ú*)Úspawn)Ú	move_file)Úmkpath)Únewer_pairwiseÚnewer_group)Úsplit_quotedÚexecute)Úlogc            
   @   s   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dddgZdpdd„Zd	d
„ Zdd„ Zdd„ Zdd„ Zdqdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Z drd/d0„Z!d1d2„ Z"d3d4„ Z#d5d6„ Z$d7d8„ Z%dsd9d:„Z&dtd;d<„Z'd=d>„ Z(dud?d@„Z)dAZ*dBZ+dCZ,dvdDdE„Z-dwdFdG„Z.dxdHdI„Z/dydJdK„Z0dLdM„ Z1dNdO„ Z2dPdQ„ Z3dzdRdS„Z4d{dTdU„Z5d|dWdX„Z6d}dYdZ„Z7d~d[d\„Z8dd^d_„Z9d€dadb„Z:dcdd„ Z;dedf„ Z<d�dgdh„Z=didj„ Z>dkdl„ Z?d‚dndo„Z@dS )ƒÚ	CCompilerNÚczc++Zobjc)z.cz.ccz.cppz.cxxz.mr   c             C   sf   || _ || _|| _d | _g | _g | _g | _g | _g | _g | _	x$| j
jƒ D ]}| j|| j
| ƒ qHW 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   Úkey© r   ú+/usr/lib64/python3.6/distutils/ccompiler.pyÚ__init__U   s    zCCompiler.__init__c             K   s@   x:|D ]2}|| j kr(td|| jjf ƒ‚| j||| ƒ qW d S )Nz$unknown executable '%s' for class %s)r   Ú
ValueErrorÚ	__class__Ú__name__r   )r   Úkwargsr   r   r   r   Úset_executablesy   s
    

zCCompiler.set_executablesc             C   s,   t |tƒrt| |t|ƒƒ nt| ||ƒ d S )N)Ú
isinstanceÚstrÚsetattrr   )r   r   Úvaluer   r   r   r   ™   s    
zCCompiler.set_executablec             C   s0   d}x&| j D ]}|d |kr |S |d7 }qW d S )Nr   é   )r   )r   ÚnameÚiÚdefnr   r   r   Ú_find_macroŸ   s    zCCompiler._find_macroc             C   sd   x^|D ]V}t |tƒoFt|ƒdkoFt |d tƒs:|d d koFt |d tƒstd| d d ƒ‚qW d S )Nr(   é   r   zinvalid macro definition '%s': z.must be tuple (string,), (string, string), or z(string, None))r(   r-   )r$   ÚtupleÚlenr%   Ú	TypeError)r   Zdefinitionsr+   r   r   r   Ú_check_macro_definitions§   s    


z"CCompiler._check_macro_definitionsc             C   s.   | j |ƒ}|d k	r| j|= | jj||fƒ d S )N)r,   r   Úappend)r   r)   r'   r*   r   r   r   Údefine_macro¸   s    	
zCCompiler.define_macroc             C   s0   | j |ƒ}|d k	r| j|= |f}| jj|ƒ d S )N)r,   r   r2   )r   r)   r*   Zundefnr   r   r   Úundefine_macroÇ   s
    
zCCompiler.undefine_macroc             C   s   | j j|ƒ d S )N)r   r2   )r   Údirr   r   r   Úadd_include_dirÙ   s    zCCompiler.add_include_dirc             C   s   |d d … | _ d S )N)r   )r   Údirsr   r   r   Úset_include_dirsá   s    zCCompiler.set_include_dirsc             C   s   | j j|ƒ d S )N)r   r2   )r   Úlibnamer   r   r   Úadd_libraryë   s    zCCompiler.add_libraryc             C   s   |d d … | _ d S )N)r   )r   Zlibnamesr   r   r   Úset_librariesû   s    zCCompiler.set_librariesc             C   s   | j j|ƒ d S )N)r   r2   )r   r5   r   r   r   Úadd_library_dir  s    zCCompiler.add_library_dirc             C   s   |d d … | _ d S )N)r   )r   r7   r   r   r   Úset_library_dirs  s    zCCompiler.set_library_dirsc             C   s   | j j|ƒ d S )N)r   r2   )r   r5   r   r   r   Úadd_runtime_library_dir  s    z!CCompiler.add_runtime_library_dirc             C   s   |d d … | _ d S )N)r   )r   r7   r   r   r   Úset_runtime_library_dirs  s    z"CCompiler.set_runtime_library_dirsc             C   s   | j j|ƒ d S )N)r   r2   )r   Úobjectr   r   r   Úadd_link_object   s    zCCompiler.add_link_objectc             C   s   |d d … | _ d S )N)r   )r   r   r   r   r   Úset_link_objects(  s    zCCompiler.set_link_objectsc             C   s  |d kr| j }nt|tƒs"tdƒ‚|d kr2| j}n"t|tƒrL|| jpFg  }ntdƒ‚|d krd| j}n*t|ttfƒr†t|ƒ| jp€g  }ntdƒ‚|d kršg }| j|d|d�}t	||ƒ}i }	xRt
t|ƒƒD ]B}
||
 }||
 }tjj|ƒd }| jtjj|ƒƒ ||f|	|< qÆW |||||	fS )Nz%'output_dir' must be a string or Nonez/'macros' (if supplied) must be a list of tuplesz6'include_dirs' (if supplied) must be a list of stringsr   )Ú	strip_dirr   r(   )r   r$   r%   r0   r   Úlistr   r.   Úobject_filenamesÚgen_preprocess_optionsÚranger/   ÚosÚpathÚsplitextr   Údirname)r   Zoutdirr   ZincdirsÚsourcesÚdependsZextrar   Úpp_optsÚbuildr*   ÚsrcÚobjÚextr   r   r   Ú_setup_compile6  s8    


zCCompiler._setup_compilec             C   s0   |dg }|rdg|d d…< |r,||d d…< |S )Nz-cz-gr   r   )r   rN   ÚdebugZbeforeÚcc_argsr   r   r   Ú_get_cc_argsa  s    
zCCompiler._get_cc_argsc             C   s˜   |d kr| j }nt|tƒs"tdƒ‚|d kr2| j}n"t|tƒrL|| jpFg  }ntdƒ‚|d krd| j}n*t|ttfƒr†t|ƒ| jp€g  }ntdƒ‚|||fS )Nz%'output_dir' must be a string or Nonez/'macros' (if supplied) must be a list of tuplesz6'include_dirs' (if supplied) must be a list of strings)r   r$   r%   r0   r   rD   r   r.   )r   r   r   r   r   r   r   Ú_fix_compile_argsj  s     


zCCompiler._fix_compile_argsc             C   s   | j ||d�}|i fS )N)r   )rE   )r   rL   r   rM   r   r   r   r   Ú_prep_compileŠ  s    	zCCompiler._prep_compilec             C   sH   t |ttfƒstdƒ‚t|ƒ}|d kr.| j}nt |tƒs@tdƒ‚||fS )Nz,'objects' must be a list or tuple of stringsz%'output_dir' must be a string or None)r$   rD   r.   r0   r   r%   )r   r   r   r   r   r   Ú_fix_object_argsš  s    
zCCompiler._fix_object_argsc             C   s¸   |d kr| j }n*t|ttfƒr2t|ƒ| j p,g  }ntdƒ‚|d krJ| j}n*t|ttfƒrlt|ƒ| jpfg  }ntdƒ‚|d kr„| j}n*t|ttfƒr¦t|ƒ| jp g  }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$   rD   r.   r0   r   r   )r   r   r   r   r   r   r   Ú_fix_lib_args«  s&    zCCompiler._fix_lib_argsc             C   s2   | j r
dS | jr t||dd�}n
t||ƒ}|S d S )NTÚnewer)Zmissing)r   r   r   )r   r   Úoutput_filer[   r   r   r   Ú
_need_linkÍ  s    
zCCompiler._need_linkc       	      C   s‚   t |tƒs|g}d }t| jƒ}x^|D ]V}tjj|ƒ\}}| jj|ƒ}y | jj	|ƒ}||k rb|}|}W q$ t
k
rx   Y q$X q$W |S )N)r$   rD   r/   Úlanguage_orderrH   rI   rJ   Úlanguage_mapÚgetÚindexr   )	r   rL   Zlangra   ÚsourceÚbaserR   ZextlangZextindexr   r   r   Údetect_languageÚ  s    



zCCompiler.detect_languagec             C   s   d S )Nr   )r   rb   r\   r   r   Úextra_preargsÚextra_postargsr   r   r   Ú
preprocessò  s    zCCompiler.preprocessc	             C   sz   | j ||||||ƒ\}}	}}
}| j|
||ƒ}xH|	D ]@}y|| \}}W n tk
r\   w2Y nX | j||||||
ƒ q2W |	S )N)rS   rV   ÚKeyErrorÚ_compile)r   rL   r   r   r   rT   re   rf   rM   r   rN   rO   rU   rQ   rP   rR   r   r   r   Úcompileÿ  s    6
zCCompiler.compilec             C   s   d S )Nr   )r   rQ   rP   rR   rU   rf   rN   r   r   r   ri   C  s    zCCompiler._compilec             C   s   d S )Nr   )r   r   Úoutput_libnamer   rT   Útarget_langr   r   r   Úcreate_static_libI  s    zCCompiler.create_static_libZshared_objectZshared_libraryÚ
executablec             C   s   t ‚d S )N)ÚNotImplementedError)r   Ztarget_descr   Úoutput_filenamer   r   r   r   Úexport_symbolsrT   re   rf   Ú
build_temprl   r   r   r   Úlinki  s    9zCCompiler.linkc             C   s2   | j tj|| j|dd�|||||||	|
||ƒ d S )NÚshared)Úlib_type)rs   r   ÚSHARED_LIBRARYÚlibrary_filename)r   r   rk   r   r   r   r   rq   rT   re   rf   rr   rl   r   r   r   Úlink_shared_lib§  s    
zCCompiler.link_shared_libc             C   s(   | j tj|||||||||	|
||ƒ d S )N)rs   r   ÚSHARED_OBJECT)r   r   rp   r   r   r   r   rq   rT   re   rf   rr   rl   r   r   r   Úlink_shared_object¼  s
    
zCCompiler.link_shared_objectc             C   s.   | j tj|| j|ƒ||||d |||	d |
ƒ d S )N)rs   r   Ú
EXECUTABLEÚexecutable_filename)r   r   Zoutput_prognamer   r   r   r   rT   re   rf   rl   r   r   r   Úlink_executableÐ  s    

zCCompiler.link_executablec             C   s   t ‚d S )N)ro   )r   r5   r   r   r   Úlibrary_dir_optionæ  s    zCCompiler.library_dir_optionc             C   s   t ‚d S )N)ro   )r   r5   r   r   r   Úruntime_library_dir_optionì  s    z$CCompiler.runtime_library_dir_optionc             C   s   t ‚d S )N)ro   )r   Úlibr   r   r   Úlibrary_optionò  s    zCCompiler.library_optionc             C   sð   dd l }|d krg }|d kr g }|d kr,g }|d kr8g }|jd|dd�\}}tj|dƒ}	z.x|D ]}
|	jd|
 ƒ q`W |	jd| ƒ W d |	jƒ  X y| j|g|d�}W n tk
rº   d	S X y| j|d
||d� W n t	t
fk
rê   d	S X dS )Nr   z.cT)ÚtextÚwz#include "%s"
z+main (int argc, char **argv) {
    %s();
}
)r   Fza.out)r   r   )ÚtempfileZmkstemprH   ÚfdopenÚwriteÚcloserj   ZCompileErrorr}   Z	LinkErrorr0   )r   ÚfuncnameZincludesr   r   r   r„   ÚfdZfnameÚfZinclr   r   r   r   Úhas_functionø  s8    	

zCCompiler.has_functionc             C   s   t ‚d S )N)ro   )r   r7   r€   rT   r   r   r   Úfind_library_file#  s    zCCompiler.find_library_fileÚ c             C   sš   |d krd}g }x„|D ]|}t jj|ƒ\}}t jj|ƒd }|t jj|ƒd … }|| jkrhtd||f ƒ‚|rxt jj|ƒ}|jt jj	||| j
 ƒƒ qW |S )Nr�   r(   z"unknown file type '%s' (from '%s'))rH   rI   rJ   Ú
splitdriveÚisabsÚsrc_extensionsZUnknownFileErrorÚbasenamer2   ÚjoinÚobj_extension)r   Zsource_filenamesrC   r   Z	obj_namesZsrc_namerc   rR   r   r   r   rE   N  s    

zCCompiler.object_filenamesc             C   s$   |rt jj|ƒ}t jj||| j ƒS )N)rH   rI   r‘   r’   Úshared_lib_extension)r   r‘   rC   r   r   r   r   Úshared_object_filename_  s    z CCompiler.shared_object_filenamec             C   s(   |rt jj|ƒ}t jj||| jp"d ƒS )Nr�   )rH   rI   r‘   r’   Úexe_extension)r   r‘   rC   r   r   r   r   r|   e  s    zCCompiler.executable_filenameÚstaticc       
      C   s`   |d	krt dƒ‚t| |d ƒ}t| |d ƒ}tjj|ƒ\}}|||f }	|rPd}tjj|||	ƒS )
Nr—   rt   ÚdylibÚ
xcode_stubz?'lib_type' must be "static", "shared", "dylib", or "xcode_stub"Z_lib_formatZ_lib_extensionr�   )r—   rt   r˜   r™   )r   ÚgetattrrH   rI   Úsplitr’   )
r   r9   ru   rC   r   ZfmtrR   r5   rc   Úfilenamer   r   r   rw   k  s    zCCompiler.library_filenamer(   c             C   s   t j|ƒ d S )N)r
   rT   )r   ÚmsgÚlevelr   r   r   Úannounce~  s    zCCompiler.announcec             C   s   ddl m} |rt|ƒ d S )Nr   )ÚDEBUG)Zdistutils.debugr    Úprint)r   r�   r    r   r   r   Údebug_print�  s    zCCompiler.debug_printc             C   s   t jjd| ƒ d S )Nzwarning: %s
)ÚsysÚstderrr†   )r   r�   r   r   r   Úwarn†  s    zCCompiler.warnc             C   s   t |||| jƒ d S )N)r	   r   )r   ÚfuncÚargsr�   rž   r   r   r   r	   ‰  s    zCCompiler.executec             C   s   t || jd� d S )N)r   )r   r   )r   Úcmdr   r   r   r   Œ  s    zCCompiler.spawnc             C   s   t ||| jd�S )N)r   )r   r   )r   rP   Údstr   r   r   r   �  s    zCCompiler.move_fileéÿ  c             C   s   t ||| jd� d S )N)r   )r   r   )r   r)   Úmoder   r   r   r   ’  s    zCCompiler.mkpath)r   r   r   )N)N)NNNNN)NNNr   NNN)Nr   N)
NNNNNr   NNNN)
NNNNNr   NNNN)
NNNNNr   NNNN)NNNNr   NNN)NNNN)r   )r   r�   )r   r�   )r   r�   )r—   r   r�   )r(   )Nr(   )rª   )Ar!   Ú
__module__Ú__qualname__Zcompiler_typer�   r“   Zstatic_lib_extensionr”   Zstatic_lib_formatZshared_lib_formatr–   r_   r^   r   r#   r   r,   r1   r3   r4   r6   r8   r:   r;   r<   r=   r>   r?   rA   rB   rS   rV   rW   rX   rY   rZ   r]   rd   rg   rj   ri   rm   ry   rv   r{   rs   rx   rz   r}   r~   r   r�   r‹   rŒ   rE   r•   r|   rw   rŸ   r¢   r¥   r	   r   r   r   r   r   r   r   r      sÔ   

$ 

+	 
" 
  
B 
         
4         
         
       
 
*
+


 


r   úcygwin.*ÚunixÚposixÚntÚmsvcc             C   sV   | d krt j} |d krtj}x4tD ],\}}tj||ƒd k	sJtj|| ƒd k	r"|S q"W dS )Nr¯   )rH   r)   r£   ÚplatformÚ_default_compilersÚreÚmatch)Úosnamer³   ÚpatternÚcompilerr   r   r   Úget_default_compiler¨  s    
rº   ÚunixccompilerÚUnixCCompilerústandard UNIX-style compilerÚ_msvccompilerÚMSVCCompilerúMicrosoft Visual C++ÚcygwinccompilerÚCygwinCCompilerú'Cygwin port of GNU C Compiler for Win32ÚMingw32CCompilerú(Mingw32 port of GNU C Compiler for Win32ÚbcppcompilerÚBCPPCompilerúBorland C++ Compiler)r¯   r²   ÚcygwinZmingw32Zbcppc              C   s\   ddl m}  g }x,tjƒ D ] }|jd| d t| d fƒ qW |jƒ  | |ƒ}|jdƒ d S )Nr   )ÚFancyGetoptz	compiler=r-   zList of available compilers:)Zdistutils.fancy_getoptrÊ   Úcompiler_classr   r2   ÚsortZ
print_help)rÊ   Z	compilersr¹   Zpretty_printerr   r   r   Úshow_compilersÌ  s    rÍ   c             C   sä   | d krt j} y"|d kr t| ƒ}t| \}}}W n8 tk
rh   d|  }|d k	r\|d|  }t|ƒ‚Y nX y*d| }t|ƒ tj| }	t	|	ƒ| }
W nB t
k
r´   td| ƒ‚Y n$ tk
rÖ   td||f ƒ‚Y nX |
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'zBcan't compile C/C++ code: unable to find class '%s' in module '%s')rH   r)   rº   rË   rh   ZDistutilsPlatformErrorÚ
__import__r£   ÚmodulesÚvarsÚImportErrorZDistutilsModuleError)Zplatr¹   r   r   r   Zmodule_nameÚ
class_nameZlong_descriptionr�   ÚmoduleÚklassr   r   r   Únew_compilerÝ  s2    
rÕ   c             C   s¾   g }x˜| D ]�}t |tƒo2dt|ƒ  ko.dkn  s@td| ƒ‚t|ƒdkr`|jd|d  ƒ q
t|ƒdkr
|d d krŒ|jd|d  ƒ q
|jd| ƒ q
W x|D ]}|jd| ƒ q¤W |S )	Nr(   r-   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$   r.   r/   r0   r2   )r   r   rN   Zmacror5   r   r   r   rF   
  s    
&
rF   c             C   s¼   g }x|D ]}|j | j|ƒƒ q
W x4|D ],}| j|ƒ}t|tƒrJ|| }q(|j |ƒ q(W x^|D ]V}tjj|ƒ\}}	|r¤| j|g|	ƒ}
|
r”|j |
ƒ q´| j	d| ƒ q^|j | j
|ƒƒ q^W |S )Nz6no library file corresponding to '%s' found (skipping))r2   r~   r   r$   rD   rH   rI   r›   rŒ   r¥   r�   )r¹   r   r   r   Zlib_optsr5   Úoptr€   Zlib_dirZlib_nameZlib_filer   r   r   Úgen_lib_options7  s$    






r×   ©r®   r¯   ©r°   r¯   ©r±   r²   )rØ   rÙ   rÚ   )NN)r»   r¼   r½   )r¾   r¿   rÀ   )rÁ   rÂ   rÃ   )rÁ   rÄ   rÅ   )rÆ   rÇ   rÈ   )NNr   r   r   )r£   rH   rµ   Zdistutils.errorsZdistutils.spawnr   Zdistutils.file_utilr   Zdistutils.dir_utilr   Zdistutils.dep_utilr   r   Zdistutils.utilr   r	   Z	distutilsr
   r   r´   rº   rË   rÍ   rÕ   rF   r×   r   r   r   r   Ú<module>   sB            
     
--