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

  \W:  ã               @   st   d dl Z d dlmZmZmZmZmZmZ d dlm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ G dd„ de	ƒZdS )	é    N)ÚDistutilsExecErrorÚDistutilsPlatformErrorÚCompileErrorÚLibErrorÚ	LinkErrorÚUnknownFileError)Ú	CCompilerÚgen_preprocess_optionsÚgen_lib_options)Ú
write_file)Únewer)Úlogc            
   @   sŠ   e Zd ZdZi ZdgZdddgZee ZdZdZ	dZ
d	 ZZd
Zddd„Zddd„Zddd„Zddd„Zd dd„Zd!dd„Zd"dd„ZdS )#ÚBCPPCompilerZbcppz.cz.ccz.cppz.cxxz.objz.libz.dllz%s%sz.exer   c             C   s„   t j| |||ƒ d| _d| _d| _d | _ddddg| _ddddg| _d	d
ddg| _d	d
ddg| _	g | _
d
ddg| _d
dddg| _d S )Nz	bcc32.exezilink32.exeztlib.exez/tWMz/O2z/qz/g0z/Odz/Tpdz/Gnz/xz/r)r   Ú__init__ÚccÚlinkerÚlibZpreprocess_optionsÚcompile_optionsÚcompile_options_debugÚldflags_sharedÚldflags_shared_debugZldflags_staticÚldflags_exeÚldflags_exe_debug)ÚselfÚverboseZdry_runÚforce© r   ú./usr/lib64/python3.6/distutils/bcppcompiler.pyr   5   s    zBCPPCompiler.__init__Nc	             C   sš  | j ||||||ƒ\}}	}}
}|p$g }|jdƒ |rB|j| jƒ n|j| jƒ �xD|	D �]:}y|| \}}W n tk
r‚   wVY nX tjj|ƒ}tjj|ƒ}| j	tjj
|ƒƒ |dkr¸qV|dk�ry| jdd||gƒ W qV tk
�r } zt|ƒ‚W Y d d }~X qVX qV|| jk�rd}n|| jk�r,d}nd}d| }y,| j| jg| |
 ||g | |g ƒ W qV tk
�r� } zt|ƒ‚W Y d d }~X qVX qVW |	S )	Nz-cz.resz.rcZbrcc32z-foÚ z-Pz-o)Z_setup_compileÚappendÚextendr   r   ÚKeyErrorÚosÚpathÚnormpathÚmkpathÚdirnameÚspawnr   r   Ú_c_extensionsÚ_cpp_extensionsr   )r   ZsourcesÚ
output_dirÚmacrosÚinclude_dirsÚdebugÚextra_preargsÚextra_postargsZdependsÚobjectsÚpp_optsZbuildZcompile_optsÚobjÚsrcÚextÚmsgZ	input_optZ
output_optr   r   r   ÚcompileQ   sF    

(zBCPPCompiler.compilec       	      C   sŽ   | j ||ƒ\}}| j||d�}| j||ƒr~|dg| }|r:y| j| jg| ƒ W qŠ tk
rz } zt|ƒ‚W Y d d }~X qŠX ntjd|ƒ d S )N)r*   z/uzskipping %s (up-to-date))	Ú_fix_object_argsÚlibrary_filenameÚ
_need_linkr'   r   r   r   r   r-   )	r   r0   Zoutput_libnamer*   r-   Útarget_langÚoutput_filenameZlib_argsr5   r   r   r   Úcreate_static_lib’   s    zBCPPCompiler.create_static_libc              C   sø  | j ||ƒ\}}| j|||ƒ\}}}|r8tjdt|ƒƒ |d k	rNtjj||ƒ}| j||ƒ�rè|t	j
krŽd}|	r~| jd d … }q´| jd d … }n&d}|	r¦| jd d … }n| jd d … }|d krÂd}n†tjj|ƒ\}}tjj|ƒ\}}tjj|d ƒ}tjj|d| ƒ}dg}x&|�pg D ]}|jd||f ƒ �qW | jt||fd	| ƒ ttjj|ƒ}|g}g }xF|D ]>}tjjtjj|ƒƒ\}}|d
k�r˜|j|ƒ n
|j|ƒ �qfW x$|D ]}|jdtjj|ƒ ƒ �q®W |jdƒ |j|ƒ |jd|gƒ |jdƒ x<|D ]4}| j|||	ƒ}|d k�r(|j|ƒ n
|j|ƒ �q W |jdƒ |jdƒ |jd|gƒ |jdƒ |j|ƒ |
�r€|
|d d…< |�r�|j|ƒ | jtjj|ƒƒ y| j| jg| ƒ W n, tk
�rä } zt|ƒ‚W Y d d }~X nX ntjd|ƒ d S )Nz7I don't know what to do with 'runtime_library_dirs': %sZc0w32Zc0d32r   r   z%s.defZEXPORTSz  %s=_%sz
writing %sz.resz/L%sz/L.ú,z,,Zimport32Zcw32mtzskipping %s (up-to-date)) r7   Z_fix_lib_argsr   ÚwarnÚstrr"   r#   Újoinr9   r   Z
EXECUTABLEr   r   r   r   ÚsplitÚsplitextr&   r   Zexecuter   Úmapr$   Únormcaser    Úfind_library_filer%   r'   r   r   r   r-   ) r   Ztarget_descr0   r;   r*   Z	librariesZlibrary_dirsZruntime_library_dirsZexport_symbolsr-   r.   r/   Z
build_tempr:   Zstartup_objZld_argsZdef_fileÚheadÚtailÚmodnamer4   Ztemp_dirÚcontentsZsymZobjects2Z	resourcesÚfileÚbaseÚlr   Úlibfiler5   r   r   r   Úlink«   s|    















zBCPPCompiler.linkc       	      C   sv   |r"|d }|d |d ||f}n|d |f}xB|D ]6}x0|D ](}t jj|| j|ƒƒ}t jj|ƒr>|S q>W q4W d S d S )NZ_dZ_bcpp)r"   r#   r@   r8   Úexists)	r   Údirsr   r-   ZdlibZ	try_namesÚdirÚnamerM   r   r   r   rE   4  s    


zBCPPCompiler.find_library_filer   c             C   sÊ   |d krd}g }x´|D ]¬}t jjt jj|ƒƒ\}}|| jddg krTtd||f ƒ‚|rdt jj|ƒ}|dkr†|jt jj||| ƒƒ q|dkr¨|jt jj||d ƒƒ q|jt jj||| j	 ƒƒ qW |S )Nr   z.rcz.resz"unknown file type '%s' (from '%s'))
r"   r#   rB   rD   Úsrc_extensionsr   Úbasenamer   r@   Úobj_extension)r   Zsource_filenamesZ	strip_dirr*   Z	obj_namesZsrc_namerK   r4   r   r   r   Úobject_filenamesN  s"     
zBCPPCompiler.object_filenamesc             C   sÚ   | j d ||ƒ\}}}t||ƒ}dg| }	|d k	r>|	jd| ƒ |rN||	d d…< |r\|	j|ƒ |	j|ƒ | js~|d ks~t||ƒrÖ|r”| jtjj	|ƒƒ y| j
|	ƒ W n2 tk
rÔ }
 zt|
ƒ t|
ƒ‚W Y d d }
~
X nX d S )Nz	cpp32.exez-or   )Z_fix_compile_argsr	   r   r    r   r   r%   r"   r#   r&   r'   r   Úprintr   )r   ÚsourceZoutput_filer+   r,   r.   r/   Ú_r1   Zpp_argsr5   r   r   r   Ú
preprocessi  s$    	



zBCPPCompiler.preprocess)r   r   r   )NNNr   NNN)Nr   N)
NNNNNr   NNNN)r   )r   r   )NNNNN)Ú__name__Ú
__module__Ú__qualname__Zcompiler_typeZexecutablesr(   r)   rS   rU   Zstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZexe_extensionr   r6   r<   rN   rE   rV   rZ   r   r   r   r   r      sH   
  
 
B  
         
|
 
    r   )r"   Zdistutils.errorsr   r   r   r   r   r   Zdistutils.ccompilerr   r	   r
   Zdistutils.file_utilr   Zdistutils.dep_utilr   Z	distutilsr   r   r   r   r   r   Ú<module>   s    