U
    cc=                  
   @   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	m
Z
mZ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mZ zd dlmZ ed W n ek
r   eZY nX 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rBzd dl(Z(e)e(d Z$Z#W n ek
r@   Y nX dd Z*dd Z+G dd deZe$ste j'dkrd ddZ,ndZ%d!ddZ,dS )"    NEXTENSION_SUFFIXES)cache_from_source)DictIteratorListTuple)	build_ext)new_compiler)customize_compilerget_config_var)log)	BaseError)	ExtensionLibraryzCython.Compiler.MainLDSHARED)_config_varsc              	   C   sZ   t jdkrNt }z$dtd< dtd< dtd< t|  W 5 t  t| X nt|  d S )Ndarwinz0gcc -Wl,-x -dynamiclib -undefined dynamic_lookupr   z -dynamiclibCCSHAREDz.dylibSO)sysplatform_CONFIG_VARScopyclearupdater   )compilertmp r   V/var/www/html/project/venv/lib/python3.8/site-packages/setuptools/command/build_ext.py_customize_compiler_for_shlib   s    
r    FZ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| k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_suffixD   s
    r(   c                   @   s  e Zd ZU dZeed< dZeed< dd Zee	e
e
f dddZd	d
 Zee
e
dddZee	e
e
f  dddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zee
 ddd Zee
e
f dd!d"Zd#d$ Zd%d& Zd0d'd(Zd1e
ed)d*d+Ze
d,d-d.Zd/S )2r	   Feditable_modeinplacec                 C   s.   | j d }| _ t|  || _ |r*|   dS )z;Build extensions in build directory, then copy if --inplacer   N)r*   
_build_extruncopy_extensions_to_source)selfZold_inplacer   r   r   r,   Q   s
    
zbuild_ext.run)extreturnc           
      C   sj   |  |j}| |}|d}d|d d }||}tj|tj|}tj| j	|}	||	fS )N.)
get_ext_fullnamenameget_ext_filenamesplitjoinZget_package_dirospathbasename	build_lib)
r.   build_pyr/   fullnamefilenamemodpathpackagepackage_dirinplace_fileregular_filer   r   r   _get_inplace_equivalentY   s    


z!build_ext._get_inplace_equivalentc                 C   sp   |  d}| jD ]Z}| ||\}}tj|s6|jsH| j||| jd |j	r| 
||}| j||dd qd S )Nr<   )levelT)compile)get_finalized_command
extensionsrD   r8   r9   existsoptional	copy_fileverbose_needs_stub_get_equivalent_stub_write_stub_file)r.   r<   r/   rB   rC   inplace_stubr   r   r   r-   c   s    

z#build_ext.copy_extensions_to_source)r/   output_filer0   c                 C   s2   t j|}|jd\}}}t j|| dS Nr1   .py)r8   r9   dirnamer4   
rpartitionr7   )r.   r/   rQ   Zdir__r4   r   r   r   rN   t   s    zbuild_ext._get_equivalent_stub)r0   c           
      c   s   | j s
d S | d}| djp"d}| jD ]^}| ||\}}||fV  |jr*| ||}| ||}t||d}t||d}	|	|fV  q*d S )Nr<   install_libr#   )optimization)r*   rG   optimizerH   rD   rM   rN   _compiled_file_name)
r.   r<   optr/   rB   rC   rP   Zregular_stubZinplace_cacheZoutput_cacher   r   r   _get_output_mappingy   s    


zbuild_ext._get_output_mappingc                 C   s   t d}|r&t jj|d | }nt| |}td}|| jkr| j| }t	|do\t
 }|r|d t|  }t
 }|| }t|trt j|\}}| j|tS tr|jrt j|\}}t j|d| S |S )NZSETUPTOOLS_EXT_SUFFIXr1   
EXT_SUFFIXpy_limited_apizdl-)r8   getenvr9   r7   r6   r+   r5   r   ext_mapgetattrr(   len
isinstancer   splitextshlib_compilerlibrary_filenamelibtype	use_stubs_links_to_dynamic)r.   r=   Zso_extr>   r/   Zuse_abi3fndr   r   r   r5      s&    




zbuild_ext.get_ext_filenamec                 C   s&   t |  d | _g | _i | _d| _d S )NF)r+   initialize_optionsre   shlibsr`   r)   r.   r   r   r   rl      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| |pd}|otot|t }||_||_| | }|_tjtj| j|}|r||jkr|j| |rbtrbtj|jkrb|jtj qb| jr6d| _d S )Nc                 S   s   g | ]}t |tr|qS r   )rc   r   .0r/   r   r   r   
<listcomp>   s    
z.build_ext.finalize_options.<locals>.<listcomp>r1   r2   FT)r+   finalize_optionsrH   Zcheck_extensions_listrm   setup_shlib_compilerr3   r4   
_full_namer`   r6   links_to_dynamicrh   rc   r   ri   rM   r5   
_file_namer8   r9   rT   r7   r;   library_dirsappendcurdirruntime_library_dirsr)   r*   )r.   r/   r=   Zltdnsr>   libdirr   r   r   rr      s0    



zbuild_ext.finalize_optionsc                 C   s   t | j| j| jd }| _t| | jd k	r8|| j | jd k	r^| jD ]\}}|	|| qH| j
d k	r~| j
D ]}|| qn| jd k	r|| j | jd k	r|| j | jd k	r|| j | jd k	r|| j t||_d S )N)r   dry_runforce)r
   r   r}   r~   re   r    include_dirsZset_include_dirsZdefineZdefine_macroZundefZundefine_macro	librariesZset_librariesrw   Zset_library_dirsZrpathZset_runtime_library_dirsZlink_objectsZset_link_objectslink_shared_object__get__)r.   r   r4   valueZmacror   r   r   rs      s.      







zbuild_ext.setup_shlib_compilerc                 C   s   t |tr|jS t| |S N)rc   r   export_symbolsr+   get_export_symbolsr.   r/   r   r   r   r      s    
zbuild_ext.get_export_symbolsc                 C   s\   |   | j}z@t|tr"| j| _t| | |jrL| dj	}| 
|| W 5 || _X d S )Nr<   )_convert_pyx_sources_to_langr   rc   r   re   r+   build_extensionrM   rG   r;   
write_stub)r.   r/   Z	_compilerr;   r   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   )rt   )rp   libr   r   r   rq     s     z.build_ext.links_to_dynamic.<locals>.<listcomp>r1   Nr2   r#   c                 3   s   | ]}|  kV  qd S r   r   )rp   ZlibnameZlibnamespkgr   r   	<genexpr>  s     z-build_ext.links_to_dynamic.<locals>.<genexpr>)dictfromkeysrm   r7   rt   r6   anyr   r   r   r   r   ru      s     zbuild_ext.links_to_dynamicc                 C   s,   | j rt|   S tt| |   S r   )r*   listget_output_mappingkeyssortedr+   get_outputs_build_ext__get_stubs_outputsrn   r   r   r   r     s    zbuild_ext.get_outputsc                 C   s   |   }tt|dd dS )z1See :class:`setuptools.commands.build.SubCommand`c                 S   s   | d S )Nr   r   )xr   r   r   <lambda>      z.build_ext.get_output_mapping.<locals>.<lambda>)key)r\   r   r   )r.   mappingr   r   r   r     s    zbuild_ext.get_output_mappingc                    s6    fdd j D }t|  }tdd |D S )Nc                 3   s0   | ](}|j rtjj jf|jd  V  qdS )r1   N)rM   r8   r9   r7   r;   rt   r6   ro   rn   r   r   r     s   z0build_ext.__get_stubs_outputs.<locals>.<genexpr>c                 s   s   | ]\}}|| V  qd S r   r   )rp   baseZfnextr   r   r   r     s     )rH   	itertoolsproduct!_build_ext__get_output_extensionsr   )r.   Zns_ext_basespairsr   rn   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 )NrS   z.pycr<   z.pyo)rG   rY   rn   r   r   r   Z__get_output_extensions  s    z!build_ext.__get_output_extensionsc                 C   s0   t jj|f|jd d }| ||| d S rR   )r8   r9   r7   rt   r6   rO   )r.   
output_dirr/   rF   	stub_filer   r   r   r   !  s    zbuild_ext.write_stub)r   r/   c                 C   s   t d|j| |r,tj|r,t|d | jst|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 S )Nz writing stub loader for %s to %sz 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   infort   r8   r9   rI   r   r}   openwriter7   r&   r:   rv   close_compile_and_remove_stub)r.   r   r/   rF   fr   r   r   rO   %  sJ    
zbuild_ext._write_stub_file)r   c                 C   sh   ddl m} ||gdd| jd | dj}|dkrH||g|d| jd tj|rd| jsdt| d S )Nr   )byte_compileT)rY   r~   r}   rW   )	distutils.utilr   r}   rG   rY   r8   r9   rI   unlink)r.   r   r   rY   r   r   r   r   K  s      z"build_ext._compile_and_remove_stubN)F)F) __name__
__module____qualname__r)   bool__annotations__r*   r,   r   r   strrD   r-   rN   r   r\   r5   rl   rr   rs   r   r   ru   r   r   r   r   r   r   r   rO   r   r   r   r   r   r	   M   s*   

 	
&r	   c                 C   s(   |  | j|||||||||	|
|| d S r   )linkZSHARED_LIBRARY)r.   objectsoutput_libnamer   r   rw   rz   r   debugextra_preargsextra_postargs
build_temptarget_langr   r   r   r   [  s             r   staticc                 C   s^   |d kst tj|\}}tj|\}}| ddrH|dd  }| ||||| d S )Nr   r      )AssertionErrorr8   r9   r6   rd   rf   
startswithZcreate_static_lib)r.   r   r   r   r   rw   rz   r   r   r   r   r   r   r>   r:   r/   r   r   r   r   j  s        )
NNNNNr   NNNN)
NNNNNr   NNNN)-r8   r   r   Zimportlib.machineryr   importlib.utilr   rZ   typingr   r   r   r   Zdistutils.command.build_extr	   Z_du_build_extdistutils.ccompilerr
   distutils.sysconfigr   r   	distutilsr   setuptools.errorsr   setuptools.extensionr   r   ZCython.Distutils.build_extr+   
__import__ImportErrorr   r   r    r$   rh   rg   r   r4   Zdlhasattrr&   r(   r   r   r   r   r   <module>   sv   
	                                  