o
    e                     @  s  d dl mZ d dlZd dlZddlmZmZmZ ddl	m
Z
 ddlmZmZ ddlmZmZmZ dd	lmZmZ ejrwd d
lmZmZ ddlmZ ddl	mZ ddlmZ ddlmZ ddlm Z  ddlm!Z! G dd deZ"G dd deZ#G dd deZ$dddZ%dS )    )annotationsN   )ExtensionModuleModuleReturnValue
ModuleInfo   )CustomTarget)NoneTypein_set_validator)typed_pos_argstyped_kwargs	KwargInfo)FileMesonException)Literal	TypedDict)ModuleState)
Executable)
Dependency)Interpreter)ExternalProgram)FileOrStringc                   @  s.   e Zd ZU ded< ded< ded< ded< dS )ScanXMLboolpublicclientserverinclude_core_onlyN__name__
__module____qualname____annotations__ r#   r#   ?/usr/lib/python3.10/site-packages/mesonbuild/modules/wayland.pyr   #   s
   
 r   c                   @  s   e Zd ZU ded< ded< dS )FindProtocolz(Literal['stable', 'staging', 'unstable']statezT.Optional[int]versionNr   r#   r#   r#   r$   r%   *   s   
 r%   c                      s   e Zd ZeddddZd) fd	d
Zedeefdde	de
dedde
dedde
dedde
dedddd*ddZedee	de
ded eh d!d"e
d#eefd+d'd(Z  ZS ),WaylandModuleZwaylandz0.62.0T)unstableinterpreterr   returnNonec                   s8   t  | d | _d | _d | _| j| j| jd d S )N)scan_xmlfind_protocol)	super__init__protocols_dep
pkgdatadirscanner_binmethodsupdater-   r.   )selfr*   	__class__r#   r$   r0   3   s   zWaylandModule.__init__zwayland.scan_xmlr   )varargsZmin_varargsr   F)defaultr   r   r   z0.64.0)r:   Zsincer&   r   argsT.Tuple[T.List[FileOrString]]kwargsr   r   c                   sf  | j d u r|d}|jddd|jd| _  d rdnd} fddtd	d
dgD }|s2td| j|d }g }|D ]o}	t	j
t	j
|	jd }
t|
 d|j|j|j| j | dddg|	g|
 dg|jd}|| |D ]8}| j | dddg} d r|d t|
 d| d|j|j|j||	g|
 d| dg|jd}|| qtq>t||S )Nzwayland-clientzwayland-scannerZwayland_scanner)Zwantedr   Zprivatec                   s   g | ]} | r|qS r#   r#   ).0ir=   r#   r$   
<listcomp>Q   s    z*WaylandModule.scan_xml.<locals>.<listcomp>z#T.List[Literal['client', 'server']]r   r   zFAt least one of client or server keyword argument must be set to true.r   z	-protocolz-codez@INPUT@z@OUTPUT@z-protocol.c)backendz-headerr   z--include-core-only-z-protocol.h)r3   
dependencyZ	find_toolr'   Tcastr   r*   Zsource_strings_to_filesospathsplitextbasenamefnamer   ZsubdirZ
subprojectenvironmentrB   appendr   )r6   r&   r;   r=   depscopeZsidesZ	xml_filestargetsZxml_filenamecodeZsidecommandheaderr#   r@   r$   r-   ?   sR   
	







zWaylandModule.scan_xmlzwayland.find_protocolstable>   rU   r)   staging)r:   	validatorr'   T.Tuple[str]r%   r   c           	      C  s   |d }|d }|d }|dkr|d u rt | d|dkr'|d ur't d| jd u r2|d| _| jd u r@| jjddd	| _|dkrJ| d
}n|dkrW| d| d
}n| d| d
}tj| j|||}tj|swt d| dt	
|S )Nr   r&   r'   rU   z$ protocols require a version number.z1stable protocols do not require a version number.zwayland-protocolsr2   )Z	pkgconfigZinternalz.xmlrV   z-vz-unstable-vz	The file z does not exist.)r   r1   rD   r2   Zget_variablerG   rH   joinexistsr   Zfrom_absolute_file)	r6   r&   r;   r=   	base_nameZ	xml_stater'   Zxml_namerH   r#   r#   r$   r.   y   s(   


zWaylandModule.find_protocol)r*   r   r+   r,   )r&   r   r;   r<   r=   r   r+   r   )r&   r   r;   rX   r=   r%   r+   r   )r   r    r!   r   INFOr0   r   strr   r   r   r   r-   r
   intr	   r.   __classcell__r#   r#   r7   r$   r(   /   s&    2r(   r*   r   r+   c                 C  s   t | S )N)r(   )r*   r#   r#   r$   
initialize   s   r`   )r*   r   r+   r(   )&
__future__r   rG   typingrE    r   r   r   buildr   Zinterpreter.type_checkingr	   r
   Zinterpreterbaser   r   r   Zmesonlibr   r   TYPE_CHECKINGtyping_extensionsr   r   r   r   dependenciesr   r*   r   Zprogramsr   r   r   r%   r(   r`   r#   r#   r#   r$   <module>   s(   p