ž «ÿfÜc@sDdZddlZddlZddlZddlmZddlTddlmZm Z ddlm Z ddl m Z ddl mZdd lmZdd lmZejd krÈdZdZndd lmZdZejd krddlmZeeƒƒZnejdƒZ dd„Z!Gdd„deƒZ"dS(u¶distutils.command.build_ext Implements the Distutils 'build_ext' command, for building extension modules (currently limited to C extensions, should accommodate C++ extensions ASAP).iN(uCommand(u*(ucustomize_compileruget_python_version(uget_config_h_filename(u newer_group(u Extension(u get_platform(ulogu2.6(u USER_BASEunt(uget_build_versionu3^[a-zA-Z_][a-zA-Z_0-9]*(\.[a-zA-Z_][a-zA-Z_0-9]*)*$cCsddlm}|ƒdS(Ni(ushow_compilers(udistutils.ccompilerushow_compilers(ushow_compilers((u@/opt/alt/python33/lib64/python3.3/distutils/command/build_ext.pyushow_compilers#sushow_compilerscBs•|EeZdZdZdejZdWdXd d d eƒfd d ddfdddefdYdZd[dddefd\d]d^d_d`dadbdcgZ d d%d(d.gZ e rÈe j ddƒe j d4ƒnd6dVd7e fgZd8d9„Zd:d;„Zd<d=„Zd>d?„Zd@dA„ZdBdC„ZdDdE„ZdFdG„ZdHdI„ZdJdK„ZdLdM„ZdNdO„ZdPdQ„ZdRdS„ZdTdU„ZdVS(eu build_extu8build C/C++ extensions (compile/link to build directory)u (separated by '%s')u build-lib=ubu(directory for compiled extension modulesu build-temp=utu1directory for temporary files (build by-products)u plat-name=upu>platform name to cross-compile for, if supported (default: %s)uinplaceuiu=ignore build-lib and put compiled extensions into the source u,directory alongside your pure Python modulesu include-dirs=uIu.list of directories to search for header filesudefine=uDuC preprocessor macros to defineuundef=uUu!C preprocessor macros to undefineu libraries=ulu!external C libraries to link withu library-dirs=uLu.directories to search for external C librariesurpath=uRu7directories to search for shared C libraries at runtimeu link-objects=uOu2extra explicit link objects to include in the linkudebugugu'compile/link with debugging informationuforceufu2forcibly build everything (ignore file timestamps)u compiler=ucuspecify the compiler typeuswig-cppu)make SWIG create C++ files (default is C)u swig-opts=u!list of SWIG command line optionsuswig=upath to the SWIG executableuuseru#add user include, library and rpathu help-compilerulist available compilerscCs¸d|_d|_d|_d|_d|_d|_d|_d|_d|_ d|_ d|_ d|_ d|_ d|_d|_d|_d|_d|_d|_d|_dS(Ni(uNoneu extensionsu build_libu plat_nameu build_tempuinplaceupackageu include_dirsudefineuundefu librariesu library_dirsurpathu link_objectsudebuguforceucompileruswiguswig_cppu swig_optsuuser(uself((u@/opt/alt/python33/lib64/python3.3/distutils/command/build_ext.pyuinitialize_optionsrs(                   ubuild_ext.initialize_optionsc Cs=ddlm}|jdd.d/d0d1d2d3ƒ|jdkrP|jj|_n|jj|_|j ƒ}|j d d ƒ}|j dkr¤|jj p›g|_ nt |j t ƒrÑ|j j tjƒ|_ ntjtjkr|j jtjjtjd ƒƒn|j j|ƒ||kr7|j j|ƒn|jd ƒ|jdkr_g|_n|jdkrzg|_n-t |jt ƒr§|jj tjƒ|_n|jdkrÂg|_n-t |jt ƒrï|jj tjƒ|_ntjdkró|jjtjjtjdƒƒtjtjkrW|jjtjjtjdƒƒn|jr~tjj|jdƒ|_ntjj|jdƒ|_|j jtjjtƒƒƒt tddƒ}|rã|jj|ƒnt!dkrc|j"dkrd}n|j"dd…}tjjtjdƒ}|rPtjj||ƒ}n|jj|ƒqót!dkr—|jjtjjtjddƒƒqót!dkrË|jjtjjtjddƒƒqó|jjtjjtjddƒƒntjdkr'|jjtjjtjdƒƒntj#dd …d!ksYtj#dd …d"krÂtj$j%tjjtjd#ƒƒr¯|jjtjjtjd$d%t&ƒd&ƒƒqÂ|jjd'ƒn|j'd(ƒr$tj$j%tjjtjd#ƒƒr|jj|j'd)ƒƒq$|jjd'ƒn|j(rX|j(j d*ƒ}d+d,„|Dƒ|_(n|j)ry|j)j d*ƒ|_)n|j*dkr”g|_*n|j*j d-ƒ|_*|j+r9tjjt,d ƒ}tjjt,d$ƒ} tjj-|ƒr|j j|ƒntjj-| ƒr9|jj| ƒ|jj| ƒq9ndS(4Ni(u sysconfigubuildu build_libu build_tempucompilerudebuguforceu plat_nameu plat_specificiuincludeu librariesuntulibsuDebuguReleaseu_homei uwin32uiuPCbuildiuPCuVS8.0iuVS7.1uVC6uos2uConfigiucygwinuatheosubinulibupythonuconfigu.uPy_ENABLE_SHAREDuLIBDIRu,cSsg|]}|df‘qS(u1((u.0usymbol((u@/opt/alt/python33/lib64/python3.3/distutils/command/build_ext.pyu s u.build_ext.finalize_options..u (u build_libu build_lib(u build_tempu build_temp(ucompilerucompiler(udebugudebug(uforceuforce(u plat_nameu plat_name(.u distutilsu sysconfiguset_undefined_optionsupackageuNoneu distributionu ext_packageu ext_modulesu extensionsuget_python_incu include_dirsu isinstanceustrusplituosupathsepusysu exec_prefixubase_exec_prefixuappendupathujoinuensure_string_listu librariesu library_dirsurpathunameuprefixudebugu build_tempudirnameuget_config_h_filenameugetattru MSVC_VERSIONu plat_nameuplatformu executableu startswithuget_python_versionuget_config_varudefineuundefu swig_optsuuseru USER_BASEuisdir( uselfu sysconfigu py_includeuplat_py_includeu _sys_homeusuffixunew_libudefinesu user_includeuuser_lib((u@/opt/alt/python33/lib64/python3.3/distutils/command/build_ext.pyufinalize_options‰s°  %     "%     %2$  $    ubuild_ext.finalize_optionsc Csddlm}|jsdS|jjƒrm|jdƒ}|jj|jƒpSgƒ|j j |j ƒn|d|j d|j d|jd|jƒ|_ t|j ƒtjdkrá|jtƒkrá|j j|jƒn|jdk r|j j|jƒn|jdk rEx-|jD]\}}|j j||ƒqWn|jdk r{x$|jD]}|j j|ƒq^Wn|jdk r |j j|jƒn|j dk rÅ|j j|j ƒn|jdk rê|j j |jƒn|j!dk r|j j"|j!ƒn|j#ƒdS( Ni(u new_compileru build_clibucompileruverboseudry_runuforceunt($udistutils.ccompileru new_compileru extensionsu distributionuhas_c_librariesuget_finalized_commandu librariesuextenduget_library_namesu library_dirsuappendu build_clibucompileruverboseudry_runuforceucustomize_compileruosunameu plat_nameu get_platformu initializeu include_dirsuNoneuset_include_dirsudefineu define_macrouundefuundefine_macrou set_librariesuset_library_dirsurpathuset_runtime_library_dirsu link_objectsuset_link_objectsubuild_extensions(uselfu new_compileru build_clibunameuvalueumacro((u@/opt/alt/python33/lib64/python3.3/distutils/command/build_ext.pyurun#s>    !u build_ext.runc Cs0t|tƒstdƒ‚nx t|ƒD]ý\}}t|tƒrLq+nt|tƒ snt|ƒdkr}tdƒ‚n|\}}tjd|ƒt|t ƒoµt j |ƒsÇtdƒ‚nt|t ƒsåtdƒ‚nt||dƒ}x<dD]4}|j |ƒ}|dk rÿt|||ƒqÿqÿW|j dƒ|_d|kretjdƒn|j dƒ}|rg|_g|_x|D]„} t| tƒo·t| ƒdksÉtdƒ‚nt| ƒdkrò|jj| dƒq“t| ƒdkr“|jj| ƒq“q“Wn||||j|jƒg}x!|jD]}|j|jƒq W|S(N(ucheck_extensions_listu extensionsuextendusources(uselfu filenamesuext((u@/opt/alt/python33/lib64/python3.3/distutils/command/build_ext.pyuget_source_files±s ubuild_ext.get_source_filescCsG|j|jƒg}x*|jD]}|j|j|jƒƒq W|S(N(ucheck_extensions_listu extensionsuappenduget_ext_fullpathuname(uselfuoutputsuext((u@/opt/alt/python33/lib64/python3.3/distutils/command/build_ext.pyu get_outputsºs ubuild_ext.get_outputscCs“|j|jƒx||jD]q}y|j|ƒWqtttfk rŠ}z.|js^‚n|jd|j|fƒWYdd}~XqXqWdS(Nu"building extension "%s" failed: %s( ucheck_extensions_listu extensionsubuild_extensionuCCompilerErroruDistutilsErroru CompileErroruoptionaluwarnuname(uselfuextue((u@/opt/alt/python33/lib64/python3.3/distutils/command/build_ext.pyubuild_extensionsÈs  ubuild_ext.build_extensionsc Cs |j}|dks+t|ttfƒ rAtd|jƒ‚nt|ƒ}|j|jƒ}||j}|j p„t ||dƒsžt j d|jƒdSt j d|jƒ|j||ƒ}|jpÏg}|jdd…}x!|jD]}|j|fƒqïW|jj|d|jd|d|jd|j d |d |jƒ}|dd…|_|jrz|j|jƒn|jp†g}|jp¡|jj|ƒ} |jj||d |j|ƒd |jd |j d |d|j!|ƒd|j d|jd| ƒdS(Nujin 'ext_modules' option (extension '%s'), 'sources' must be present and must be a list of source filenamesuneweru$skipping '%s' extension (up-to-date)ubuilding '%s' extensionu output_dirumacrosu include_dirsudebuguextra_postargsudependsu librariesu library_dirsuruntime_library_dirsuexport_symbolsu build_tempu target_lang("usourcesuNoneu isinstanceulistutupleuDistutilsSetupErrorunameuget_ext_fullpathudependsuforceu newer_groupulogudebuguinfou swig_sourcesuextra_compile_argsu define_macrosu undef_macrosuappenducompilerucompileu build_tempu include_dirsu_built_objectsu extra_objectsuextenduextra_link_argsulanguageudetect_languageulink_shared_objectu get_librariesu library_dirsuruntime_library_dirsuget_export_symbols( uselfuextusourcesuext_pathudependsu extra_argsumacrosuundefuobjectsulanguage((u@/opt/alt/python33/lib64/python3.3/distutils/command/build_ext.pyubuild_extensionÕsN "             ubuild_ext.build_extensionc Cs£g}g}i}|jr+tjdƒn|jsRd|jksRd|jkr[d}nd}xr|D]j}tjj|ƒ\}} | dkrÅ|j|d|ƒ|j|ƒ|d ||          ubuild_ext.swig_sourcescCs“tjdkrdStjdkrixjd D]5}tjjd|dƒ}tjj|ƒr)|Sq)WdSn&tjd kr|dStd tjƒ‚d S( u›Return the name of the SWIG executable. On Unix, this is just "swig" -- it should be in the PATH. Tries a bit harder on Windows. uposixuswiguntu1.3u1.2u1.1u c:\swig%suswig.exeuos2u>I don't know how to find (much less run) SWIG on platform '%s'N(u1.3u1.2u1.1(uosunameupathujoinuisfileuDistutilsPlatformError(uselfuversufn((u@/opt/alt/python33/lib64/python3.3/distutils/command/build_ext.pyu find_swig]s ubuild_ext.find_swigcCsÉ|j|ƒ}|jdƒ}|j|dƒ}|jsstjj|dd…|gŒ}tjj|j|ƒSdj|dd…ƒ}|jdƒ}tjj |j |ƒƒ}tjj||ƒS( u¡Returns the path of the filename for a given extension. The file is located in `build_lib` or directly in the package (inplace option). u.iNiubuild_pyiÿÿÿÿiÿÿÿÿiÿÿÿÿ( uget_ext_fullnameusplituget_ext_filenameuinplaceuosupathujoinu build_libuget_finalized_commanduabspathuget_package_dir(uselfuext_nameufullnameumodpathufilenameupackageubuild_pyu package_dir((u@/opt/alt/python33/lib64/python3.3/distutils/command/build_ext.pyuget_ext_fullpathxs #ubuild_ext.get_ext_fullpathcCs&|jdkr|S|jd|SdS(uSReturns the fullname of a given extension name. Adds the `package.` prefixu.N(upackageuNone(uselfuext_name((u@/opt/alt/python33/lib64/python3.3/distutils/command/build_ext.pyuget_ext_fullname“subuild_ext.get_ext_fullnamecCs­ddlm}|jdƒ}tjdkr]|t|ƒddd…|t|ƒds*$