U
    -ºc 9  ã                   @   s„   d Z 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dl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é   )ÚDistutilsExecErrorÚCompileErrorÚLibErrorÚ	LinkErrorÚUnknownFileError)Ú	CCompilerÚgen_preprocess_options)Ú
write_file)Únewer)Úlogz˜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dddg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.cz.ccz.cppz.cxxz.objz.libz.dllz%s%sz.exer   c                    s„   t ƒ  |||¡ 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)Ú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__© úF/tmp/pip-unpacked-wheel-izj_87as/setuptools/_distutils/bcppcompiler.pyr   B   s    zBCPPCompiler.__init__Nc	                 C   s–  |   ||||||¡\}}	}}
}|p$g }| d¡ |rB| | j¡ n| | j¡ |	D ]<}z|| \}}W n tk
r€   Y qRY nX tj |¡}tj |¡}|  	tj 
|¡¡ |dkr¶qR|dkrz|  dd||g¡ W qR tk
r } zt|ƒ‚W 5 d }~X Y qRX qR|| jkrd}n|| jkr*d}nd}d| }z,|  | jg| |
 ||g | |g ¡ W qR tk
rŽ } zt|ƒ‚W 5 d }~X Y qRX 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    ÚcompileZ   sh         ÿ



ÿþýüûÿzBCPPCompiler.compilec           	   
   C   sŽ   |   ||¡\}}| j||d}|  ||¡r~|dg| }|r:z|  | jg| ¡ W qŠ tk
rz } zt|ƒ‚W 5 d }~X Y qŠX nt d|¡ d S )N)r1   z/uúskipping %s (up-to-date))	Ú_fix_object_argsÚlibrary_filenameÚ
_need_linkr-   r   r   r   r   r4   )	r   r8   Zoutput_libnamer1   r4   Útarget_langÚoutput_filenameZlib_argsr>   r   r   r    Úcreate_static_lib§   s    zBCPPCompiler.create_static_libc               
   C   sè  |   ||¡\}}|  |||¡\}}}|r8t dt|ƒ¡ |d k	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 krÂd}n‚tj |¡\}}tj |¡\}}tj |d ¡}tj |d| ¡}dg}|pg D ]}| d ||¡¡ q|  t||fd	| ¡ ttjj|ƒ}|g}g }|D ]>}tj tj |¡¡\}}|d
kr’| |¡ n
| |¡ q`|D ]}| dtj |¡ ¡ q¤| d¡ | |¡ | d|g¡ | d¡ |D ]4}|  |||	¡}|d kr| |¡ n
| |¡ qò| d¡ | d¡ | d|g¡ | d¡ | |¡ |
rp|
|d d…< |r€| |¡ |  tj |¡¡ z|  | jg| ¡ W n, tk
rÔ } zt|ƒ‚W 5 d }~X Y nX nt  d|¡ d S )Nz7I don't know what to do with 'runtime_library_dirs': %sZc0w32Zc0d32r#   r   z%s.defZEXPORTSz  {}=_{}z
writing %sr!   z/L%sz/L.ú,z,,Zimport32Zcw32mtr@   )!rA   Z_fix_lib_argsr   ÚwarningÚstrr(   r)   ÚjoinrC   r   Z
EXECUTABLEr   r   r   r   ÚsplitÚsplitextr,   r%   ÚformatÚexecuter
   Úmapr*   Únormcaser&   Úfind_library_filer+   r-   r   r   r   r4   ) r   Ztarget_descr8   rE   r1   Ú	librariesÚlibrary_dirsÚruntime_library_dirsÚexport_symbolsr4   r5   r6   Ú
build_temprD   Zstartup_objZld_argsZdef_fileÚheadÚtailÚmodnamer=   Útemp_dirÚcontentsÚsymZobjects2Ú	resourcesÚfileÚbaseZellr   Úlibfiler>   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)   rJ   rB   Úexists)	r   Údirsr   r4   ZdlibZ	try_namesÚdirÚnamer`   r   r   r    rQ   D  s    
zBCPPCompiler.find_library_filer#   c                 C   sÆ   |d krd}g }|D ]¬}t j t j |¡¡\}}|| jddg krRtd ||¡ƒ‚|rbt 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 '{}' (from '{}'))r(   r)   rL   rP   Úsrc_extensionsr   rM   Úbasenamer%   rJ   Úobj_extension)r   Zsource_filenamesZ	strip_dirr1   Z	obj_namesÚsrc_namer_   r=   r   r   r    Úobject_filenames^  s"    
ÿzBCPPCompiler.object_filenamesc              
   C   sÚ   |   d ||¡\}}}t||ƒ}dg| }	|d k	r>|	 d| ¡ |rN||	d d…< |r\|	 |¡ |	 |¡ | js~|d ks~t||ƒrÖ|r”|  tj 	|¡¡ z|  
|	¡ W n2 tk
rÔ }
 zt|
ƒ t|
ƒ‚W 5 d }
~
X Y nX d S )Nz	cpp32.exer$   r   )Z_fix_compile_argsr	   r%   r&   r   r   r+   r(   r)   r,   r-   r   Úprintr   )r   ÚsourceZoutput_filer2   r3   r5   r6   Ú_r9   Zpp_argsr>   r   r   r    Ú
preprocessw  s$    




zBCPPCompiler.preprocess)r   r   r   )NNNr   NNN)Nr   N)
NNNNNr   NNNN)r   )r   r#   )NNNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úcompiler_typeZexecutablesr.   r/   rf   rh   Zstatic_lib_extensionÚshared_lib_extensionZstatic_lib_formatZshared_lib_formatZexe_extensionr   r?   rF   ra   rQ   rj   rn   Ú__classcell__r   r   r   r    r   '   sX   
       ÷
N     ÿ
          ò
 


     ùr   )rr   r(   ÚwarningsÚerrorsr   r   r   r   r   Z	ccompilerr   r	   Ú	file_utilr
   Údep_utilr   Ú_logr   ÚwarnÚDeprecationWarningr   r   r   r   r    Ú<module>   s   ü