
    -Ph                       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	        rfd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e          Z G d de          Z G d dej                  Z G d de          Z ed           G 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                  F     e Zd ZdZddddd fdZedd            Z xZS )MesonExceptionzExceptions thrown by MesonNfilelinenocolnoargsobjectr   T.Optional[str]r   T.Optional[int]r   c               ^     t                      j        |  || _        || _        || _        d S N)super__init__r   r   r   )selfr   r   r   r   	__class__s        U/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/utils/core.pyr   zMesonException.__init__    s0    $	


    noder   returnc               4     | ||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   s      r   	from_nodezMesonException.from_node'   s#     sDt}T[
SSSSr   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   )__name__
__module____qualname____doc__r   classmethodr!   __classcell__r   s   @r   r   r      s}        $$>B+/$        T T T [T T T T Tr   r   c                  *     e Zd ZdZ	 	 dd fd
Z xZS )MesonBugExceptionzIExceptions thrown when there is a clear Meson bug that should be reportedNmsgstrr   r   r   r   r   c                X    t                                          |dz   |||           d S )Nz1

    This is a Meson bug and should be reported!r   )r   r   )r   r+   r   r   r   r   s        r   r   zMesonBugException.__init__3   sB    TT"6 	 	@ 	@ 	@ 	@ 	@r   )NNN)r+   r,   r   r   r   r   r   r   )r"   r#   r$   r%   r   r'   r(   s   @r   r*   r*   0   sY        SS9=JN@ @ @ @ @ @ @ @ @ @ @r   r*   c                      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/   8   s        < < < <r   r/   )	metaclassc                      e Zd Zddej        fd'dZd(dZd)dZd*dZd+dZ	d,dZ
ej        fd-dZd.dZej        fd-dZej        fd-dZed/d             Zed/d!            Zed/d"            Zd0d1d&ZdS )2EnvironmentVariablesNsetvaluesT.Optional[EnvInitValueType]init_method#Literal['set', 'prepend', 'append']	separatorr,   r   Nonec                   g | _         t                      | _        t                      | _        d| _        |rQt          | |          }|                                D ].\  }}t          |t                    r|n|g} ||||           -d S d S )NT)	envvarsr4   varnames
unset_varscan_use_envgetattritems
isinstancelist)r   r5   r7   r9   	init_funcnamevaluevs           r   r   zEnvironmentVariables.__init__=   s     MO$'EE&)ee 	.k22I%||~~ . .e't44AEE5'	$9----		. 	.. .r   c                P    d}|                     | j        j        | j                  S )Nz
<{0}: {1}>)formatr   r"   r<   )r   repr_strs     r   __repr__zEnvironmentVariables.__repr__K   s"    t~6EEEr   hasherr   c                h   |                      i           }t          |                                          D ]z}|                    t	          |d                     |                    d           |                    t	          ||         d                     |                    d           {d S )Nzutf-8)encoding   ,   ;)get_envsortedkeysupdatebytes)r   rL   myenvkeys       r   hashzEnvironmentVariables.hashO   s    R  %**,,'' 	  	 CMM%g666777MM$MM%c
W===>>>MM$		  	 r   rE   boolc                    || j         v S r   r=   r   rE   s     r   has_namezEnvironmentVariables.has_nameW   s    t}$$r   
T.Set[str]c                    | j         S r   r[   r   s    r   	get_nameszEnvironmentVariables.get_namesZ   s
    }r   otherc                8   |j         D ]b\  }}}}| j                            |           | j                             ||||f           || j        v r| j                            |           c|j        r(d| _        | j                            |j                   d S d S )NF)r<   r=   addappendr>   remover?   rT   )r   rb   methodrE   r5   r9   s         r   mergezEnvironmentVariables.merge]   s    /4} 	- 	-+FD&)Md###Lvy ABBBt&&&&t,,, 	5$DO""5#344444	5 	5r   T.List[str]c                    || j         v rt          d|          | j                            |           | j                            | j        |||f           d S )Nz*You cannot set the already unset variable )r>   r   r=   rd   r<   re   _setr   rE   r5   r9   s       r   r4   zEnvironmentVariables.setg   sc    4?"" !Vd!V!VWWW$TYfi@AAAAAr   c                    d| _         || j        v rt          d|d          | j                            |           d S )NFzYou cannot unset the z# variable because it is already set)r?   r=   r   r>   rd   r\   s     r   unsetzEnvironmentVariables.unsetm   sM     4=   !d!d!d!deeeD!!!!!r   c                    d| _         || j        v rt          d|          | j                            |           | j                            | j        |||f           d S )NFz$You cannot append to unset variable )r?   r>   r   r=   rd   r<   re   _appendrl   s       r   re   zEnvironmentVariables.appends   sk     4?"" !P!P!PQQQ$T\4CDDDDDr   c                    d| _         || j        v rt          d|          | j                            |           | j                            | j        |||f           d S )NFz%You cannot prepend to unset variable )r?   r>   r   r=   rd   r<   re   _prependrl   s       r   prependzEnvironmentVariables.prependz   sk     4?"" !Q!Q!QRRR$T]D&)DEEEEEr   envT.Dict[str, str]default_valuer   c                ,    |                     |          S r   )join)rt   rE   r5   r9   rv   s        r   rk   zEnvironmentVariables._set   s    ~~f%%%r   c                h    |                      ||          }|                    ||n|g|z             S r   getrx   rt   rE   r5   r9   rv   currs         r   rp   zEnvironmentVariables._append   s5    wwt]++~~ff4&6/JJJr   c                h    |                      ||          }|                    ||n||gz             S r   rz   r|   s         r   rr   zEnvironmentVariables._prepend   s5    wwt]++~~ff&D6/JJJr   full_envEnvironOrDictdefault_fmtc                    |                                 }| j        D ]2\  }}}}|r|                    |          nd } ||||||          ||<   3| j        D ]}|                    |d            |S r   )copyr<   rI   r>   pop)	r   r   r   rt   rg   rE   r5   r9   rv   s	            r   rQ   zEnvironmentVariables.get_env   s    mmoo/3| 	L 	L+FD&)8CMK..t444MsD&)]KKCIIO 	  	 DGGD$
r   )r5   r6   r7   r8   r9   r,   r   r:   )r   r,   )rL   r   r   r:   )rE   r,   r   rY   )r   r^   )rb   r3   r   r:   )rE   r,   r5   ri   r9   r,   r   r:   )rE   r,   r   r:   )rt   ru   rE   r,   r5   ri   r9   r,   rv   r   r   r,   r   )r   r   r   r   r   ru   )r"   r#   r$   ospathsepr   rK   rX   r]   ra   rh   r4   rn   re   rs   staticmethodrk   rp   rr   rQ   r0   r   r   r3   r3   <   s       >BDI\^\f. . . . .F F F F       % % % %   5 5 5 5 DF: B B B B B" " " " GIj E E E E E HJz F F F F F & & & \& K K K \K K K K \K      r   r3   F)eqc                      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Zded<   ddZdS )ExecutableSerialisationri   cmd_argsNz T.Optional[EnvironmentVariables]rt   z&T.Optional['programs.ExternalProgram']exe_wrapperr   workdirzT.Optional[T.List]extra_pathscapturefeedtagFrY   verbosezT.Optional[T.Dict[str, str]]installdir_mapr   r:   c                >    d| _         d| _        d| _        d| _        d S )NF )pickledskip_if_destdir
subprojectdry_runr`   s    r   __post_init__z%ExecutableSerialisation.__post_init__   s#    $r   )r   r:   )r"   r#   r$   __annotations__rt   r   r   r   r   r   r   r   r   r   r0   r   r   r   r      s          ,0C0000:>K>>>>#G####&*K****#G#### D    CG37N7777     r   r   ) r%   
__future__r   dataclassesr   r   abctypingTTYPE_CHECKINGhashlibr   typing_extensionsr   mparserr   r   r	   UnionDictr,   _Environr   ListEnvInitValueType	Exceptionr   r*   ABCMetar/   r3   r   r0   r   r   <module>r      s     # " " " " " ! ! ! ! ! ! 				 



    ? >))))))""""""GAF38,bk#.>>?Mvc173s+;#<<=T T T T TY T T T&@ @ @ @ @ @ @ @< < < < <s{ < < < <Z Z Z Z Z> Z Z Zz e         r   