
    {fr                        d dl mZ d dlZd dlZ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 d dlZ G d d	      Z G d
 de      Zd Zy)    )annotationsN)Path   )Backend)Template)chainc                  z    e Zd 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	 Zy
)MesonTemplatez+Template meson build file generation class.c                   || _         t        t              j                  j	                         dz  | _        || _        || _        || _        || _	        ||| _
        ng | _
        i | _        || _        | j                  | j                  | j                  | j                   | j"                  g| _        |
| _        || _        d| _        y )Nzmeson.build.templatez                     )
modulenamer   __file__parentabsolutebuild_template_pathsourcesdeps	librarieslibrary_dirsinclude_dirssubstitutionsobjectsinitialize_templatesources_substitutiondeps_substitutioninclude_substitutionlibraries_substitutionpipeline
build_type
python_exeindent)selfr   r   r   r   r   r   object_fileslinker_argsc_argsr   r   s               W/home/lukas/deratizacia/env/lib/python3.12/site-packages/numpy/f2py/_backends/_meson.py__init__zMesonTemplate.__init__   s     %N!!**,/EE 	  	"(# ,D "D#$$%%""%%''
 %$    c                    | j                   j                         s6t        t        j                  d| j                   j                          d      | j                   j                         S )NzMeson build template z does not exist.)r   is_fileFileNotFoundErrorerrnoENOENTr   	read_textr!   s    r%   meson_build_templatez"MesonTemplate.meson_build_template<   sa    ''//1#,,5578"#  ''1133r'   c                    | j                   | j                  d<   | j                  | j                  d<   | j                  | j                  d<   y )Nr   	buildtypepython)r   r   r   r   r.   s    r%   r   z!MesonTemplate.initialize_templateF   s>    +/??<(*.//;''+8$r'   c           	         dj                  | j                  D cg c]  }| j                   d| d c}      | j                  d<   y c c}w )N,
'''''',source_list)joinr   r    r   )r!   sources     r%   r   z"MesonTemplate.sources_substitutionK   sA    ,1JJ;?<<H}Cxt,H-
=)Hs   Ac           	         d| j                    j                  | j                  D cg c]  }| j                    d| d c}      | j                  d<   y c c}w )Nr4   zdependency('z'),dep_list)r    r8   r   r   )r!   deps     r%   r   zMesonTemplate.deps_substitutionP   sN    +.t{{m)<)A)A=AYYGc}LS1G*
:&G   Ac                   dj                  t        | j                        D cg c]  \  }}d| d| d c}}      | j                  d<   dj                  | j                  D cg c]  }|j                  dd       d| d	 c}      | j                  d
<   d| j                   j                  | j                  D cg c]#  }| j                   |j                  dd       d% c}      | j                  d<   d| j                   j                  t        t        | j                              D cg c]  }| j                   d| d c}      | j                  d<   y c c}}w c c}w c c}w c c}w )N
lib_dir_z( = declare_dependency(link_args : ['''-Lz'''])lib_dir_declarations._z& = declare_dependency(link_args : ['-lz'])lib_declarations,lib_listlib_dir_list)	r8   	enumerater   r   r   replacer    rangelen)r!   ilib_dirlibs       r%   r   z$MesonTemplate.libraries_substitutionU   sh   59YY #,D,=,=">Aw 1#EgYeT6
12 26  >> ;;s3'((NseSVW2
-. ,.dkk]);)@)@@DO}S[[S12!4O*
:& 02$++-?-D-D38T=N=N9O3PQa}HQCq)Q.
>*! P Rs   E 
%E&>(E+2E0c           	         d| j                    j                  | j                  D cg c]  }| j                    d| d c}      | j                  d<   y c c}w )Nr4   r5   r6   inc_list)r    r8   r   r   )r!   incs     r%   r   z"MesonTemplate.include_substitutionk   sP    +.t{{m)<)A)A595F5FGc}CuD)G*
:&Gr=   c                    | j                   D ]	  } |         t        | j                               }|j                  | j                        }t        j                  dd|      }|S )Nz,,rE   )r   r   r/   
substituter   resub)r!   nodetemplatemeson_builds       r%   generate_meson_buildz"MesonTemplate.generate_meson_buildp   s[    MM 	DF	D5578))$*<*<=ffUC5r'   N)r   strr   
list[Path]r   	list[str]r   r\   r   r[   r   r[   r"   r[   r#   r\   r$   r\   r   rZ   r   rZ   )returnrZ   r]   None)__name__
__module____qualname____doc__r&   r/   r   r   r   r   r   rY    r'   r%   r
   r
      s    5%% % 	%
 % !% !% !% % % % %N47





,

r'   r
   c                  D     e Zd Z fdZddZddZd ZddZd	dZ xZ	S )
MesonBackendc                    t        |   |i | | j                  j                  dg       | _        d| _        t        d | j                  D              rd| _        y d| _        y )Ndependenciesbbdirc              3  $   K   | ]  }d |v  
 yw)debugNrd   ).0flags     r%   	<genexpr>z(MesonBackend.__init__.<locals>.<genexpr>   s     Et7d?Es   rk   release)	superr&   	extra_datgetrh   meson_build_diranyfc_flagsr   )r!   argskwargs	__class__s      r%   r&   zMesonBackend.__init__z   s[    $)&) NN..~rB&Et}}EEG 	KT 	r'   c                   t        |      | j                  z  }t        |j                  | j                   d      |j                  | j                   d            }|D ]n  }t        j
                         |j                  z  }|j                         r|j                          t        j                  ||       t        j                  |       p y )Nz*.soz*.pyd)r   rs   r   globr   cwdnameexistsunlinkshutilcopy2osremove)r!   	build_dirwalk_dirpath_objectspath_object	dest_paths         r%   _move_exec_to_rootzMesonBackend._move_exec_to_root   s    	?T%9%99MMT__-T23MMT__-U34
 ( 	#K
[%5%55I!  "LLi0IIk"	#r'   c                   t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  t        j                        }|j                         }t        |      j                  dd       t        |      dz  }|j!                  |       |S )z1Writes the meson build file at specified locationTparentsexist_okzmeson.build)r
   r   r   rh   r   r   r   extra_objects
flib_flagsru   r   sys
executablerY   r   mkdir
write_text)r!   r   meson_templatesrcmeson_build_files        r%   write_meson_buildzMesonBackend.write_meson_build   s    &OOLLNNOOMMOONN
 113YdT:	?]:##C(r'   c                4    t        j                  ||d       y )NT)r{   check)
subprocessrun)r!   commandr{   s      r%   _run_subprocess_commandz$MesonBackend._run_subprocess_command   s    wCt4r'   c                    dd| j                   g}| j                  ||       ddd| j                   g}| j                  ||       y )Nmesonsetupcompilez-C)rs   r   )r!   r   setup_commandcompile_commands       r%   	run_mesonzMesonBackend.run_meson   sH     '4+?+?@$$]I>"ItT5I5IJ$$_i@r'   c                   t        | j                  | j                  | j                        | _        | j	                  | j                         | j                  | j                         | j                  | j                         y )N)_prepare_sourcesr   r   r   r   r   r   r.   s    r%   r   zMesonBackend.compile   sR    't~~Vt~~.t~~&/r'   )r   r   )r   r   r]   r_   r^   )
r`   ra   rb   r&   r   r   r   r   r   __classcell__)rx   s   @r%   rf   rf   y   s"    
# *5A0r'   rf   c                   |j                         }t        |      j                  dd       |D ]L  }t        |      j                         st        |      j	                         s7t        j                   ||       N t        |  d      t        |  d      t        |  d      g}t        |      }|D ]a  }|j                         st        j                   |||j                  z         |j                  |j                         |j                          c |D cg c]/  }t        |      j                  dk(  st        |      j                  1 }}|S c c}w )NTr   zmodule.cz-f2pywrappers2.f90z-f2pywrappers.fz.pyf)
copyr   r   r}   r)   r   r|   appendr~   suffix)mnamer   bdirextended_sourcesr9   generated_sourcesgenerated_sources          r%   r   r      sE   ||~JTD1 &< T&\%9%9%;KK%& 	wh w()*wo&'
 :D- &""$KK($1A1F1F*FG##$4$9$9:##%	& 'F|""f, 	V 
 s   4E)
__future__r   r   r+   r   r   r   rT   pathlibr   _backendr   stringr   	itertoolsr   warningsr
   rf   r   rd   r'   r%   <module>r      sH    " 	    
 	     d dN:07 :0zr'   