a
    6RhG                  
   @  s  d dl mZ 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 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 erd dlmZ  n8zd dl!mZ  e"d W n e#y   d dlmZ  Y n0 ed d dlm$Z% dd Z&dZ'dZ(dZ)ej*dkr4d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(sej+dkrd'd d!d"d#d$Z0nd%Z)d(d d!d"d&d$Z0dS ))    )annotationsN)IteratorEXTENSION_SUFFIXES)cache_from_source)Path)TYPE_CHECKING)Distribution)	BaseError)	ExtensionLibrary)log)new_compiler)customize_compilerget_config_var)	build_extz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tmp r   R/opt/python-3.9.24/usr/lib/python3.9/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_dlM   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_suffixQ   s    
r)   c                   @  s(  e Zd ZU ded< dZdZdd Zdddd	d
ZddddZddddddZ	ddddZ
dddddZdd ZddddZdd Zdd  Zddd!d"Zd#d$ Zd%dd&d'Zd(dd)d*Zd%dd+d,Zd-dd.d/Zd0d1 Zd2d3 Zd=ddd4d5Zd>ddd6d7d8Zdd9d:d;Zd<S )?r   r	   distributionFc                 C  s.   | j d }| _ t|  || _ |r*|   dS )z;Build extensions in build directory, then copy if --inplaceFN)inplace
_build_extruncopy_extensions_to_source)selfZold_inplacer   r   r    r-   `   s
    
zbuild_ext.runr   ztuple[str, str])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_equivalenth   s    


z!build_ext._get_inplace_equivalentNone)r1   c                 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.   r   s    

z#build_ext.copy_extensions_to_sourcestr)r0   output_filer1   c                 C  s2   t j|}|jd\}}}t j|| dS Nr2   .py)r9   r:   dirnamer5   
rpartitionr8   )r/   r0   rT   Zdir__r5   r   r   r    rP      s    zbuild_ext._get_equivalent_stubzIterator[tuple[str, str]]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+   rI   optimizerJ   rE   rO   rP   _compiled_file_name)
r/   r=   optr0   rC   rD   rR   Zregular_stubZinplace_cacheZoutput_cacher   r   r    _get_output_mapping   s    


zbuild_ext._get_output_mapping)r>   r1   c           	      C  s   t d}|r&t jj|d | }n*t| |}td}t|t	sLt
d|}|| jv r| j| }t }|jr|r|d t|  | }t|trt j|\}}| j|tS tr|jrt j|\}}t j|d| S |S )NZSETUPTOOLS_EXT_SUFFIXr2   
EXT_SUFFIXzwConfiguration variable EXT_SUFFIX not found for this platform and environment variable SETUPTOOLS_EXT_SUFFIX is missingzdl-)r9   getenvr:   r8   r7   r,   r6   r   
isinstancerS   OSErrorext_mapr)   Zpy_limited_apilenr   splitextshlib_compilerlibrary_filenamelibtype	use_stubs_links_to_dynamic)	r/   r>   Zso_extr?   Z
ext_suffixr0   Zabi3_suffixfndr   r   r    r6      s,    






zbuild_ext.get_ext_filenamec                 C  s&   t |  d | _g | _i | _d| _d S )NF)r,   initialize_optionsrg   shlibsrd   editable_moder/   r   r   r    rn      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vr|j| |rbtrbtj|jvrb|jtj qb| jr6d| _d S )Nc                 S  s   g | ]}t |tr|qS r   )rb   r   .0r0   r   r   r    
<listcomp>       z.build_ext.finalize_options.<locals>.<listcomp>r2   r3   FT)r,   finalize_optionsrJ   Zcheck_extensions_listro   setup_shlib_compilerr4   r5   
_full_namerd   r7   links_to_dynamicrj   rb   r   rk   rO   r6   
_file_namer9   r:   rW   r8   r<   library_dirsappendcurdirruntime_library_dirsrp   r+   )r/   r0   r>   Zltdnsr?   libdirr   r   r    rv      s0    



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   dry_runforce)r   r   r   r   rg   r!   include_dirsZset_include_dirsZdefineZdefine_macroZundefZundefine_macro	librariesZset_librariesr{   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    rw      s*    







zbuild_ext.setup_shlib_compilerc                 C  s   t |tr|jS t| |S N)rb   r   export_symbolsr,   get_export_symbolsr/   r0   r   r   r    r      s    
zbuild_ext.get_export_symbolsc                 C  sb   |   | j}zFt|tr"| j| _t| | |jrL| dj	}| 
|| W || _n|| _0 d S )Nr=   )Z_convert_pyx_sources_to_langr   rb   r   rg   r,   build_extensionrO   rI   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   )rx   )rs   libr   r   r    rt     ru   z.build_ext.links_to_dynamic.<locals>.<listcomp>r2   Nr3   r$   c                 3  s   | ]}|  v V  qd S r   r   )rs   ZlibnameZlibnamespkgr   r    	<genexpr>  ru   z-build_ext.links_to_dynamic.<locals>.<genexpr>)dictfromkeysro   r8   rx   r7   anyr   r   r   r   r    ry     s     zbuild_ext.links_to_dynamicz	list[str]c                 C  s   g t | |  S r   )r,   get_source_files_get_internal_dependsrq   r   r   r    r     s    zbuild_ext.get_source_fileszIterator[str]c              	   c  s   t | jjptj }dd | jD }dddddd}|D ]}t |}| r\||d q<d	|jv rr||d
 q<z|| jdd}W n  t	y   ||d Y q<Y n0 z|
| W n  ty   ||d Y q<Y n0 | 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)rs   r0   depr   r   r    r     ru   z2build_ext._get_internal_depends.<locals>.<genexpr>rS   rF   )	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 rootN)r   r*   Zsrc_rootr9   r}   resolverJ   is_absolutepartsrc   relative_to
ValueErroras_posix)r/   Zproject_rootr   r   r   r:   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_outputsrq   r   r   r    r   A  s    zbuild_ext.get_outputszdict[str, str]c                 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>I  ru   z.build_ext.get_output_mapping.<locals>.<lambda>)key)r_   r   r   )r/   mappingr   r   r    r   F  s    zbuild_ext.get_output_mappingc                   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 )r2   N)rO   r9   r:   r8   r<   rx   r7   rr   rq   r   r    r   M  s   z0build_ext.__get_stubs_outputs.<locals>.<genexpr>c                 s  s   | ]\}}|| V  qd S r   r   )rs   baseZfnextr   r   r    r   T  ru   )rJ   	itertoolsproduct!_build_ext__get_output_extensionsr   )r/   Zns_ext_basespairsr   rq   r    Z__get_stubs_outputsK  s
    
zbuild_ext.__get_stubs_outputsc                 c  s"   dV  dV  |  djrdV  d S )NrV   z.pycr=   z.pyo)rI   r\   rq   r   r   r    Z__get_output_extensionsV  s    z!build_ext.__get_output_extensionsc                 C  s2   t jj|g|jdR  d }| ||| d S rU   )r9   r:   r8   rx   r7   rQ   )r/   
output_dirr0   rH   	stub_filer   r   r    r   \  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t}d	ddd	t
d
 dtj|jddddt
ddddt
ddddddt
ddddg}|| W d    n1 s0    Y  |r| | d S )Nz writing stub loader for %s to %sz already exists! Please delete.wzutf-8)encoding
zdef __bootstrap__():z-   global __bootstrap__, __file__, __loader__z0   import sys, os, pkg_resources, importlib.utilz, dlz7   __file__ = pkg_resources.resource_filename(__name__,)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   rx   r9   r:   rK   r
   r   openr8   r'   r;   rz   write_compile_and_remove_stub)r/   r   r0   rH   fcontentr   r   r    rQ   `  sB    
(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)r\   r   r   rZ   )	distutils.utilr   r   rI   r\   r9   r:   rK   unlink)r/   r   r   r\   r   r   r    r     s    z"build_ext._compile_and_remove_stubN)F)F)__name__
__module____qualname____annotations__rp   r+   r-   rE   r.   rP   r_   r6   rn   rv   rw   r   r   ry   r   r   r   r   r   r   r   rQ   r   r   r   r   r    r   [   s0   

	&"r   boolrF   )debugr1   c                 C  s(   |  | j|||||||||	|
|| d S r   )linkZSHARED_LIBRARY)r/   objectsoutput_libnamer   r   r{   r~   r   r   extra_preargsextra_postargs
build_temptarget_langr   r   r    r     s    r   Zstaticc                 C  s^   |d u sJ t j|\}}t j|\}}| ddrH|dd  }| ||||| d S )Nr   r      )r9   r:   r7   rf   rh   
startswithZcreate_static_lib)r/   r   r   r   r   r{   r~   r   r   r   r   r   r   r?   r;   Z_extr   r   r    r     s    )
NNNNNFNNNN)
NNNNNFNNNN)1
__future__r   r   r9   r   collections.abcr   importlib.machineryr   importlib.utilr   r]   pathlibr   typingr   Zsetuptools.distr	   Zsetuptools.errorsr
   Zsetuptools.extensionr   r   	distutilsr   distutils.ccompilerr   distutils.sysconfigr   r   Zdistutils.command.build_extr   r,   ZCython.Distutils.build_ext
__import__ImportErrorr   r   r!   r%   rj   ri   r   r5   dlhasattrr'   r)   r   r   r   r   r    <module>   s   
  9          !          