a
    Xg                     @  s   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	 d	ZG d
d de
Zdd ZdS )    )annotationsN)Path   )Backend)Template)chainc                   @  s   e Zd ZdZddddddddddddddZddd	d
ZddddZddddZddddZddddZ	ddddZ
dd ZdS )MesonTemplatez+Template meson build file generation class.strz
list[Path]z	list[str])
modulenamesourcesdeps	librarieslibrary_dirsinclude_dirsobject_fileslinker_argsc_args
build_type
python_exec                 C  s~   || _ ttj d | _|| _|| _|| _|| _	|d urB|| _
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    r"   i/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/numpy/f2py/_backends/_meson.py__init__   s(    zMesonTemplate.__init__returnc                 C  s.   | j  s$ttjd| j   d| j  S )NzMeson build template z does not exist.)r   is_fileFileNotFoundErrorerrnoENOENTr   	read_textr!   r"   r"   r#   meson_build_template:   s    
z"MesonTemplate.meson_build_templateNonec                 C  s(   | j | jd< | j| jd< | j| jd< d S )Nr
   Z	buildtypepython)r
   r   r   r   r,   r"   r"   r#   r   D   s    z!MesonTemplate.initialize_templatec                   s.   d d    fdd| jD | jd< d S )N                     ,
c                   s   g | ]}  d | d qS 'r"   .0sourceindentr"   r#   
<listcomp>L       z6MesonTemplate.sources_substitution.<locals>.<listcomp>Zsource_list)joinr   r   r,   r"   r7   r#   r   I   s    
z"MesonTemplate.sources_substitutionc                   s.   d d    fdd| jD | jd< d S )Nr0   r1   c                   s   g | ]}  d | dqS )zdependency('z')r"   )r5   depr7   r"   r#   r9   R   r:   z3MesonTemplate.deps_substitution.<locals>.<listcomp>Zdep_list)r;   r   r   r,   r"   r7   r#   r   O   s    
zMesonTemplate.deps_substitutionc                   s   d dd t| jD | jd< d dd | jD | jd< d d    fdd| jD | jd	< d    fd
dtt| jD | jd< d S )N
c                 S  s"   g | ]\}}d | d| dqS )lib_dir_z& = declare_dependency(link_args : ['-L'])r"   )r5   ilib_dirr"   r"   r#   r9   W   s   z8MesonTemplate.libraries_substitution.<locals>.<listcomp>Zlib_dir_declarationsc                 S  s   g | ]}| d | dqS )z& = declare_dependency(link_args : ['-lr?   r"   r5   libr"   r"   r#   r9   ^   s   Zlib_declarationsr0   c                   s   g | ]}  | d qS ),r"   rB   r7   r"   r#   r9   f   r:   Zlib_listc                   s   g | ]}  d | dqS )r>   rD   r"   )r5   r@   r7   r"   r#   r9   i   r:   lib_dir_list)r;   	enumerater   r   r   rangelenr,   r"   r7   r#   r   U   s"    




z$MesonTemplate.libraries_substitutionc                   s.   d d    fdd| jD | jd< d S )Nr0   r1   c                   s   g | ]}  d | d qS r2   r"   )r5   incr7   r"   r#   r9   o   r:   z6MesonTemplate.include_substitution.<locals>.<listcomp>Zinc_list)r;   r   r   r,   r"   r7   r#   r   l   s    
z"MesonTemplate.include_substitutionc                 C  s*   | j D ]
}|  qt|  }|| jS N)r    r   r-   
substituter   )r!   nodetemplater"   r"   r#   generate_meson_buildr   s    
z"MesonTemplate.generate_meson_buildN)__name__
__module____qualname____doc__r$   r-   r   r   r   r   r   rN   r"   r"   r"   r#   r      s   "&
r   c                      s^   e Zd Z fddZddddZdddd	d
Zdd ZddddZddddZ  Z	S )MesonBackendc                   sJ   t  j|i | | jdg | _d| _tdd | jD r@dnd| _d S )NdependenciesZbbdirc                 s  s   | ]}d |v V  qdS )debugNr"   )r5   flagr"   r"   r#   	<genexpr>   r:   z(MesonBackend.__init__.<locals>.<genexpr>rU   release)	superr$   Z	extra_datgetrT   meson_build_diranyfc_flagsr   )r!   argskwargs	__class__r"   r#   r$   z   s
    zMesonBackend.__init__r   )	build_dirc                 C  sv   t || j }t|| j d|| j d}|D ]8}t  |j }| rZ|  t	
|| t| q8d S )Nz*.soz*.pyd)r   r[   r   globr
   cwdnameexistsunlinkshutilcopy2osremove)r!   rb   Zwalk_dirZpath_objectsZpath_object	dest_pathr"   r"   r#   _move_exec_to_root   s    zMesonBackend._move_exec_to_rootr.   )rb   r&   c                 C  sf   t | j| j| j| j| j| j| j| j| j	| j
tj}| }t|jddd t|d }|| |S )z1Writes the meson build file at specified locationTparentsexist_okzmeson.build)r   r
   r   rT   r   r   r   extra_objectsZ
flib_flagsr]   r   sys
executablerN   r   mkdir
write_text)r!   rb   Zmeson_templatesrcZmeson_build_filer"   r"   r#   write_meson_build   s$    
zMesonBackend.write_meson_buildc                 C  s   t j||dd d S )NT)rd   check)
subprocessrun)r!   commandrd   r"   r"   r#   _run_subprocess_command   s    z$MesonBackend._run_subprocess_commandc                 C  s6   dd| j g}| || ddd| j g}| || d S )Nmesonsetupcompilez-C)r[   r|   )r!   rb   Zsetup_commandZcompile_commandr"   r"   r#   	run_meson   s    zMesonBackend.run_mesonr%   c                 C  s<   t | j| j| j| _| | j | | j | | j d S rJ   )_prepare_sourcesr
   r   rb   rw   r   rm   r,   r"   r"   r#   r      s    zMesonBackend.compile)
rO   rP   rQ   r$   rm   rw   r|   r   r   __classcell__r"   r"   r`   r#   rS   y   s   rS   c                 C  s   |  }t|jddd |D ](}t| rt| rt || qt|  dt|  dt|  dg}t|}|D ]2}| r|t |||j  ||j |  q|dd |D }|S )NTrn   zmodule.cz-f2pywrappers2.f90z-f2pywrappers.fc                 S  s$   g | ]}t |jd kst |jqS )z.pyf)r   suffixre   r4   r"   r"   r#   r9      s   z$_prepare_sources.<locals>.<listcomp>)	copyr   rt   rf   r'   rh   re   appendrg   )Zmnamer   bdirZextended_sourcesr6   Zgenerated_sourcesZgenerated_sourcer"   r"   r#   r      s&    
r   )
__future__r   rj   r)   rh   ry   rr   pathlibr   Z_backendr   stringr   	itertoolsr   warningsr   rS   r   r"   r"   r"   r#   <module>   s   h=