U âQabÛ2ã @s¤ddlZddlZddlZddlmZddlmZddlm Z ddl m Z m Z ddl mZddlmZddlmZdd lmZejržddlZd d „e ¡DƒZn dd lmZzddlmZed ƒWnek rÚeZYnXe dƒddl mZdd„Z dZ!dZ"dZ#ej$dk�rdZ"n>ej%dk�rTzddl&Z&e'e&dƒZ"Z!Wnek �rRYnXdd„Z(dd„Z)Gdd„deƒZe"�s†ej%dk�r’d"dd„Z*nd Z#d#d!d„Z*dS)$éN)Ú build_ext)Ú copy_file)Ú new_compiler)Úcustomize_compilerÚget_config_var)ÚDistutilsError)Úlog)ÚLibrary)ÚsixcCs g|]\}}}|tjkr|‘qS©)ÚimpZ C_EXTENSION)Ú.0ÚsÚ_Útpr r ú@/usr/lib/python3.8/site-packages/setuptools/command/build_ext.pyÚ s r©ÚEXTENSION_SUFFIXESzCython.Compiler.MainÚLDSHARED)Ú _config_varsc CsZtjdkrNt ¡}z$dtd<dtd<dtd<t|ƒW5t ¡t |¡Xnt|ƒdS)NÚdarwinz0gcc -Wl,-x -dynamiclib -undefined dynamic_lookuprz -dynamiclibZCCSHAREDz.dylibZSO)ÚsysÚplatformÚ _CONFIG_VARSÚcopyÚclearÚupdater)ÚcompilerZtmpr r rÚ_customize_compiler_for_shlib#s ÿ rFZsharedrTÚntÚRTLD_NOWcCs tr|SdS)NÚ)Ú have_rtld)rr r rÚDór$cCs.tD]$}d|kr|S|dkr|SqdS)z;Return the file extension for an abi3-compliant Extension()z.abi3z.pydNr)Úsuffixr r rÚget_abi3_suffixGs r'c@sveZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zddd„ZdS)rcCs.|jd}|_t |¡||_|r*| ¡dS)z;Build extensions in build directory, then copy if --inplacerN)ZinplaceÚ _build_extÚrunÚcopy_extensions_to_source)ÚselfZ old_inplacer r rr)Qs  z build_ext.runc Csª| d¡}|jD]”}| |j¡}| |¡}| d¡}d |dd…¡}| |¡}tj  |tj   |¡¡}tj  |j |¡} t | ||j |jd�|jr| |pœtj|d¡qdS)NÚbuild_pyÚ.éÿÿÿÿ)ÚverboseÚdry_runT)Úget_finalized_commandÚ extensionsÚget_ext_fullnameÚnameÚget_ext_filenameÚsplitÚjoinZget_package_dirÚosÚpathÚbasenameÚ build_librr/r0Ú _needs_stubÚ write_stubÚcurdir) r+r,ÚextÚfullnameÚfilenameÚmodpathÚpackageZ package_dirZ dest_filenameZ src_filenamer r rr*Ys&       ÿþz#build_ext.copy_extensions_to_sourcecCs¶t ||¡}||jkr²|j|}tjo4t|dƒo4tƒ}|r^tdƒ}|dt|ƒ …}|tƒ}t |t ƒr†t j   |¡\}}|j |t¡Str²|jr²t j  |¡\}}t j  |d|¡S|S)NZpy_limited_apiZ EXT_SUFFIXzdl-)r(r5Úext_mapr ZPY3Úgetattrr'rÚlenÚ isinstancer r8r9ÚsplitextÚshlib_compilerÚlibrary_filenameÚlibtypeÚ use_stubsÚ_links_to_dynamicr6r7)r+r@rAr?Zuse_abi3Zso_extÚfnÚdr r rr5os&   ÿý   zbuild_ext.get_ext_filenamecCs t |¡d|_g|_i|_dS©N)r(Úinitialize_optionsrIÚshlibsrD©r+r r rrQ„s zbuild_ext.initialize_optionscCs,t |¡|jpg|_| |j¡dd„|jDƒ|_|jrB| ¡|jD]}| |j¡|_qH|jD]Ä}|j}||j |<||j |  d¡d<|jrš|  |¡pœd}|o°t o°t |tƒ }||_||_| |¡}|_tj tj |j|¡¡}|�r||jk�r|j |¡|rbt rbtj|jkrb|j tj¡qbdS)NcSsg|]}t|tƒr|‘qSr )rGr ©r r?r r rrŽs ÿz.build_ext.finalize_options..r-r.F)r(Úfinalize_optionsr2Zcheck_extensions_listrRÚsetup_shlib_compilerr3r4Ú _full_namerDr6Úlinks_to_dynamicrLrGr rMr<r5Ú _file_namer8r9Údirnamer7r;Ú library_dirsÚappendr>Úruntime_library_dirs)r+r?r@ZltdÚnsrAZlibdirr r rrUŠs,       zbuild_ext.finalize_optionscCsæt|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Ö| |j¡t |¡|_dS)N)rr0Úforce)rrr0r_rIrZ include_dirsZset_include_dirsZdefineZ define_macroZundefZundefine_macroÚ librariesZ set_librariesr[Zset_library_dirsZrpathZset_runtime_library_dirsZ link_objectsZset_link_objectsÚlink_shared_objectÚ__get__)r+rr4ÚvalueZmacror r rrV§s.ÿ               zbuild_ext.setup_shlib_compilercCst|tƒr|jSt ||¡SrP)rGr Úexport_symbolsr(Úget_export_symbols©r+r?r r rreÂs zbuild_ext.get_export_symbolscCs\| ¡|j}z@t|tƒr"|j|_t ||¡|jrL| d¡j }|  ||¡W5||_XdS)Nr,) Z_convert_pyx_sources_to_langrrGr rIr(Úbuild_extensionr<r1r;r=)r+r?Z _compilerÚcmdr r rrgÇs   zbuild_ext.build_extensioncsPt dd„|jDƒ¡‰d |j d¡dd…dg¡‰t‡‡fdd„|jDƒƒS) z?Return true if 'ext' links to a dynamic lib in the same packagecSsg|] }|j‘qSr )rW)r Úlibr r rrÙsz.build_ext.links_to_dynamic..r-Nr.r"c3s|]}ˆ|ˆkVqdSrPr )r Zlibname©ZlibnamesZpkgr rÚ Ûsz-build_ext.links_to_dynamic..)ÚdictÚfromkeysrRr7rWr6Úanyr`rfr rjrrXÔs zbuild_ext.links_to_dynamiccCst |¡| ¡SrP)r(Ú get_outputsÚ_build_ext__get_stubs_outputsrSr r rroÝszbuild_ext.get_outputscs6‡fdd„ˆjDƒ}t |ˆ ¡¡}tdd„|DƒƒS)Nc3s0|](}|jrtjjˆjf|j d¡žŽVqdS)r-N)r<r8r9r7r;rWr6rTrSr rrkâsþz0build_ext.__get_stubs_outputs..css|]\}}||VqdSrPr )r ÚbaseZfnextr r rrkés)r2Ú itertoolsÚproductÚ!_build_ext__get_output_extensionsÚlist)r+Z ns_ext_basesZpairsr rSrZ__get_stubs_outputsàs  þzbuild_ext.__get_stubs_outputsccs"dVdV| d¡jrdVdS)Nú.pyz.pycr,z.pyo)r1ÚoptimizerSr r rZ__get_output_extensionsës z!build_ext.__get_output_extensionsFcCs,t d|j|¡tjj|f|j d¡žŽd}|rJtj |¡rJt|dƒ‚|j s¸t |dƒ}|  d ddd t d ƒd tj  |j¡d d dt dƒdddt dƒddt dƒdddg¡¡| ¡|�r(ddlm}||gdd|j d�| d¡j}|dk�r||g|d|j d�tj |¡�r(|j �s(t |¡dS)Nz writing stub loader for %s to %sr-rvz 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__()r"r)Ú byte_compileT)rwr_r0Z install_lib)rÚinforWr8r9r7r6Úexistsrr0ÚopenÚwriteÚif_dlr:rYÚcloseZdistutils.utilrzr1rwÚunlink)r+Ú output_dirr?ÚcompileZ stub_fileÚfrzrwr r rr=ñsb ÿÿ    þìÿ ÿ  ÿzbuild_ext.write_stubN)F)Ú__name__Ú __module__Ú __qualname__r)r*r5rQrUrVrergrXrorprtr=r r r rrPs   rc Cs(| |j||||||||| | | | ¡ dSrP)ÚlinkZSHARED_LIBRARY) r+ÚobjectsÚoutput_libnamer‚r`r[r]rdÚdebugÚ extra_preargsÚextra_postargsÚ build_tempÚ target_langr r rra#süraZstaticc CsRtj |¡\}} tj | ¡\}}| d¡ d¡r<|dd…}| ||||| ¡dS)NÚxrié)r8r9r6rHrJÚ startswithZcreate_static_lib)r+r‰rŠr‚r`r[r]rdr‹rŒr�rŽr�rAr:r?r r rra2s  ÿ) NNNNNrNNNN) NNNNNrNNNN)+r8rrrZdistutils.command.build_extrZ _du_build_extZdistutils.file_utilrZdistutils.ccompilerrZdistutils.sysconfigrrZdistutils.errorsrZ distutilsrZsetuptools.extensionr Zsetuptools.externr ZPY2r Z get_suffixesrZimportlib.machineryZCython.Distutils.build_extr(Ú __import__Ú ImportErrorrrrr#rLrKrr4ZdlÚhasattrrr'rar r r rÚsz               Qü ü