a [dg2 @spddlZddlZddlZddlmZddlmZddlm Z ddl m Z ddl m Z mZddlmZddlmZdd lmZzddlmZed WneyeZYn0ed dd l mZd dZdZdZdZejdkrdZnsrcCs.tD]$}d|vr|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&extfullnamefilenamemodpathpackageZ package_dirZ dest_filenameZ src_filenamerrrr$Ts"       z#build_ext.copy_extensions_to_sourcecCst||}||jvr|j|}t|do.t}|rXtd}|dt| }|t}t|trt j |\}}|j |tStr|jrt j |\}}t j |d|S|S)NZpy_limited_apiZ EXT_SUFFIXzdl-)r"r/ext_mapgetattrr!rlen isinstancer r2r3splitextshlib_compilerlibrary_filenamelibtype use_stubs_links_to_dynamicr0r1)r%r:r;r9Zuse_abi3Zso_extfndrrrr/js      zbuild_ext.get_ext_filenamecCs t|d|_g|_i|_dSN)r"initialize_optionsrCshlibsr>r%rrrrK{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||jvr|j||rbt rbtj|jvrb|jtjqbdS)NcSsg|]}t|tr|qSr)rAr .0r9rrr s z.build_ext.finalize_options..r'r(F)r"finalize_optionsr,Zcheck_extensions_listrLsetup_shlib_compilerr-r. _full_namer>r0links_to_dynamicrFrAr rGr6r/ _file_namer2r3dirnamer1r5 library_dirsappendr8runtime_library_dirs)r%r9r:Zltdnsr;libdirrrrrQs,       zbuild_ext.finalize_optionscCst|j|j|jd}|_t||jdur8||j|jdur^|jD]\}}| ||qH|j dur~|j D]}| |qn|j dur| |j |jdur||j|jdur||j|jdur||jt||_dS)N)rr*force)rrr*r\rCrZ include_dirsZset_include_dirsZdefineZ define_macroZundefZundefine_macro librariesZ set_librariesrWZset_library_dirsZrpathZset_runtime_library_dirsZ link_objectsZset_link_objectslink_shared_object__get__)r%rr.valueZmacrorrrrRs*               zbuild_ext.setup_shlib_compilercCst|tr|jSt||SrJ)rAr export_symbolsr"get_export_symbolsr%r9rrrrbs zbuild_ext.get_export_symbolscCsb||j}zFt|tr"|j|_t|||jrL|dj }| ||W||_n||_0dS)Nr&) Z_convert_pyx_sources_to_langrrAr rCr"build_extensionr6r+r5r7)r%r9Z _compilercmdrrrrds   zbuild_ext.build_extensioncsPtdd|jDd|jddddgtfdd|jDS) z?Return true if 'ext' links to a dynamic lib in the same packagecSsg|] }|jqSr)rS)rOlibrrrrPz.build_ext.links_to_dynamic..r'Nr(rc3s|]}|vVqdSrJr)rOZlibnameZlibnamesZpkgrr rgz-build_ext.links_to_dynamic..)dictfromkeysrLr1rSr0anyr]rcrrhrrTs zbuild_ext.links_to_dynamiccCst||SrJ)r" get_outputs_build_ext__get_stubs_outputsrMrrrrmszbuild_ext.get_outputscs6fddjD}t|}tdd|DS)Nc3s2|]*}|jrtjjjg|jdRVqdS)r'N)r6r2r3r1r5rSr0rNrMrrrisz0build_ext.__get_stubs_outputs..css|]\}}||VqdSrJr)rObaseZfnextrrrrirg)r, itertoolsproduct!_build_ext__get_output_extensionslist)r%Z ns_ext_basespairsrrMrZ__get_stubs_outputss  zbuild_ext.__get_stubs_outputsccs"dVdV|djrdVdS)N.pyz.pycr&z.pyo)r+optimizerMrrrZ__get_output_extensionss z!build_ext.__get_output_extensionsFcCs4td|j|tjj|g|jdRd}|rLtj|rLt|d|j st |d}| dddd t d d tj |jd d dt ddddt ddddddt ddddg||r0ddlm}||gdd|j d |d!j}|dkr||g|d|j d tj|r0|j s0t|dS)"Nz writing stub loader for %s to %sr'ruz 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)rvr\r*Z install_lib)r inforSr2r3r1r0existsr r*openwriterr4rUcloseZdistutils.utilryr+rvunlink)r% output_dirr9compileZ stub_filefryrvrrrr7sh       zbuild_ext.write_stubN)F)__name__ __module__ __qualname__r#r$r/rKrQrRrbrdrTrmrnrrr7rrrrrKs   rc Cs(||j||||||||| | | | dSrJ)linkZSHARED_LIBRARY) r%objectsoutput_libnamerr]rWrYradebug extra_preargsextra_postargs build_temp target_langrrrr^s r^Zstaticc Cs^|dus Jtj|\}} tj| \}}|ddrH|dd}|||||| dS)Nxrf)r2r3r0rBrD startswithZcreate_static_lib)r%rrrr]rWrYrarrrrrr;r4r9rrrr^-s   ) NNNNNrNNNN) NNNNNrNNNN)&r2rrpZimportlib.machineryrZdistutils.command.build_extrZ _du_build_extZdistutils.file_utilrZdistutils.ccompilerrZdistutils.sysconfigrrZdistutils.errorsr Z distutilsr Zsetuptools.extensionr ZCython.Distutils.build_extr" __import__ ImportErrorr rrrrFrErr.Zdlhasattrrr!r^rrrrsZ               Q