
    G/Ph                        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d ZdS )    )annotationsN)Path   )Backend)Template)chainc                  X    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dZd ZdS )MesonTemplatez+Template meson build file generation class.
modulenamestrsources
list[Path]deps	list[str]	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     [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numpy/f2py/_backends/_meson.py
<listcomp>z*MesonTemplate.__init__.<locals>.<listcomp>2   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r1   s    r    meson_build_templatez"MesonTemplate.meson_build_templateB   sm    '//11 	##,5577# # #   '11333r"   Nonec                `    | j         | j        d<   | j        | j        d<   | j        | j        d<   d S )Nr   	buildtypepython)r   r'   r   r   r:   s    r    r)   z!MesonTemplate.initialize_templateL   s5    +/?<(*./;''+8$$$r"   c                d     d                      fd j        D                        j        d<   d S )N,
c                *    g | ]}j          d | dS z'''z''',r0   )r   sourcer1   s     r    r!   z6MesonTemplate.sources_substitution.<locals>.<listcomp>S   s,    HHH,,,,,HHHr"   source_list)joinr   r'   r:   s   `r    r*   z"MesonTemplate.sources_substitutionQ   s=    ,1JJHHHH4<HHH-
 -
=)))r"   c                t     d j                               fd j        D                        j        d<   d S )NrA   c                *    g | ]}j          d | dS )zdependency('z'),rD   )r   depr1   s     r    r!   z3MesonTemplate.deps_substitution.<locals>.<listcomp>X   s,    GGGc11111GGGr"   dep_list)r0   rG   r   r'   r:   s   `r    r+   zMesonTemplate.deps_substitutionV   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>]   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>d   sG        ;;s3''WWsWWW  r"   lib_declarationsc                P    g | ]"}j          |                    d d           d#S )rU   rV   ,)r0   rW   )r   rX   r1   s     r    r!   z8MesonTemplate.libraries_substitution.<locals>.<listcomp>k   s7    OOO4S[[S11444OOOr"   lib_listc                *    g | ]}j          d | dS )rO   r[   rD   )r   rQ   r1   s     r    r!   z8MesonTemplate.libraries_substitution.<locals>.<listcomp>n   s,    QQQa))Q)))QQQr"   lib_dir_list)rG   	enumerater   r'   r   r0   rangelenr:   s   `r    r-   z$MesonTemplate.libraries_substitution[   s   59YY "+D,=">">  6
 6
12 26 >  2
 2
-. *<dk););)@)@OOOOOOO*
 *
:& .@$+-?-?-D-DQQQQ5T=N9O9O3P3PQQQ.
 .
>***r"   c                t     d j                               fd j        D                        j        d<   d S )NrA   c                *    g | ]}j          d | dS rC   rD   )r   incr1   s     r    r!   z6MesonTemplate.include_substitution.<locals>.<listcomp>s   s,    GGGc)))))GGGr"   inc_list)r0   rG   r   r'   r:   s   `r    r,   z"MesonTemplate.include_substitutionq   sJ    )<t{)<)<)A)AGGGGT5FGGG*
 *
:&&&r"   c                    | j         r9| j         dd                    d | j         D                        d| j        d<   d S d| j        d<   d S )Nzfortran_args: [z, c                    g | ]}|S rP   rP   )r   args     r    r!   z;MesonTemplate.fortran_args_substitution.<locals>.<listcomp>y   s    9[9[9[##9[9[9[r"   z],r    )r   r0   rG   r'   r:   s    r    r.   z'MesonTemplate.fortran_args_substitutionv   si     	4;``tyy9[9[IZ9[9[9[/\/\``` ~... 24D~...r"   c                    | j         D ]} |             t          |                                           }|                    | j                  }t          j        dd|          }|S )Nz,,r[   )r/   r   r;   
substituter'   resub)r1   nodetemplatemeson_builds       r    generate_meson_buildz"MesonTemplate.generate_meson_build~   sh    M 	 	DDFFFFD557788))$*<==fUC55r"   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r3   r   r3   r<   )__name__
__module____qualname____doc__r2   r;   r)   r*   r+   r-   r,   r.   rq   rP   r"   r    r
   r
      s        55+ + + +Z4 4 4 47 7 7 7

 
 
 


 
 
 

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

4 4 4 4    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                      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 )debugNrP   )r   flags     r    	<genexpr>z(MesonBackend.__init__.<locals>.<genexpr>   s&      EEt7d?EEEEEEr"   r}   release)
superr2   	extra_datgetrz   meson_build_diranyfc_flagsr   
_get_flags)r1   argskwargs	__class__s      r    r2   zMesonBackend.__init__   s    $)&))) N..~rBB&EEt}EEEEETGG9 	 #4=11r"   	build_dirr   c                   t          |          | j        z  }t          |                    | j         d          |                    | j         d                    }|D ]n}t          j                    |j        z  }|                                r|                                 t          j
        ||           t          j        |           od S )Nz*.soz*.pyd)r   r   r   globr   cwdnameexistsunlinkshutilcopy2osremove)r1   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
 
 ( 	# 	#K

[%55I!! #  """Li000Ik""""	# 	#r"   r3   r<   c                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   rz   r   r   r   extra_objects
flib_flagsr   r   sys
executablerq   r   mkdir
write_text)r1   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)r1   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   )r1   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   r:   s    r    r   zMesonBackend.compile   sa    't~VVt~...t~&&&/////r"   )r   r   )r   r   r3   r<   rr   )
rs   rt   ru   r2   r   r   r   r   r   __classcell__)r   s   @r    rx   rx      s        2 2 2 2 2# # # #       *5 5 5A A A A0 0 0 0 0 0 0 0r"   rx   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   rE   s     r    r!   z$_prepare_sources.<locals>.<listcomp>   s?       F||"f,, 	V,,,r"   )	copyr   r   r   r5   r   r   appendr   )mnamer   bdirextended_sourcesrE   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"   )
rl   r   matchgroupr   splitextendlistdictfromkeys)r   flag_valuesflag_patternr~   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"   )
__future__r   r   r7   r   r   r   rl   pathlibr   _backendr   stringr   	itertoolsr   warningsr
   rx   r   r   rP   r"   r    <module>r      s%   " " " " " " 				       



 				                         r r r r r r r rj;0 ;0 ;0 ;0 ;07 ;0 ;0 ;0|  4    r"   