o
    Je                     @  sz   d dl m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ZG dd dZG d	d
 d
eZdd ZdS )    )annotationsN)Path   )Backend)Templatec                   @  sJ   e Zd ZdZdddZdddZdddZdddZdddZdd Z	dS )MesonTemplatez+Template meson build file generation class.
modulenamestrsources
list[Path]deps	list[str]object_fileslinker_argsc_args
build_typec                 C  sN   || _ ttj d | _|| _|| _i | _|| _	| j
| j| jg| _|| _d S )Nzmeson.build.template)r   r   __file__parentabsolutebuild_template_pathr
   r   substitutionsobjectsinitialize_templatesources_substitutiondeps_substitutionpipeliner   )selfr   r
   r   r   r   r   r    r   i/home/seandotau/au.memorygallery.club/gallery/lib/python3.10/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< d S )Nr   Z	buildtype)r   r   r   r&   r   r   r   r   4   s   z!MesonTemplate.initialize_templatec                 C  *   d}d|  dd | jD | jd< d S )N                     ,
c                 S  s   g | ]}d | d qS )'r   .0sourcer   r   r   
<listcomp>;       z6MesonTemplate.sources_substitution.<locals>.<listcomp>Zsource_list)joinr
   r   r   indentr   r   r   r   8      
z"MesonTemplate.sources_substitutionc                 C  r)   )Nr*   r+   c                 S  s   g | ]}d | dqS )zdependency('z')r   )r.   depr   r   r   r0   A   r1   z3MesonTemplate.deps_substitution.<locals>.<listcomp>Zdep_list)r2   r   r   r3   r   r   r   r   >   r5   zMesonTemplate.deps_substitutionc                 C  s*   | j D ]}|  qt|  }|| jS N)r   r   r'   
substituter   )r   nodetemplater   r   r   generate_meson_buildD   s   
z"MesonTemplate.generate_meson_buildN)r   r	   r
   r   r   r   r   r   r   r   r   r   r   r	   )r    r	   r    r(   )
__name__
__module____qualname____doc__r   r'   r   r   r   r;   r   r   r   r   r      s    





r   c                      sL   e Zd Z fddZdddZdd ZdddZdddZdddZ  Z	S )MesonBackendc                   sP   t  j|i | | jdg | _d| _tdd | jD r#d| _d S d| _d S )NdependenciesZbbdirc                 s  s    | ]}d |v V  qdS )debugNr   )r.   flagr   r   r   	<genexpr>Q   s    z(MesonBackend.__init__.<locals>.<genexpr>rC   release)	superr   Z	extra_datgetrB   meson_build_diranyfc_flagsr   )r   argskwargs	__class__r   r   r   L   s   zMesonBackend.__init__	build_dirr   c                 C  s>   t || j }|| j d}|D ]
}t|t   qd S )Nz*.so)r   rI   globr   shutilmovecwd)r   rP   Zwalk_dirZpath_objectsZpath_objectr   r   r   _move_exec_to_rootT   s
   zMesonBackend._move_exec_to_rootc                 C  s   dd| j gS )Nmesonsetup)rI   r&   r   r   r   _get_build_commandZ   s   zMesonBackend._get_build_commandr    r(   c                 C  sV   t | j| j| j| j| j| j| 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
   rB   Zextra_objectsZ
flib_flagsrK   r   r;   r   mkdir
write_text)r   rP   Zmeson_templatesrcZmeson_build_filer   r   r   write_meson_builda   s   	
zMesonBackend.write_meson_buildc                 C  sb   t j|  |d}|jdkrt |j|jt jddd| jg|d}|jdkr/t |j|jd S )N)rT   r   rV   compilez-C)
subprocessrunrX   
returncodeCalledProcessErrorrL   rI   )r   rP   Zcompleted_processr   r   r   	run_mesonr   s   

zMesonBackend.run_mesonc                 C  s<   t | j| j| j| _| | j | | j | | j d S r7   )_prepare_sourcesr   r
   rP   r_   re   rU   r&   r   r   r   r`      s   zMesonBackend.compile)rP   r   )rP   r   r    r(   r<   )
r=   r>   r?   r   rU   rX   r_   re   r`   __classcell__r   r   rN   r   rA   K   s    


rA   c                 C  s   |  }t|jddd |D ]}t || qt|  dt|  dt|  dg}t|}|D ]}| rKt |||j  ||j |  q2dd |D }|S )NTrY   zmodule.cz-f2pywrappers2.f90z-f2pywrappers.fc                 S  s$   g | ]}t |jd kst |jqS )z.pyf)r   suffixnamer-   r   r   r   r0      s
    z$_prepare_sources.<locals>.<listcomp>)copyr   r\   rR   existsri   appendunlink)Zmnamer
   bdirZextended_sourcesr/   Zgenerated_sourcesZgenerated_sourcer   r   r   rf      s&   rf   )
__future__r   r#   rR   ra   pathlibr   Z_backendr   stringr   warningsr   rA   rf   r   r   r   r   <module>   s    =<