o 0i? @ s d Z ddlZddlZddlZddlmZmZmZ ddlZddl m Z ddlmZ ddl mZmZmZmZ ddlmZ ddlmZ d d ZG dd de ZG d d deZdZdZdZdd ZedZdd 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)PopenPIPEcheck_output) UnixCCompiler) write_file)DistutilsExecErrorCCompilerErrorCompileErrorUnknownFileError)LooseVersion)find_executablec C s t jd} | dkr>t j| d | d }|dkrdgS |dkr#dgS |d kr*d gS |dkr1dgS |d kr8dgS 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)sysversionfind ValueError)Zmsc_posZmsc_ver r @/opt/alt/python310/lib64/python3.10/distutils/cygwinccompiler.py get_msvcr= s r c @ sZ e Zd ZdZdZdZdZdZdZdZ dZ dd dZdd Z dddZ dddZdS )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 |tur!| d| t \| _| _| _ | | j d| j| j| j f | jdkrCd| _nd| _| jdkrNd}nd }| jd ddd d| j|f d | jdkrodg| _ | d d S t | _ d S )Nz%Python's GCC status: %s (details: %s)zPython'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.90gccdllwrap2.13-shared -mdll -staticzgcc -mcygwin -O -Wallzgcc -mcygwin -mdll -O -Wallzg++ -mcygwin -O -Wallzgcc -mcygwinz%s -mcygwin %sZcompilercompiler_soZcompiler_cxxZ linker_exeZ linker_so2.91.57Zmsvcrtz,Consider upgrading to a newer version of gcc)r __init__check_config_hZdebug_printCONFIG_H_OKwarnget_versionsgcc_version ld_versionZdllwrap_version compiler_type linker_dllset_executables dll_librariesr )selfverbosedry_runforceZstatusZdetails shared_optionr r r r" b sN zCygwinCCompiler.__init__c C s |dks|dkr&z | dd|d|g W dS ty% } zt|d}~ww z| | j| |d|g | W dS tyH } zt|d}~ww )z:Compiles the source by spawning GCC and windres if needed..rc.resZwindresz-iz-oN)Zspawnr r r )r- objsrcextZcc_argsextra_postargsZpp_optsmsgr r r _compile s zCygwinCCompiler._compileNc C sH t | pg } t |pg }t |pg }|| j |dur|| jks)| jdkrtj|d }tjtj |\}}tj ||d }tj |d| d }dtj | dg}|D ]}|| q]| t ||fd | | jd kr| d|g | d|g n|| | s| d t| |||||||d| | ||| dS )zLink the objects.Nr r z.deflibr z LIBRARY %sZEXPORTSz writing %sr z--output-libz--defz-s)copyextendr, Z EXECUTABLEr* ospathdirnamesplitextbasenamejoinappendZexecuter r link)r- Ztarget_descZobjectsZoutput_filename output_dirZ librariesZlibrary_dirsZruntime_library_dirsZexport_symbolsdebugZ extra_preargsr7 Z build_tempZtarget_langZtemp_dirZdll_nameZ dll_extensionZdef_fileZlib_filecontentsZsymr r r rD sB zCygwinCCompiler.link c C s |du rd}g }|D ]H}t jt j|\}}|| jddg vr)td||f |r1t j|}|dv rE|t j||| | j q |t j||| j q |S )z#Adds supports for rc and res files.NrH r2 r3 z"unknown file type '%s' (from '%s'))r3 r2 ) r= r> r@ normcaseZsrc_extensionsr rA rC rB obj_extension)r- Zsource_filenamesZ strip_dirrE Z obj_namesZsrc_namebaser6 r r r object_filenames s&