3 \[@ã@súddlZddlZddlZddlmZmZmZddlZddlm Z m Z ddl m Z ddl mZddlmZmZmZmZddlmZddlmZdd lmZd d „ZGd d „d e ƒZGdd„deƒZdZdZdZdd„Z ej!dƒZ"dd„Z#dd„Z$dd„Z%dS)éN)ÚPopenÚPIPEÚ check_output)Úgen_preprocess_optionsÚgen_lib_options)Ú UnixCCompiler)Ú write_file)ÚDistutilsExecErrorÚCCompilerErrorÚ CompileErrorÚUnknownFileError)Úlog)Ú LooseVersion)Úfind_executablecCs€tjjdƒ}|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ú1/usr/lib64/python3.6/distutils/cygwinccompiler.pyÚ get_msvcr?s rc @sNeZdZdZdZdZdZdZdZdZ dd d „Z d d „Z ddd„Z ddd„Z d S)ÚCygwinCCompilerÚcygwinz.oz.az.dllzlib%s%sz%s%sz.exercCsètj||||ƒtƒ\}}|jd||fƒ|tk rB|jd|ƒtƒ\|_|_|_ |j|j d|j|j|j fƒ|jdkr†d|_ nd|_ |jdkrœd}nd }|j d d d d d|j |fd�|jdkrÜdg|_ |jdƒ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Údllwrapz2.13z-sharedz -mdll -staticzgcc -mcygwin -O -Wallzgcc -mcygwin -mdll -O -Wallzg++ -mcygwin -O -Wallz gcc -mcygwinz%s -mcygwin %s)ÚcompilerÚ compiler_soÚ compiler_cxxÚ linker_exeÚ linker_soz2.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$ds<      zCygwinCCompiler.__init__cCs¨|dks|dkrVy|jdd|d|gƒWq¤tk rR}zt|ƒ‚WYdd}~Xq¤XnNy"|j|j||d|g|ƒWn*tk r¢}zt|ƒ‚WYdd}~XnXdS)Nz.rcz.resZwindresz-iz-o)Zspawnr r r )r/ÚobjÚsrcÚextZcc_argsÚextra_postargsZpp_optsÚmsgrrrÚ_compileŸs zCygwinCCompiler._compileNcCsRtj| p gƒ} tj|pgƒ}tj|p&gƒ}|j|jƒ|dk oP||jksT|jdk�rtjj|dƒ}tjjtjj |ƒƒ\}}tjj ||dƒ}tjj |d|dƒ}dtjj |ƒdg}x|D]}|j |ƒq¾W|j t ||fd|ƒ|jd k�r| jd |gƒ| jd |gƒn |j |ƒ| �s*| j d ƒtj||||||||d| | | | | ƒdS) Nrrz.defÚlibz.az 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®s:         zCygwinCCompiler.linkÚcCs®|dkr d}g}x˜|D]�}tjjtjj|ƒƒ\}}||jddgkrTtd||fƒ‚|rdtjj|ƒ}|dkrŒ|jtjj||||j ƒƒq|jtjj|||j ƒƒqW|S)NrHú.rcú.resz"unknown file type '%s' (from '%s'))rJrI) 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+rLZstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZ exe_extensionr$r9rDrNrrrrrYs ; Krc@seZdZdZddd„ZdS)ÚMingw32CCompilerZmingw32rc Csxtj||||ƒ|jdkr d}nd}|jdkr4d}nd}tƒrFtdƒ‚|jdd d d d |j||fd �g|_t ƒ|_dS)Nz2.13z-sharedz -mdll -staticz2.91.57z--entry _DllMain@12rHz1Cygwin gcc cannot be used with --compiler=mingw32z gcc -O -Wallzgcc -mdll -O -Wallz g++ -O -Wallrz%s %s %s)rr r!r"r#) rr$r*r)Ú is_cygwingccr r-r,r.r)r/r0r1r2r3Z entry_pointrrrr$s&   zMingw32CCompiler.__init__N)rrr)rOrPrQr+r$rrrrrRsrRÚokznot okZ uncertaincCsšddlm}dtjkrtdfS|jƒ}y@t|ƒ}z(d|jƒkrJtd|fStd|fSWd|j ƒXWn.t k r”}zt d||j ffSd}~XnXdS) Nr)Ú sysconfigZGCCzsys.version mentions 'GCC'Z__GNUC__z'%s' mentions '__GNUC__'z '%s' does not mention '__GNUC__'zcouldn't read '%s': %s) Ú distutilsrUrrr&Úget_config_h_filenameÚopenÚreadÚCONFIG_H_NOTOKÚcloseÚOSErrorÚCONFIG_H_UNCERTAINÚstrerror)rUÚfnÚconfig_hÚexcrrrr%Hs    r%s(\d+\.\d+(\.\d+)*)c Csl|jƒd}t|ƒdkrdSt|dtd�j}z |jƒ}Wd|jƒXtj|ƒ}|dkrZdSt |j dƒj ƒƒS)NrT)ÚshellÚstdoutr) ÚsplitrrrrcrYr[Ú RE_VERSIONÚsearchrÚgroupÚdecode)ÚcmdÚ executableÚoutÚ out_stringÚresultrrrÚ_find_exe_versionus     rncCsdddg}tdd„|DƒƒS)Nzgcc -dumpversionzld -vzdllwrap --versioncSsg|] }t|ƒ‘qSr)rn)Ú.0rirrrú �sz get_versions..)Útuple)Zcommandsrrrr(Šs r(cCstddgƒ}|jƒjdƒS)Nrz -dumpmachinescygwin)rÚstripÚendswith)rlrrrrS’s rS)&r=rr;Ú subprocessrrrÚreZdistutils.ccompilerrrZdistutils.unixccompilerrZdistutils.file_utilrZdistutils.errorsr r r r rVr Zdistutils.versionrZdistutils.spawnrrrrRr&rZr]r%Úcompilerernr(rSrrrrÚ0s.     ;1+