Mini Shell
a
�DOg�? � @ s� d Z ddlZddlZddlZddlmZmZmZ ddlZddl m
Z
ddlmZ ddl
mZmZmZmZ ddlmZ ddlmZ d d
� ZG dd� de
�ZG d
d� de�ZdZdZdZdd� Ze�d�Zdd� Zdd� Z dd� Z!dS )a distutils.cygwinccompiler
Provides the CygwinCCompiler class, a subclass of UnixCCompiler that
handles the Cygwin port of the GNU C compiler to Windows. It also contains
the Mingw32CCompiler class which handles the mingw32 port of GCC (same as
cygwin in no-cygwin mode).
� 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| ��dS )zaInclude the appropriate MSVC runtime library if Python was built
with MSVC 7.0 or later.
zMSC v.���� �
Z1300Zmsvcr70Z1310Zmsvcr71Z1400Zmsvcr80Z1500Zmsvcr90Z1600Zmsvcr100zUnknown MS Compiler version %s N)�sys�version�find�
ValueError)Zmsc_posZmsc_ver� r �1/usr/lib64/python3.9/distutils/cygwinccompiler.py� get_msvcr= s r c
@ sR e Zd ZdZdZdZdZdZdZdZ dZ
dd
d�Zdd
� Zddd�Z
ddd�ZdS )�CygwinCCompilerz? Handles the Cygwin port of the GNU C compiler to Windows.
�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 dS )z:Compiles the source by spawning GCC and windres if needed.�.rc�.resZwindresz-iz-oN)�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� |du�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| |
|||
� dS )zLink the objects.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� |du rd}g }|D ]�}t j�t j�|��\}}|| jddg vrRtd||f ��|rbt j�|�}|dv r�|�t j�||| | j �� q|�t j�||| j �� q|S )z#Adds supports for rc and res files.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&