MReN.$@sddlmZyddlmZWnek r>eZYnXddlZddlZddlm Z ddl m Z ddl m Z ddlmZyddlmZWn?ek rddlmZed [dd lmZYnXdd lmZdd lTd Zd ZdZejdkr1dZnGejdkrxy ddlmZdZdZWqxek rtYqxXnddZGdddeZesejdkrdddddddddddd Zn0dZdddddddddddd ZdS)) build_extN) copy_file)Library) new_compiler)customize_compiler) _CONFIG_VARS)get_config_varLDSHARED) _config_vars)log)*FZshareddarwinTnt)RTLD_NOWcCstr |SdS)N) have_rtld)sr7/tmp/pip-l4uy7dan-build/setuptools/command/build_ext.pyif_dl&src@seZdZddZddZeek rOeed rOddZndd Z d d Z d d Z ddZ ddZ ddZddZddZdddZdS)rcCs@|jd}|_tj|||_|r<|jndS)z;Build extensions in build directory, then copy if --inplacerN)Zinplace _build_extruncopy_extensions_to_source)selfZ old_inplacerrrr1s   z build_ext.runc Cs|jd}x|jD]}|j|j}|j|}|jd}dj|dd}|j|}tj j|tj j |}tj j|j |} t | |d|j d|j|jr|j|ptj|dqqWdS)Nbuild_py.verbosedry_runT)get_finalized_command extensionsget_ext_fullnamenameget_ext_filenamesplitjoinZget_package_dirospathbasename build_librrr _needs_stub write_stubcurdir) rrextfullnamefilenameZmodpathpackage package_dir dest_filenameZ src_filenamerrrr9s!  z#build_ext.copy_extensions_to_sourceZ pyrex_sourcescGs+tj||p|}tj|||S)N)r swig_sources _du_build_ext)rsourcesZ otherargsrrrr4Qszbuild_ext.swig_sourcescCstj||}||jkr|j|}t|trhtjj|\}}|jj |t St r|j rtjj |\}}tjj|d|Sn|S)Nzdl-)rr$ext_map isinstancerr'r(splitextshlib_compilerlibrary_filenamelibtype use_stubs_links_to_dynamicr%r&)rr/r0r.fndrrrr$Ys zbuild_ext.get_ext_filenamecCs,tj|d|_g|_i|_dS)N)rinitialize_optionsr:shlibsr7)rrrrrAes   zbuild_ext.initialize_optionscCstj||jpg|_|j|jdd|jD|_|jr^|jnx&|jD]}|j|j|_qhWx|jD]}|j}||j |<||j |j dd<|jr|j |pd}|_ |ot ot|t |_|j|}|_tjjtjj|j|}|rm||jkrm|jj|n|rt rtj|jkr|jjtjqqWdS)NcSs%g|]}t|tr|qSr)r8r).0r.rrr os z.build_ext.finalize_options..rrFr)rfinalize_optionsr!Zcheck_extensions_listrBsetup_shlib_compilerr"r# _full_namer7r%links_to_dynamicr>r=r8rr+r$ _file_namer'r(dirnamer&r* library_dirsappendr-runtime_library_dirs)rr.r/Zltdr0ZlibdirrrrrEks(     %$zbuild_ext.finalize_optionsc Cstd|jd|jd|j}|_tjdkrtj}z,dtd.rNrrTFr)dictfromkeysrBr&rGr%rX)rr.ZlibnamespkglibnamerrrrHs ,zbuild_ext.links_to_dynamiccCstj|}|jdj}x}|jD]r}|jr+tjj|j |j j d}|j |d|j |d|r|j |dqq+q+W|S)Nrrz.pyz.pycz.pyo) r get_outputsr optimizer!r+r'r(r&r*rGr%rL)routputsrfr.baserrrres $zbuild_ext.get_outputsFcCstjd|j|tjj||jjdd}|rftjj|rft|dn|j st |d}|j djddd t d d tjj |jd d dt ddddt dddt ddddg|jn|rddlm}||gddddd|j |jd j}|dkr||gd|ddd|j ntjj|r|j rtj|qndS)!Nz writing stub loader for %s to %srz.pyz already exists! Please delete.w zdef __bootstrap__():z- global __bootstrap__, __file__, __loader__z% import sys, os, pkg_resources, impz, dlz: __file__ = pkg_resources.resource_filename(__name__,%r)z del __bootstrap__z if '__loader__' in globals():z del __loader__z# old_flags = sys.getdlopenflags()z old_dir = os.getcwd()z try:z( os.chdir(os.path.dirname(__file__))z$ sys.setdlopenflags(dl.RTLD_NOW)z( imp.load_dynamic(__name__,__file__)z finally:z" sys.setdlopenflags(old_flags)z os.chdir(old_dir)z__bootstrap__()rr) byte_compilerfrOTr install_lib)r inforGr'r(r&r%existsDistutilsErrorropenwriterr)rIclosedistutils.utilrkr rfunlink)r output_dirr.compileZ stub_filefrkrfrrrr,sJ%         zbuild_ext.write_stubN)__name__ __module__ __qualname__rrrr5hasattrr4r$rArErFr^r_rHrer,rrrrr0s      )  rc Cs8|j|j||||||||| | | | dS)N)linkZSHARED_LIBRARY) robjectsoutput_libnamerurXrKrMr]debug extra_preargsextra_postargs build_temp target_langrrrrYs    rYZstaticc Cs|dksttjj|\}} tjj| \}}|jdjdrm|dd}n|j||||| dS)Nxr`)AssertionErrorr'r(r%r9r; startswithZcreate_static_lib)rr}r~rurXrKrMr]rrrrrr0r)r.rrrrYs ) Zdistutils.command.build_extrr5ZPyrex.Distutils.build_extr ImportErrorr'rRdistutils.file_utilrZsetuptools.extensionrdistutils.ccompilerrdistutils.sysconfigr sysconfigrrr distutilsr distutils.errorsrr=r<rSr#dlrrrYrrrrsT