3 K”Reu3ã@s„ddlZddlZddlZddlZddlmZddlmZddl m Z ddl m Z m Z ddlmZddlmZddlmZdd lmZyddlmZed ƒWnek r´eZYnXe d ƒdd l mZd d„ZdZdZdZej dkrîdZn>ej!dk�r,yddl"Z"e#e"dƒZZWnek �r*YnXdd„Z$dd„Z%Gdd„deƒZe�s^ej!dk�rjd!dd„Z&ndZd"dd„Z&dd „Z'dS)#éN)Ú build_ext)Ú copy_file)Ú new_compiler)Úcustomize_compilerÚget_config_var)ÚDistutilsError)Úlog)ÚLibrary)ÚsixzCython.Compiler.MainÚLDSHARED)Ú _config_varsc CsZtjdkrNtjƒ}z$dtd<dtd<dtd<t|ƒWdtjƒtj|ƒXnt|ƒdS)NÚdarwinz0gcc -Wl,-x -dynamiclib -undefined dynamic_lookupr z -dynamiclibÚCCSHAREDz.dylibÚSO)ÚsysÚplatformÚ _CONFIG_VARSÚcopyrÚclearÚupdate)ÚcompilerÚtmp©rú’/builddir/build/BUILDROOT/alt-python36-setuptools-38.5.2-7.el8.x86_64/opt/alt/python36/lib/python3.6/site-packages/setuptools/command/build_ext.pyÚ_customize_compiler_for_shlibs  rFZsharedr TÚntÚRTLD_NOWcCs tr|SdS)NÚ)Ú have_rtld)ÚsrrrÚ>sr cCs>x8dd„tjƒDƒD]"\}}}d|kr*|S|dkr|SqWdS)z;Return the file extension for an abi3-compliant Extension()css |]}|dtjkr|VqdS)éN)ÚimpÚ C_EXTENSION)Ú.0rrrrú Csz"get_abi3_suffix..z.abi3z.pydN)r"Z get_suffixes)ÚsuffixÚ_rrrÚget_abi3_suffixAs 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}|_tj|ƒ||_|r*|jƒdS)z;Build extensions in build directory, then copy if --inplacerN)ZinplaceÚ _build_extÚrunÚcopy_extensions_to_source)ÚselfZ old_inplacerrrr*Ks  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|pžtj|dƒqWdS)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_librr0r1Ú _needs_stubÚ write_stubÚcurdir) r,r-ÚextÚfullnameÚfilenameZmodpathÚpackageÚ package_dirZ dest_filenameZ src_filenamerrrr+Ss       z#build_ext.copy_extensions_to_sourcecCs¶tj||ƒ}||jkr²|j|}tjo4t|dƒo4tƒ}|r^tdƒ}|dt|ƒ …}|tƒ}t |t ƒr†t j j |ƒ\}}|jj|tƒStr²|jr²t j j|ƒ\}}t j j|d|ƒS|S)NZpy_limited_apiÚ EXT_SUFFIXzdl-)r)r7Úext_mapr ÚPY3Úgetattrr(Ú_get_config_var_837ÚlenÚ isinstancer r:r;ÚsplitextÚshlib_compilerÚlibrary_filenameÚlibtypeÚ use_stubsÚ_links_to_dynamicr8r9)r,rBrCrAZuse_abi3Zso_extÚfnÚdrrrr7is"       zbuild_ext.get_ext_filenamecCs tj|ƒd|_g|_i|_dS)N)r)Úinitialize_optionsrNÚshlibsrG)r,rrrrU~s zbuild_ext.initialize_optionscCs2tj|ƒ|jpg|_|j|jƒdd„|jDƒ|_|jrB|jƒx|jD]}|j|jƒ|_qJWxÌ|jD]Â}|j}||j |<||j |j dƒd<|jr |j |ƒp¢d}|o¶t o¶t |tƒ }||_||_|j|ƒ}|_tjjtjj|j|ƒƒ}|oø||jk�r|jj|ƒ|rht rhtj|jkrh|jjtjƒqhWdS)NcSsg|]}t|tƒr|‘qSr)rLr )r$rArrrú ˆsz.build_ext.finalize_options..r.r/Fr2)r)Úfinalize_optionsr4Zcheck_extensions_listrVÚsetup_shlib_compilerr5r6Ú _full_namerGr8Úlinks_to_dynamicrQrLr rRr>r7Ú _file_namer:r;Údirnamer9r=Ú library_dirsÚappendr@Úruntime_library_dirs)r,rArBZltdÚnsrCZlibdirrrrrX„s,       zbuild_ext.finalize_optionscCsît|j|j|jd�}|_t|ƒ|jdk r8|j|jƒ|jdk rbx|jD]\}}|j ||ƒqJW|j dk r†x|j D]}|j |ƒqtW|j dk rœ|j |j ƒ|jdk r²|j|jƒ|jdk rÈ|j|jƒ|jdk rÞ|j|jƒtj|ƒ|_dS)N)rr1Úforce)rrr1rbrNrÚ 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,rr6ÚvalueZmacrorrrrY¡s(             zbuild_ext.setup_shlib_compilercCst|tƒr|jStj||ƒS)N)rLr Úexport_symbolsr)Úget_export_symbols)r,rArrrri¼s zbuild_ext.get_export_symbolsc Cs\|jƒ|j}z@t|tƒr"|j|_tj||ƒ|jrL|jdƒj }|j ||ƒWd||_XdS)Nr-) Z_convert_pyx_sources_to_langrrLr rNr)Úbuild_extensionr>r3r=r?)r,rAZ _compilerÚcmdrrrrjÁs   zbuild_ext.build_extensioncsPtjdd„|jDƒƒ‰dj|jjdƒdd …dgƒ‰t‡‡fdd„|jDƒƒS) z?Return true if 'ext' links to a dynamic lib in the same packagecSsg|] }|j‘qSr)rZ)r$ÚlibrrrrWÓsz.build_ext.links_to_dynamic..r.Nr/rc3s|]}ˆ|ˆkVqdS)Nr)r$Úlibname)ÚlibnamesÚpkgrrr%Õsz-build_ext.links_to_dynamic..r2)ÚdictÚfromkeysrVr9rZr8Úanyrd)r,rAr)rnrorr[Îs zbuild_ext.links_to_dynamiccCstj|ƒ|jƒS)N)r)Ú get_outputsÚ_build_ext__get_stubs_outputs)r,rrrrs×szbuild_ext.get_outputscs6‡fdd„ˆjDƒ}tj|ˆjƒƒ}tdd„|DƒƒS)Nc3s0|](}|jrtjjˆjf|jjdƒžŽVqdS)r.N)r>r:r;r9r=rZr8)r$rA)r,rrr%Ýsz0build_ext.__get_stubs_outputs..css|]\}}||VqdS)Nr)r$ÚbaseZfnextrrrr%ãs)r4Ú itertoolsÚproductÚ!_build_ext__get_output_extensionsÚlist)r,Z ns_ext_basesÚpairsr)r,rZ__get_stubs_outputsÚs  zbuild_ext.__get_stubs_outputsccs"dVdV|jdƒjrdVdS)Nz.pyz.pycr-z.pyo)r3Úoptimize)r,rrrZ__get_output_extensionsås z!build_ext.__get_output_extensionsFcCs.tjd|j|ƒtjj|f|jjdƒžŽd}|rJtjj|ƒrJt|dƒ‚|j s¸t |dƒ}|j djddd t d ƒd tjj |jƒd d dt dƒdddt dƒddt dƒdddgƒƒ|jƒ|�r*ddlm}||gdd|j d�|jdƒj}|dk�r||g|d|j d�tjj|ƒ�r*|j �r*tj|ƒdS)Nz writing stub loader for %s to %sr.z.pyz 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__()rr)Ú byte_compileT)r{rbr1Ú install_lib)rÚinforZr:r;r9r8Úexistsrr1ÚopenÚwriteÚif_dlr<r\ÚcloseÚdistutils.utilr~r3r{Úunlink)r,Ú output_dirrAÚcompileZ stub_fileÚfr~r{rrrr?ësP          zbuild_ext.write_stubN)F)Ú__name__Ú __module__Ú __qualname__r*r+r7rUrXrYrirjr[rsrtrxr?rrrrrJs   rc Cs(|j|j||||||||| | | | ƒ dS)N)ÚlinkZSHARED_LIBRARY) r,ÚobjectsÚoutput_libnamerˆrdr^r`rhÚdebugÚ extra_preargsÚextra_postargsÚ build_tempÚ target_langrrrres reZstaticc Cs^|dks t‚tjj|ƒ\}} tjj| ƒ\}}|jdƒjdƒrH|dd…}|j||||| ƒdS)NÚxrlé)ÚAssertionErrorr:r;r8rMrOÚ startswithZcreate_static_lib)r,r�r�rˆrdr^r`rhr‘r’r“r”r•rCr<rArrrre,s  cCstjdkrd}t|ƒS)zŠ In https://github.com/pypa/setuptools/pull/837, we discovered Python 3.3.0 exposes the extension suffix under the name 'SO'. r—r/r)r—r—r/)rÚ version_infor)r6rrrrJDs rJ) NNNNNrNNNN) NNNNNrNNNN)(r:rrvr"Zdistutils.command.build_extrZ _du_build_extÚdistutils.file_utilrÚdistutils.ccompilerrÚdistutils.sysconfigrrÚdistutils.errorsrÚ distutilsrZsetuptools.extensionr Zsetuptools.externr ZCython.Distutils.build_extr)Ú __import__Ú ImportErrorr rrrrQrPrr6ÚdlÚhasattrr„r(rerJrrrrÚsZ              Q