a
    ”¼deß2  ã                
   @   s   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mZ d dlmZ d dlmZ d dlmZ d d	lmZ ejržd dlZd
d„ e ¡ D ƒZnd dlmZ zd dlmZ edƒ W n eyØ   eZY n0 edƒ d dl
mZ dd„ Z dZ!dZ"dZ#ej$dk�rdZ"n<e j%dk�rPzd dl&Z&e'e&dƒ Z"Z!W n e�yN   Y n0 dd„ Z(dd„ Z)G dd„ deƒZe"�s‚e j%dk�rŽd"dd„Z*nd Z#d#d!d„Z*dS )$é    N)Ú	build_ext)Ú	copy_file)Únew_compiler)Úcustomize_compilerÚget_config_var)ÚDistutilsError)Úlog)ÚLibrary)Úsixc                 C   s    g | ]\}}}|t jkr|‘qS © )ÚimpÚC_EXTENSION)Ú.0ÚsÚ_Útpr   r   úU/var/www/sistema_ama/venv/lib/python3.9/site-packages/setuptools/command/build_ext.pyÚ
<listcomp>   ó    r   ©ÚEXTENSION_SUFFIXESzCython.Compiler.MainÚLDSHARED)Ú_config_varsc              	   C   sl   t jdkr`t ¡ }z6dtd< dtd< dtd< t| ƒ W t ¡  t |¡ qht ¡  t |¡ 0 nt| ƒ d S )NÚdarwinz0gcc -Wl,-x -dynamiclib -undefined dynamic_lookupr   z -dynamiclibÚCCSHAREDz.dylibÚSO)ÚsysÚplatformÚ_CONFIG_VARSÚcopyr   ÚclearÚupdate)ÚcompilerÚtmpr   r   r   Ú_customize_compiler_for_shlib#   s    
ÿ
ÿr$   FZsharedr   TÚntÚRTLD_NOWc                 C   s   t r| S dS )NÚ )Ú	have_rtld)r   r   r   r   Ú<lambda>D   r   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_suffixG   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   s.   | j d }| _ t | ¡ || _ |r*|  ¡  dS )z;Build extensions in build directory, then copy if --inplacer   N)ZinplaceÚ
_build_extÚrunÚcopy_extensions_to_source)ÚselfZold_inplacer   r   r   r-   Q   s
    
zbuild_ext.runc           
      C   sª   |   d¡}| jD ]”}|  |j¡}|  |¡}| d¡}d |d d… ¡}| |¡}tj	 |tj	 
|¡¡}tj	 | j|¡}	t|	|| j| jd� |jr|  |pœtj|d¡ qd S )NÚbuild_pyÚ.éÿÿÿÿ)ÚverboseÚdry_runT)Úget_finalized_commandÚ
extensionsÚget_ext_fullnameÚnameÚget_ext_filenameÚsplitÚjoinZget_package_dirÚosÚpathÚbasenameÚ	build_libr   r3   r4   Ú_needs_stubÚ
write_stubÚcurdir)
r/   r0   ÚextÚfullnameÚfilenameÚmodpathÚpackageÚpackage_dirZdest_filenameZsrc_filenamer   r   r   r.   Y   s"    





ÿþz#build_ext.copy_extensions_to_sourcec                 C   s¸   t  | |¡}|| jv r´| j| }tj o6t|dƒo6tƒ }|r`tdƒ}|d t|ƒ … }|tƒ  }t	|t
ƒrˆtj |¡\}}| j |t¡S tr´|jr´tj |¡\}}tj |d| ¡S |S )NZpy_limited_apiÚ
EXT_SUFFIXzdl-)r,   r9   Úext_mapr
   ÚPY2Úgetattrr+   r   ÚlenÚ
isinstancer	   r<   r=   ÚsplitextÚshlib_compilerÚlibrary_filenameÚlibtypeÚ	use_stubsÚ_links_to_dynamicr:   r;   )r/   rD   rE   rC   Zuse_abi3Zso_extÚfnÚdr   r   r   r9   o   s&    

ÿý


zbuild_ext.get_ext_filenamec                 C   s    t  | ¡ d | _g | _i | _d S ©N)r,   Úinitialize_optionsrP   ÚshlibsrJ   ©r/   r   r   r   rX   „   s    
zbuild_ext.initialize_optionsc                 C   s,  t  | ¡ | jpg | _|  | j¡ dd„ | jD ƒ| _| jrB|  ¡  | jD ]}|  |j¡|_qH| jD ]Ä}|j}|| j	|< || j	| 
d¡d < | jrš|  |¡pœd}|o°to°t|tƒ }||_||_|  |¡ }|_tj tj | j|¡¡}|�r||jv�r|j |¡ |rbtrbtj|jvrb|j tj¡ qbd S )Nc                 S   s   g | ]}t |tƒr|‘qS r   )rN   r	   ©r   rC   r   r   r   r   Ž   s   
ÿz.build_ext.finalize_options.<locals>.<listcomp>r1   r2   F)r,   Úfinalize_optionsr6   Zcheck_extensions_listrY   Úsetup_shlib_compilerr7   r8   Ú
_full_namerJ   r:   Úlinks_to_dynamicrS   rN   r	   rT   r@   r9   Ú
_file_namer<   r=   Údirnamer;   r?   Úlibrary_dirsÚappendrB   Úruntime_library_dirs)r/   rC   rD   ZltdÚnsrE   Úlibdirr   r   r   r\   Š   s,    



zbuild_ext.finalize_optionsc                 C   sæ   t | j| j| jd� }| _t|ƒ | jd ur8| | j¡ | jd ur^| jD ]\}}| 	||¡ qH| j
d ur~| j
D ]}| |¡ qn| jd ur”| | j¡ | jd urª| | j¡ | jd urÀ| | j¡ | jd urÖ| | j¡ t |¡|_d S )N)r"   r4   Úforce)r   r"   r4   rg   rP   r$   Úinclude_dirsZset_include_dirsZdefineZdefine_macroZundefZundefine_macroÚ	librariesZset_librariesrb   Zset_library_dirsZrpathZset_runtime_library_dirsZlink_objectsZset_link_objectsÚlink_shared_objectÚ__get__)r/   r"   r8   ÚvalueZmacror   r   r   r]   §   s*    ÿ







zbuild_ext.setup_shlib_compilerc                 C   s   t |tƒr|jS t | |¡S rW   )rN   r	   Úexport_symbolsr,   Úget_export_symbols©r/   rC   r   r   r   rn   Â   s    
zbuild_ext.get_export_symbolsc                 C   sb   |  ¡  | j}zFt|tƒr"| j| _t | |¡ |jrL|  d¡j	}|  
||¡ W || _n|| _0 d S )Nr0   )Z_convert_pyx_sources_to_langr"   rN   r	   rP   r,   Úbuild_extensionr@   r5   r?   rA   )r/   rC   Z	_compilerÚcmdr   r   r   rp   Ç   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   )r^   )r   Úlibr   r   r   r   Ù   r   z.build_ext.links_to_dynamic.<locals>.<listcomp>r1   Nr2   r'   c                 3   s   | ]}ˆ| ˆ v V  qd S rW   r   )r   Zlibname©ZlibnamesÚpkgr   r   Ú	<genexpr>Û   r   z-build_ext.links_to_dynamic.<locals>.<genexpr>)ÚdictÚfromkeysrY   r;   r^   r:   Úanyri   ro   r   rs   r   r_   Ô   s     zbuild_ext.links_to_dynamicc                 C   s   t  | ¡|  ¡  S rW   )r,   Úget_outputsÚ_build_ext__get_stubs_outputsrZ   r   r   r   ry   Ý   s    zbuild_ext.get_outputsc                    s6   ‡ fdd„ˆ j D ƒ}t |ˆ  ¡ ¡}tdd„ |D ƒƒS )Nc                 3   s2   | ]*}|j rtjjˆ jg|j d ¡¢R Ž V  qdS )r1   N)r@   r<   r=   r;   r?   r^   r:   r[   rZ   r   r   ru   â   s   þz0build_ext.__get_stubs_outputs.<locals>.<genexpr>c                 s   s   | ]\}}|| V  qd S rW   r   )r   ÚbaseZfnextr   r   r   ru   é   r   )r6   Ú	itertoolsÚproductÚ!_build_ext__get_output_extensionsÚlist)r/   Zns_ext_basesÚpairsr   rZ   r   Z__get_stubs_outputsà   s
    
þzbuild_ext.__get_stubs_outputsc                 c   s"   dV  dV  |   d¡jrdV  d S )Nú.pyz.pycr0   z.pyo)r5   ÚoptimizerZ   r   r   r   Z__get_output_extensionsë   s    z!build_ext.__get_output_extensionsFc                 C   s.  t  d|j|¡ tjj|g|j d¡¢R Ž d }|rLtj |¡rLt|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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 )Nz writing stub loader for %s to %sr1   r�   z already exists! Please delete.ÚwÚ
zdef __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)r‚   rg   r4   Úinstall_lib)r   Úinfor^   r<   r=   r;   r:   Úexistsr   r4   ÚopenÚwriteÚif_dlr>   r`   ÚcloseÚdistutils.utilr…   r5   r‚   Úunlink)r/   Ú
output_dirrC   ÚcompileZ	stub_fileÚfr…   r‚   r   r   r   rA   ñ   s^    
ÿÿ

þìÿÿ
ÿzbuild_ext.write_stubN)F)Ú__name__Ú
__module__Ú__qualname__r-   r.   r9   rX   r\   r]   rn   rp   r_   ry   rz   r~   rA   r   r   r   r   r   P   s   	r   c                 C   s(   |   | j|||||||||	|
||¡ d S rW   )ÚlinkZSHARED_LIBRARY)r/   ÚobjectsÚoutput_libnamer�   ri   rb   rd   rm   ÚdebugÚextra_preargsÚextra_postargsÚ
build_tempÚtarget_langr   r   r   rj   #  s    ürj   Zstaticc                 C   s^   |d u sJ ‚t j |¡\}}t j |¡\}}|  d¡ d¡rH|dd … }|  |||||¡ d S )NÚxrr   é   )r<   r=   r:   rO   rQ   Ú
startswithZcreate_static_lib)r/   r–   r—   r�   ri   rb   rd   rm   r˜   r™   rš   r›   rœ   rE   r>   rC   r   r   r   rj   2  s    
ÿ)
NNNNNr   NNNN)
NNNNNr   NNNN)+r<   r   r|   Zdistutils.command.build_extr   Z_du_build_extÚdistutils.file_utilr   Údistutils.ccompilerr   Údistutils.sysconfigr   r   Údistutils.errorsr   Ú	distutilsr   Zsetuptools.extensionr	   Zsetuptools.externr
   rK   r   Zget_suffixesr   Úimportlib.machineryZCython.Distutils.build_extr,   Ú
__import__ÚImportErrorr   r   r$   r(   rS   rR   r   r8   ÚdlÚhasattrr‹   r+   rj   r   r   r   r   Ú<module>   sb   
	 Q    ü    ü