o
    Ô­j  ã                   @  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„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 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$   úX/var/www/html/CropPilot/venv/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   D   s   z!MesonTemplate.initialize_templatec                   ó.   d‰ dˆ › �  ‡ fdd„| jD ƒ¡| jd< d S )Nú                     ú,
c                   ó   g | ]
}ˆ › d |› d �‘qS ©ú'r$   ©Ú.0Úsource©Úindentr$   r%   Ú
<listcomp>L   ó    z6MesonTemplate.sources_substitution.<locals>.<listcomp>Úsource_list)Újoinr   r   r-   r$   r;   r%   r   I   ó   
ÿz"MesonTemplate.sources_substitutionc                   r2   )Nr3   r4   c                   ó   g | ]
}ˆ › d |› d�‘qS )zdependency('z')r$   )r9   Údepr;   r$   r%   r=   R   r>   z3MesonTemplate.deps_substitution.<locals>.<listcomp>Údep_list)r@   r   r   r-   r$   r;   r%   r   O   rA   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$   )r9   ÚiÚlib_dirr$   r$   r%   r=   W   s    ÿÿz8MesonTemplate.libraries_substitution.<locals>.<listcomp>Úlib_dir_declarationsc                 S  s   g | ]
}|› d |› d�‘qS )z& = declare_dependency(link_args : ['-lrG   r$   ©r9   Úlibr$   r$   r%   r=   ^   s    ÿÿÚlib_declarationsr3   c                   s   g | ]	}ˆ › |› d �‘qS )ú,r$   rK   r;   r$   r%   r=   f   s    Úlib_listc                   rB   )rF   rN   r$   )r9   rH   r;   r$   r%   r=   i   r>   Úlib_dir_list)r@   Ú	enumerater   r   r   ÚrangeÚlenr-   r$   r;   r%   r!   U   s"   þ
ÿþ
ÿ

ÿ
ÿz$MesonTemplate.libraries_substitutionc                   r2   )Nr3   r4   c                   r5   r6   r$   )r9   Úincr;   r$   r%   r=   o   r>   z6MesonTemplate.include_substitution.<locals>.<listcomp>Úinc_list)r@   r   r   r-   r$   r;   r%   r    l   rA   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)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'   r/   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   r.   r   r   r   r!   r    rZ   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$   )r9   Úflagr$   r$   r%   Ú	<genexpr>   s   € z(MesonBackend.__init__.<locals>.<genexpr>rc   Úrelease)	Úsuperr&   Ú	extra_datÚgetra   Ú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   rj   r   Úglobr	   ÚcwdÚnameÚexistsÚunlinkÚshutilÚcopy2ÚosÚremove)r#   rq   Úwalk_dirÚpath_objectsÚpath_objectÚ	dest_pathr$   r$   r%   Ú_move_exec_to_root‚   s   þûzMesonBackend._move_exec_to_rootr'   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   ra   r   r   r   Úextra_objectsÚ
flib_flagsrl   r   ÚsysÚ
executablerZ   r   ÚmkdirÚ
write_text)r#   rq   Ú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)rs   Úcheck)Ú
subprocessÚrun)r#   Úcommandrs   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)rj   r‘   )r#   rq   Úsetup_commandÚcompile_commandr$   r$   r%   Ú	run_meson©   s   zMesonBackend.run_mesonc                 C  s<   t | j| j| jƒ| _|  | j¡ |  | j¡ |  | j¡ d S rV   )Ú_prepare_sourcesr	   r   rq   rŒ   r—   r   r-   r$   r$   r%   r”   ¯   s   zMesonBackend.compile)rq   r   )rq   r   r'   r/   r[   )
r\   r]   r^   r&   r   rŒ   r‘   r—   r”   Ú__classcell__r$   r$   ro   r%   r`   y   s    


r`   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   Úsuffixrt   r8   r$   r$   r%   r=   È   s
    þz$_prepare_sources.<locals>.<listcomp>)	Úcopyr   r‡   ru   r(   rw   rt   Úappendrv   )Úmnamer   ÚbdirÚextended_sourcesr:   Úgenerated_sourcesÚgenerated_sourcer$   r$   r%   r˜   ¶   s*   €ý€þr˜   )Ú
__future__r   ry   r*   rw   rŽ   r…   Úpathlibr   Ú_backendr   Ústringr   Ú	itertoolsr   Úwarningsr   r`   r˜   r$   r$   r$   r%   Ú<module>   s    h=