ó p®¸Qc@sïdZdZddlZddlZddlZddlmZmZddlm Z ddl m Z ddl m Z mZmZddlmZd „Zd e fd „ƒYZd efd „ƒYZdZdZdZd„Zd„ZdS(sdistutils.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). s$Id$iÿÿÿÿN(tgen_preprocess_optionstgen_lib_options(t UnixCCompiler(t write_file(tDistutilsExecErrort CompileErrortUnknownFileError(tlogcCs™tjjdƒ}|dkr•tj|d|d!}|dkrIdgS|dkr\dgS|d krod gS|d kr‚d gStd |ƒ‚ndS(saInclude the appropriate MSVC runtime library if Python was built with MSVC 7.0 or later. sMSC v.iÿÿÿÿii t1300tmsvcr70t1310tmsvcr71t1400tmsvcr80t1500tmsvcr90sUnknown MS Compiler version %s N(tsystversiontfindt ValueError(tmsc_postmsc_ver((s//sys/lib/python2.7/distutils/cygwinccompiler.pyt get_msvcr;s     tCygwinCCompilerc BsƒeZdZdZdZdZdZdZdZdddd„Z d „Z d d d d d dd d d d d „ Z dd d „Z RS(tcygwins.os.as.dllslib%s%ss%s%ss.exeic CsStj||||ƒtƒ\}}|jd||fƒ|tk r\|jd|ƒntƒ\|_|_|_ |j|j d|j|j|j fƒ|jdkr¼d|_ n d|_ |jdkrÝd}nd }|j d d d d dddddd|j |fƒ|jdkrCdg|_ |jdƒn tƒ|_ dS(Ns%Python's GCC status: %s (details: %s)sƒPython's pyconfig.h doesn't seem to support your compiler. Reason: %s. Compiling may fail because of undefined preprocessor macros.s: gcc %s, ld %s, dllwrap %s s2.10.90tgcctdllwraps2.13s-shareds -mdll -statictcompilersgcc -mcygwin -O -Wallt compiler_sosgcc -mcygwin -mdll -O -Wallt compiler_cxxsg++ -mcygwin -O -Wallt linker_exes gcc -mcygwint linker_sos%s -mcygwin %ss2.91.57tmsvcrts,Consider upgrading to a newer version of gcc(Rt__init__tcheck_config_ht debug_printt CONFIG_H_OKtwarnt get_versionst gcc_versiont ld_versiontdllwrap_versiont compiler_typet linker_dlltset_executablest dll_librariesR(tselftverbosetdry_runtforcetstatustdetailst shared_option((s//sys/lib/python2.7/distutils/cygwinccompiler.pyR!\s<        cCs¦|dks|dkrZy |jdd|d|gƒWq¢tk rV}t|‚q¢XnHy)|j|j||d|g|ƒWntk r¡}t|‚nXdS(Ns.rcs.restwindress-is-o(tspawnRRR(R.tobjtsrctexttcc_argstextra_postargstpp_optstmsg((s//sys/lib/python2.7/distutils/cygwinccompiler.pyt_compilešs  cCsÖtj| pgƒ} tj|p$gƒ}tj|p9gƒ}|j|jƒ|dk rˆ||jksy|jdkrˆtjj|dƒ}tjj tjj |ƒƒ\}}tjj ||dƒ}tjj |d|dƒ}dtjj |ƒdg}x|D]}|j |ƒq W|j t||fd|ƒ|jd krx| jd |gƒ| jd |gƒqˆ|j |ƒn| sž| j d ƒntj||||||||d| | | | | ƒdS( NRis.deftlibs.as LIBRARY %stEXPORTSs writing %sRs --output-libs--defs-s(tcopytextendR-tNonet EXECUTABLER+tostpathtdirnametsplitexttbasenametjointappendtexecuteRRtlink(R.t target_desctobjectstoutput_filenamet output_dirt librariest library_dirstruntime_library_dirstexport_symbolstdebugt extra_preargsR;t build_tempt target_langttemp_dirtdll_namet dll_extensiontdef_filetlib_filetcontentstsym((s//sys/lib/python2.7/distutils/cygwinccompiler.pyRM¨sJ        tcCs|dkrd}ng}xá|D]Ù}tjjtjj|ƒƒ\}}||jddgkr{td||f‚n|r–tjj|ƒ}n|dks®|dkrØ|jtjj ||||j ƒƒq"|jtjj |||j ƒƒq"W|S(NRas.rcs.ress"unknown file type '%s' (from '%s')( RCRERFRHtnormcasetsrc_extensionsRRIRKRJt obj_extension(R.tsource_filenamest strip_dirRQt obj_namestsrc_nametbaseR9((s//sys/lib/python2.7/distutils/cygwinccompiler.pytobject_filenames s"  $N(t__name__t __module__R*Rdtstatic_lib_extensiontshared_lib_extensiontstatic_lib_formattshared_lib_formatt exe_extensionR!R>RCRMRj(((s//sys/lib/python2.7/distutils/cygwinccompiler.pyRRs*>  XtMingw32CCompilercBs eZdZdddd„ZRS(tmingw32icCs£tj||||ƒ|jdkr.d}nd}|jdkrLd}nd}|jddd d d d d ddd|j||fƒg|_tƒ|_dS(Ns2.13s-shareds -mdll -statics2.91.57s--entry _DllMain@12RaRsgcc -mno-cygwin -O -WallRsgcc -mno-cygwin -mdll -O -WallRsg++ -mno-cygwin -O -WallRsgcc -mno-cygwinRs%s -mno-cygwin %s %s(RR!R(R'R,R+R-R(R.R/R0R1R4t entry_point((s//sys/lib/python2.7/distutils/cygwinccompiler.pyR!-s      (RkRlR*R!(((s//sys/lib/python2.7/distutils/cygwinccompiler.pyRr)stoksnot okt uncertaincCsÝddlm}ddl}|jtjdƒdkrAtdfS|jƒ}y.t|ƒ}z|j ƒ}Wd|j ƒXWn't k r¤}t d||j ffSX|j|dƒdkrËtd |fStd |fSdS( s¡Check if the current Python installation (specifically, pyconfig.h) appears amenable to building extensions with GCC. Returns a tuple (status, details), where 'status' is one of the following constants: CONFIG_H_OK all is well, go ahead and compile CONFIG_H_NOTOK doesn't look good CONFIG_H_UNCERTAIN not sure -- unable to read pyconfig.h 'details' is a human-readable string explaining the situation. Note there are two ways to conclude "OK": either 'sys.version' contains the string "GCC" (implying that this Python was built with GCC), or the installed "pyconfig.h" contains the string "__GNUC__". iÿÿÿÿ(t sysconfigNtGCCissys.version mentions 'GCC'scouldn't read '%s': %st__GNUC__s'%s' mentions '__GNUC__'s '%s' does not mention '__GNUC__'(t distutilsRwtstringRRRR$tget_config_h_filenametopentreadtclosetIOErrortCONFIG_H_UNCERTAINtstrerrortCONFIG_H_NOTOK(RwR{tfntftstexc((s//sys/lib/python2.7/distutils/cygwinccompiler.pyR"`s     c Cs°ddlm}ddlm}ddl}|dƒ}|r£tj|ddƒ}|jƒ}|jƒ|j d|ƒ}|rš||j d ƒƒ}q©d}nd}|d ƒ}|r tj|d dƒ}|jƒ}|jƒ|j d|ƒ}|r||j d ƒƒ} q&d} nd} |d ƒ} | rtj| d dƒ}|jƒ}|jƒ|j d|ƒ}|r”||j d ƒƒ} q£d} nd} || | fS(sj Try to find out the versions of gcc, ld and dllwrap. If not possible it returns None for it. iÿÿÿÿ(t LooseVersion(tfind_executableNRs -dumpversiontrs(\d+\.\d+(\.\d+)*)itlds -vRs --versions (\d+\.\d+(\.\d+)*)( tdistutils.versionRˆtdistutils.spawnR‰treREtpopenR~RtsearchtgroupRC( RˆR‰RŽtgcc_exetoutt out_stringtresultR'tld_exeR(t dllwrap_exeR)((s//sys/lib/python2.7/distutils/cygwinccompiler.pyR&•sD             (t__doc__t __revision__RERRAtdistutils.ccompilerRRtdistutils.unixccompilerRtdistutils.file_utilRtdistutils.errorsRRRRzRRRRrR$RƒRR"R&(((s//sys/lib/python2.7/distutils/cygwinccompiler.pyts+$ ×3 5