
    m[h                         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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 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*                  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deps_substitutioninclude_substitutionlibraries_substitutionfortran_args_substitutionpipeliner   r   indent)selfr
   r   r   r   r   r   r   r   r   r   r   xs                g/var/www/html/p-interativo-gestao-midia/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   r2   s    r)   r   z!MesonTemplate.initialize_templateH   s>    +/??<(*.//;''+8$r4   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_substitutionM   sE    ,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 )Nr9   zdependency('z'),dep_list)r&   r=   r   r   )r'   deps     r)   r!   zMesonTemplate.deps_substitutionR   sR    +.t{{m)<)A)A=AYYGYc}LS1Y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_substitutionW   s}   59YY #,D,=,=">">JAw 1#EgYeT">6
12 26  >>)C ;;sC())OPSuTWX)2
-. ,.dkk]);)@)@AEP#}S[[c2315P*
:& 02$++-?-D-D38T=N=N9O3PQ3Pa}HQCq)3P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 )Nr9   r:   r;   inc_list)r&   r=   r   r   )r'   incs     r)   r"   z"MesonTemplate.include_substitutionm   sV    +.t{{m)<)A)A595F5FG5Fc}CuD)5FG*
:&GrB   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   r2   s    r)   r$   z'MesonTemplate.fortran_args_substitutionr   sW    ;;-tyyd>O>O9P/Q.RRTU ~. 24D~.r4   c                     | j                   D ]	  } |         t        | j                               }|j                  | j                        }|j                  dd      }|S )Nz,,rJ   )r%   r   r3   
substituter   rN   )r'   nodetemplatemeson_builds       r)   generate_meson_buildz"MesonTemplate.generate_meson_buildz   sV    MMDF "D5578))$*<*<=!))$4r4   r+   N)__name__
__module____qualname____doc__strrY   r   r*   r3   r   r    r!   r#   r"   r$   r_    r4   r)   r	   r	      s    5++ d+ 3i	+
 9+ 4j+ 4j+ 4j+ #Y+ 3i+ + +Z4c 47





,

4r4   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)debugNrf   ).0flags     r)   	<genexpr>z(MesonBackend.__init__.<locals>.<genexpr>   s     E}t7d?}s   rm   release)
superr*   	extra_datgetrj   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r4   	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   ru   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" (r4   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   rj   r   r   r   extra_objects
flib_flagsrw   r   sys
executabler_   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(r4   c                 4    t        j                  ||d       y )NT)r   check)
subprocessrun)r'   commandr   s      r)   _run_subprocess_commandz$MesonBackend._run_subprocess_command   s    wCt4r4   c                     dd| j                   g}| j                  ||       ddd| j                   g}| j                  ||       y )Nmesonsetupcompilez-C)ru   r   )r'   r|   setup_commandcompile_commands       r)   	run_mesonzMesonBackend.run_meson   sH     '4+?+?@$$]I>"ItT5I5IJ$$_i@r4   c                    t        | j                  | j                  | j                        | _        | j	                  | j                         | j                  | j                         | j                  | j                         y )N)_prepare_sourcesr
   r   r|   r   r   r   r2   s    r)   r   zMesonBackend.compile   sR    't~~Vt~~.t~~&/r4   r`   )ra   rb   rc   r*   r   r   r   r   r   r   __classcell__)r{   s   @r)   rh   rh      s?    2#D #  4  D  *5A4 A0r4   rh   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      s=   ||~JTD1< T&\%9%9%;KK%  	wh w()*wo&'
 :D-""$KK($1A1F1F*FG##$4$9$9:##%	 . '&FF|""f, 	V&  
 s   4E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extendrY   dictfromkeys)rw   flag_valuesflag_patternro   match_resultvaluesvalunique_flagss           r)   rx   rx      s    K::56L#))$/!''*00288:F289&3cii&&F9v&  k23L	 :s   "B/)r/   r   r   r   r   r   	itertoolsr   pathlibr   stringr   _backendr   r	   rh   r   rx   rf   r4   r)   <module>r      sG     	 	   
    r rj<07 <0~4r4   