File: //lib64/python3.9/distutils/__pycache__/cygwinccompiler.cpython-39.opt-2.pyc
a
    �DOg�?  �                   @   s�   d dl Z d dlZd dlZd dlmZmZmZ d dlZd dlm	Z	 d dl
mZ d dlm
Z
mZmZmZ d dlmZ d dlmZ dd	� ZG d
d� de	�ZG dd
� d
e�ZdZdZdZdd� Ze�d�Zdd� Zdd� Zdd� Z dS )�    N)�Popen�PIPE�check_output)�
UnixCCompiler)�
write_file)�DistutilsExecError�CCompilerError�CompileError�UnknownFileError)�LooseVersion)�find_executablec                  C   s�   t j�d�} | dkr|t j| d | d � }|dkr8dgS |dkrFdgS |d	krTd
gS |dkrbdgS |d
krpdgS td| ��d S )NzMSC v.����   �
   Z1300Zmsvcr70Z1310Zmsvcr71Z1400Zmsvcr80Z1500Zmsvcr90Z1600Zmsvcr100zUnknown MS Compiler version %s )�sys�version�find�
ValueError)Zmsc_posZmsc_ver� r   �1/usr/lib64/python3.9/distutils/cygwinccompiler.py�	get_msvcr=   s    r   c                
   @   sN   e Zd ZdZdZdZdZdZdZdZ	dd	d
�Z
dd� Zddd�Zddd�Z
d
S )�CygwinCCompiler�cygwinz.o�.az.dllzlib%s%sz%s%sz.exer   c                 C   s�   t �| |||� t� \}}| �d||f � |turB| �d| � t� \| _| _| _	| �| j
d| j| j| j	f  � | jdkr�d| _nd| _| jdkr�d}nd	}| jd
ddd
d| j|f d� | jdkr�dg| _
| �d� nt� | _
d S )Nz%Python's GCC status: %s (details: %s)z�Python's pyconfig.h doesn't seem to support your compiler. Reason: %s. Compiling may fail because of undefined preprocessor macros.z: gcc %s, ld %s, dllwrap %s
z2.10.90�gcc�dllwrap�2.13�-shared�
-mdll -staticzgcc -mcygwin -O -Wallzgcc -mcygwin -mdll -O -Wallzg++ -mcygwin -O -Wallzgcc -mcygwinz%s -mcygwin %s�Zcompiler�compiler_soZcompiler_cxxZ
linker_exeZ	linker_so�2.91.57�msvcrtz,Consider upgrading to a newer version of gcc)r   �__init__�check_config_hZdebug_print�CONFIG_H_OK�warn�get_versions�gcc_version�
ld_versionZdllwrap_version�
compiler_type�
linker_dll�set_executables�
dll_librariesr   )�self�verbose�dry_run�force�status�details�
shared_optionr   r   r   r#   b   sN    
����
��
��
�zCygwinCCompiler.__init__c              
   C   s�   |dks|dkrXz| � dd|d|g� W q� tyT } zt|��W Y d }~q�d }~0 0 nPz"| � | j| |d|g | � W n, ty� } zt|��W Y d }~n
d }~0 0 d S )N�.rc�.resZwindresz-iz-o)�spawnr   r	   r    )r.   �obj�src�extZcc_args�extra_postargsZpp_opts�msgr   r   r   �_compile�   s     �
zCygwinCCompiler._compileNc                 C   sP  t � |
p
g �}
t � |pg �}t � |p&g �}|�| j� |d u�r|| jksV| jdk�rtj�|d �}tj�tj�	|��\}}tj�
||d �}tj�
|d| d �}dtj�	|� dg}|D ]}|�|� q�| �t
||fd| � | jd	k�r|
�d
|g� |
�d|g� n
|�|� |	�s(|
�d� t�| |||||||d |	|
|||
� d S )
Nr   r   z.def�libr   z
LIBRARY %sZEXPORTSz
writing %sr   z--output-libz--defz-s)�copy�extendr-   Z
EXECUTABLEr+   �os�path�dirname�splitext�basename�join�appendZexecuter   r   �link)r.   Ztarget_descZobjectsZoutput_filename�
output_dirZ	librariesZlibrary_dirsZruntime_library_dirsZexport_symbols�debugZ
extra_preargsr;   Z
build_tempZtarget_langZtemp_dirZdll_nameZ
dll_extensionZdef_fileZlib_file�contentsZsymr   r   r   rH   �   sH    
��
���
�zCygwinCCompiler.link� c                 C   s�   |d u rd}g }|D ]�}t j�t j�|��\}}|| jddg vrRtd||f ��|rbt j�|�}|dv r�|�t j�||| | j	 �� q|�t j�||| j	 �� q|S )NrL   r5   r6   z"unknown file type '%s' (from '%s'))r6   r5   )
rA   rB   rD   �normcaseZsrc_extensionsr
   rE   rG   rF   �
obj_extension)r.   Zsource_filenamesZ	strip_dirrI   Z	obj_namesZsrc_name�baser:   r   r   r   �object_filenames�   s&