a XC?h�?�@s�ddlZddlZddlZddlmZmZmZddlZddlm Z ddl m Z ddl m Z mZmZmZddlmZddlmZdd �ZGd d �d e �ZGd d �d e�ZdZdZdZdd�Ze�d�Zdd�Zdd�Zdd�Z dS)�N)�Popen�PIPE� check_output)� UnixCCompiler)� write_file)�DistutilsExecError�CCompilerError� CompileError�UnknownFileError)� LooseVersion)�find_executablecCs�tj�d�}|dkr|tj|d|d�}|dkr8dgS|dkrFdgS|d krTd gS|d krbd gS|d krpdgStd|��dS)NzMSC v.������� Z1300Zmsvcr70Z1310Zmsvcr71Z1400Zmsvcr80Z1500Zmsvcr90Z1600Zmsvcr100zUnknown MS Compiler version %s )�sys�version�find� ValueError)Zmsc_posZmsc_ver�r�>/opt/alt/python39/lib64/python3.9/distutils/cygwinccompiler.py� get_msvcr=s rc @sNeZdZdZdZdZdZdZdZdZ dd d �Z d d �Z ddd�Z ddd�Z d S)�CygwinCCompiler�cygwinz.o�.az.dllzlib%s%sz%s%sz.exercCs�t�||||�t�\}}|�d||f�|turB|�d|�t�\|_|_|_ |�|j d|j|j|j f�|jdkr�d|_ nd|_ |jdkr�d}nd }|j d d d d d|j |fd�|jdkr�dg|_ |�d�nt�|_ dS)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 -Wallz gcc -mcygwinz%s -mcygwin %s�Zcompiler� compiler_soZ compiler_cxxZ linker_exeZ linker_so�2.91.57Zmsvcrtz,Consider upgrading to a newer version of gcc)r�__init__�check_config_hZ debug_print� CONFIG_H_OK�warn� get_versions� gcc_version� ld_versionZdllwrap_version� compiler_type� linker_dll�set_executables� dll_librariesr)�self�verbose�dry_run�forceZstatusZdetails� shared_optionrrrr"bsN ���� ��  �� �zCygwinCCompiler.__init__c Cs�|dks|dkrXz|�dd|d|g�Wq�tyT}zt|��WYd}~q�d}~00nPz"|�|j||d|g|�Wn,ty�}zt|��WYd}~n d}~00dS)N�.rc�.resZwindresz-iz-o)Zspawnrr r )r-�obj�src�extZcc_args�extra_postargsZpp_opts�msgrrr�_compile�s � zCygwinCCompiler._compileNcCsPt�| 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) Nrrz.def�librz LIBRARY %sZEXPORTSz writing %srz --output-libz--defz-s)�copy�extendr,Z EXECUTABLEr*�os�path�dirname�splitext�basename�join�appendZexecuterr�link)r-Z target_descZobjectsZoutput_filename� output_dirZ librariesZ library_dirsZruntime_library_dirsZexport_symbols�debugZ extra_preargsr7Z build_tempZ target_langZtemp_dirZdll_nameZ dll_extensionZdef_fileZlib_file�contentsZsymrrrrD�sH  ��  ��  �    �zCygwinCCompiler.link�cCs�|dur d}g}|D]�}tj�tj�|��\}}||jddgvrRtd||f��|rbtj�|�}|dvr�|�tj�||||j ��q|�tj�|||j ��q|S)NrHr2r3z"unknown file type '%s' (from '%s'))r3r2) r=r>r@�normcaseZsrc_extensionsr rArCrB� obj_extension)r-Zsource_filenamesZ strip_dirrEZ obj_namesZsrc_name�baser6rrr�object_filenames�s&�   � �z CygwinCCompiler.object_filenames)rrr) NNNNNrNNNN)rrH)�__name__� __module__� __qualname__r)rJZstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZ exe_extensionr"r9rDrLrrrrrWs ;� Nrc@seZdZdZddd�ZdS)�Mingw32CCompilerZmingw32rc Csxt�||||�|jdkr d}nd}|jdkr4d}nd}t�rFtd��|jdd d d d |j||fd �g|_t �|_dS)Nrrrr!z--entry _DllMain@12rHz1Cygwin gcc cannot be used with --compiler=mingw32z gcc -O -Wallzgcc -mdll -O -Wallz g++ -O -Wallrz%s %s %sr) rr"r(r'� is_cygwingccrr+r*r,r)r-r.r/r0r1Z entry_pointrrrr"s.  ���� zMingw32CCompiler.__init__N)rrr)rMrNrOr)r"rrrrrPsrP�okznot okZ uncertainc Cs�ddlm}dtjvrtdfS|��}z`t|�}zHd|��vrVtd|fW|��WSt d|fW|��WSW|��n |��0Wn6t y�}zt d||j ffWYd}~Sd}~00dS) Nr)� sysconfigZGCCzsys.version mentions 'GCC'Z__GNUC__z'%s' mentions '__GNUC__'z '%s' does not mention '__GNUC__'zcouldn't read '%s': %s) Z distutilsrSrrr$Zget_config_h_filename�open�read�close�CONFIG_H_NOTOK�OSError�CONFIG_H_UNCERTAIN�strerror)rS�fnZconfig_h�excrrrr#Fs&    � � �r#s(\d+\.\d+(\.\d+)*)cCst|��d}t|�durdSt|dtd�j}z|��}W|��n |��0t�|�}|durbdSt |� d�� ��S)NrT)�shell�stdout�) �splitr rrr^rUrV� RE_VERSION�searchr �group�decode)�cmd� executable�out� out_string�resultrrr�_find_exe_versionss    rjcCsgd�}tdd�|D��S)N)zgcc -dumpversionzld -vzdllwrap --versioncSsg|] }t|��qSr)rj)�.0rerrr� ��z get_versions..)�tuple)Zcommandsrrrr&�sr&cCstddg�}|���d�S)Nrz -dumpmachinescygwin)r�strip�endswith)rhrrrrQ�s rQ)!r=rr;� subprocessrrr�reZdistutils.unixccompilerrZdistutils.file_utilrZdistutils.errorsrrr r Zdistutils.versionr Zdistutils.spawnr rrrPr$rWrYr#�compilerarjr&rQrrrr�0s*    ;1+