o
    zqfr                     @  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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Zd$d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]	librarieslibrary_dirsinclude_dirsobject_fileslinker_argsc_args
build_type
python_exec                 C  s   || _ ttj d | _|| _|| _|| _|| _	|d ur!|| _
ng | _
i | _|| _| j| j| j| j| jg| _|
| _|| _d| _d S )Nzmeson.build.templatez                     )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   indent)selfr	   r   r   r   r   r   r   r   r   r   r    r%   Z/root/parts/websockify/install/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< | j| jd< d S )Nr	   	buildtypepython)r	   r   r   r   r.   r%   r%   r&   r   F   s   z!MesonTemplate.initialize_templatec                   s$   d  fdd jD  jd< d S )N,
c                      g | ]} j  d | dqS z'''z''',r#   .0sourcer.   r%   r&   
<listcomp>M       z6MesonTemplate.sources_substitution.<locals>.<listcomp>source_list)joinr   r   r.   r%   r.   r&   r   K   s   z"MesonTemplate.sources_substitutionc                   ,   d j   fdd jD  jd< d S )Nr3   c                   r4   )zdependency('z'),r6   )r8   depr.   r%   r&   r:   R   r;   z3MesonTemplate.deps_substitution.<locals>.<listcomp>dep_list)r#   r=   r   r   r.   r%   r.   r&   r   P      zMesonTemplate.deps_substitutionc                   s   d dd t jD  jd< d dd  jD  jd< d j   fdd jD  jd< d j   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 : ['''-Lz'''])r%   )r8   ilib_dirr%   r%   r&   r:   W   s    z8MesonTemplate.libraries_substitution.<locals>.<listcomp>lib_dir_declarationsc                 S  s$   g | ]}| d d d| dqS )._z& = declare_dependency(link_args : ['-lz']))replacer8   libr%   r%   r&   r:   ^   s    lib_declarationsc                   s$   g | ]} j  |d d dqS )rG   rH   ,)r#   rI   rJ   r.   r%   r&   r:   e   s   $ lib_listc                   r4   )rC   rM   r6   )r8   rD   r.   r%   r&   r:   h   r;   lib_dir_list)r=   	enumerater   r   r   r#   rangelenr.   r%   r.   r&   r!   U   s    


z$MesonTemplate.libraries_substitutionc                   r>   )Nr3   c                   r4   r5   r6   )r8   incr.   r%   r&   r:   m   r;   z6MesonTemplate.include_substitution.<locals>.<listcomp>inc_list)r#   r=   r   r   r.   r%   r.   r&   r    k   rA   z"MesonTemplate.include_substitutionc                 C  s<   | j D ]}|  qt|  }|| j}tdd|}|S )Nz,,rM   )r"   r   r/   
substituter   resub)r$   nodetemplatemeson_buildr%   r%   r&   generate_meson_buildp   s   
z"MesonTemplate.generate_meson_buildN)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(   r0   )__name__
__module____qualname____doc__r'   r/   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	d
Z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dependenciesbbdirc                 s  s    | ]}d |v V  qdS )debugNr%   )r8   flagr%   r%   r&   	<genexpr>   s    z(MesonBackend.__init__.<locals>.<genexpr>rd   release)	superr'   	extra_datgetrb   meson_build_diranyfc_flagsr   )r$   argskwargs	__class__r%   r&   r'   z   s   zMesonBackend.__init__	build_dirr   c                 C  sv   t || j }t|| j d|| j d}|D ]}t  |j }| r-|  t	
|| t| qd S )Nz*.soz*.pyd)r   rk   r   globr	   cwdnameexistsunlinkshutilcopy2osremove)r$   rr   walk_dirpath_objectspath_object	dest_pathr%   r%   r&   _move_exec_to_root   s   zMesonBackend._move_exec_to_rootr(   r0   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   rb   r   r   r   extra_objects
flib_flagsrm   r   sys
executabler[   r   mkdir
write_text)r$   rr   meson_templatesrcmeson_build_filer%   r%   r&   write_meson_build   s$   
zMesonBackend.write_meson_buildc                 C  s   t j||dd d S )NT)rt   check)
subprocessrun)r$   commandrt   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)rk   r   )r$   rr   setup_commandcompile_commandr%   r%   r&   	run_meson   s   zMesonBackend.run_mesonc                 C  s<   t | j| j| j| _| | j | | j | | j d S )N)_prepare_sourcesr	   r   rr   r   r   r   r.   r%   r%   r&   r      s   zMesonBackend.compile)rr   r   )rr   r   r(   r0   r\   )
r]   r^   r_   r'   r   r   r   r   r   __classcell__r%   r%   rp   r&   ra   y   s    


ra   c                 C  s   |  }t|jddd |D ]}t| r#t| r#t || qt|  dt|  dt|  dg}t|}|D ]}| rWt |||j  ||j |  q>dd |D }|S )NTr   zmodule.cz-f2pywrappers2.f90z-f2pywrappers.fc                 S  s$   g | ]}t |jd kst |jqS )z.pyf)r   suffixru   r7   r%   r%   r&   r:      s
    z$_prepare_sources.<locals>.<listcomp>)	copyr   r   rv   r)   rx   ru   appendrw   )mnamer   bdirextended_sourcesr9   generated_sourcesgenerated_sourcer%   r%   r&   r      s*   r   )
__future__r   rz   r+   rx   r   r   rV   pathlibr   _backendr   stringr   	itertoolsr   warningsr   ra   r   r%   r%   r%   r&   <module>   s    g=