
    thh                         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S )    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dS )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                                        dz  | _        || _        || _        || _        || _	        ||| _
        ng | _
        i | _        || _        d |	D             | _        | j        | j        | j        | j        | j        | j        g| _        |
| _        || _        d| _        d S )Nzmeson.build.templatec                 r    g | ]4}|                     d           r|                    d           sd | d n|5S )')
startswithendswith).0xs     R/var/www/histauto/venv/lib/python3.11/site-packages/numpy/f2py/_backends/_meson.py
<listcomp>z*MesonTemplate.__init__.<locals>.<listcomp>.   sT     
 
 
 \\#..J1::c??JHHHHH
 
 
    z                     )r
   r   __file__parentabsolutebuild_template_pathr   r   r   r   r   substitutionsobjectsr   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   s               r   __init__zMesonTemplate.__init__   s     %NN!**,,/EE 	  	"(# ,D "D#
 
!
 
 

 $%"%'*
 %$r   returnc                     | j                                         s5t          t          j        d| j                                          d          | 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>   sm    '//11 	##,5577# # #   '11333r   Nc                 `    | j         | j        d<   | j        | j        d<   | j        | j        d<   d S )Nr
   	buildtypepython)r
   r#   r   r   r6   s    r   r%   z!MesonTemplate.initialize_templateH   s5    +/?<(*./;''+8$$$r   c                 d     d                      fd j        D                        j        d<   d S )N,
c                 *    g | ]}j          d | dS z'''z''',r,   )r   sourcer-   s     r   r   z6MesonTemplate.sources_substitution.<locals>.<listcomp>O   s,    HHH,,,,,HHHr   source_list)joinr   r#   r6   s   `r   r&   z"MesonTemplate.sources_substitutionM   s=    ,1JJHHHH4<HHH-
 -
=)))r   c                 t     d j                               fd j        D                        j        d<   d S )Nr<   c                 *    g | ]}j          d | dS )zdependency('z'),r?   )r   depr-   s     r   r   z3MesonTemplate.deps_substitution.<locals>.<listcomp>T   s,    GGGc11111GGGr   dep_list)r,   rB   r   r#   r6   s   `r   r'   zMesonTemplate.deps_substitutionR   sI    )<t{)<)<)A)AGGGGTYGGG*
 *
:&&&r   c                     d                     d t           j                  D                        j        d<   d                     d  j        D                        j        d<   d j                               fd j        D                        j        d<   d j                               fdt          t           j                            D                        j        d	<   d S )
N
c                 &    g | ]\  }}d | d| dS )lib_dir_z( = declare_dependency(link_args : ['''-Lz''']) )r   ilib_dirs      r   r   z8MesonTemplate.libraries_substitution.<locals>.<listcomp>Y   s@       Aw U1TTgTTT  r   lib_dir_declarationsc                 F    g | ]}|                     d d           d| dS )._z& = declare_dependency(link_args : ['-lz']))replace)r   libs     r   r   z8MesonTemplate.libraries_substitution.<locals>.<listcomp>`   sH        ;;sC((XXPSXXX  r   lib_declarationsc                 P    g | ]"}j          |                    d d           d#S )rP   rQ   ,)r,   rR   )r   rS   r-   s     r   r   z8MesonTemplate.libraries_substitution.<locals>.<listcomp>g   s7    PPP#5S[[c22555PPPr   lib_listc                 *    g | ]}j          d | dS )rJ   rV   r?   )r   rL   r-   s     r   r   z8MesonTemplate.libraries_substitution.<locals>.<listcomp>j   s,    QQQa))Q)))QQQr   lib_dir_list)rB   	enumerater   r#   r   r,   rangelenr6   s   `r   r)   z$MesonTemplate.libraries_substitutionW   s   59YY "+D,=">">  6
 6
12 26 >  2
 2
-. *<dk););)@)@PPPPPPP*
 *
:& .@$+-?-?-D-DQQQQ5T=N9O9O3P3PQQQ.
 .
>***r   c                 t     d j                               fd j        D                        j        d<   d S )Nr<   c                 *    g | ]}j          d | dS r>   r?   )r   incr-   s     r   r   z6MesonTemplate.include_substitution.<locals>.<listcomp>o   s,    GGGc)))))GGGr   inc_list)r,   rB   r   r#   r6   s   `r   r(   z"MesonTemplate.include_substitutionm   sJ    )<t{)<)<)A)AGGGGT5FGGG*
 *
:&&&r   c                     | j         r<| j         dd                    t          | j                              d| j        d<   d S d| j        d<   d S )Nzfortran_args: [z, z],r    )r   r,   rB   listr#   r6   s    r   r*   z'MesonTemplate.fortran_args_substitutionr   sb     	4;UUtyyd>O9P9P/Q/QUUU ~... 24D~...r   c                     | j         D ]} |             t          |                                           }|                    | j                  }|                    dd          }|S )Nz,,rV   )r+   r   r7   
substituter#   rR   )r-   nodetemplatemeson_builds       r   generate_meson_buildz"MesonTemplate.generate_meson_buildz   sj    M 	 	DDFFFFD557788))$*<==!))$44r   r/   N)__name__
__module____qualname____doc__strrc   r   r.   r7   r%   r&   r'   r)   r(   r*   ri   rK   r   r   r	   r	      s]       55++ d+ 3i	+
 9+ 4j+ 4j+ 4j+ #Y+ 3i+ + + + + +Z4c 4 4 4 47 7 7 7

 
 
 


 
 
 


 
 
 
,
 
 
 

4 4 4 4    r   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                      j        |i | | j                            dg           | _        d| _        t          d | j        D                       rdnd| _        t          | j                  | _        d S )Ndependenciesbbdirc              3      K   | ]}d |v V  	dS )debugNrK   )r   flags     r   	<genexpr>z(MesonBackend.__init__.<locals>.<genexpr>   s&      EEt7d?EEEEEEr   rv   release)
superr.   	extra_datgetrs   meson_build_diranyfc_flagsr   
_get_flags)r-   argskwargs	__class__s      r   r.   zMesonBackend.__init__   s    $)&))) N..~rBB&EEt}EEEEETGG9 	 #4=11r   	build_dirc                    t          |          | j        z  }t          |                    | j         d          |                    | j         d          |                    | j         d                    }|D ]n}t          j                    |j        z  }|                                r|                                 t          j
        ||           t          j        |           od S )Nz*.soz*.pydz*.dll)r   r}   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MMT_22233MMT_33344MMT_33344
 
 ( 	# 	#K

[%55I!! #  """Li000Ik""""	# 	#r   r/   Nc                 n   t          | j        | j        | j        | j        | j        | j        | j        | j        | j	        | j
        t          j                  }|                                }t          |                              dd           t          |          dz  }|                    |           |S )z1Writes the meson build file at specified locationTparentsexist_okzmeson.build)r	   r
   r   rs   r   r   r   extra_objects
flib_flagsr   r   sys
executableri   r   mkdir
write_text)r-   r   meson_templatesrcmeson_build_files        r   write_meson_buildzMesonBackend.write_meson_build   s    &OLNOMON
 
 1133YdT:::	??]:##C(((r   c                 4    t          j        ||d           d S )NT)r   check)
subprocessrun)r-   commandr   s      r   _run_subprocess_commandz$MesonBackend._run_subprocess_command   s    wCt444444r   c                     dd| j         g}|                     ||           ddd| j         g}|                     ||           d S )Nmesonsetupcompilez-C)r}   r   )r-   r   setup_commandcompile_commands       r   	run_mesonzMesonBackend.run_meson   sT     '4+?@$$]I>>>"ItT5IJ$$_i@@@@@r   c                     t          | j        | j        | j                  | _        |                     | j                   |                     | j                   |                     | j                   d S )N)_prepare_sourcesr
   r   r   r   r   r   r6   s    r   r   zMesonBackend.compile   sa    't~VVt~...t~&&&/////r   rj   )rk   rl   rm   r.   r   r   r   r   r   r   __classcell__)r   s   @r   rq   rq      s        2 2 2 2 2#D # # # #  4  D        *5 5 5A4 A A A A0 0 0 0 0 0 0 0r   rq   c                    |                                 }t          |                              dd           |D ]Y}t          |                                          r6t          |                                          rt          j         ||           Zt          |  d          t          |  d          t          |  d          g}t          |          }|D ]a}|                                rKt          j         |||j        z             |                    |j                   |                                 bd |D             }|S )NTr   zmodule.cz-f2pywrappers2.f90z-f2pywrappers.fc                 f    g | ].}t          |          j        d k    t          |          j        /S )z.pyf)r   suffixr   )r   r@   s     r   r   z$_prepare_sources.<locals>.<listcomp>   s?       F||"f,, 	V,,,r   )	copyr   r   r   r1   r   r   appendr   )mnamer   bdirextended_sourcesr@   generated_sourcesgenerated_sources          r   r   r      sg   ||~~JJTD111 & &<<   	&T&\\%9%9%;%; 	&K%%%  )))**&&&''
 ::D- & &""$$ 	&K($1A1F*FGGG##$4$9:::##%%% &  
 r   c                 l   g }t          j        d          }| D ]s}|                    |          }|rZ|                    d                                                                          }d |D             }|                    |           tt          t          	                    |                    }|S )Nz--f(77|90)flags=(.*)   c                 8    g | ]}|                     d           S )z'")strip)r   vals     r   r   z_get_flags.<locals>.<listcomp>   s$    9993cii&&999r   )
rer   matchgroupr   splitextendrc   dictfromkeys)r   flag_valuesflag_patternrw   match_resultvaluesunique_flagss          r   r   r      s    K:566L ' '#))$// 	'!''**002288::F99&999Fv&&&k2233Lr   )r3   r   r   r   r   r   	itertoolsr   pathlibr   stringr   _backendr   r	   rq   r   r   rK   r   r   <module>r      s
    				 				      



                        r r r r r r r rj<0 <0 <0 <0 <07 <0 <0 <0~  4    r   