o
    Wod                     @  s  d Z ddlmZ ddlmZ ddlZddlZddlZej	rSddl
mZ ddlmZ ddlmZ dd	lmZ ejejeef eje f Zejeejeeje f f ZG d
d deZG dd deZG dd dejdZG dd deZeddG dd dZdS )z
Contains the strict minimum to run scripts.

When the backend needs to call back into Meson during compilation for running
scripts or wrapping commands, it is important to load as little python modules
as possible for performance reasons.
    )annotations)	dataclassN)_Hash)Literal   )BaseNode)programsc                      s:   e Zd ZdZddddd fddZedddZ  ZS )MesonExceptionzExceptions thrown by MesonNfilelinenocolnoargsobjectr   T.Optional[str]r   T.Optional[int]r   c                  s"   t  j|  || _|| _|| _d S N)super__init__r   r   r   )selfr   r   r   r   	__class__ khome/ych/rk3568/buildroot/output/rockchip_rk3568/host/lib/python3.10/site-packages/mesonbuild/utils/core.pyr   +   s   
zMesonException.__init__noder   returnc                G  s   | ||j |j|jdS )zCreate a MesonException with location data from a BaseNode

        :param node: A BaseNode to set location data from
        :return: A Meson Exception instance
        r
   )filenamer   r   )clsr   r   r   r   r   	from_node2   s   zMesonException.from_node)r   r   r   r   r   r   r   r   )r   r   r   r   r   r	   )__name__
__module____qualname____doc__r   classmethodr   __classcell__r   r   r   r   r	   (   s    r	   c                      s(   e Zd ZdZ		dd fd
dZ  ZS )MesonBugExceptionzIExceptions thrown when there is a clear Meson bug that should be reportedNmsgstrr   r   r   r   r   c                   s   t  j|d |||d d S )Nz1

    This is a Meson bug and should be reported!r
   )r   r   )r   r&   r   r   r   r   r   r   r   >   s   
zMesonBugException.__init__)NNN)r&   r'   r   r   r   r   r   r   )r   r    r!   r"   r   r$   r   r   r   r   r%   ;   s
    r%   c                   @  s   e Zd ZdZdS )HoldableObjectzf Dummy base class for all objects that can be
        held by an interpreter.baseobjects.ObjectHolder N)r   r    r!   r"   r   r   r   r   r(   C   s    r(   )	metaclassc                   @  s   e Zd Zddejfd0ddZd1ddZd2ddZd3ddZd4ddZ	ejfd5ddZ
ejfd5ddZejfd5dd Zed6d%d&Zed6d'd(Zed6d)d*Zd7d8d.d/ZdS )9EnvironmentVariablesNsetvaluesT.Optional[EnvInitValueType]init_method#Literal['set', 'prepend', 'append']	separatorr'   r   Nonec                 C  sV   g | _ t | _|r't| |}| D ]\}}t|tr|n|g}|||| qd S d S r   )envvarsr+   varnamesgetattritems
isinstancelist)r   r,   r.   r0   Z	init_funcnamevaluevr   r   r   r   H   s   
zEnvironmentVariables.__init__c                 C  s   d}| | jj| jS )Nz
<{0}: {1}>)formatr   r   r2   )r   repr_strr   r   r   __repr__T   s   zEnvironmentVariables.__repr__hasherr   c                 C  s\   |  i }t| D ] }|t|dd |d |t|| dd |d qd S )Nzutf-8)encoding   ,   ;)get_envsortedkeysupdatebytes)r   r>   Zmyenvkeyr   r   r   hashX   s   

zEnvironmentVariables.hashr8   boolc                 C  s
   || j v S r   r3   )r   r8   r   r   r   has_name`   s   
zEnvironmentVariables.has_name
T.Set[str]c                 C  s   | j S r   rJ   r   r   r   r   	get_namesc   s   zEnvironmentVariables.get_namesT.List[str]c                 C  &   | j | | j| j|||f d S r   )r3   addr2   append_setr   r8   r,   r0   r   r   r   r+   f      zEnvironmentVariables.setc                 C  rP   r   )r3   rQ   r2   rR   _appendrT   r   r   r   rR   j   rU   zEnvironmentVariables.appendc                 C  rP   r   )r3   rQ   r2   rR   _prependrT   r   r   r   prependn   rU   zEnvironmentVariables.prependenvT.Dict[str, str]default_valuer   c                 C  s
   | |S r   )join)rY   r8   r,   r0   r[   r   r   r   rS   r   s   
zEnvironmentVariables._setc                 C  s*   |  ||}||d u r|S |g| S r   getr\   rY   r8   r,   r0   r[   currr   r   r   rV   v      zEnvironmentVariables._appendc                 C  s*   |  ||}||d u r|S ||g S r   r]   r_   r   r   r   rW   {   ra   zEnvironmentVariables._prependfull_envEnvironOrDictdefault_fmtc           	      C  sF   |  }| jD ]\}}}}|r||nd }||||||||< q|S r   )copyr2   r;   )	r   rb   rd   rY   methodr8   r,   r0   r[   r   r   r   rB      s
   zEnvironmentVariables.get_env)r,   r-   r.   r/   r0   r'   r   r1   )r   r'   )r>   r   r   r1   )r8   r'   r   rI   )r   rL   )r8   r'   r,   rO   r0   r'   r   r1   )rY   rZ   r8   r'   r,   rO   r0   r'   r[   r   r   r'   r   )rb   rc   rd   r   r   rZ   )r   r    r!   ospathsepr   r=   rH   rK   rN   r+   rR   rX   staticmethodrS   rV   rW   rB   r   r   r   r   r*   G   s$    



r*   F)eqc                   @  s   e Zd ZU ded< dZded< dZded< dZded	< dZd
ed< dZded< dZ	ded< dZ
ded< dZded< dddZdS )ExecutableSerialisationrO   Zcmd_argsNz T.Optional[EnvironmentVariables]rY   z&T.Optional['programs.ExternalProgram']exe_wrapperr   workdirzT.Optional[T.List]extra_pathszT.Optional[bool]capturefeedtagFrI   verboser   r1   c                 C  s   d| _ d| _d| _d| _d S )NF )ZpickledZskip_if_destdirZ
subprojectdry_runrM   r   r   r   __post_init__   s   
z%ExecutableSerialisation.__post_init__)r   r1   )r   r    r!   __annotations__rY   rl   rm   rn   ro   rp   rq   rr   ru   r   r   r   r   rk      s   
 rk   ) r"   
__future__r   dataclassesr   rg   abctypingTTYPE_CHECKINGZhashlibr   typing_extensionsr   Zmparserr   rs   r   UnionDictr'   _Environrc   ListZEnvInitValueType	Exceptionr	   r%   ABCMetar(   r*   rk   r   r   r   r   <module>   s&   A