
    gi!                         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  G d d      Z G d	 d
e      Zd Zd Zd Zy)    N)chain)Path)Template   )Backendc                       e Zd ZdZdedee   dee   dee   dee   dee   dee   d	ee   d
ee   dedefdZdef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.
modulenamesourcesdeps	librarieslibrary_dirsinclude_dirsobject_fileslinker_argsfortran_args
build_type
python_exec                 <   || _         t        t              j                  j	                         dz  | _        || _        || _        || _        || _	        ||| _
        ng | _
        i | _        || _        |	D cg c],  }|j                  d      r|j                  d      sd| dn|. c}| _        | j                   | j"                  | j$                  | j&                  | j(                  | j*                  | j,                  g| _        |
| _        || _        d| _        y c c}w )Nzmeson.build.template'z                     )r
   r   __file__parentabsolutebuild_template_pathr   r   r   r   r   substitutionsobjects
startswithendswithr   initialize_templatesources_substitutionobjects_substitutiondeps_substitutioninclude_substitutionlibraries_substitutionfortran_args_substitutionpipeliner   r   indent)selfr
   r   r   r   r   r   r   r   r   r   r   xs                S/var/www/html/audio_env/lib/python3.12/site-packages/numpy/f2py/_backends/_meson.py__init__zMesonTemplate.__init__   s    %N!!**,/EE 	  	"(# ,D "D# "
 \\#.1::c?as!HJ

 $$%%%%""%%''**
 %$
s   61Dreturnc                     | 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3    Nc                     | j                   | j                  d<   | j                  | j                  d<   | j                  | j                  d<   y )Nr
   	buildtypepython)r
   r   r   r   r3   s    r*   r   z!MesonTemplate.initialize_templateI   s>    +/??<(*.//;''+8$r5   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_substitutionN   sA    ,1JJ;?<<H}Cxt,H-
=)H   Ac           	          dj                  | j                  D cg c]  }| j                   d| d c}      | j                  d<   y c c}w )Nr:   r;   r<   obj_list)r>   r   r'   r   )r(   objs     r*   r!   z"MesonTemplate.objects_substitutionS   sA    ).59\\Bc}CuD)B*
:&Br@   c           	          d| j                    j                  | j                  D cg c]  }| j                    d| d c}      | j                  d<   y c c}w )Nr:   zdependency('z'),dep_list)r'   r>   r   r   )r(   deps     r*   r"   zMesonTemplate.deps_substitutionX   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)	r>   	enumerater   r   r   replacer'   rangelen)r(   ilib_dirlibs       r*   r$   z$MesonTemplate.libraries_substitution]   si   59YY #,D,=,=">Aw 1#EgYeT6
12 26  >> ;;sC())OPSuTWX2
-. ,.dkk]);)@)@AEP#}S[[c2315P*
:& 02$++-?-D-D38T=N=N9O3PQa}HQCq)Q.
>*! Q 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 )Nr:   r;   r<   inc_list)r'   r>   r   r   )r(   incs     r*   r#   z"MesonTemplate.include_substitutions   sP    +.t{{m)<)A)A595F5FGc}CuD)G*
:&GrG   c                     | j                   rB| j                   ddj                  t        | j                                d| j                  d<   y d| j                  d<   y )Nzfortran_args: [z, z],r    )r   r'   r>   listr   r3   s    r*   r%   z'MesonTemplate.fortran_args_substitutionx   sW    ;;-tyyd>O>O9P/Q.RRTU ~. 24D~.r5   c                     | j                   D ]	  } |         t        | j                               }|j                  | j                        }|j                  dd      }|S )Nz,,rO   )r&   r   r4   
substituter   rS   )r(   nodetemplatemeson_builds       r*   generate_meson_buildz"MesonTemplate.generate_meson_build   s[    MM 	DF	D5578))$*<*<=!))$4r5   r,   N)__name__
__module____qualname____doc__strr^   r   r+   r4   r   r    r!   r"   r$   r#   r%   rd    r5   r*   r	   r	      s    5,, d, 3i	,
 9, 4j, 4j, 4j, #Y, 3i, , ,\4c 47







,

4r5   r	   c                   T     e Zd Z fdZdefdZdeddfdZd ZdefdZd
d	Z	 xZ
S )MesonBackendc                     t        |   |i | | j                  j                  dg       | _        d| _        t        d | j                  D              rdnd| _        t        | j                        | _        y )Ndependenciesbbdirc              3   $   K   | ]  }d |v  
 yw)debugNrk   ).0flags     r*   	<genexpr>z(MesonBackend.__init__.<locals>.<genexpr>   s     Et7d?Es   rr   release)
superr+   	extra_datgetro   meson_build_diranyfc_flagsr   
_get_flags)r(   argskwargs	__class__s      r*   r+   zMesonBackend.__init__   se    $)&) NN..~rB&Et}}EEG9 	 #4==1r5   	build_dirc                    t        |      | j                  z  }t        |j                  | j                   d      |j                  | j                   d      |j                  | j                   d            }|D ]n  }t        j
                         |j                  z  }|j                         r|j                          t        j                  ||       t        j                  |       p y )Nz*.soz*.pydz*.dll)r   rz   r   globr
   cwdnameexistsunlinkshutilcopy2osremove)r(   r   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MMT__-U34
 ( 	#K
[%5%55I!  "LLi0IIk"	#r5   r,   Nc                    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   ro   r   r   r   extra_objects
flib_flagsr|   r   sys
executablerd   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(r5   c                 4    t        j                  ||d       y )NT)r   check)
subprocessrun)r(   commandr   s      r*   _run_subprocess_commandz$MesonBackend._run_subprocess_command   s    wCt4r5   c                     dd| j                   g}| j                  ||       ddd| j                   g}| j                  ||       y )Nmesonsetupcompilez-C)rz   r   )r(   r   setup_commandcompile_commands       r*   	run_mesonzMesonBackend.run_meson   sH     '4+?+?@$$]I>"ItT5I5IJ$$_i@r5   c                 \   t        | j                  | j                  | j                        | _        t	        | j                  | j
                  | j                         | j                  | j                         | j                  | j                         | j                  | j                         y )N)	_prepare_sourcesr
   r   r   _prepare_objectsr   r   r   r   r3   s    r*   r   zMesonBackend.compile   sl    't~~V$*<*<dnnMt~~.t~~&/r5   re   )rf   rg   rh   r+   r   r   r   r   r   r   __classcell__)r   s   @r*   rm   rm      s?    2#D #  4  D  *5A4 A0r5   rm   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_sourcesr?   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c                     t        |      j                  dd       |D ]L  }t        |      j                         st        |      j                         s7t	        j
                  ||       N y )NTr   )r   r   r   r.   r   r   )r   r   r   rC   s       r*   r   r      sU    JTD1 #9$s)"3"3"5KKT"#r5   c                 h   g }t        j                  d      }| D ]r  }|j                  |      }|s|j                  d      j	                         j                         }|D cg c]  }|j	                  d       }}|j                  |       t t        t        j                  |            }|S c c}w )Nz--f(77|90)flags=(.*)   z'")
rer   matchgroupstripsplitextendr^   dictfromkeys)r|   flag_valuesflag_patternrt   match_resultvaluesvalunique_flagss           r*   r}   r}      s    K::56L '#))$/!''*00288:F2893cii&9F9v&' k23L	 :s   "B/)r0   r   r   r   r   r   	itertoolsr   pathlibr   stringr   _backendr   r	   rm   r   r   r}   rk   r5   r*   <module>r      sL     	 	   
    x xv=07 =0@2#r5   