U Wzf_2 @stddlZddlZddlZddlmZddlmZddlm Z ddl m Z ddl m Z mZddlmZddlmZdd lmZzddlmZed Wnek reZYnXed dd l mZd dZdZdZdZejdkrdZn>ej dkr$zddl!Z!e"e!dZZWnek r"YnXddZ#ddZ$GdddeZesVej dkrbdddZ%ndZd ddZ%dS)!NEXTENSION_SUFFIXES) build_ext) copy_file) new_compiler)customize_compilerget_config_var)DistutilsError)log)LibraryzCython.Compiler.MainLDSHARED) _config_varsc CsZtjdkrNt}z$dtd<dtd<dtd<t|W5tt|Xnt|dS)Ndarwinz0gcc -Wl,-x -dynamiclib -undefined dynamic_lookupr z -dynamiclibCCSHAREDz.dylibSO)sysplatform _CONFIG_VARScopyclearupdater)compilertmprt/private/var/folders/n9/53xbvtmd7sjg1q1l55xmpg58n4mgng/T/pip-unpacked-wheel-slp6y8a5/setuptools/command/build_ext.py_customize_compiler_for_shlibs  rFZsharedrTntRTLD_NOWcCs tr|SdS)N) have_rtld)srrrif_dl>sr!cCs.tD]$}d|kr|S|dkr|SqdS)z;Return the file extension for an abi3-compliant Extension()z.abi3z.pydNr)suffixrrrget_abi3_suffixBs r#c@sveZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZdddZdS)rcCs.|jd}|_t|||_|r*|dS)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|d}|jD]}||j}||}|d}d|dd}||}tj |tj |}tj |j |} t | ||j |jd|jr||ptj|dqdS)Nbuild_py.)verbosedry_runT)get_finalized_command extensionsget_ext_fullnamenameget_ext_filenamesplitjoinZget_package_dirospathbasename build_librr+r, _needs_stub write_stubcurdir) r'r(extfullnamefilenamemodpathpackage package_dirZ dest_filenameZ src_filenamerrrr&Ts&       z#build_ext.copy_extensions_to_sourcecCst||}||jkr|j|}t|do.t}|rXtd}|dt| }|t}t|trt j |\}}|j |tStr|jrt j |\}}t j |d|S|S)NZpy_limited_api EXT_SUFFIXzdl-)r$r1ext_mapgetattrr#rlen isinstancer r4r5splitextshlib_compilerlibrary_filenamelibtype use_stubs_links_to_dynamicr2r3)r'r<r=r;Zuse_abi3Zso_extfndrrrr1js      zbuild_ext.get_ext_filenamecCs t|d|_g|_i|_dSN)r$initialize_optionsrGshlibsrBr'rrrrO{s zbuild_ext.initialize_optionscCs,t||jpg|_||jdd|jD|_|jrB||jD]}||j|_qH|jD]}|j}||j |<||j | dd<|jr| |pd}|ot ot |t }||_||_||}|_tjtj|j|}|r||jkr|j||rbt rbtj|jkrb|jtjqbdS)NcSsg|]}t|tr|qSr)rEr .0r;rrr s z.build_ext.finalize_options..r)r*F)r$finalize_optionsr.Zcheck_extensions_listrPsetup_shlib_compilerr/r0 _full_namerBr2links_to_dynamicrJrEr rKr8r1 _file_namer4r5dirnamer3r7 library_dirsappendr:runtime_library_dirs)r'r;r<Zltdnsr=ZlibdirrrrrUs,       zbuild_ext.finalize_optionscCst|j|j|jd}|_t||jdk r8||j|jdk r^|jD]\}}| ||qH|j dk r~|j D]}| |qn|j dk r| |j |jdk r||j|jdk r||j|jdk r||jt||_dS)N)rr,force)rrr,r_rGr include_dirsZset_include_dirsZdefineZ define_macroZundefZundefine_macro librariesZ set_librariesr[Zset_library_dirsZrpathZset_runtime_library_dirsZ link_objectsZset_link_objectslink_shared_object__get__)r'rr0valuemacrorrrrVs.               zbuild_ext.setup_shlib_compilercCst|tr|jSt||SrN)rEr export_symbolsr$get_export_symbolsr'r;rrrrgs zbuild_ext.get_export_symbolscCs\||j}z@t|tr"|j|_t|||jrL|dj }| ||W5||_XdS)Nr() Z_convert_pyx_sources_to_langrrEr rGr$build_extensionr8r-r7r9)r'r;Z _compilercmdrrrris   zbuild_ext.build_extensioncsPtdd|jDd|jddddgtfdd|jDS) z?Return true if 'ext' links to a dynamic lib in the same packagecSsg|] }|jqSr)rW)rSlibrrrrTsz.build_ext.links_to_dynamic..r)Nr*rc3s|]}|kVqdSrNr)rSZlibnameZlibnamespkgrr sz-build_ext.links_to_dynamic..)dictfromkeysrPr3rWr2anyrarhrrlrrXs zbuild_ext.links_to_dynamiccCst||SrN)r$ get_outputs_build_ext__get_stubs_outputsrQrrrrrszbuild_ext.get_outputscs6fddjD}t|}tdd|DS)Nc3s0|](}|jrtjjjf|jdVqdS)r)N)r8r4r5r3r7rWr2rRrQrrrnsz0build_ext.__get_stubs_outputs..css|]\}}||VqdSrNr)rSbaseZfnextrrrrns)r. itertoolsproduct!_build_ext__get_output_extensionslist)r'Z ns_ext_basespairsrrQrZ__get_stubs_outputss  zbuild_ext.__get_stubs_outputsccs"dVdV|djrdVdS)N.pyz.pycr(z.pyo)r-optimizerQrrrZ__get_output_extensionss z!build_ext.__get_output_extensionsFcCs2td|j|tjj|f|jdd}|rJtj|rJt|d|j st |d}| dddd t d d tj |jd d dt ddddt ddddddt ddddg||r.ddlm}||gdd|j d |d!j}|dkr||g|d|j d tj|r.|j s.t|dS)"Nz writing stub loader for %s to %sr)rzz 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)r{r_r, install_lib)r inforWr4r5r3r2existsr r,openwriter!r6rYclosedistutils.utilr~r-r{unlink)r' output_dirr;compileZ stub_filefr~r{rrrr9sl       zbuild_ext.write_stubN)F)__name__ __module__ __qualname__r%r&r1rOrUrVrgrirXrrrsrwr9rrrrrKs   rc Cs(||j||||||||| | | | dSrN)linkZSHARED_LIBRARY) r'objectsoutput_libnamerrar[r]rfdebug extra_preargsextra_postargs build_temp target_langrrrrbsrbZstaticc Cs^|dks ttj|\}} tj| \}}|ddrH|dd}|||||| dS)Nxrk)AssertionErrorr4r5r2rFrH startswithZcreate_static_lib)r'rrrrar[r]rfrrrrrr=r6r;rrrrb-s  ) NNNNNrNNNN) NNNNNrNNNN)&r4rruZimportlib.machineryrZdistutils.command.build_extrZ _du_build_extdistutils.file_utilrdistutils.ccompilerrdistutils.sysconfigrrdistutils.errorsr distutilsr Zsetuptools.extensionr ZCython.Distutils.build_extr$ __import__ ImportErrorr rrrrJrIrr0dlhasattrr!r#rbrrrrsr              Q