
    e                        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ej                        Z
 G d d	e
      Z G d
 de
      Z G d de      Zy)    )annotationsN   )	Argumentsc                  D   e Zd ZddZej
                  dd       Zej
                  dd       Zej                  dd       Z	ej                  dd       Z
ej                  dd       Zej                  dd       Zej                  dd       Zej                  dd	       Zy
)
SampleImplc                ,   |j                   | _         |j                  | _        t        j                  dd| j                   j	                               | _        | j
                  j                         | _        | j
                  j                         | _	        y )Nz	[^a-z0-9]_)
nameversionresublowerlowercase_tokenupperuppercase_token
capitalizecapitalized_token)selfargss     A/usr/lib/python3/dist-packages/mesonbuild/templates/sampleimpl.py__init__zSampleImpl.__init__   sf    II	||!vvlC9JK#3399;!%!5!5!@!@!B    c                     y N r   s    r   create_executablezSampleImpl.create_executable!       r   c                     y r   r   r   s    r   create_libraryzSampleImpl.create_library%   r   r   c                     y r   r   r   s    r   exe_templatezSampleImpl.exe_template)   r   r   c                     y r   r   r   s    r   exe_meson_templatezSampleImpl.exe_meson_template-   r   r   c                     y r   r   r   s    r   lib_templatezSampleImpl.lib_template1   r   r   c                     y r   r   r   s    r   lib_test_templatezSampleImpl.lib_test_template5   r   r   c                     y r   r   r   s    r   lib_meson_templatezSampleImpl.lib_meson_template9   r   r   c                     y r   r   r   s    r   
source_extzSampleImpl.source_ext=   r   r   N)r   r   returnNoner.   str)__name__
__module____qualname__r   abcabstractmethodr   r    abstractpropertyr"   r$   r&   r(   r*   r,   r   r   r   r   r      s    C 	  	  	  	  	  	  	  	 r   r   )	metaclassc                       e Zd ZdZddZddZy)	ClassImplz+For Class based languages, like Java and C#c           	        | j                    d| j                   }t        |dd      5 }|j                  | j                  j                  | j                  | j                                d d d        t        ddd      5 }|j                  | j                  j                  | j                  | j                  || j                               d d d        y # 1 sw Y   mxY w# 1 sw Y   y xY w)N.wutf-8encoding)project_name
class_namemeson.buildrA   exe_namesource_namer   )	r   r,   openwriter"   formatr
   r$   r   r   rF   fs      r   r   zClassImpl.create_executableF   s    //0$//1BC+sW5 	QGGD%%,,$))8<8N8N - P Q	Q -w7 	J1GGD++22		<@II?J;?<< 3 I J	J 	J	Q 	Q	J 	Js   ACAC#C #C,c                    | j                    d| j                   }| j                    d| j                   }| j                  | j                  | j                    d| j                   ||| j                   d| j                  | j                  | j                  | j
                  d}t        |dd      5 }|j                   | j                  j                  d	i |       d d d        t        |dd      5 }|j                   | j                  j                  d	i |       d d d        t        ddd      5 }|j                   | j                  j                  d	i |       d d d        y # 1 sw Y   xY w# 1 sw Y   XxY w# 1 sw Y   y xY w)
Nr<   _test._test)utokenltoken
class_testrB   source_filetest_source_filetest_exe_namerA   lib_name	test_namer   r=   r>   r?   rC   r   )r   r,   r   r   r
   r   rG   rH   r&   rI   r(   r*   r   rU   rV   kwargsrK   s        r   r    zClassImpl.create_libraryQ   s}   ,,-Qt.?@--.fT__4EF	 00 00#'#9#9":% @ $ 6 6!)&/&*&:&:%;5#A"&))"22#33!\\ (C'2 	8aGG,D%%,,6v67	8)S73 	=qGG1D**11;F;<	=-w7 	>1GG2D++22<V<=	> 	>		8 	8	= 	=	> 	>s$   3,E,5,E87,F,E58FFNr-   )r2   r3   r4   __doc__r   r    r   r   r   r:   r:   B   s    5	J>r   r:   c                  (    e Zd ZdZddZddZddZy)FileImplz$File based languages without headersc           	        | j                    d| j                   }t        |dd      5 }|j                  | j                  j                  | j                               d d d        t        ddd      5 }|j                  | j                  j                  | j                  | j                  || j                               d d d        y # 1 sw Y   mxY w# 1 sw Y   y xY w)Nr<   r=   r>   r?   )rA   rC   rD   )	r   r,   rG   rH   r"   rI   r
   r$   r   rJ   s      r   r   zFileImpl.create_executablel   s    --.a/@A+sW5 	FGGD%%,,$)),DE	F-w7 	J1GGD++22		<@II?J;?<< 3 I J	J 	J	F 	F	J 	Js   6C6ACCC!c                t   | 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      _funcr<   rM   rN   )rO   rP   
header_dirrB   function_name	namespacerR   rS   rT   rA   rU   rV   r   )r   r   r   r,   r
   r   r   s    r   
lib_kwargszFileImpl.lib_kwargsv   s     ****..00 $ 4 4Qq 9:%@--"2231T__4EF#'#7#7"8t>O P $ 4 45U; II,,--||
 	
r   c                d   | j                    d| j                   }| j                    d| j                   }| j                         }t        |dd      5 }|j	                   | j
                  j                  di |       d d d        t        |dd      5 }|j	                   | j                  j                  di |       d d d        t        ddd      5 }|j	                   | j                  j                  di |       d d d        y # 1 sw Y   xY w# 1 sw Y   XxY w# 1 sw Y   y xY w)Nr<   rM   r=   r>   r?   rC   r   )	r   r,   rc   rG   rH   r&   rI   r(   r*   rW   s        r   r    zFileImpl.create_library   s   **+1T__,=>++,F4??2CD	"(C'2 	8aGG,D%%,,6v67	8)S73 	=qGG1D**11;F;<	=-w7 	>1GG2D++22<V<=	> 	>		8 	8	= 	=	> 	>s$   ,D,D,D&DD#&D/Nr-   r.   zT.Dict[str, str])r2   r3   r4   rY   r   rc   r    r   r   r   r[   r[   h   s    .J
*	>r   r[   c                  x     e Zd Zej                  dd       Zej                  dd       Zd fdZd fdZ xZ	S )FileHeaderImplc                     y r   r   r   s    r   
header_extzFileHeaderImpl.header_ext   r   r   c                     y r   r   r   s    r   lib_header_templatez"FileHeaderImpl.lib_header_template   r   r   c                `    t         |          }| j                   d| j                   |d<   |S )Nr<   header_file)superrc   r   ri   )r   rX   	__class__s     r   rc   zFileHeaderImpl.lib_kwargs   s6    #%#'#7#7"8$//9J K}r   c                    t         |           | j                         }t        |d   dd      5 }|j	                  | j
                  j                  |             d d d        y # 1 sw Y   y xY w)Nrm   r=   r>   r?   )rn   r    rc   rG   rH   rk   
format_map)r   rX   rK   ro   s      r   r    zFileHeaderImpl.create_library   sc     "&'w? 	A1GGD,,77?@	A 	A 	As   +A%%A.r0   re   r-   )
r2   r3   r4   r5   r7   ri   rk   rc   r    __classcell__)ro   s   @r   rg   rg      sF      	 
A Ar   rg   )
__future__r   r5   r   typingTTYPE_CHECKINGminitr   ABCMetar   r:   r[   rg   r   r   r   <module>ry      sV    # 
 	 ??!'3;; 'T#>
 #>L,>z ,>^AX Ar   