
    Ng                        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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S )    )annotationsN)Path   )Backend)Template)chainc                  P    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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c_args
build_type
python_exec                V   || _         t          t                    j                                        dz  | _        || _        || _        || _        || _	        ||| _
        ng | _
        i | _        || _        | j        | j        | j        | j        | j        g| _        |
| _        || _        d S )Nzmeson.build.template)r   r   __file__parentabsolutebuild_template_pathr   r   r   r   r   substitutionsobjectsinitialize_templatesources_substitutiondeps_substitutioninclude_substitutionlibraries_substitutionpipeliner   r   )selfr   r   r   r   r   r   r   r   r   r   r   s               W/var/www/html/ai-engine/env/lib/python3.11/site-packages/numpy/f2py/_backends/_meson.py__init__zMesonTemplate.__init__   s     %NN!**,,/EE 	  	"(# ,D "D#$%"%'
 %$    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)   Nonec                `    | j         | j        d<   | j        | j        d<   | j        | j        d<   d S )Nr   	buildtypepython)r   r   r   r   r1   s    r'   r    z!MesonTemplate.initialize_templateD   s5    +/?<(*./;''+8$$$r)   c                n    dd                      fd| j        D                       | j        d<   d S )N                     ,
c                     g | ]
} d | d S ' ).0sourceindents     r'   
<listcomp>z6MesonTemplate.sources_substitution.<locals>.<listcomp>L   s*    >>>v""""">>>r)   source_list)joinr   r   r&   r@   s    @r'   r!   z"MesonTemplate.sources_substitutionI   sJ    ,:&NN,?,?>>>>>>>-
 -
=)))r)   c                n    dd                      fd| j        D                       | j        d<   d S )Nr8   r9   c                     g | ]
} d | dS )zdependency('z')r=   )r>   depr@   s     r'   rA   z3MesonTemplate.deps_substitution.<locals>.<listcomp>R   s*    AAA++C+++AAAr)   dep_list)rC   r   r   rD   s    @r'   r"   zMesonTemplate.deps_substitutionO   sJ    )7v)<)<AAAAtyAAA*
 *
:&&&r)   c                   d                     d t          | j                  D                       | j        d<   d                     d | j        D                       | j        d<   dd                      fd| j        D                       | j        d<   d                      fd	t          t          | j                            D                       | j        d
<   d S )N
c                &    g | ]\  }}d | d| dS )lib_dir_z& = declare_dependency(link_args : ['-L'])r=   )r>   ilib_dirs      r'   rA   z8MesonTemplate.libraries_substitution.<locals>.<listcomp>W   s@       Aw Q1PPGPPP  r)   lib_dir_declarationsc                    g | ]
}| d | dS )z& = declare_dependency(link_args : ['-lrM   r=   )r>   libs     r'   rA   z8MesonTemplate.libraries_substitution.<locals>.<listcomp>^   s9        FFcFFF  r)   lib_declarationsr8   c                    g | ]	} | d 
S ),r=   )r>   rR   r@   s     r'   rA   z8MesonTemplate.libraries_substitution.<locals>.<listcomp>f   s'    9993999r)   lib_listc                     g | ]
} d | dS )rL   rU   r=   )r>   rN   r@   s     r'   rA   z8MesonTemplate.libraries_substitution.<locals>.<listcomp>i   s*    LLL$$$$$LLLr)   lib_dir_list)rC   	enumerater   r   r   rangelenrD   s    @r'   r$   z$MesonTemplate.libraries_substitutionU   s   59YY "+D,=">">  6
 6
12 26 >  2
 2
-. )6f););9999$.999*
 *
:& .;&]]-?-?LLLLeC8I4J4J.K.KLLL.
 .
>***r)   c                n    dd                      fd| j        D                       | j        d<   d S )Nr8   r9   c                     g | ]
} d | d S r;   r=   )r>   incr@   s     r'   rA   z6MesonTemplate.include_substitution.<locals>.<listcomp>o   s*    ===C===r)   inc_list)rC   r   r   rD   s    @r'   r#   z"MesonTemplate.include_substitutionl   sK    )7v)<)<====4+<===*
 *
:&&&r)   c                    | j         D ]} |             t          |                                           }|                    | j                  S N)r%   r   r2   
substituter   )r&   nodetemplates      r'   generate_meson_buildz"MesonTemplate.generate_meson_buildr   sP    M 	 	DDFFFFD557788""4#5666r)   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r*   r   r*   r3   )__name__
__module____qualname____doc__r(   r2   r    r!   r"   r$   r#   re   r=   r)   r'   r
   r
      s        55$% $% $% $%L4 4 4 47 7 7 7

 
 
 

 
 
 

 
 
 
.
 
 
 
7 7 7 7 7r)   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| _        d S )Ndependenciesbbdirc              3     K   | ]}d |v V  	dS )debugNr=   )r>   flags     r'   	<genexpr>z(MesonBackend.__init__.<locals>.<genexpr>   s&      EEt7d?EEEEEEr)   rq   release)	superr(   	extra_datgetrn   meson_build_diranyfc_flagsr   )r&   argskwargs	__class__s      r'   r(   zMesonBackend.__init__z   sq    $)&))) N..~rBB&EEt}EEEEETGG9 	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   rx   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
 
 ( 	# 	#K

[%55I!! #  """Li000Ik""""	# 	#r)   r*   r3   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   rn   r   r   r   extra_objects
flib_flagsrz   r   sys
executablere   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)rx   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 ra   )_prepare_sourcesr   r   r~   r   r   r   r1   s    r'   r   zMesonBackend.compile   sa    't~VVt~...t~&&&/////r)   )r~   r   )r~   r   r*   r3   rf   )
rg   rh   ri   r(   r   r   r   r   r   __classcell__)r}   s   @r'   rl   rl   y   s        
 
 
 
 
# # # #       *5 5 5A A A A0 0 0 0 0 0 0 0r)   rl   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'   rA   z$_prepare_sources.<locals>.<listcomp>   s?       F||"f,, 	V,,,r)   )	copyr   r   r   r,   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)   )
__future__r   r   r.   r   r   r   pathlibr   _backendr   stringr   	itertoolsr   warningsr
   rl   r   r=   r)   r'   <module>r      s   " " " " " " 				       



                         e7 e7 e7 e7 e7 e7 e7 e7P:0 :0 :0 :0 :07 :0 :0 :0z    r)   