7ec@sdZdZddlZddlZddlZddlmZmZddlm Z ddl m Z ddl m Z mZmZddlmZd e fd YZd Zd Zd ZdZdZdS(sdistutils.emxccompiler Provides the EMXCCompiler class, a subclass of UnixCCompiler that handles the EMX port of the GNU C compiler to OS/2. s$Id$iN(tgen_preprocess_optionstgen_lib_options(t UnixCCompiler(t write_file(tDistutilsExecErrort CompileErrortUnknownFileError(tlogt EMXCCompilerc BseZdZdZdZdZdZdZdZdZ ddddZ d Z ddddddddddd Z dd d Zdd ZRS(temxs.objs.libs.dlls%s%ss.ress.exeic Cstj||||t\}}|jd||f|tk rd|jdd|dnt\|_|_|j|j d|j|jf|j ddddd d d d d g|_ dS(Ns%Python's GCC status: %s (details: %s)s<Python's pyconfig.h doesn't seem to support your compiler. s Reason: %s.s<Compiling may fail because of undefined preprocessor macros.s: gcc %s, ld %s tcompilers5gcc -Zomf -Zmt -O3 -fomit-frame-pointer -mprobe -Wallt compiler_sot linker_exesgcc -Zomf -Zmt -Zcrtdllt linker_sosgcc -Zomf -Zmt -Zcrtdll -Zdlltgcc( Rt__init__tcheck_config_ht debug_printt CONFIG_H_OKtwarnt get_versionst gcc_versiont ld_versiont compiler_typetset_executablest dll_libraries(tselftverbosetdry_runtforcetstatustdetails((s./usr/lib64/python2.7/distutils/emxccompiler.pyR*s"    cCs|dkrHy|jdd|gWqtk rD}t|qXnHy)|j|j||d|g|Wntk r}t|nXdS(Ns.rctrcs-rs-o(tspawnRRR (Rtobjtsrctexttcc_argstextra_postargstpp_optstmsg((s./usr/lib64/python2.7/distutils/emxccompiler.pyt_compileMs  cCstj| pg} tj|p$g}tj|p9g}|j|j|dk r;||jkr;tjj|d}tjjtjj |\}}tjj ||d}dtjjtjj |dddg}x|D]}|j d|qW|j t ||fd||j |n| sQ| j dntj||||||||d| | | | | dS( Nis.defs$LIBRARY %s INITINSTANCE TERMINSTANCEsDATA MULTIPLE NONSHAREDtEXPORTSs "%s"s writing %ss-s(tcopytextendRtNonet EXECUTABLEtostpathtdirnametsplitexttbasenametjointappendtexecuteRRtlink(Rt target_desctobjectstoutput_filenamet output_dirt librariest library_dirstruntime_library_dirstexport_symbolstdebugt extra_preargsR&t build_tempt target_langttemp_dirtdll_namet dll_extensiontdef_filetcontentstsym((s./usr/lib64/python2.7/distutils/emxccompiler.pyR7[sF         tcCs|dkrd}ng}x|D]}tjjtjj|\}}||jdgkrxtd||fn|rtjj|}n|dkr|jtjj |||j q"|jtjj |||j q"W|S(NRJs.rcs"unknown file type '%s' (from '%s')( R-R/R0R2tnormcasetsrc_extensionsRR3R5R4t res_extensiont obj_extension(Rtsource_filenamest strip_dirR;t obj_namestsrc_nametbaseR$((s./usr/lib64/python2.7/distutils/emxccompiler.pytobject_filenamess"  $ c Csd|}d|}ytjdjd}Wntk rGg}nXxh||D]\}tjj||}tjj||} tjj|r|Stjj| rS| SqSWdS(Ns%s.libs lib%s.libt LIBRARY_PATHt;(R/tenvirontsplittKeyErrorR0R4texistsR-( RtdirstlibR@tshortlibtlonglibtemx_dirstdirt shortlibptlonglibp((s./usr/lib64/python2.7/distutils/emxccompiler.pytfind_library_files    N(t__name__t __module__RRNtstatic_lib_extensiontshared_lib_extensiontstatic_lib_formattshared_lib_formatRMt exe_extensionRR)R-R7RTRc(((s./usr/lib64/python2.7/distutils/emxccompiler.pyRs2  P toksnot okt uncertaincCsddlm}ddl}|jtjddkrAtdfS|j}y.t|}z|j }Wd|j XWn't k r}t d||j ffSX|j|ddkrtd |fStd |fSdS( sCheck 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 distutilsRmtstringtfindtsystversionRtget_config_h_filenametopentreadtclosetIOErrortCONFIG_H_UNCERTAINtstrerrortCONFIG_H_NOTOK(RmRqtfntftstexc((s./usr/lib64/python2.7/distutils/emxccompiler.pyRs     c Csddlm}ddlm}ddl}|d}|rtj|dd}z|j}Wd|jX|j d|}|r||j d }qd}nd}d}||fS( sa Try to find out the versions of gcc and ld. If not possible it returns None for it. i(t StrictVersion(tfind_executableNRs -dumpversiontrs(\d+\.\d+\.\d+)i( tdistutils.versionRtdistutils.spawnRtreR/tpopenRwRxtsearchtgroupR-( RRRtgcc_exetoutt out_stringtresultRR((s./usr/lib64/python2.7/distutils/emxccompiler.pyR&s     (t__doc__t __revision__R/RsR+tdistutils.ccompilerRRtdistutils.unixccompilerRtdistutils.file_utilRtdistutils.errorsRRRRpRRRR|RzRR(((s./usr/lib64/python2.7/distutils/emxccompiler.pyts$ 4