o )a3@szddlZddlZddlZddlmZddlmZddlm Z ddl m Z ddl m Z mZddlmZddlmZdd lmZz ddlmZed Wn eyUeZYnwed dd l mZd dZdZdZdZejdkrrdZnej dkrz ddl!Z!e"e!dZZWn eyYnwddZ#ddZ$GdddeZesej dkr    dddZ%dSdZ    dddZ%dS) NEXTENSION_SUFFIXES) build_ext) copy_file) new_compiler)customize_compilerget_config_var)DistutilsError)log)LibraryzCython.Compiler.MainLDSHARED) _config_varsc Csltjdkr0t}zdtd<dtd<dtd<t|Wtt|dStt|wt|dS)Ndarwinz0gcc -Wl,-x -dynamiclib -undefined dynamic_lookupr z -dynamiclibZCCSHAREDz.dylibZSO)sysplatform _CONFIG_VARScopyrclearupdate)compilertmprO/opt/alt/python310/lib/python3.10/site-packages/setuptools/command/build_ext.py_customize_compiler_for_shlibs    rFZsharedrTntRTLD_NOWcCs tr|SdS)N) have_rtld)srrrif_dl>s rcCs.tD]}d|vr |S|dkr|SqdS)z;Return the file extension for an abi3-compliant Extension()z.abi3z.pydNr)suffixrrrget_abi3_suffixBsr!c@sveZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZdddZdS)rcCs2|jd}|_t|||_|r|dSdS)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}||j}||}|d}d|dd}||}tj |tj |}tj |j |} t | ||j |jd|jrR||pNtj|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_sourcecCstd}|rtjj|d|}n t||}td}||jvrk|j|}t |do.t }|rA|dt | }t }||}t |t rUtj|\}}|j|tStrk|jrktj|\}}tj|d|S|S)NZSETUPTOOLS_EXT_SUFFIXr'Z EXT_SUFFIXZpy_limited_apizdl-)r2getenvr3r1r0r"r/rext_mapgetattrr!len isinstancer splitextshlib_compilerlibrary_filenamelibtype use_stubs_links_to_dynamic)r%r:Zso_extr;r9Zuse_abi3fndrrrr/js&      zbuild_ext.get_ext_filenamecCs t|d|_g|_i|_dSN)r"initialize_optionsrDshlibsr?r%rrrrLs  zbuild_ext.initialize_optionscCs(t||jp g|_||jdd|jD|_|jr!||jD] }||j|_q$|jD]`}|j}||j |<||j | dd<|jrM| |pNd}|oXt oXt |t }||_||_||}|_tjtj|j|}|r||jvr|j||rt rtj|jvr|jtjq1dS)NcSsg|] }t|tr|qSr)rBr .0r9rrr s z.build_ext.finalize_options..r'r(F)r"finalize_optionsr,Zcheck_extensions_listrMsetup_shlib_compilerr-r. _full_namer?r0links_to_dynamicrGrBr rHr6r/ _file_namer2r3dirnamer1r5 library_dirsappendr8runtime_library_dirs)r%r9r:Zltdnsr;libdirrrrrRs0       zbuild_ext.finalize_optionscCst|j|j|jd}|_t||jdur||j|jdur/|jD] \}}| ||q$|j dur?|j D]}| |q7|j durJ| |j |jdurU||j|jdur`||j|jdurk||jt||_dS)N)rr*force)rrr*r]rDrZ include_dirsZset_include_dirsZdefineZ define_macroZundefZundefine_macro librariesZ set_librariesrXZset_library_dirsZrpathZset_runtime_library_dirsZ link_objectsZset_link_objectslink_shared_object__get__)r%rr.valueZmacrorrrrSs*                zbuild_ext.setup_shlib_compilercCst|tr|jSt||SrK)rBr export_symbolsr"get_export_symbolsr%r9rrrrcs  zbuild_ext.get_export_symbolscCsl||j}z*t|tr|j|_t|||jr,|dj }| ||W||_dSW||_dS||_w)Nr&) Z_convert_pyx_sources_to_langrrBr rDr"build_extensionr6r+r5r7)r%r9Z _compilercmdrrrres    zbuild_ext.build_extensioncsPtdd|jDd|jddddgtfdd|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|] }|vVqdSrKr)rPZlibnameZlibnamesZpkgrr z-build_ext.links_to_dynamic..)dictfromkeysrMr1rTr0anyr^rdrrhrrUs zbuild_ext.links_to_dynamiccCst||SrK)r" get_outputs_build_ext__get_stubs_outputsrNrrrrnszbuild_ext.get_outputscs6fddjD}t|}tdd|DS)Nc3s4|]}|jrtjjjg|jdRVqdS)r'N)r6r2r3r1r5rTr0rOrNrrris z0build_ext.__get_stubs_outputs..css|] \}}||VqdSrKr)rPbaseZfnextrrrrirj)r, itertoolsproduct!_build_ext__get_output_extensionslist)r%Z ns_ext_basespairsrrNrZ__get_stubs_outputss zbuild_ext.__get_stubs_outputsccs(dVdV|djrdVdSdS)N.pyz.pycr&z.pyo)r+optimizerNrrrZ__get_output_extensionss   z!build_ext.__get_output_extensionsFcCs8td|j|tjj|g|jdRd}|r&tj|r&t|d|j s`t |d}| dddd t d d tj |jd d dt ddddt ddddddt ddddg||rddlm}||gdd|j d |d!j}|dkr||g|d|j d tj|r|j st|dSdSdSdS)"Nz writing stub loader for %s to %sr'rvz 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*Z install_lib)r inforTr2r3r1r0existsr r*openwriterr4rVcloseZdistutils.utilrzr+rwunlink)r% output_dirr9compileZ stub_filefrzrwrrrr7sl       zbuild_ext.write_stubN)F)__name__ __module__ __qualname__r#r$r/rLrRrSrcrerUrnrorsr7rrrrrKs   rc Cs(||j||||||||| | | | dSrK)linkZSHARED_LIBRARY) r%objectsoutput_libnamerr^rXrZrbdebug extra_preargsextra_postargs build_temp target_langrrrr_$s r_Zstaticc CsRtj|\}} tj| \}}|ddr|dd}|||||| dS)Nxrg)r2r3r0rCrE startswithZcreate_static_lib)r%rrrr^rXrZrbrrrrrr;r4r9rrrr_3s   ) NNNNNrNNNN)&r2rrqimportlib.machineryrZdistutils.command.build_extrZ _du_build_extZdistutils.file_utilrZdistutils.ccompilerrZdistutils.sysconfigrrZdistutils.errorsr Z distutilsr Zsetuptools.extensionr ZCython.Distutils.build_extr" __import__ ImportErrorr rrrrGrFrr.Zdlhasattrrr!r_rrrrs`               W