
    7f`E                       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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           n# e $ r eZY nw xY w ed           d dlm!Z" d Z#dZ$dZ%dZ&ej'        dk    rdZ%n*ej(        dk    r	 d dl)Z) e*e)d          xZ%Z$n# e $ r Y nw xY wd Z+d Z, G d de          Ze%sej(        dk    r	 	 	 	 	 	 	 	 	 	 ddZ-dS dZ&	 	 	 	 	 	 	 	 	 	 ddZ-dS )    )annotationsNEXTENSION_SUFFIXES)cache_from_source)Iterator)Path)	build_ext)new_compiler)customize_compilerget_config_var)log)	BaseError)	ExtensionLibraryzCython.Compiler.MainLDSHARED)_config_varsc                p   t           j        dk    rt          j                    }	 dt          d<   dt          d<   dt          d<   t	          |            t          j                     t          j        |           d S # t          j                     t          j        |           w xY wt	          |            d S )Ndarwinz0gcc -Wl,-x -dynamiclib -undefined dynamic_lookupr   z -dynamiclibCCSHAREDz.dylibSO)sysplatform_CONFIG_VARScopyr   clearupdate)compilertmps     Z/home/feoh/.local/pipx/shared/lib/python3.11/site-packages/setuptools/command/build_ext.py_customize_compiler_for_shlibr    $   s    
|x !!
	% C $ (6L$!)Lx(((   $$$$$    $$$$8$$$$$s   -A; ;)B$Fsharedr   TntRTLD_NOWc                    t           r| ndS )N )	have_rtld)ss    r   if_dlr(   H   s    !11r!    c                 >    t           D ]} d| v r| c S | dk    r| c S dS )z;Return the file extension for an abi3-compliant Extension()z.abi3z.pydNr   )suffixs    r   get_abi3_suffixr,   L   sC    $  fMMMvMMM 4r)   c                      e Zd ZU dZded<   dZded<   d Zd&d
Zd Zd'dZ	d(dZ
d Zd Zd Zd Zd Zd Zd Zd)dZd*dZd)dZd+dZd Zd  Zd,d!Zd,d-d#Zd.d$Zd%S )/r	   Fbooleditable_modeinplacec                    | j         dc}| _         t          j        |            || _         |r|                                  dS dS )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.runZ   sS    $(L!!T\t" 	-**,,,,,	- 	-r)   extr   returntuple[str, str]c                   |                      |j                  }|                     |          }|                    d          }d                    |d d                   }|                    |          }t          j                            |t          j                            |                    }t          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_equivalentb   s    ((22((22..%%((73B3<((..w77w||K1A1A(1K1KLLw||DNH==l++r)   c                f   |                      d          }| j        D ]}|                     ||          \  }}t          j                            |          s|j        s|                     ||| j                   |j	        r.| 
                    ||          }|                     ||d           d S )NrG   )levelT)compile)get_finalized_command
extensionsrO   rC   rD   existsoptional	copy_fileverbose_needs_stub_get_equivalent_stub_write_stub_file)r5   rG   r7   rM   rN   inplace_stubs         r   r4   z#build_ext.copy_extensions_to_sourcel   s    --j99? 	G 	GC)-)E)EhPS)T)T&L,
 w~~l++ O3< O|\NNN G#88lKK%%lC%FFF	G 	Gr)   output_filestrc                    t           j                            |          }|j                            d          \  }}}t           j                            ||           dS Nr;   .py)rC   rD   dirnamer>   
rpartitionrA   )r5   r7   r]   dir__r>   s         r   rZ   zbuild_ext._get_equivalent_stub}   sO    w{++X((--
1d',,tT**////r)   Iterator[tuple[str, str]]c              #    K   | j         sd S |                     d          }|                     d          j        pd}| j        D ]|}|                     ||          \  }}||fV  |j        rT|                     ||          }|                     ||          }t          ||          }t          ||          }	|	|fV  }d S )NrG   install_libr%   )optimization)r0   rS   optimizerT   rO   rY   rZ   _compiled_file_name)
r5   rG   optr7   rM   rN   r\   regular_stubinplace_cacheoutput_caches
             r   _get_output_mappingzbuild_ext._get_output_mapping   s      | 	F--j99((77@FB? 	4 	4C)-)E)EhPS)T)T&L,.... 4  $88lKK#88lKK 3Ls S S S2<cRRR#]3333!	4 	4r)   c                   t          j        d          }|r*t          j        j        |                    d           |z   }n$t          j        | |          }t          d          }|| j        v r| j        |         }|j	        ot                      }|r+|d t          |                    }t                      }||z   }t          |t                    rBt           j                            |          \  }}| j                            |t"                    S t$          rL|j        rEt           j                            |          \  }}t           j                            |d|z             S |S )NSETUPTOOLS_EXT_SUFFIXr;   
EXT_SUFFIXzdl-)rC   getenvrD   rA   r@   r2   r?   r   ext_mappy_limited_apir,   len
isinstancer   splitextshlib_compilerlibrary_filenamelibtype	use_stubs_links_to_dynamic)r5   rH   so_extrI   r7   use_abi3fnds           r   r?   zbuild_ext.get_ext_filename   sE   233 	2w|X^^C%8%89FBHH!24BBH#L11Ft|##,x(C)?o.?.?H -#Ns6{{lN3(**#f,#w'' 3'**844C*;;BHHH 3s4 3h//2w||Aurz222r)   c                f    t          j        |            d | _        g | _        i | _        d| _        d S )NF)r2   initialize_optionsrz   shlibsru   r/   r5   s    r   r   zbuild_ext.initialize_options   s7    %d+++""r)   c                   t          j        |            | j        pg | _        |                     | j                   d | j        D             | _        | j        r|                                  | j        D ]!}|                     |j                  |_        "| j        D ]E}|j        }|| j	        |<   || j	        |
                    d          d         <   | j        r|                     |          pd}|ot          ot          |t                     }||_        ||_        |                     |          x}|_        t&          j                            t&          j                            | j        |                    }|r#||j        vr|j                            |           |r>t          r7t&          j        |j        vr$|j                            t&          j                   G| j        r	d| _        d S d S )Nc                <    g | ]}t          |t                    |S  )rx   r   ).0r7   s     r   
<listcomp>z.build_ext.finalize_options.<locals>.<listcomp>   s'    RRRsC9Q9QRsRRRr)   r;   r<   FT)r2   finalize_optionsrT   check_extensions_listr   setup_shlib_compilerr=   r>   
_full_nameru   r@   links_to_dynamicr}   rx   r   r~   rY   r?   
_file_namerC   rD   rb   rA   rF   library_dirsappendcurdirruntime_library_dirsr/   r0   )r5   r7   rH   ltdnsrI   libdirs          r   r   zbuild_ext.finalize_options   s   #D)))//R""4?333RRdoRRR; 	(%%'''? 	= 	=C!2238<<CNN? 	; 	;C~H%(DL" 58DL,,R01+<$"7"7"<"<ECCC:c7+C+C'CB$'C! CO(,(=(=h(G(GGHs~W__RW\\$.(%K%KLLF 0vS%555 ''/// ;y ;RYc6N%N%N(//	::: 	 DLLL	  	 r)   c                   t          | j        | j        | j                  x}| _        t          |           | j        |                    | j                   | j        #| j        D ]\  }}|	                    ||           | j
        | j
        D ]}|                    |           | j        |                    | j                   | j        |                    | j                   | j        |                    | j                   | j        |                    | j                   t(                              |          |_        d S )N)r   dry_runforce)r
   r   r   r   rz   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]DL
*
 *
 *
 	
4& 	&h///(%%d&7888;"#{ 3 3e%%dE2222:! / /''....>%""4>222(%%d&7888:!--dj999(%%d&7888 '9&@&@&J&J###r)   c                d    t          |t                    r|j        S t          j        | |          S N)rx   r   export_symbolsr2   get_export_symbols)r5   r7   s     r   r   zbuild_ext.get_export_symbols   s0    c7## 	&%%,T3777r)   c                >   |                                  | j        }	 t          |t                    r| j        | _        t          j        | |           |j        r0|                     d          j	        }| 
                    ||           || _        d S # || _        w xY w)NrG   )_convert_pyx_sources_to_langr   rx   r   rz   r2   build_extensionrY   rS   rF   
write_stub)r5   r7   	_compilerrF   s       r   r   zbuild_ext.build_extension   s    ((***M		&#w'' 4 $ 3&tS111 0 66zBBL		3///%DMMMIDM%%%%s   A-B 	Bc                   t                               d | j        D                       d                    |j                            d          dd         dgz             t          fd|j        D                       S )z?Return true if 'ext' links to a dynamic lib in the same packagec                    g | ]	}|j         
S r   )r   )r   libs     r   r   z.build_ext.links_to_dynamic.<locals>.<listcomp>
  s    !H!H!HS#.!H!H!Hr)   r;   Nr<   r%   c              3  &   K   | ]}|z   v V  d S r   r   )r   libnamelibnamespkgs     r   	<genexpr>z-build_ext.links_to_dynamic.<locals>.<genexpr>  s,      JJ3=H,JJJJJJr)   )dictfromkeysr   rA   r   r@   anyr   )r5   r7   r   r   s     @@r   r   zbuild_ext.links_to_dynamic  s    
 ==!H!HDK!H!H!HIIhhs~++C00"5<==JJJJJCMJJJJJJr)   	list[str]c                V    g t          j        |           |                                 S r   )r2   get_source_files_get_internal_dependsr   s    r   r   zbuild_ext.get_source_files  s)    R,T22RT5O5O5Q5QRRr)   Iterator[str]c              #  8  K   t          | j        j        pt          j                                                  }d | j        D             }dd}|D ]}t          |          }|                                r ||d           2d	|j        v r ||d
           H	 ||z                      d          }n# t          $ r  ||d           Y {w xY w	 |
                    |           n# t          $ r  ||d           Y w xY w|                                V  dS )zAYield ``ext.depends`` that are contained by the project directoryc              3  .   K   | ]}|j         D ]}|V  d S r   )depends)r   r7   deps      r   r   z2build_ext._get_internal_depends.<locals>.<genexpr>  s1      II3S[IIc3IIIIIIIr)   	orig_pathr^   reasonr8   Nonec                2    t          j        d| |           d S )NzJdependency %s won't be automatically included in the manifest: the path %s)r   info)r   r   s     r   skipz-build_ext._get_internal_depends.<locals>.skip  s+    H8	    r)   zmust be relativez..zcan't have `..` segmentsT)strictzdoesn't existzmust be inside the project rootN)r   r^   r   r^   r8   r   )r   distributionsrc_rootrC   r   resolverT   is_absolutepartsOSErrorrelative_to
ValueErroras_posix)r5   project_rootr   r   r   rD   resolveds          r   r   zbuild_ext._get_internal_depends  s     D-6C")DDLLNNII$/III	 	 	 	  	" 	"C99D!! S,---tz!!S4555(4/888EE   S/***$$\2222   S;<<< --//!!!!/	" 	"s$   B44CCC''D ?D c                    | j         r3t          |                                                                           S t	          t          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_outputs7  s\    < 	://116688999j,T22T5M5M5O5OOPPPr)   dict[str, str]c                h    |                                  }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)rp   r   r   )r5   mappings     r   r   zbuild_ext.get_output_mapping<  s0    **,,F7777888r)   c                      fd j         D             }t          j        |                                           }t	          d |D                       S )Nc              3     K   | ]?}|j         	t          j        j        j        g|j                            d           R  V  @dS )r;   N)rY   rC   rD   rA   rF   r   r@   )r   r7   r5   s     r   r   z0build_ext.__get_stubs_outputs.<locals>.<genexpr>C  se       
 

GLD#.*>*>s*C*CDDD
 
 
 
 
 
r)   c              3  &   K   | ]\  }}||z   V  d S r   r   )r   basefnexts      r   r   z0build_ext.__get_stubs_outputs.<locals>.<genexpr>J  s*      ::[T5D5L::::::r)   )rT   	itertoolsproduct!_build_ext__get_output_extensionsr   )r5   ns_ext_basespairss   `  r   __get_stubs_outputszbuild_ext.__get_stubs_outputsA  sj    
 
 
 

 
 
 !,0L0L0N0NOO::E::::::r)   c              #  Z   K   dV  dV  |                      d          j        rdV  d S d S )Nra   z.pycrG   z.pyo)rS   rj   r   s    r   __get_output_extensionsz!build_ext.__get_output_extensionsL  sH      %%j11: 	LLLLL	 	r)   c                    t          j        j        |g|j                            d          R  dz   }|                     |||           d S r`   )rC   rD   rA   r   r@   r[   )r5   
output_dirr7   rR   	stub_files        r   r   zbuild_ext.write_stubR  sN    GLHcn.B.B3.G.GHHH5P	ig66666r)   r   c                l   t          j        d|j        |           |r1t          j                            |          rt          |dz             | j        st          |dd          5 }d	                    ddd	t          d
          z   dt          j                            |j                  z  dddt          d          dddt          d          dddddt          d          dddg          }|                    |           d d d            n# 1 swxY w Y   |r|                     |           d S 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, 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   r   rC   rD   rU   r   r   openrA   r(   rE   r   write_compile_and_remove_stub)r5   r   r7   rR   fcontents         r   r[   zbuild_ext._write_stub_fileV  s   3S^YOOO 	Krw~~i00 	KI(IIJJJ| 	!iw777 !1))*CFvV$&(g&6&6s~&F&FG*6+?@@.>@AAI9F7!>??,%-%  0    3! ! ! ! ! ! ! ! ! ! ! ! ! ! !4  	5)))44444	5 	5s   (BDDDc                "   ddl m}  ||gdd| j                   |                     d          j        }|dk    r ||g|d| j                   t
          j                            |          r| j        st          j        |           d S d S d S )Nr   )byte_compileT)rj   r   r   rh   )	distutils.utilr  r   rS   rj   rC   rD   rU   unlink)r5   r   r  rj   s       r   r   z"build_ext._compile_and_remove_stubx  s    //////i[1D$,OOOO--m<<Ea<<L!	    7>>)$$ 	!T\ 	!Ii     	! 	! 	! 	!r)   N)r7   r   r8   r9   )r7   r   r]   r^   r8   r^   )r8   rf   )r8   r   )r8   r   )r8   r   )F)r   r^   r7   r   )r   r^   )__name__
__module____qualname__r/   __annotations__r0   r3   rO   r4   rZ   rp   r?   r   r   r   r   r   r   r   r   r   r   r   r   r   r[   r   r   r)   r   r	   r	   V   s        MG- - -, , , ,G G G"0 0 0 0
4 4 4 42  .# # #     >K K K68 8 8
& & &K K KS S S S$" $" $" $"LQ Q Q Q
9 9 9 9
	; 	; 	;  7 7 7 7 5  5  5  5  5D! ! ! ! ! !r)   r	   c                R    |                      | j        |||||||||	|
||           d S r   )linkSHARED_LIBRARY)r5   objectsoutput_libnamer   r   r   r   r   debugextra_preargsextra_postargs
build_temptarget_langs                r   r   r     sN     			 	
 	
 	
 	
 	
r)   staticc                ,   |J t           j                            |          \  }}t           j                            |          \  }}|                     d                              d          r
|dd          }|                     |||||           d S )Nr   r      )rC   rD   r@   ry   r{   
startswithcreate_static_lib)r5   r  r  r   r   r   r   r   r  r  r  r  r  rI   rE   r7   s                   r   r   r     s    * !!!!w}}^<<
H((22#  %%0077 	$  |Hw*e[QQQQQr)   )
NNNNNFNNNN).
__future__r   rC   r   r   importlib.machineryr   importlib.utilr   rk   typingr   pathlibr   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}   r|   r   r>   dlhasattrr(   r,   r   r   r)   r   <module>r+     s   " " " " " " 				 



     2 2 2 2 2 2 C C C C C C             B B B B B B , , , , , , B B B B B B B B       ' ' ' ' ' ' 3 3 3 3 3 3 3 3BBBBBB J%&&&&   JJJ z    = < < < < <% % %* 		
<8IIW__			 'J 7 77	II   " " "  o! o! o! o! o!
 o! o! o!d	  CR4 !
 
 
 
 
 
B G !R R R R R Rs$   A& &A0/A0'B: :CC