o
    Ëý°jœ3  ã                   @   sz  d dl Z d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZ d d	lmZ zd dlmZ ed
ƒ W n eyU   eZY nw edƒ d dlmZ dd„ ZdZdZdZejdkrrdZne j dkrŽzd dl!Z!e"e!dƒ ZZW n	 ey�   Y nw dd„ Z#dd„ Z$G dd„ deƒZes¥e j dkr°				ddd„Z%dS dZ				ddd„Z%dS ) é    N©ÚEXTENSION_SUFFIXES)Ú	build_ext)Ú	copy_file)Únew_compiler)Úcustomize_compilerÚget_config_var)ÚDistutilsError)Úlog)ÚLibraryzCython.Compiler.MainÚLDSHARED)Ú_config_varsc              	   C   sl   t jdkr0t ¡ }zdtd< dtd< dtd< t| ƒ W t ¡  t |¡ d S t ¡  t |¡ w t| ƒ d S )NÚdarwinz0gcc -Wl,-x -dynamiclib -undefined dynamic_lookupr   z -dynamiclibÚCCSHAREDz.dylibÚSO)ÚsysÚplatformÚ_CONFIG_VARSÚcopyr   ÚclearÚupdate)ÚcompilerÚtmp© r   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/setuptools/command/build_ext.pyÚ_customize_compiler_for_shlib   s   
ÿ
ÿr   FÚsharedr   TÚntÚRTLD_NOWc                 C   s   t r| S dS )NÚ )Ú	have_rtld)Úsr   r   r   Úif_dl>   s   r"   c                  C   s.   t D ]} d| v r|   S | dkr|   S qdS )z;Return the file extension for an abi3-compliant Extension()z.abi3z.pydNr   )Úsuffixr   r   r   Úget_abi3_suffixB   s   ÿýr$   c                   @   sv   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zddd„ZdS )r   c                 C   s2   | j d}| _ t | ¡ || _ |r|  ¡  dS dS )z;Build extensions in build directory, then copy if --inplacer   N)ÚinplaceÚ
_build_extÚrunÚcopy_extensions_to_source)ÚselfÚold_inplacer   r   r   r'   L   s   
ÿzbuild_ext.runc           
      C   sª   |   d¡}| jD ]J}|  |j¡}|  |¡}| d¡}d |d d… ¡}| |¡}tj	 |tj	 
|¡¡}tj	 | j|¡}	t|	|| j| jd� |jrR|  |pNtj|d¡ qd S )NÚbuild_pyÚ.éÿÿÿÿ)ÚverboseÚdry_runT)Úget_finalized_commandÚ
extensionsÚget_ext_fullnameÚnameÚget_ext_filenameÚsplitÚjoinÚget_package_dirÚosÚpathÚbasenameÚ	build_libr   r.   r/   Ú_needs_stubÚ
write_stubÚcurdir)
r)   r+   ÚextÚfullnameÚfilenameÚmodpathÚpackageÚpackage_dirÚdest_filenameÚsrc_filenamer   r   r   r(   T   s&   





ÿþ€îz#build_ext.copy_extensions_to_sourcec                 C   sÚ   t  d¡}|rt jj| d¡Ž | }n
t | |¡}tdƒ}|| jv rk| j| }t	|dƒo.t
ƒ }|rA|d t|ƒ … }t
ƒ }|| }t|tƒrUt j |¡\}}| j |t¡S trk|jrkt j |¡\}}t j |d| ¡S |S )NÚSETUPTOOLS_EXT_SUFFIXr,   Ú
EXT_SUFFIXÚpy_limited_apizdl-)r8   Úgetenvr9   r6   r5   r&   r4   r   Úext_mapÚgetattrr$   ÚlenÚ
isinstancer   ÚsplitextÚshlib_compilerÚlibrary_filenameÚlibtypeÚ	use_stubsÚ_links_to_dynamic)r)   r@   Úso_extrA   r?   Úuse_abi3ÚfnÚdr   r   r   r4   j   s&   




zbuild_ext.get_ext_filenamec                 C   s    t  | ¡ d | _g | _i | _d S ©N)r&   Úinitialize_optionsrP   ÚshlibsrK   ©r)   r   r   r   rZ   �   s   

zbuild_ext.initialize_optionsc                 C   s(  t  | ¡ | jp	g | _|  | j¡ dd„ | jD ƒ| _| jr!|  ¡  | jD ]	}|  |j¡|_q$| jD ]`}|j}|| j	|< || j	| 
d¡d < | jrM|  |¡pNd}|oXtoXt|tƒ }||_||_|  |¡ }|_tj tj | j|¡¡}|r€||jvr€|j |¡ |r‘tr‘tj|jvr‘|j tj¡ q1d S )Nc                 S   s   g | ]	}t |tƒr|‘qS r   )rN   r   ©Ú.0r?   r   r   r   Ú
<listcomp>‹   s    
ÿz.build_ext.finalize_options.<locals>.<listcomp>r,   r-   F)r&   Úfinalize_optionsr1   Úcheck_extensions_listr[   Úsetup_shlib_compilerr2   r3   Ú
_full_namerK   r5   Úlinks_to_dynamicrS   rN   r   rT   r<   r4   Ú
_file_namer8   r9   Údirnamer6   r;   Úlibrary_dirsÚappendr>   Úruntime_library_dirs)r)   r?   r@   ÚltdÚnsrA   Úlibdirr   r   r   r`   ‡   s0   



€ïzbuild_ext.finalize_optionsc                 C   sæ   t | j| j| jd� }| _t|ƒ | jd ur| | j¡ | jd ur/| jD ]
\}}| 	||¡ q$| j
d ur?| j
D ]}| |¡ q7| jd urJ| | j¡ | jd urU| | j¡ | jd ur`| | j¡ | jd urk| | j¡ t |¡|_d S )N)r   r/   Úforce)r   r   r/   rm   rP   r   Úinclude_dirsÚset_include_dirsÚdefineÚdefine_macroÚundefÚundefine_macroÚ	librariesÚset_librariesrg   Úset_library_dirsÚrpathÚset_runtime_library_dirsÚlink_objectsÚset_link_objectsÚlink_shared_objectÚ__get__)r)   r   r3   ÚvalueÚmacror   r   r   rb   ¤   s*   ÿ







zbuild_ext.setup_shlib_compilerc                 C   s   t |tƒr|jS t | |¡S rY   )rN   r   Úexport_symbolsr&   Úget_export_symbols©r)   r?   r   r   r   r€   ¿   s   
zbuild_ext.get_export_symbolsc                 C   sl   |  ¡  | j}z*t|tƒr| j| _t | |¡ |jr,|  d¡j	}|  
||¡ W || _d S W || _d S || _w )Nr+   )Ú_convert_pyx_sources_to_langr   rN   r   rP   r&   Úbuild_extensionr<   r0   r;   r=   )r)   r?   Ú	_compilerÚcmdr   r   r   rƒ   Ä   s   

üzbuild_ext.build_extensionc                    sP   t  dd„ | jD ƒ¡‰ d |j d¡dd… dg ¡‰t‡ ‡fdd„|jD ƒƒS )	z?Return true if 'ext' links to a dynamic lib in the same packagec                 S   s   g | ]}|j ‘qS r   )rc   )r^   Úlibr   r   r   r_   Ö   s    z.build_ext.links_to_dynamic.<locals>.<listcomp>r,   Nr-   r   c                 3   s   � | ]	}ˆ| ˆ v V  qd S rY   r   )r^   Úlibname©ÚlibnamesÚpkgr   r   Ú	<genexpr>Ø   ó   € z-build_ext.links_to_dynamic.<locals>.<genexpr>)ÚdictÚfromkeysr[   r6   rc   r5   Úanyrt   r�   r   rˆ   r   rd   Ñ   s    zbuild_ext.links_to_dynamicc                 C   s   t  | ¡|  ¡  S rY   )r&   Úget_outputsÚ_build_ext__get_stubs_outputsr\   r   r   r   r�   Ú   s   zbuild_ext.get_outputsc                    s6   ‡ fdd„ˆ j D ƒ}t |ˆ  ¡ ¡}tdd„ |D ƒƒS )Nc                 3   s4   � | ]}|j rtjjˆ jg|j d ¡¢R Ž V  qdS )r,   N)r<   r8   r9   r6   r;   rc   r5   r]   r\   r   r   r‹   ß   s   € ý
ÿz0build_ext.__get_stubs_outputs.<locals>.<genexpr>c                 s   s   � | ]	\}}|| V  qd S rY   r   )r^   ÚbaseÚfnextr   r   r   r‹   æ   rŒ   )r1   Ú	itertoolsÚproductÚ!_build_ext__get_output_extensionsÚlist)r)   Úns_ext_basesÚpairsr   r\   r   Ú__get_stubs_outputsÝ   s
   
þzbuild_ext.__get_stubs_outputsc                 c   s(   � dV  dV  |   d¡jrdV  d S d S )Nú.pyz.pycr+   z.pyo)r0   Úoptimizer\   r   r   r   Ú__get_output_extensionsè   s   €
ÿz!build_ext.__get_output_extensionsFc                 C   s8  t  d|j|¡ tjj|g|j d¡¢R Ž d }|r&tj |¡r&t|d ƒ‚| j	s`t
|dƒ}| d ddd	td
ƒ dtj |j¡ dddtdƒdddtdƒdddddtdƒdddg¡¡ | ¡  |r–ddlm} ||gdd| j	d � |  d!¡j}|dkr†||g|d| j	d � tj |¡r˜| j	sšt |¡ d S d S d S d S )"Nz writing stub loader for %s to %sr,   r›   z already exists! Please delete.ÚwÚ
zdef __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__()r   r   )Úbyte_compileT)rœ   rm   r/   Úinstall_lib)r
   Úinforc   r8   r9   r6   r5   Úexistsr	   r/   ÚopenÚwriter"   r:   re   ÚcloseÚdistutils.utilr    r0   rœ   Úunlink)r)   Ú
output_dirr?   ÚcompileÚ	stub_fileÚfr    rœ   r   r   r   r=   î   sl   
ÿÿ
ÿþèÿÿÿö	zbuild_ext.write_stubN)F)Ú__name__Ú
__module__Ú__qualname__r'   r(   r4   rZ   r`   rb   r€   rƒ   rd   r�   r‘   r–   r=   r   r   r   r   r   K   s    	r   c                 C   s(   |   | j|||||||||	|
||¡ d S rY   )ÚlinkÚSHARED_LIBRARY)r)   ÚobjectsÚoutput_libnamer©   rt   rg   ri   r   ÚdebugÚextra_preargsÚextra_postargsÚ
build_tempÚtarget_langr   r   r   r{   $  s   ür{   Ústaticc                 C   s^   |d u sJ ‚t j |¡\}}t j |¡\}}|  d¡ d¡r$|dd … }|  |||||¡ d S )NÚxr†   é   )r8   r9   r5   rO   rQ   Ú
startswithÚcreate_static_lib)r)   r²   r³   r©   rt   rg   ri   r   r´   rµ   r¶   r·   r¸   rA   r:   r?   r   r   r   r{   3  s   
ÿ)
NNNNNr   NNNN)&r8   r   r”   Úimportlib.machineryr   Údistutils.command.build_extr   Ú_du_build_extÚdistutils.file_utilr   Údistutils.ccompilerr   Údistutils.sysconfigr   r   Údistutils.errorsr	   Ú	distutilsr
   Úsetuptools.extensionr   ÚCython.Distutils.build_extr&   Ú
__import__ÚImportErrorr   r   r   r    rS   rR   r   r3   ÚdlÚhasattrr"   r$   r{   r   r   r   r   Ú<module>   s`    ÿ

ÿ	 Wüü