o
    uJAf                     @  s~   d dl mZ d dlZd dlZd dlZejrddlmZ G dd dej	dZ
G dd	 d	e
ZG d
d de
ZG dd deZdS )    )annotationsN   )	Argumentsc                   @  s   e Zd ZdddZejdddZejdd	d
ZejdddZ	ejdddZ
ejdddZejdddZejdddZejdddZdS )
SampleImplargsr   c                 C  sB   |j | _ |j| _tdd| j  | _| j | _| j | _	d S )Nz	[^a-z0-9]_)
nameversionresublowerlowercase_tokenupperuppercase_token
capitalizecapitalized_token)selfr    r   D/usr/lib/python3.10/site-packages/mesonbuild/templates/sampleimpl.py__init__   s
   zSampleImpl.__init__returnNonec                 C     d S Nr   r   r   r   r   create_executable!      zSampleImpl.create_executablec                 C  r   r   r   r   r   r   r   create_library%   r   zSampleImpl.create_librarystrc                 C  r   r   r   r   r   r   r   exe_template)   r   zSampleImpl.exe_templatec                 C  r   r   r   r   r   r   r   exe_meson_template-   r   zSampleImpl.exe_meson_templatec                 C  r   r   r   r   r   r   r   lib_template1   r   zSampleImpl.lib_templatec                 C  r   r   r   r   r   r   r   lib_test_template5   r   zSampleImpl.lib_test_templatec                 C  r   r   r   r   r   r   r   lib_meson_template9   r   zSampleImpl.lib_meson_templatec                 C  r   r   r   r   r   r   r   
source_ext=   r   zSampleImpl.source_extN)r   r   r   r   r   r   )__name__
__module____qualname__r   abcabstractmethodr   r   abstractpropertyr   r    r!   r"   r#   r$   r   r   r   r   r      s$    
r   )	metaclassc                   @  s$   e Zd ZdZd	ddZd	ddZdS )
	ClassImplz+For Class based languages, like Java and C#r   r   c              	   C  s   | j  d| j }t|ddd}|| jj| j| j d W d    n1 s(w   Y  tdddd}|| jj| j| j|| jd W d    d S 1 sPw   Y  d S )N.wutf-8encoding)project_name
class_namemeson.buildr4   Zexe_namesource_namer	   )	r   r$   openwriter   formatr   r    r	   r   r8   fr   r   r   r   F   s   

"zClassImpl.create_executablec                 C  s6  | j  d| j }| j  d| j }| j| j| j  d| j ||| j d| j| j| j| jd}t|ddd}|| jj	d	i | W d    n1 sMw   Y  t|ddd}|| j
j	d	i | W d    n1 spw   Y  tdddd}|| jj	d	i | W d    d S 1 sw   Y  d S )
Nr/   _test._test)utokenltokenZ
class_testr5   source_filetest_source_filetest_exe_namer4   lib_name	test_namer	   r0   r1   r2   r6   r   )r   r$   r   r   r   r	   r9   r:   r!   r;   r"   r#   r   rE   rF   kwargsr=   r   r   r   r   Q   s.   

"zClassImpl.create_libraryNr%   )r'   r(   r)   __doc__r   r   r   r   r   r   r.   B   s    
r.   c                   @  s.   e Zd ZdZdddZdddZdd	d
ZdS )FileImplz$File based languages without headersr   r   c              	   C  s   | j  d| j }t|ddd}|| jj| jd W d    n1 s&w   Y  tdddd}|| jj| j| j|| jd W d    d S 1 sNw   Y  d S )Nr/   r0   r1   r2   )r4   r6   r7   )	r   r$   r9   r:   r   r;   r   r    r	   r<   r   r   r   r   l   s   
"zFileImpl.create_executableT.Dict[str, str]c                 C  sf   | j | j| j| j| jdd  d| j| j d| j | j d| j | j d| j| j| j| jdS )zwGet Language specific keyword arguments

        :return: A dictionary of key: values to fill in the templates
        r      Z_funcr/   r>   r?   )r@   rA   Z
header_dirr5   Zfunction_name	namespacerB   rC   rD   r4   rE   rF   r	   )r   r   r   r$   r   r	   r   r   r   r   
lib_kwargsv   s   
zFileImpl.lib_kwargsc                 C  s  | j  d| j }| j  d| j }|  }t|ddd}|| jjdi | W d    n1 s4w   Y  t|ddd}|| jjdi | W d    n1 sWw   Y  tdddd}|| jjdi | W d    d S 1 s{w   Y  d S )Nr/   r>   r0   r1   r2   r6   r   )	r   r$   rN   r9   r:   r!   r;   r"   r#   rG   r   r   r   r      s   "zFileImpl.create_libraryNr%   r   rK   )r'   r(   r)   rI   r   rN   r   r   r   r   r   rJ   h   s
    


rJ   c                      sL   e Zd ZejdddZejdddZd fdd	Zd fddZ  Z	S )FileHeaderImplr   r   c                 C  r   r   r   r   r   r   r   
header_ext   r   zFileHeaderImpl.header_extc                 C  r   r   r   r   r   r   r   lib_header_template   r   z"FileHeaderImpl.lib_header_templaterK   c                   s$   t   }| j d| j |d< |S )Nr/   header_file)superrN   r   rQ   )r   rH   	__class__r   r   rN      s   
zFileHeaderImpl.lib_kwargsr   c                   s\   t    |  }t|d ddd}|| j| W d    d S 1 s'w   Y  d S )NrS   r0   r1   r2   )rT   r   rN   r9   r:   rR   
format_map)r   rH   r=   rU   r   r   r      s
   
"zFileHeaderImpl.create_libraryr&   rO   r%   )
r'   r(   r)   r*   r,   rQ   rR   rN   r   __classcell__r   r   rU   r   rP      s    rP   )
__future__r   r*   r
   typingTTYPE_CHECKINGminitr   ABCMetar   r.   rJ   rP   r   r   r   r   <module>   s   *&/