o
    5d3                     @   sz  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mZ d dlmZ d dlmZ d d	lmZ zd dlmZ ed
 W n eyU   eZY nw ed d dlmZ dd ZdZdZdZejdkrrdZne j dkrzd dl!Z!e"e!d ZZW n	 ey   Y nw dd Z#dd Z$G dd deZese j dkr				dddZ%dS dZ				dddZ%dS )     NEXTENSION_SUFFIXES)	build_ext)	copy_file)new_compiler)customize_compilerget_config_var)DistutilsError)log)LibraryzCython.Compiler.MainLDSHARED)_config_varsc              	   C   sl   t jdkr0t }zdtd< dtd< dtd< t|  W t  t| d S t  t| w t|  d S )Ndarwinz0gcc -Wl,-x -dynamiclib -undefined dynamic_lookupr   z -dynamiclibZCCSHAREDz.dylibSO)sysplatform_CONFIG_VARScopyr   clearupdate)compilertmp r   sC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\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| 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_suffixB   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   s2   | j d}| _ t|  || _ |r|   dS 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$   L   s   
zbuild_ext.runc           
      C   s   |  d}| jD ]J}| |j}| |}|d}d|d d }||}tj	|tj	
|}tj	| j|}	t|	|| j| jd |jrR| |pNt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   r*   r+   _needs_stub
write_stubcurdir)
r&   r'   extfullnamefilenamemodpathpackageZpackage_dirZdest_filenameZsrc_filenamer   r   r   r%   T   s&   





z#build_ext.copy_extensions_to_sourcec                 C   s   t d}|rt jj|d | }n
t| |}td}|| jv rk| j| }t	|do.t
 }|rA|d t|  }t
 }|| }t|trUt j|\}}| j|tS trk|jrkt j|\}}t j|d| S |S )NZSETUPTOOLS_EXT_SUFFIXr(   
EXT_SUFFIXZpy_limited_apizdl-)r3   getenvr4   r2   r1   r#   r0   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   r0   j   s&   




zbuild_ext.get_ext_filenamec                 C   s    t |  d | _g | _i | _d S N)r#   initialize_optionsrF   shlibsrA   r&   r   r   r   rN      s   

zbuild_ext.initialize_optionsc                 C   s(  t |  | jp	g | _| | j dd | jD | _| jr!|   | jD ]	}| |j|_q$| jD ]`}|j}|| j	|< || j	|
dd < | jrM| |pNd}|oXtoXt|t }||_||_| | }|_tjtj| j|}|r||jvr|j| |rtrtj|jvr|jtj q1d S )Nc                 S   s   g | ]	}t |tr|qS r   )rD   r   .0r:   r   r   r   
<listcomp>   s    
z.build_ext.finalize_options.<locals>.<listcomp>r(   r)   F)r#   finalize_optionsr-   Zcheck_extensions_listrO   setup_shlib_compilerr.   r/   
_full_namerA   r1   links_to_dynamicrI   rD   r   rJ   r7   r0   
_file_namer3   r4   dirnamer2   r6   library_dirsappendr9   runtime_library_dirs)r&   r:   r;   Zltdnsr<   libdirr   r   r   rT      s0   



zbuild_ext.finalize_optionsc                 C   s   t | j| j| jd }| _t| | jd ur|| j | jd ur/| jD ]
\}}|	|| q$| j
d ur?| j
D ]}|| q7| jd urJ|| j | jd urU|| j | jd ur`|| j | jd urk|| j t||_d S )N)r   r+   force)r   r   r+   r_   rF   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   r/   valueZmacror   r   r   rU      s*   







zbuild_ext.setup_shlib_compilerc                 C   s   t |tr|jS t| |S rM   )rD   r   export_symbolsr#   get_export_symbolsr&   r:   r   r   r   re      s   
zbuild_ext.get_export_symbolsc                 C   sl   |   | j}z*t|tr| j| _t| | |jr,| dj	}| 
|| W || _d S W || _d S || _w )Nr'   )Z_convert_pyx_sources_to_langr   rD   r   rF   r#   build_extensionr7   r,   r6   r8   )r&   r:   Z	_compilercmdr   r   r   rg      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   )rV   )rR   libr   r   r   rS      s    z.build_ext.links_to_dynamic.<locals>.<listcomp>r(   Nr)   r   c                 3   s    | ]	}|  v V  qd S rM   r   )rR   ZlibnameZlibnamespkgr   r   	<genexpr>       z-build_ext.links_to_dynamic.<locals>.<genexpr>)dictfromkeysrO   r2   rV   r1   anyr`   rf   r   rj   r   rW      s    zbuild_ext.links_to_dynamicc                 C   s   t | |   S rM   )r#   get_outputs_build_ext__get_stubs_outputsrP   r   r   r   rq      s   zbuild_ext.get_outputsc                    s6    fdd j D }t|  }tdd |D S )Nc                 3   s4    | ]}|j rtjj jg|jd R  V  qdS )r(   N)r7   r3   r4   r2   r6   rV   r1   rQ   rP   r   r   rl      s    
z0build_ext.__get_stubs_outputs.<locals>.<genexpr>c                 s   s    | ]	\}}|| V  qd S rM   r   )rR   baseZfnextr   r   r   rl      rm   )r-   	itertoolsproduct!_build_ext__get_output_extensionslist)r&   Zns_ext_basespairsr   rP   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 d S )N.pyz.pycr'   z.pyo)r,   optimizerP   r   r   r   Z__get_output_extensions   s   
z!build_ext.__get_output_extensionsFc                 C   s8  t d|j| tjj|g|jdR  d }|r&tj|r&t|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dddtddddg |  |rddlm} ||gdd| j	d  | d!j}|dkr||g|d| j	d  tj|r| j	st| d S d S d S d S )"Nz writing stub loader for %s to %sr(   ry   z 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   )byte_compileT)rz   r_   r+   Zinstall_lib)r
   inforV   r3   r4   r2   r1   existsr	   r+   openwriter    r5   rX   closeZdistutils.utilr}   r,   rz   unlink)r&   
output_dirr:   compileZ	stub_filefr}   rz   r   r   r   r8      sl   

	zbuild_ext.write_stubN)F)__name__
__module____qualname__r$   r%   r0   rN   rT   rU   re   rg   rW   rq   rr   rv   r8   r   r   r   r   r   K   s    	r   c                 C   s(   |  | j|||||||||	|
|| d S rM   )linkZSHARED_LIBRARY)r&   objectsoutput_libnamer   r`   rZ   r\   rd   debugextra_preargsextra_postargs
build_temptarget_langr   r   r   ra   $  s   ra   Zstaticc                 C   s^   |d u sJ t j|\}}t j|\}}| ddr$|dd  }| ||||| d S )Nxri      )r3   r4   r1   rE   rG   
startswithZcreate_static_lib)r&   r   r   r   r`   rZ   r\   rd   r   r   r   r   r   r<   r5   r:   r   r   r   ra   3  s   
)
NNNNNr   NNNN)&r3   r   rt   importlib.machineryr   Zdistutils.command.build_extr   Z_du_build_extZdistutils.file_utilr   Zdistutils.ccompilerr   distutils.sysconfigr   r   Zdistutils.errorsr	   	distutilsr
   Zsetuptools.extensionr   ZCython.Distutils.build_extr#   
__import__ImportErrorr   r   r   r   rI   rH   r   r/   dlhasattrr    r"   ra   r   r   r   r   <module>   s`    

	 W