3 e3@stddlZddlZddlZddlmZddlmZddlm Z ddl m Z ddl m Z mZddlmZddlmZdd lmZyddlmZed Wnek reZYnXed dd l mZd dZdZdZdZejdkrdZn>ej dkr$yddl!Z!e"e!dZZWnek r"YnXddZ#ddZ$GdddeZesVej dkrbdddZ%ndZd ddZ%dS)!N)EXTENSION_SUFFIXES) build_ext) copy_file) new_compiler)customize_compilerget_config_var)DistutilsError)log)LibraryzCython.Compiler.MainLDSHARED) _config_varsc CsZtjdkrNtj}z$dtd<dtd<dtd<t|Wdtjtj|Xnt|dS)Ndarwinz0gcc -Wl,-x -dynamiclib -undefined dynamic_lookupr z -dynamiclibCCSHAREDz.dylibSO)sysplatform _CONFIG_VARScopyrclearupdate)compilertmprB/tmp/pip-build-vlmub77e/setuptools/setuptools/command/build_ext.py_customize_compiler_for_shlibs  rFZsharedr TntRTLD_NOWcCs tr|SdS)N) have_rtld)srrrif_dl>sr cCs*x$tD]}d|kr|S|dkr|SqWdS)z;Return the file extension for an abi3-compliant Extension()z.abi3z.pydN)r)suffixrrrget_abi3_suffixBs  r"c@sveZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZdddZdS)rcCs.|jd}|_tj|||_|r*|jdS)z;Build extensions in build directory, then copy if --inplacerN)Zinplace _build_extruncopy_extensions_to_source)selfZ old_inplacerrrr$Ls  z build_ext.runc Cs|jd}x|jD]}|j|j}|j|}|jd}dj|dd}|j|}tj j|tj j |}tj j|j |} t | ||j |jd|jr|j|ptj|dqWdS)Nbuild_py.)verbosedry_runT)get_finalized_command extensionsget_ext_fullnamenameget_ext_filenamesplitjoinZget_package_dirospathbasename build_librr*r+ _needs_stub write_stubcurdir) r&r'extfullnamefilenameZmodpathpackage package_dirZ dest_filenameZ src_filenamerrrr%Ts       z#build_ext.copy_extensions_to_sourcecCstjd}|r&tjj|jd|}ntj||}td}||jkr|j|}t |do\t }|r|dt | }t }||}t |t rtjj|\}}|jj|tStr|jrtjj|\}}tjj|d|S|S)NZSETUPTOOLS_EXT_SUFFIXr( EXT_SUFFIXZpy_limited_apizdl-)r4getenvr5r3r2r#r1rext_mapgetattrr"len isinstancer splitextshlib_compilerlibrary_filenamelibtype use_stubs_links_to_dynamic)r&r<Zso_extr=r;Zuse_abi3fndrrrr1js&      zbuild_ext.get_ext_filenamecCs tj|d|_g|_i|_dS)N)r#initialize_optionsrGshlibsrB)r&rrrrNs zbuild_ext.initialize_optionscCs2tj||jpg|_|j|jdd|jD|_|jrB|jx|jD]}|j|j|_qJWx|jD]}|j}||j |<||j |j dd<|jr|j |pd}|ot ot |t }||_||_|j|}|_tjjtjj|j|}|o||jkr|jj||rht rhtj|jkrh|jjtjqhWdS)NcSsg|]}t|tr|qSr)rEr ).0r;rrr sz.build_ext.finalize_options..r(r)Fr,)r#finalize_optionsr.Zcheck_extensions_listrOsetup_shlib_compilerr/r0 _full_namerBr2links_to_dynamicrJrEr rKr8r1 _file_namer4r5dirnamer3r7 library_dirsappendr:runtime_library_dirs)r&r;r<Zltdnsr=ZlibdirrrrrRs,       zbuild_ext.finalize_optionscCst|j|j|jd}|_t||jdk r8|j|j|jdk rbx|jD]\}}|j ||qJW|j dk rx|j D]}|j |qtW|j dk r|j |j |jdk r|j|j|jdk r|j|j|jdk r|j|jtj||_dS)N)rr+force)rrr+r\rGr include_dirsZset_include_dirsZdefineZ define_macroZundefZundefine_macro librariesZ set_librariesrXZset_library_dirsZrpathZset_runtime_library_dirsZ link_objectsZset_link_objectslink_shared_object__get__)r&rr0valuemacrorrrrSs(             zbuild_ext.setup_shlib_compilercCst|tr|jStj||S)N)rEr export_symbolsr#get_export_symbols)r&r;rrrrds zbuild_ext.get_export_symbolsc Cs\|j|j}z@t|tr"|j|_tj|||jrL|jdj }|j ||Wd||_XdS)Nr') Z_convert_pyx_sources_to_langrrEr rGr#build_extensionr8r-r7r9)r&r;Z _compilercmdrrrres   zbuild_ext.build_extensioncsPtjdd|jDdj|jjddd dgtfdd|jDS) z?Return true if 'ext' links to a dynamic lib in the same packagecSsg|] }|jqSr)rT)rPlibrrrrQsz.build_ext.links_to_dynamic..r(Nr)rc3s|]}|kVqdS)Nr)rPlibname)libnamespkgrr sz-build_ext.links_to_dynamic..r,)dictfromkeysrOr3rTr2anyr^)r&r;r)rirjrrUs zbuild_ext.links_to_dynamiccCstj||jS)N)r# get_outputs_build_ext__get_stubs_outputs)r&rrrroszbuild_ext.get_outputscs6fddjD}tj|j}tdd|DS)Nc3s0|](}|jrtjjjf|jjdVqdS)r(N)r8r4r5r3r7rTr2)rPr;)r&rrrksz0build_ext.__get_stubs_outputs..css|]\}}||VqdS)Nr)rPbaseZfnextrrrrks)r. itertoolsproduct!_build_ext__get_output_extensionslist)r&Z ns_ext_basespairsr)r&rZ__get_stubs_outputss  zbuild_ext.__get_stubs_outputsccs"dVdV|jdjrdVdS)Nz.pyz.pycr'z.pyo)r-optimize)r&rrrZ__get_output_extensionss z!build_ext.__get_output_extensionsFcCs4tjd|j|tjj|f|jjdd}|rJtjj|rJt|d|j st |d}|j djddd t d d tjj |jd d dt ddddt ddddddt ddddg|j|r0ddlm}||gdd|j d |jd!j}|dkr||g|d|j d tjj|r0|j r0tj|dS)"Nz writing stub loader for %s to %sr(z.pyz already exists! Please delete.w zdef __bootstrap__():z- global __bootstrap__, __file__, __loader__z0 import sys, os, pkg_resources, importlib.utilz, 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)z3 spec = importlib.util.spec_from_file_location(z# __name__, __file__)z0 mod = importlib.util.module_from_spec(spec)z! spec.loader.exec_module(mod)z finally:z" sys.setdlopenflags(old_flags)z os.chdir(old_dir)z__bootstrap__()rr) byte_compileT)rwr\r+ install_lib)r inforTr4r5r3r2existsrr+openwriter r6rVclosedistutils.utilrzr-rwunlink)r& output_dirr;compileZ stub_filefrzrwrrrr9sX         zbuild_ext.write_stubN)F)__name__ __module__ __qualname__r$r%r1rNrRrSrdrerUrorprtr9rrrrrKs   rc Cs(|j|j||||||||| | | | dS)N)linkZSHARED_LIBRARY) r&objectsoutput_libnamerr^rXrZrcdebug extra_preargsextra_postargs build_temp target_langrrrr_$s r_Zstaticc Cs^|dks ttjj|\}} tjj| \}}|jdjdrH|dd}|j||||| dS)Nxrg)AssertionErrorr4r5r2rFrH startswithZcreate_static_lib)r&rrrr^rXrZrcrrrrrr=r6r;rrrr_3s  ) NNNNNrNNNN) NNNNNrNNNN)&r4rrrimportlib.machineryrZdistutils.command.build_extrZ _du_build_extdistutils.file_utilrdistutils.ccompilerrdistutils.sysconfigrrZdistutils.errorsr distutilsr Zsetuptools.extensionr ZCython.Distutils.build_extr# __import__ ImportErrorr rrrrJrIrr0dlhasattrr r"r_rrrrsV              W