
    df=                        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 	 d dlmZ  ed        ed       d dlm Z! d Z"dZ#dZ$dZ%ejL                  dk(  rdZ$ne jN                  dk7  r	 d dl(Z( e)e(d      xZ$Z#d Z*d Z+ G d de      Ze$se jN                  dk(  r		 	 	 	 ddZ,ydZ%	 	 	 	 ddZ,y# e$ r eZY w xY w# e$ r Y Jw xY w)    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                 f   t         j                  dk(  ret        j                         }	 dt        d<   dt        d<   dt        d<   t	        |        t        j
                          t        j                  |       y t	        |        y # t        j
                          t        j                  |       w xY w)Ndarwinz0gcc -Wl,-x -dynamiclib -undefined dynamic_lookupr   z -dynamiclibCCSHAREDz.dylibSO)sysplatform_CONFIG_VARScopyr   clearupdate)compilertmps     U/home/api-vastappli/venv/lib/python3.12/site-packages/setuptools/command/build_ext.py_customize_compiler_for_shlibr!      s    
||x !		% C $'5L$!)Lx( $8$  $s   &B +B0Fsharedr   TntRTLD_NOWc                     t         r| S dS )N )	have_rtld)ss    r    if_dlr)   @   s    1!r!    c                  <    t         D ]  } d| v r| c S | dk(  s| c S  y)z;Return the file extension for an abi3-compliant Extension()z.abi3z.pydNr   )suffixs    r    get_abi3_suffixr-   D   s+    $ fMvM	r*   c                      e Zd ZU dZeed<   dZeed<   d Zdede	e
e
f   fdZd Zded	e
de
fd
Zdee	e
e
f      fdZd Zd Zd Zd Zd Zd Zd Zdee
   fdZdee
e
f   fdZd Zd ZddZdde
defdZde
fdZy)r
   Feditable_modeinplacec                     | j                   dc}| _         t        j                  |        || _         |r| j                          yy)z;Build extensions in build directory, then copy if --inplacer   N)r0   
_build_extruncopy_extensions_to_source)selfold_inplaces     r    r3   zbuild_ext.runQ   s;    $(LL!!T\t"**, r*   extreturnc                    | j                  |j                        }| j                  |      }|j                  d      }dj	                  |d d       }|j                  |      }t        j                  j	                  |t        j                  j                  |            }t        j                  j	                  | j                  |      }	||	fS )N.)
get_ext_fullnamenameget_ext_filenamesplitjoinget_package_dirospathbasename	build_lib)
r5   build_pyr7   fullnamefilenamemodpathpackagepackage_dirinplace_fileregular_files
             r    _get_inplace_equivalentz!build_ext._get_inplace_equivalentY   s    ((2((2..%((73B<(..w7ww||K1A1A(1KLww||DNNH=l++r*   c                 j   | j                  d      }| j                  D ]  }| j                  ||      \  }}t        j                  j                  |      s|j                  s| j                  ||| j                         |j                  sn| j                  ||      }| j                  ||d        y )NrF   )levelT)compile)get_finalized_command
extensionsrN   rB   rC   existsoptional	copy_fileverbose_needs_stub_get_equivalent_stub_write_stub_file)r5   rF   r7   rL   rM   inplace_stubs         r    r4   z#build_ext.copy_extensions_to_sourcec   s    --j9?? 	GC)-)E)EhPS)T&L,
 ww~~l+3<<|\N#88lK%%lC%F	Gr*   output_filec                     t         j                  j                  |      }|j                  j	                  d      \  }}}t         j                  j                  ||       dS Nr:   .py)rB   rC   dirnamer=   
rpartitionr@   )r5   r7   r\   dir__r=   s         r    rY   zbuild_ext._get_equivalent_stubt   sK    ww{+XX((-
1d'',,tT*+3//r*   c              #     K   | j                   sy | j                  d      }| j                  d      j                  xs d}| j                  D ]n  }| j	                  ||      \  }}||f |j
                  s+| j                  ||      }| j                  ||      }t        ||      }t        ||      }	|	|f p y w)NrF   install_libr&   )optimization)r0   rR   optimizerS   rN   rX   rY   _compiled_file_name)
r5   rF   optr7   rL   rM   r[   regular_stubinplace_cacheoutput_caches
             r    _get_output_mappingzbuild_ext._get_output_mappingy   s     ||--j9((7@@FB?? 	4C)-)E)EhPS)T&L,..  $88lK#88lK 3Ls S2<cR#]33!	4s   A4B>7AB>c                    t        j                  d      }|r/t        j                  j                  |j	                  d       |z   }n!t        j                  | |      }t        d      }|| j                  v r| j                  |   }t        |d      xr
 t               }|r|d t        |        }t               }||z   }t        |t              rBt         j                  j                  |      \  }}| j                  j!                  |t"              S t$        rQ|j&                  rEt         j                  j	                  |      \  }}t         j                  j                  |d|z         S |S )NSETUPTOOLS_EXT_SUFFIXr:   
EXT_SUFFIXpy_limited_apizdl-)rB   getenvrC   r@   r?   r2   r>   r   ext_mapgetattrr-   len
isinstancer   splitextshlib_compilerlibrary_filenamelibtype	use_stubs_links_to_dynamic)r5   rG   so_extrH   r7   use_abi3fnds           r    r>   zbuild_ext.get_ext_filename   s    23ww||X^^C%89FBH!224BH#L1Ft||#,,x(Cs$45K/:KH#Mc&k\2(*#f,#w'''**84C**;;BHHs44h/2ww||Aurz22r*   c                 f    t        j                  |        d | _        g | _        i | _        d| _        y )NF)r2   initialize_optionsrx   shlibsrs   r/   r5   s    r    r   zbuild_ext.initialize_options   s.    %%d+""r*   c                    t        j                  |        | j                  xs g | _        | j                  | j                         | j                  D cg c]  }t	        |t
              r| c}| _        | j                  r| j                          | j                  D ]"  }| j                  |j                        |_
        $ | j                  D ]j  }|j                  }|| j                  |<   || j                  |j                  d      d   <   | j                  xr | j                  |      xs d}|xr t        xr t	        |t
               }||_        ||_        | j#                  |      x}|_        t&        j(                  j+                  t&        j(                  j-                  | j.                  |            }|r)||j0                  vr|j0                  j3                  |       |st        s$t&        j4                  |j6                  vsB|j6                  j3                  t&        j4                         m | j8                  rd| _        y y c c}w )Nr:   r;   FT)r2   finalize_optionsrS   check_extensions_listrv   r   r   setup_shlib_compilerr<   r=   
_full_namers   r?   links_to_dynamicr{   r|   rX   r>   
_file_namerB   rC   r`   r@   rE   library_dirsappendcurdirruntime_library_dirsr/   r0   )r5   r7   rG   ltdnsrH   libdirs          r    r   zbuild_ext.finalize_options   s   ##D)///R""4??3&*oo 4s$S'2  4;;%%'?? 	=C!22388<CN	=?? 	;C~~H%(DLL" 58DLL,R01++<$"7"7"<ECCC:c7+C'CB$'C! CO(,(=(=h(GGHs~WW__RWW\\$..(%KLFvS%5%55  ''/yRYYc6N6N%N((//		:#	;& DL 34s   Ic                    t        | j                  | j                  | j                        x}| _        t        |       | j                  |j                  | j                         | j                  &| j                  D ]  \  }}|j                  ||        | j                  "| j                  D ]  }|j                  |        | j                  |j                  | j                         | j                  |j                  | j                         | j                   |j#                  | j                          | j$                  |j'                  | j$                         t(        j+                  |      |_        y )N)r   dry_runforce)r   r   r   r   rx   r!   include_dirsset_include_dirsdefinedefine_macroundefundefine_macro	librariesset_librariesr   set_library_dirsrpathset_runtime_library_dirslink_objectsset_link_objectslink_shared_object__get__)r5   r   r=   valuemacros        r    r   zbuild_ext.setup_shlib_compiler   s<   )5]]DLL

*
 	
4& 	&h/(%%d&7&78;;"!% 3u%%dE23::! /''./>>%""4>>2(%%d&7&78::!--djj9(%%d&7&78 '9&@&@&J#r*   c                 f    t        |t              r|j                  S t        j                  | |      S N)rv   r   export_symbolsr2   get_export_symbols)r5   r7   s     r    r   zbuild_ext.get_export_symbols   s+    c7#%%%,,T377r*   c                 D   |j                          | j                  }	 t        |t              r| j                  | _        t        j                  | |       |j                  r-| j                  d      j                  }| j                  ||       || _        y # || _        w xY w)NrF   )_convert_pyx_sources_to_langr   rv   r   rx   r2   build_extensionrX   rR   rE   
write_stub)r5   r7   	_compilerrE   s       r    r   zbuild_ext.build_extension   s}    ((*MM		&#w' $ 3 3&&tS1 66zBLL		3/%DMIDMs   A0B 	Bc                    t         j                  | j                  D cg c]  }|j                   c}      dj	                  |j                  j                  d      dd dgz         t        fd|j                  D              S c c}w )z?Return true if 'ext' links to a dynamic lib in the same packager:   Nr;   r&   c              3   ,   K   | ]  }|z   v   y wr    ).0libnamelibnamespkgs     r    	<genexpr>z-build_ext.links_to_dynamic.<locals>.<genexpr>  s     J3=H,Js   )dictfromkeysr   r   r@   r?   anyr   )r5   r7   libr   r   s      @@r    r   zbuild_ext.links_to_dynamic   sl    
 ==DKK!HS#..!HIhhs~~++C0"5<=JCMMJJJ "Is   B
c                     | j                   r't        | j                         j                               S t	        t        j                  |       | j                         z         S r   )r0   listget_output_mappingkeyssortedr2   get_outputs_build_ext__get_stubs_outputsr   s    r    r   zbuild_ext.get_outputs  sJ    <<//166899j,,T2T5M5M5OOPPr*   c                 P    | j                         }t        t        |d             S )z1See :class:`setuptools.commands.build.SubCommand`c                     | d   S )Nr   r   )xs    r    <lambda>z.build_ext.get_output_mapping.<locals>.<lambda>  s
    !A$ r*   )key)rm   r   r   )r5   mappings     r    r   zbuild_ext.get_output_mapping  s"    **,F7788r*   c                       fd j                   D        }t        j                  | j                               }t	        d |D              S )Nc              3      K   | ]S  }|j                   rEt        j                  j                  j                  g|j
                  j                  d         U yw)r:   N)rX   rB   rC   r@   rE   r   r?   )r   r7   r5   s     r    r   z0build_ext.__get_stubs_outputs.<locals>.<genexpr>  sE      
 GGLLD#..*>*>s*CD
s   AAc              3   ,   K   | ]  \  }}||z     y wr   r   )r   basefnexts      r    r   z0build_ext.__get_stubs_outputs.<locals>.<genexpr>  s     :[T5D5L:s   )rS   	itertoolsproduct!_build_ext__get_output_extensionsr   )r5   ns_ext_basespairss   `  r    __get_stubs_outputszbuild_ext.__get_stubs_outputs  sD    

 !!,0L0L0NO:E:::r*   c              #   \   K   d d | j                  d      j                  rd y y w)Nr_   z.pycrF   z.pyo)rR   rg   r   s    r    __get_output_extensionsz!build_ext.__get_output_extensions  s.     %%j1::L ;s   *,c                     t        j                  j                  |g|j                  j	                  d       dz   }| j                  |||       y r^   )rB   rC   r@   r   r?   rZ   )r5   
output_dirr7   rQ   	stub_files        r    r   zbuild_ext.write_stub!  s?    GGLLHcnn.B.B3.GH5P	ig6r*   r   c                 (   t        j                  d|j                  |       |r-t        j                  j                  |      rt        |dz         | j                  st        |d      }|j                  dj                  dddt        d      z   d	t        j                  j                  |j                        z  d
ddt        d      dddt        d      dddddt        d      dddg             |j                          |r| j                  |       y y )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   infor   rB   rC   rT   r   r   openwriter@   r)   rD   r   close_compile_and_remove_stub)r5   r   r7   rQ   fs        r    rZ   zbuild_ext._write_stub_file%  s   3S^^YOrww~~i0I(IIJJ||Y$AGG		*CF&M"$gg&&s~~67 +6+?@.>@AI9F7!>?,%1 8 GGI)))4 r*   c                 0   ddl m}  ||gdd| j                         | j                  d      j                  }|dkD  r ||g|d| j                         t
        j                  j                  |      r#| j                  st        j                  |       y y y )Nr   )byte_compileT)rg   r   r   re   )	distutils.utilr   r   rR   rg   rB   rC   rT   unlink)r5   r   r   rg   s       r    r   z"build_ext._compile_and_remove_stubK  sz    /i[1	7--m<EEa<)x#T\\;77>>)$T\\IIi  .:$r*   N)F) __name__
__module____qualname__r/   bool__annotations__r0   r3   r   r	   strrN   r4   rY   r   rm   r>   r   r   r   r   r   r   r   r   r   r   r   r   r   rZ   r   r   r*   r    r
   r
   M   s    M4GT-,Y ,5c? ,G"0	 0 0 0
4XeCHo%> 42.# @K68
&KQT#Y Q
9DcN 9
	;7$5# $5I $5L
!# 
!r*   r
   c                 R    | j                  | j                  |||||||||	|
||       y r   )linkSHARED_LIBRARY)r5   objectsoutput_libnamer   r   r   r   r   debugextra_preargsextra_postargs
build_temptarget_langs                r    r   r   [  s5    
 			.	<1EE=.		
r*   staticc                    |J t         j                  j                  |      \  }}t         j                  j                  |      \  }}| j	                  d      j                  d      r|dd  }| j                  |||||       y )Nr   r      )rB   rC   r?   rw   ry   
startswithcreate_static_lib)r5   r   r   r   r   r   r   r   r   r   r   r   r   rH   rD   r7   s                   r    r   r   j  s{     !!!ww}}^<
H((2#  %007  |HXz5+	
r*   )
NNNNNr   NNNN)-rB   r   r   importlib.machineryr   importlib.utilr   rh   typingr   r   r   r	   distutils.command.build_extr
   _du_build_extdistutils.ccompilerr   distutils.sysconfigr   r   	distutilsr   setuptools.errorsr   setuptools.extensionr   r   Cython.Distutils.build_extr2   
__import__ImportErrorr   r   r!   r'   r{   rz   r   r=   dlhasattrr)   r-   r   r   r*   r    <module>r
     s   	 
  2 C . . B , B  ' 3B %&
 z  <%( 		
<<8IWW_ 'J 77	I
"H!
 H!V 4 GKIMIM	

 G GKIMIM	
i
  JL  s$   C C' C$#C$'C/.C/