
    eXf=                        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           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 )    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                 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     U/var/www/html/Qu*py/bism/lib/python3.11/site-packages/setuptools/command/build_ext.py_customize_compiler_for_shlibr!      s    
|x !!		% C $'5L$!)Lx(((   $$$$$    $$$$8$$$$$s   -A; ;)B$Fsharedr   TntRTLD_NOWc                     t           r| ndS )N )	have_rtld)ss    r    if_dlr)   @   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-   D   sH    $  fMMMvMMM  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dS )r
   F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.runQ   sS    $(L!!T\t" 	-**,,,,,	- 	-r*   extreturnc                    |                      |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_equivalentY   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 )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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_filec                     t           j                            |          }|j                            d          \  }}}t           j                            ||           dS Nr:   .py)rB   rC   dirnamer=   
rpartitionr@   )r5   r7   r\   dir__r=   s         r    rY   zbuild_ext._get_equivalent_stubt   sO    w{++X((--
1d',,tT**////r*   c              #     K   | j         sd S |                     d          }|                     d          j        pd}| j        D ]|}|                     ||          \  }}||fV  |j        rT|                     ||          }|                     ||          }t          ||          }t          ||          }	|	|fV  }d S )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      | 	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        |         }t          |d          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_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   sM   233 	2w|X^^C%8%89FBHH!24BBH#L11Ft|##,x(Cs$455K/:K:KH -#Mc&kk\M2(**#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_optionsrx   shlibsrs   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  )rv   r   ).0r7   s     r    
<listcomp>z.build_ext.finalize_options.<locals>.<listcomp>   s6     4 4 4s$S'224s 4 4 4r*   r:   r;   FT)r2   finalize_optionsrS   check_extensions_listr   setup_shlib_compilerr<   r=   
_full_namers   r?   links_to_dynamicr{   rv   r   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334 4do 4 4 4; 	(%%'''? 	= 	=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   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]DL
*
 *
 *
 	
4& 	&h///(%%d&7888;"!% 3 3u%%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)rv   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)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    ((***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   r@   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*   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_outputs  s\    < 	://116688999j,T22T5M5M5O5OOPPPr*   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)rm   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)rX   rB   rC   r@   rE   r   r?   )r   r7   r5   s     r    r   z0build_ext.__get_stubs_outputs.<locals>.<genexpr>  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>  s*      ::[T5D5L::::::r*   )rS   	itertoolsproduct!_build_ext__get_output_extensionsr   )r5   ns_ext_basespairss   `  r    __get_stubs_outputszbuild_ext.__get_stubs_outputs  sj    
 
 
 

 
 
 !,0L0L0N0NOO::E::::::r*   c              #   Z   K   dV  dV  |                      d          j        rdV  d S d S )Nr_   z.pycrF   z.pyo)rR   rg   r   s    r    __get_output_extensionsz!build_ext.__get_output_extensions  sH      %%j11: 	LLLLL	 	r*   c                     t          j        j        |g|j                            d          R  dz   }|                     |||           d S r^   )rB   rC   r@   r   r?   rZ   )r5   
output_dirr7   rQ   	stub_files        r    r   zbuild_ext.write_stub!  sN    GLHcn.B.B3.G.GHHH5P	ig66666r*   r   c                 \   t          j        d|j        |           |r1t          j                            |          rt          |dz             | j        st          |d          }|	                    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                     |                                 |r|                     |           d S d S )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%  sR   3S^YOOO 	Krw~~i00 	KI(IIJJJ| 	Y$$AGG		*CF&MM"$g&&s~667 +6+?@@.>@AAI9F7!>??,%1    8 GGIII 	5)))44444	5 	5r*   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)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  s    //////i[1	7 	7 	7 	7--m<<Ea<<L)x#T\; ; ; ;7>>)$$ 	!T\ 	!Ii     	! 	! 	! 	!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 G G"0	 0 0 0 0 0 0
4XeCHo%> 4 4 4 42  .# # #     @K K K68 8 8
& & &K K KQT#Y Q Q Q Q
9DcN 9 9 9 9
	; 	; 	;  7 7 7 7$5 $5# $5I $5 $5 $5 $5L
!# 
! 
! 
! 
! 
! 
!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   [  sF    
 			.	<1EE=.		
 	
 	
 	
 	
r*   staticc                 ,   |J t           j                            |          \  }}t           j                            |          \  }}|                     d                              d          r
|dd          }|                     |||||           d S )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     !!!!w}}^<<
H((22#  %%007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 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   " " "  H! H! H! H! H!
 H! H! H!V  '
4 GKIMIM	

 

 

 

 

 

 G GKIMIM	
 
 
 
 
 
s$   A   A*)A*!B4 4B<;B<