<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
vhu3                 @   s  d dl 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mZ d dlmZ d dlmZ d dlmZ d d	lmZ y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rdZn>e j!dkr,y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s^e j!dkrjd!ddZ&ndZd"ddZ&dd  Z'dS )#    N)	build_ext)	copy_file)new_compiler)customize_compilerget_config_var)DistutilsError)log)Library)sixzCython.Compiler.MainLDSHARED)_config_varsc             C   sZ   t jdkrNtj }z$dtd< dtd< dtd< t|  W d tj  tj| X nt|  d S )Ndarwinz0gcc -Wl,-x -dynamiclib -undefined dynamic_lookupr   z -dynamiclibCCSHAREDz.dylibSO)sysplatform_CONFIG_VARScopyr   clearupdate)compilerZtmp r   /usr/lib/python3.6/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   <lambda>>   s    r   c              C   s>   x8dd t j D D ]"\} }}d| kr*| S | dkr| S qW dS )z;Return the file extension for an abi3-compliant Extension()c             s   s    | ]}|d  t jkr|V  qdS )   N)impZC_EXTENSION).0r   r   r   r   	<genexpr>C   s    z"get_abi3_suffix.<locals>.<genexpr>z.abi3z.pydN)r!   Zget_suffixes)suffix_r   r   r   get_abi3_suffixA   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j|  || _ |r*| j  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(   K   s
    
zbuild_ext.runc       
      C   s   | j d}x| jD ]}| j|j}| j|}|jd}dj|d d }|j|}tj	j|tj	j
|}tj	j| j|}	t|	|| j| jd |jr| j|ptj|d qW 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   r.   r/   _needs_stub
write_stubcurdir)
r*   r+   extfullnamefilenameZmodpathpackageZpackage_dirZdest_filenameZsrc_filenamer   r   r   r)   S   s    




z#build_ext.copy_extensions_to_sourcec             C   s   t j| |}|| jkr| j| }tjo4t|do4t }|r^td}|d t|  }|t  }t	|t
rtjj|\}}| jj|tS tr|jrtjj|\}}tjj|d| S |S )NZpy_limited_api
EXT_SUFFIXzdl-)r'   r5   ext_mapr
   ZPY3getattrr&   _get_config_var_837len
isinstancer	   r8   r9   splitextshlib_compilerlibrary_filenamelibtype	use_stubs_links_to_dynamicr6   r7   )r*   r@   rA   r?   Zuse_abi3Zso_extfndr   r   r   r5   i   s"    





zbuild_ext.get_ext_filenamec             C   s    t j|  d | _g | _i | _d S )N)r'   initialize_optionsrJ   shlibsrD   )r*   r   r   r   rQ   ~   s    
zbuild_ext.initialize_optionsc             C   s2  t j|  | jpg | _| j| j dd | jD | _| jrB| j  x| jD ]}| j|j|_qJW x| jD ]}|j}|| j	|< || j	|j
dd < | jr| j|pd}|otot|t }||_||_| j| }|_tjjtjj| j|}|o||jkr|jj| |rhtrhtj|jkrh|jjtj qhW d S )Nc             S   s   g | ]}t |tr|qS r   )rH   r	   )r"   r?   r   r   r   
<listcomp>   s    z.build_ext.finalize_options.<locals>.<listcomp>r,   r-   Fr0   )r'   finalize_optionsr2   Zcheck_extensions_listrR   setup_shlib_compilerr3   r4   
_full_namerD   r6   links_to_dynamicrM   rH   r	   rN   r<   r5   
_file_namer8   r9   dirnamer7   r;   library_dirsappendr>   runtime_library_dirs)r*   r?   r@   ZltdnsrA   Zlibdirr   r   r   rT      s,    

zbuild_ext.finalize_optionsc             C   s   t | j| j| jd }| _t| | jd k	r8|j| j | jd k	rbx| jD ]\}}|j	|| qJW | j
d k	rx| j
D ]}|j| qtW | jd k	r|j| j | jd k	r|j| j | jd k	r|j| j | jd k	r|j| j tj||_d S )N)r   r/   force)r   r   r/   r^   rJ   r   Zinclude_dirsZset_include_dirsZdefineZdefine_macroZundefZundefine_macro	librariesZset_librariesrZ   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   rU      s(    






zbuild_ext.setup_shlib_compilerc             C   s   t |tr|jS tj| |S )N)rH   r	   export_symbolsr'   get_export_symbols)r*   r?   r   r   r   rd      s    
zbuild_ext.get_export_symbolsc             C   s\   |j   | j}z@t|tr"| j| _tj| | |jrL| jdj	}| j
|| W d || _X d S )Nr+   )Z_convert_pyx_sources_to_langr   rH   r	   rJ   r'   build_extensionr<   r1   r;   r=   )r*   r?   Z	_compilercmdr   r   r   re      s    
zbuild_ext.build_extensionc                sP   t jdd | jD  dj|j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   )rV   )r"   libr   r   r   rS      s    z.build_ext.links_to_dynamic.<locals>.<listcomp>r,   Nr-   r   c             3   s   | ]}|  kV  qd S )Nr   )r"   Zlibname)libnamespkgr   r   r#      s    z-build_ext.links_to_dynamic.<locals>.<genexpr>r0   )dictfromkeysrR   r7   rV   r6   anyr_   )r*   r?   r   )rh   ri   r   rW      s     zbuild_ext.links_to_dynamicc             C   s   t j| | j  S )N)r'   get_outputs_build_ext__get_stubs_outputs)r*   r   r   r   rm      s    zbuild_ext.get_outputsc                s6    fdd j D }tj| j }tdd |D S )Nc             3   s0   | ](}|j rtjj jf|jjd  V  qdS )r,   N)r<   r8   r9   r7   r;   rV   r6   )r"   r?   )r*   r   r   r#      s   z0build_ext.__get_stubs_outputs.<locals>.<genexpr>c             s   s   | ]\}}|| V  qd S )Nr   )r"   baseZfnextr   r   r   r#      s    )r2   	itertoolsproduct!_build_ext__get_output_extensionslist)r*   Zns_ext_basesZpairsr   )r*   r   Z__get_stubs_outputs   s    

zbuild_ext.__get_stubs_outputsc             c   s"   dV  dV  | j djrdV  d S )Nz.pyz.pycr+   z.pyo)r1   optimize)r*   r   r   r   Z__get_output_extensions   s    z!build_ext.__get_output_extensionsFc             C   s.  t jd|j| tjj|f|jjd d }|rJtjj|rJt|d | j	st
|d}|jdjddd	td
 dtjj|j dddtddddtdddtddddg |j  |r*ddlm} ||gdd| j	d | jdj}|dkr||g|d| j	d tjj|r*| j	 r*tj| d S )Nz writing stub loader for %s to %sr,   z.pyz 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)rt   r^   r/   Zinstall_lib)r   inforV   r8   r9   r7   r6   existsr   r/   openwriteif_dlr:   rX   closeZdistutils.utilrw   r1   rt   unlink)r*   
output_dirr?   compileZ	stub_filefrw   rt   r   r   r   r=      sP    




zbuild_ext.write_stubN)F)__name__
__module____qualname__r(   r)   r5   rQ   rT   rU   rd   re   rW   rm   rn   rr   r=   r   r   r   r   r   J   s   	r   c             C   s(   | j | j|||||||||	|
|| d S )N)linkZSHARED_LIBRARY)r*   objectsoutput_libnamer   r_   rZ   r\   rc   debugextra_preargsextra_postargs
build_temptarget_langr   r   r   r`     s
    r`   Zstaticc             C   sR   t jj|\}}t jj|\}}| jdjdr<|dd  }| j||||| d S )Nxrg      )r8   r9   r6   rI   rK   
startswithZcreate_static_lib)r*   r   r   r   r_   rZ   r\   rc   r   r   r   r   r   rA   r:   r?   r   r   r   r`   ,  s    c             C   s   t jdk rd} t| S )z
    In https://github.com/pypa/setuptools/pull/837, we discovered
    Python 3.3.0 exposes the extension suffix under the name 'SO'.
    r   r-   r   )r   r   r-   )r   version_infor   )r4   r   r   r   rF   D  s    
rF   )
NNNNNr   NNNN)
NNNNNr   NNNN)(r8   r   rp   r!   Zdistutils.command.build_extr   Z_du_build_extZdistutils.file_utilr   Zdistutils.ccompilerr   Zdistutils.sysconfigr   r   Zdistutils.errorsr   Z	distutilsr   Zsetuptools.extensionr	   Zsetuptools.externr
   ZCython.Distutils.build_extr'   
__import__ImportErrorr   r   r   r   rM   rL   r   r4   Zdlhasattrr|   r&   r`   rF   r   r   r   r   <module>   sZ   

	 Q   	   
