a
    ñ»jR9  ã                   @   s„   d Z ddlZddl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mZmZmZ ddlmZ e d	e¡ G d
d„ deƒZdS )zƒdistutils.bcppcompiler

Contains BorlandCCompiler, an implementation of the abstract CCompiler class
for the Borland C++ compiler.
é    Né   )Úlog)Únewer)Ú	CCompilerÚgen_preprocess_options)ÚCompileErrorÚDistutilsExecErrorÚLibErrorÚ	LinkErrorÚUnknownFileError)Ú
write_filez˜bcppcompiler is deprecated and slated to be removed in the future. Please discontinue use or file an issue with pypa/distutils describing your use case.c                
       s”   e Zd ZdZdZi ZdgZg d¢Zee ZdZ	dZ
dZd ZZd	Zd‡ f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‡  ZS )"ÚBCPPCompilerzConcrete class that implements an interface to the Borland C/C++
    compiler, as defined by the CCompiler abstract class.
    Zbcppz.c)z.ccz.cppz.cxxz.objz.libz.dllz%s%sz.exeFc                    sn   t ƒ  |||¡ d| _d| _d| _d | _g d¢| _g d¢| _g d¢| _g d¢| _	g | _
g d¢| _g d¢| _d S )	Nz	bcc32.exezilink32.exeztlib.exe)ú/tWMz/O2ú/qú/g0)r   z/Odr   r   )z/Tpdú/Gnr   ú/x)r   r   r   )r   r   r   z/r)ÚsuperÚ__init__ÚccÚlinkerÚlibZpreprocess_optionsÚcompile_optionsÚcompile_options_debugÚldflags_sharedÚldflags_shared_debugZldflags_staticÚldflags_exeÚldflags_exe_debug)ÚselfÚverboseÚdry_runÚforce©Ú	__class__© úHE:\soccer\ml_env\Lib\site-packages\setuptools/_distutils/bcppcompiler.pyr   @   s    




zBCPPCompiler.__init__Nc	                 C   s˜  |   ||||||¡\}}	}}
}|p$g }| d¡ |rB| | j¡ n| | j¡ |	D �]>}z|| \}}W n ty~   Y qRY n0 tj |¡}tj |¡}|  	tj 
|¡¡ |dkr´qR|dk�rz|  dd||g¡ W qR t�y } zt|ƒ‚W Y d }~qRd }~0 0 qR|| jv �rd}n|| jv �r*d}nd}d| }z,|  | jg| |
 ||g | |g ¡ W qR t�y� } zt|ƒ‚W Y d }~qRd }~0 0 qR|	S )	Nz-cú.resú.rcZbrcc32z-foÚ z-Pú-o)Z_setup_compileÚappendÚextendr   r   ÚKeyErrorÚosÚpathÚnormpathÚmkpathÚdirnameÚspawnr   r   Ú_c_extensionsÚ_cpp_extensionsr   )r   ÚsourcesÚ
output_dirÚmacrosÚinclude_dirsÚdebugÚextra_preargsÚextra_postargsÚdependsÚobjectsÚpp_optsÚbuildZcompile_optsÚobjÚsrcÚextÚmsgZ	input_optZ
output_optr$   r$   r%   ÚcompileW   s^    ÿ



ÿþýüûÿ zBCPPCompiler.compilec           	   
   C   s�   |   ||¡\}}| j||d�}|  ||¡r€|dg| }|r:z|  | jg| ¡ W qŒ ty| } zt|ƒ‚W Y d }~qŒd }~0 0 nt d|¡ d S )N)r6   z/uúskipping %s (up-to-date))	Ú_fix_object_argsÚlibrary_filenameÚ
_need_linkr2   r   r   r	   r   r9   )	r   r=   Zoutput_libnamer6   r9   Útarget_langÚoutput_filenameZlib_argsrC   r$   r$   r%   Úcreate_static_lib£   s     zBCPPCompiler.create_static_libc               
   C   sê  |   ||¡\}}|  |||¡\}}}|r8t dt|ƒ¡ |d urNt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 u rÂd}nŠtj |¡\}}tj |¡\}}tj |d ¡}tj ||› d�¡}dg}|�pg D ]}| d|› d	|› �¡ �q|  t||fd
|› �¡ ttjj|ƒ}|g}g }|D ]>}tj tj |¡¡\}}|dk�rš| |¡ n
| |¡ �qh|D ]}| dtj |¡› �¡ �q¬| d¡ | |¡ | d|g¡ | d¡ |D ]4}|  |||	¡}|d u �r$| |¡ n
| |¡ �qü| d¡ | d|g¡ | d¡ | |¡ |
�rp|
|d d…< |�r€| |¡ |  tj |¡¡ z|  | jg| ¡ W n. t�yÖ } zt|ƒ‚W Y d }~n
d }~0 0 nt d|¡ d S )Nz7I don't know what to do with 'runtime_library_dirs': %sZc0w32Zc0d32r(   r   z.defZEXPORTSz  z=_zwriting r&   z/Lz/L.ú,z,,)Zimport32Zcw32mtrE   ) rF   Z_fix_lib_argsr   ÚwarningÚstrr-   r.   ÚjoinrH   r   Z
EXECUTABLEr   r   r   r   ÚsplitÚsplitextr1   r*   Úexecuter   Úmapr/   Únormcaser+   Úfind_library_filer0   r2   r   r   r
   r9   ) r   Ztarget_descr=   rJ   r6   Ú	librariesÚlibrary_dirsÚruntime_library_dirsÚexport_symbolsr9   r:   r;   Ú
build_temprI   Zstartup_objZld_argsZdef_fileÚheadÚtailÚmodnamerB   Útemp_dirÚcontentsÚsymZobjects2Ú	resourcesÚfileÚbaseZellr   ÚlibfilerC   r$   r$   r%   Úlink¶   s€    ÿ
þ









 zBCPPCompiler.linkc           	      C   sr   |r"|d }|d |d ||f}n|d |f}|D ]:}|D ]0}t j ||  |¡¡}t j |¡r:|    S q:q2d S )NZ_dZ_bcpp)r-   r.   rO   rG   Úexists)	r   Údirsr   r9   ZdlibZ	try_namesÚdirÚnamerd   r$   r$   r%   rU   <  s    
zBCPPCompiler.find_library_filer(   c                 C   sÌ   |d u rd}g }|D ]²}t j t j |¡¡\}}|| jddg vrXtd|› d|› d�ƒ‚|rht j |¡}|dkrŠ| t j ||| ¡¡ q|dkr¬| t j ||d ¡¡ q| t j ||| j	 ¡¡ q|S )Nr(   r'   r&   zunknown file type 'z	' (from 'z'))
r-   r.   rQ   rT   Úsrc_extensionsr   Úbasenamer*   rO   Úobj_extension)r   Zsource_filenamesZ	strip_dirr6   Z	obj_namesÚsrc_namerc   rB   r$   r$   r%   Úobject_filenamesV  s    zBCPPCompiler.object_filenamesc              
   C   sÜ   |   d ||¡\}}}t||ƒ}dg| }	|d ur>|	 d| ¡ |rN||	d d…< |r\|	 |¡ |	 |¡ | js~|d u s~t||ƒrØ|r”|  tj 	|¡¡ z|  
|	¡ W n4 tyÖ }
 zt|
ƒ t|
ƒ‚W Y d }
~
n
d }
~
0 0 d S )Nz	cpp32.exer)   r   )Z_fix_compile_argsr   r*   r+   r!   r   r0   r-   r.   r1   r2   r   Úprintr   )r   ÚsourceÚoutput_filer7   r8   r:   r;   Ú_r>   Zpp_argsrC   r$   r$   r%   Ú
preprocessm  s$    	



zBCPPCompiler.preprocess)FFF)NNNFNNN)NFN)
NNNNNFNNNN)F)Fr(   )NNNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úcompiler_typeZexecutablesr3   r4   rj   rl   Zstatic_lib_extensionÚshared_lib_extensionZstatic_lib_formatZshared_lib_formatZexe_extensionr   rD   rK   re   rU   rn   rs   Ú__classcell__r$   r$   r"   r%   r   %   sT          ÷
M ÿ
          ò
 

     ùr   )rw   r-   ÚwarningsÚ_logr   Z	_modifiedr   Z	ccompilerr   r   Úerrorsr   r   r	   r
   r   Ú	file_utilr   ÚwarnÚDeprecationWarningr   r$   r$   r$   r%   Ú<module>   s   ü