
    -Ph                        d dl mZ d dlZd dlZd dlZddlmZ ddlm	Z	 ej
        rddlmZ ddlmZ  G d d	ej                  Z G d
 d          ZddZ G d d          ZdS )    )annotationsN   )mparser)MesonException)StrOrBytesPath)ElementaryOptionValuesc                  6     e Zd Zd fdZdd fd
ZddZ xZS )CmdLineFileParserreturnNonec                P    t                                          dgd            d S )N=)
delimitersinterpolation)super__init__)self	__class__s    V/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/machinefile.pyr   zCmdLineFileParser.__init__   s*     	SE>>>>>    utf-8	filenames7T.Union['StrOrBytesPath', T.Iterable['StrOrBytesPath']]encodingT.Optional[str]T.List[str]c                H    t                                          ||          S N)r   read)r   r   r   r   s      r   r   zCmdLineFileParser.read   s    ww||Ix000r   	optionstrstrc                    |S r    )r   r    s     r   optionxformzCmdLineFileParser.optionxform   s    r   )r   r   )r   )r   r   r   r   r   r   )r    r!   r   r!   )__name__
__module____qualname__r   r   r$   __classcell__)r   s   @r   r
   r
      st        ? ? ? ? ? ?
1 1 1 1 1 1 1       r   r
   c                  &    e Zd ZddZdd
ZddZdS )MachineFileParserr   r   	sourcedirr!   r   r   c                N   t                      | _        ddd| _        i | _        |D ]}	 t	          |d          5 }|                                }d d d            n# 1 swxY w Y   n'# t          $ r}t          d|d|           d }~ww xY w|                    d|          }|                    d	t          j
                            |                    }	 | j                            ||           # t          j        $ r}t          d
|           d }~ww xY w| j                            d          r-| j                            |                     d                     | j                                        D ]&}|dk    r	|                     |          | j        |<   'd S )NTF)TrueFalser   )r   zMalformed machine file z failed to parse as unicode: z@GLOBAL_SOURCE_ROOT@z	@DIRNAME@zMalformed machine file: 	constants)r
   parserr/   sectionsopenr   UnicodeDecodeErrorr   replaceospathdirnameread_stringconfigparserErrorhas_sectionupdate_parse_section)r   r   r+   fnamefcontentess           r   r   zMachineFileParser.__init__!   s   '))GKV[>\>\JL 	E 	EEj%'222 'affhhG' ' ' ' ' ' ' ' ' ' ' ' ' ' '% j j j$%hu%h%hef%h%hiiij oo&<iHHGook27??53I3IJJGE''7777% E E E$%C%C%CDDDE ;"";// 	DN!!$"5"5k"B"BCCC%%'' 	6 	6AK#22155DM!	6 	6sR   A(AA(A 	 A(#A 	$A((
B2BBC55DDDrB   #T.Dict[str, ElementaryOptionValues]c           
        | j                                         | _        i }| j                            |          D ]\  }}d|v sd|v sd|v sd|v rt          d|d          |                    dd          }	 t          j        |d	          	                                }|j
        st          d
          |                     |j
        d                   }nc# t
          $ r(}t          d|dt          |           d          d }~wt          $ r&}t          d|j        d         d|d          d }~ww xY w|||<   || j        |<   |S )N 	'"zMalformed variable name z in machine file.\z\\machinefilezvalue cannot be emptyr   z)Malformed value in machine file variable z: .zUndefined constant z in machine file variable )r/   copyscoper0   itemsr   r4   r   Parserparselines_evaluate_statementr!   KeyErrorargs)r   rB   sectionentryvalueastresrA   s           r   r=   z MachineFileParser._parse_section=   s   ^((**
79 K--a00 	$ 	$LE5e||tu}}uu$%Z%Z%Z%Z[[[MM$//EnnUM::@@BBy B()@AAA..sy|<<! g g g$%eQV%e%e\_`a\b\b%e%e%efff n n n$%l16!9%l%lbg%l%l%lmmmn GEN #DJus%   ;AC
D9##DD9!D44D9nodemparser.BaseNoder   c                    t          |t          j                  r|j        S t          |t          j                  r|j        S t          |t          j                  r|j        S t          |t          j                  r                     |j                  S t          |t          j	                  rP fd|j
        j        D             }t          d |D                       s
J d            t          j        d|          S t          |t          j                  r j        |j                 S t          |t          j                  r                     |j                  }                     |j                  }|j        dk    r_t          |t*                    rt          |t*                    r||z   S t          |t,                    rt          |t,                    r||z   S nU|j        dk    rJt          |t*                    r5t          |t*                    r t.          j                            ||          S t5          d          )Nc                :    g | ]}                     |          S r#   )rR   ).0argr   s     r   
<listcomp>z9MachineFileParser._evaluate_statement.<locals>.<listcomp>\   s'    NNN3))#..NNNr   c              3  @   K   | ]}t          |t                    V  d S r   )
isinstancer!   )r^   rB   s     r   	<genexpr>z8MachineFileParser._evaluate_statement.<locals>.<genexpr>]   s,      55az!S))555555r   zfor mypyr   adddivzUnsupported node type)rb   r   
StringNoderW   BooleanNode
NumberNodeParenthesizedNoderR   inner	ArrayNoderT   	argumentsallTcastIdNoderM   ArithmeticNodeleftright	operationr!   listr5   r6   joinr   )r   rZ   alrs   `    r   rR   z%MachineFileParser._evaluate_statementR   s   dW/11 	.:g122 	.:g011 	.:g788 	.++DJ777g/00 	.NNNN$):MNNNA55155555AAzAAA6-+++gn-- 	.:dj))g455 
	.((33A((44A~&&a%% !*Q*<*< !q5La&& !:a+>+> !q5L5((a%% .*Q*<*< .7<<1---4555r   N)r   r   r+   r!   r   r   )rB   r!   r   rC   )rZ   r[   r   r   )r%   r&   r'   r   r=   rR   r#   r   r   r*   r*       sP        6 6 6 68   *6 6 6 6 6 6r   r*   r   r   r+   r!   r   0T.Dict[str, T.Dict[str, ElementaryOptionValues]]c                0    t          | |          }|j        S r   )r*   r1   )r   r+   r0   s      r   parse_machine_filesr|   n   s    y)44F?r   c                      e Zd ZddZdS )	MachineFileStorenative_filesT.Optional[T.List[str]]cross_files
source_dirr!   c                j    t          ||ng |          | _        t          ||ng |          | _        d S r   )r|   nativecross)r   r   r   r   s       r   r   zMachineFileStore.__init__t   s>    ),:R,,XZ\fgg(8OUWYcdd


r   N)r   r   r   r   r   r!   )r%   r&   r'   r   r#   r   r   r~   r~   s   s.        e e e e e er   r~   )r   r   r+   r!   r   rz   )
__future__r   typingrn   r9   r5    r   mesonlibr   TYPE_CHECKINGcoredatar   optionsr   ConfigParserr
   r*   r|   r~   r#   r   r   <module>r      s:  
 # " " " " "         				       $ $ $ $ $ $? 0((((((//////    1   L6 L6 L6 L6 L6 L6 L6 L6\   
e e e e e e e e e er   