File: //opt/alt/python38/lib64/python3.8/distutils/__pycache__/bcppcompiler.cpython-38.pyc
U
    ��,aW:  �                   @   sx   d Z ddlZddlmZmZmZmZmZmZ ddl	m
Z
mZmZ ddl
mZ ddlmZ ddlmZ G dd	� d	e
�ZdS )
z�distutils.bcppcompiler
Contains BorlandCCompiler, an implementation of the abstract CCompiler class
for the Borland C++ compiler.
�    N)�DistutilsExecError�DistutilsPlatformError�CompileError�LibError�	LinkError�UnknownFileError)�	CCompiler�gen_preprocess_options�gen_lib_options)�
write_file)�newer)�logc                
   @   s�   e Zd ZdZdZi ZdgZdddgZee ZdZ	dZ
d	Zd
 ZZ
dZdd
d�Zddd�Zddd�Zd dd�Zd!dd�Zd"dd�Zd#dd�ZdS )$�BCPPCompilerzConcrete class that implements an interface to the Borland C/C++
    compiler, as defined by the CCompiler abstract class.
    Zbcppz.cz.ccz.cppz.cxxz.objz.libz.dllz%s%sz.exer   c                 C   s�   t �| |||� d| _d| _d| _d | _ddddg| _ddddg| _d	d
ddg| _d	d
ddg| _	g | _
d
ddg| _d
dddg| _d S )
Nz	bcc32.exezilink32.exeztlib.exez/tWMz/O2z/qz/g0z/Odz/Tpdz/Gnz/xz/r)
r   �__init__�cc�linker�libZpreprocess_options�compile_options�compile_options_debug�ldflags_shared�ldflags_shared_debugZldflags_static�ldflags_exe�ldflags_exe_debug)�self�verboseZdry_run�force� r   �;/opt/alt/python38/lib64/python3.8/distutils/bcppcompiler.pyr   5   s    zBCPPCompiler.__init__Nc	                 C   s�  | � ||||||�\}}	}}
}|p$g }|�d� |rB|�| j� n|�| j� |	D �]<}
z||
 \}}W n tk
r�   Y qRY nX tj�|�}tj�|
�}
| �	tj�
|
�� |dkr�qR|dk�rz| �dd|
|g� W qR tk
�r } zt
|��W 5 d }~X Y qRX qR|| jk�rd}n|| jk�r*d}nd}d|
 }z,| �| jg| |
 ||g | |g � W qR tk
�r� } zt
|��W 5 d }~X Y qRX qR|	S )	Nz-c�.res�.rcZbrcc32z-fo� z-P�-o)Z_setup_compile�append�extendr   r   �KeyError�os�path�normpath�mkpath�dirname�spawnr   r   �
_c_extensions�_cpp_extensionsr   )r   Zsources�
output_dir�macros�include_dirs�debug�
extra_preargs�extra_postargsZdepends�objects�pp_optsZbuildZcompile_opts�obj�src�ext�msgZ	input_optZ
output_optr   r   r   �compileQ   sV     ��
���
zBCPPCompiler.compilec           	   
   C   s�   | � ||�\}}| j||d�}| �||�r~|dg| }|r:z| �| jg| � W q� tk
rz } zt|��W 5 d }~X Y q�X nt�d|� d S )N)r-   z/u�skipping %s (up-to-date))	�_fix_object_args�library_filename�
_need_linkr*   r   r   r   r
   r0   )	r   r3   Zoutput_libnamer-   r0   �target_lang�output_filenameZlib_argsr8   r   r   r   �create_static_lib�   s    �zBCPPCompiler.create_static_libc               
   C   s�  | � ||�\}}| �|||�\}}}|r8t�dt|�� |d k	rNtj�||�}| �||��r�|t	j
kr�d}|	r~| jd d � }q�| jd d � }n&d}|	r�| j
d d � }n| jd d � }|d kr�d}n�tj�|�\}}tj�|�\}}tj�|d �}tj�|d| �}dg}|�pg D ]}|�d||f � �q| �t||fd	| � ttjj|�}|g}g }|D ]>}tj�tj�|��\}}|d
k�r�|�|� n
|�|� �q`|D ]}|�dtj�|� � �q�|�d� |�|� |�d
|g� |�d� |D ]4}| �|||	�}|d k�r|�|� n
|�|� �q�|�d� |�d� |�d
|g� |�d
� |�|� |
�rp|
|d d�<