U
    ډeC                  
   @   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 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rNzd dl*Z*e+e*d Z&Z%W n e!k
rL   Y nX dd Z,dd Z-G dd deZe&se 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)Path)	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   ^/var/www/html/StaffProfile/newvenv/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_dlD   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_suffixH   s    
r)   c                   @   s8  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
 dd!d"Zee
 dd#d$Zee
e
f dd%d&Zd'd( Zd)d* Zd4d+d,Zd5e
ed-d.d/Z e
d0d1d2Z!d3S )6r
   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-   V   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_pyr0   fullnamefilenamemodpathpackagepackage_dirinplace_fileregular_filer   r   r    _get_inplace_equivalent^   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
extensionsrE   r9   r:   existsoptional	copy_fileverbose_needs_stub_get_equivalent_stub_write_stub_file)r/   r=   r0   rC   rD   inplace_stubr   r   r    r.   h   s    

z#build_ext.copy_extensions_to_source)r0   output_filer1   c                 C   s2   t j|}|jd\}}}t j|| dS Nr2   .py)r9   r:   dirnamer5   
rpartitionr8   )r/   r0   rR   Zdir__r5   r   r   r    rO   y   s    zbuild_ext._get_equivalent_stub)r1   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+   rH   optimizerI   rE   rN   rO   _compiled_file_name)
r/   r=   optr0   rC   rD   rQ   Zregular_stubZinplace_cacheZoutput_cacher   r   r    _get_output_mapping~   s    


zbuild_ext._get_output_mappingc                 C   s   t d}|r&t jj|d | }nt| |}td}|| jkr| j| }|j	oXt
 }|r~|d t|  }t
 }|| }t|trt j|\}}| j|tS tr|jrt j|\}}t j|d| S |S )NZSETUPTOOLS_EXT_SUFFIXr2   
EXT_SUFFIXzdl-)r9   getenvr:   r8   r7   r,   r6   r   ext_mappy_limited_apir)   len
isinstancer   splitextshlib_compilerlibrary_filenamelibtype	use_stubs_links_to_dynamic)r/   r>   Zso_extr?   r0   Zuse_abi3fndr   r   r    r6      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   .0r0   r   r   r    
<listcomp>   s     
 z.build_ext.finalize_options.<locals>.<listcomp>r2   r3   FT)r,   finalize_optionsrI   Zcheck_extensions_listrm   setup_shlib_compilerr4   r5   
_full_namer`   r7   links_to_dynamicrh   rc   r   ri   rN   r6   
_file_namer9   r:   rU   r8   r<   library_dirsappendcurdirruntime_library_dirsr*   r+   )r/   r0   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   r5   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/   r0   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_extensionrN   rH   r<   
write_stub)r/   r0   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>r2   Nr3   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   r8   rt   r7   anyr   r   r   r   r    ru     s     zbuild_ext.links_to_dynamicc                 C   s   t | |  S r   )r,   get_source_files_get_internal_dependsrn   r   r   r    r   
  s    zbuild_ext.get_source_filesc              	   c   s   t | jjptj }dd | jD }ttdddd}|D ]}t |}| r\||d q<d|j	krr||d	 q<z|| jd
d}W n" t
k
r   ||d Y q<Y nX z|| W n" tk
r   ||d Y q<Y nX | V  q<dS )zAYield ``ext.depends`` that are contained by the project directoryc                 s   s   | ]}|j D ]
}|V  qqd S r   )depends)rp   r0   depr   r   r    r     s       z2build_ext._get_internal_depends.<locals>.<genexpr>N)	orig_pathreasonr1   c                 S   s   t d| | d S )NzJdependency %s won't be automatically included in the manifest: the path %s)r   info)r   r   r   r   r    skip  s
    z-build_ext._get_internal_depends.<locals>.skipzmust be relativez..zcan't have `..` segmentsT)strictzdoesn't existzmust be inside the project root)r	   distributionsrc_rootr9   ry   resolverI   stris_absolutepartsOSErrorrelative_to
ValueErroras_posix)r/   Zproject_rootr   r   r   r:   Zresolvedr   r   r    r     s,    






zbuild_ext._get_internal_dependsc                 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   3  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   8  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 )r2   N)rN   r9   r:   r8   r<   rt   r7   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   F  s     )rI   	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 )NrT   z.pycr=   z.pyo)rH   rZ   rn   r   r   r    Z__get_output_extensionsH  s    z!build_ext.__get_output_extensionsc                 C   s0   t jj|f|jd d }| ||| d S rS   )r9   r:   r8   rt   r7   rP   )r/   
output_dirr0   rG   	stub_filer   r   r    r   N  s    zbuild_ext.write_stub)r   r0   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   r   rt   r9   r:   rJ   r   r}   openwriter8   r'   r;   rv   close_compile_and_remove_stub)r/   r   r0   rG   fr   r   r    rP   R  sF    

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)rZ   r~   r}   rX   )	distutils.utilr   r}   rH   rZ   r9   r:   rJ   unlink)r/   r   r   rZ   r   r   r    r   v  s       z"build_ext._compile_and_remove_stubN)F)F)"__name__
__module____qualname__r*   bool__annotations__r+   r-   r   r   r   rE   r.   rO   r   r]   r6   rl   rr   rs   r   r   ru   r   r   r   r   r   r   r   r   r   rP   r   r   r   r   r    r
   R   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      )AssertionErrorr9   r:   r7   rd   rf   
startswithZcreate_static_lib)r/   r   r   r   r   rw   rz   r   r   r   r   r   r   r?   r;   r0   r   r   r    r     s    )
NNNNNr   NNNN)
NNNNNr   NNNN)/r9   r   r   Zimportlib.machineryr   importlib.utilr   r[   typingr   r   r   r   pathlibr	   Zdistutils.command.build_extr
   Z_du_build_extZdistutils.ccompilerr   distutils.sysconfigr   r   	distutilsr   setuptools.errorsr   Zsetuptools.extensionr   r   ZCython.Distutils.build_extr,   
__import__ImportErrorr   r   r!   r%   rh   rg   r   r5   Zdlhasattrr'   r)   r   r   r   r   r    <module>   sx   

  3          !          