
    -Ph2.                       d dl mZ d dlZd dl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mZmZmZmZmZ dd
lmZmZ ej        rddlmZmZ ddlmZ d dlmZmZ ddlmZ ej        eeej         eef         ej!        e         f         Z" edeeeej#        ej!        e                  e$ej#        e%         ej#        e%         e"d          Z& G d de          Z' G d de          Z( G d de          Z) G d de          Z* G d de          Z+ G d de          Z, G d dej-                  Z. ej/        d          Z0 G d  d!          Z1dS )"    )annotationsN   )options)mesonlib)	OptionKey)mparser)mlog)
FeatureNewFeatureDeprecatedtyped_pos_argstyped_kwargsContainerTypeInfo	KwargInfo)NoneTypein_set_validator)TYPE_varTYPE_kwargs)
SubProject)	TypedDictLiteral)OptionStoreFuncOptionArgs)typedescriptionyieldchoicesvalueminmax
deprecatedc                      e Zd ZU ded<   dS )
StringArgsstrr   N__name__
__module____qualname____annotations__     Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/optinterpreter.pyr"   r"   $   s         




r*   r"   c                      e Zd ZU ded<   dS )BooleanArgsboolr   Nr$   r)   r*   r+   r-   r-   '   s         r*   r-   c                  $    e Zd ZU ded<   ded<   dS )	ComboArgsr#   r   T.List[str]r   Nr$   r)   r*   r+   r0   r0   *   s'         


r*   r0   c                  .    e Zd ZU ded<   ded<   ded<   dS )IntegerArgsintr   zT.Optional[int]r   r   Nr$   r)   r*   r+   r3   r3   .   s3         


r*   r3   c                  $    e Zd ZU ded<   ded<   dS )StringArrayArgsz%T.Optional[T.Union[str, T.List[str]]]r   r1   r   Nr$   r)   r*   r+   r6   r6   3   s*         4444r*   r6   c                  $    e Zd ZU ded<   ded<   dS )FeatureArgsz&Literal['enabled', 'disabled', 'auto']r   r1   r   Nr$   r)   r*   r+   r8   r8   7   s*         5555r*   r8   c                      e Zd ZdS )OptionExceptionN)r%   r&   r'   r)   r*   r+   r:   r:   <   s        Dr*   r:   z[^a-zA-Z0-9_-]c                     e Zd ZdOdZdPd
ZdQdZdRdZdSdZ ed e	de
d eh d                     e	de
d           e	dee
 eee
           eee
          fdd e
d!i"           e	d#eej        d$%          d&           ede
          dTd*                        Z ed+ e	d,e
d                    dUd1            Z ed2 e	d,ee
fdd3 e
d4i5                    dVd7            Z ed8 e	d,e
ef           e	d9 eee
d:          d;                    dWd=            Z ed> e	d,ee
fde
d?ie@           e	dAeef           e	dBeef                    dXdD            Z edE e	d, eee
          e
ef           e	d9 eee
          g                     dYdG            Z edH e	d,e
dI eh dJ          K                    dZdM            ZdNS )[OptionInterpreteroptionstore'OptionStore'
subproject'SubProject'returnNonec                    i | _         || _        | j        | j        | j        | j        | j        | j        d| _        || _	        d S )N)stringbooleancombointegerarrayfeature)
r   r?   string_parserboolean_parsercombo_parserinteger_parserstring_array_parserfeature_parseroption_typesr=   )selfr=   r?   s      r+   __init__zOptionInterpreter.__init__D   sU    ;=$(*&*-*R
 R
 'r*   option_filer#   c                :   	 t          |d          5 }|                                }d d d            n# 1 swxY w Y   n,# t          $ r}t          j        d|d|           d }~ww xY w	 t          j        ||                                          }n # t          j        $ r}||_        |d }~ww xY wt          |t
          j
                  s1t          d          }|                                |_        ||_        ||j        D ]}	 || _        |                     |            # t          j        $ r&}|j        |_        |j        |_        ||_        |d }~wt"          $ r4}t          j        t%          |          |j        |j        |          d }~ww xY wd S )Nzutf-8)encodingzMalformed option file z failed to parse as unicode: zOption file is malformed.)linenocolnofile)openreadUnicodeDecodeErrorr   MesonExceptionr   ParserparserX   
isinstanceCodeBlockNoder:   rV   linescurrent_nodeevaluate_statementrW   	Exceptionr#   )rQ   rS   fcodeeastmecurs           r+   processzOptionInterpreter.processQ   s"   	tkG444  vvxx                             ! 	t 	t 	t)*r;*r*rop*r*rsss	t	.{3399;;CC& 	 	 	!BGH	 #w455 	 ;<<Azz||AH AFG9 	R 	RC
R$'!'',,,,*   :)$ R R R-FF3:SY[R R R RR	R 	Rsn   A  4A  8A  8A   
A)
A$$A)-'B B2$	B--B2
D''F6!EF$/FFargT.Union[str, mparser.BaseNode]
'TYPE_var'c                    t          |t                    r|S t          |t          j                  r                     |j                  S t          |t          j        t          j        t          j        f          r|j	        S t          |t          j
                  r fd|j        j        D             S t          |t          j                  rni }|j        j                                        D ]K\  }}t          |t          j                  st!          d                               |          ||j	        <   L|S t          |t          j                  rc                     |j	                  }t          |t$          t&          f          st!          d          t)          j        dd j                   | S t          |t          j                  r\                     |j	                  }t          |t0                    st!          d          t)          j        dd j                   | S t          |t          j                  r                     |j                  }                     |j                  }|j        dk    r*t          |t                    rt          |t                    st!          d	          t)          j        d
d j                   ||z   S t!          d          )Nc                :    g | ]}                     |          S r)   reduce_single).0curargrQ   s     r+   
<listcomp>z3OptionInterpreter.reduce_single.<locals>.<listcomp>v   s'    PPP6D&&v..PPPr*   z(Dictionary keys must be a string literalzToken after "-" is not a numberz%negative numbers in meson_options.txtz0.54.1z$Token after "not" is not a a booleanz%negation ("not") in meson_options.txtaddz:Only string concatenation with the "+" operator is allowedz)string concatenation in meson_options.txtz0.55.0z;Arguments may only be string, int, bool, or array of those.)r_   r#   r   ParenthesizedNoderr   inner
StringNodeBooleanNode
NumberNoder   	ArrayNodeargs	argumentsDictNodekwargsitemsr:   
UMinusNoder4   floatr
   
single_user?   NotNoder.   ArithmeticNodeleftright	operation)rQ   rl   dkvreslrs   `       r+   rr   zOptionInterpreter.reduce_singlen   s   c3 	Jc7455 !	a%%ci000g0'2EwGYZ[[ 	a9W.// 	aPPPPSX=OPPPPW-.. 	aA--// 3 31!!W%788 V)*TUUU!//22!'

HW/00 	a$$SY//CcC<00 I%&GHHH!"I8UYUdeee4KW_-- 	a$$SY//Cc4(( N%&LMMM!"I8UYUdeee7NW344 	a""38,,A""39--AMU**z!S/A/A*jQRTWFXFX*%&bccc!"MxY]Yhiiiq5L!"_```r*   r}   mparser.ArgumentNode"T.Tuple['TYPE_var', 'TYPE_kwargs']c                Z    |                                 rt          d           fd|j        D             }i }|j                                        D ]U}t          |t          j                  st          d          |j        |         }                     |          ||j	        <   V||fS )Nz9All keyword arguments must be after positional arguments.c                :    g | ]}                     |          S r)   rq   )rs   rl   rQ   s     r+   ru   z6OptionInterpreter.reduce_arguments.<locals>.<listcomp>   s'    III3t))#..IIIr*   z&Keyword argument name is not a string.)
incorrect_orderr:   r~   r   keysr_   r   IdNoderr   r   )rQ   r}   reduced_pos
reduced_kwkeyas   `     r+   reduce_argumentsz"OptionInterpreter.reduce_arguments   s    !! 	_!"]^^^IIII$.III
;##%% 	: 	:Cc7>22 P%&NOOOC A$($6$6q$9$9Jsy!!J&&r*   nodemparser.BaseNodec                    t          |t          j                  st          d          |j        j        }|dk    rt          d          |                     |j                  \  }}|                     ||           d S )Nz/Option file may only contain option definitionsoptionz3Only calls to option() are allowed in option files.)	r_   r   FunctionNoder:   	func_namer   r   r}   func_option)rQ   r   r   posargsr   s        r+   rc   z$OptionInterpreter.evaluate_statement   s    $ 455 	U!"STTTN(	  !"WXXX 11$)<<&&)))))r*   r   r   T>   rH   rF   rD   rE   rI   rG   )required	validatorr    )defaultr    Fz0.60.0z0.63.0)r   sincesince_valuesr   z0.45.0)r   r   )allow_unknownT.Tuple[str]r   'FuncOptionArgs'c                "   |d         }t                               |          t          d          t          j        |                              | j                  }| j                            |          rt          d|z            |d         }| j	        |         }|d         p|}d |
                                D             } ||||d         |d	         f|          }	|| j        v rt          j        d
| d           |	| j        |<   d S )Nr   z9Option names can only contain letters, numbers or dashes.)r?   zOption name %s is reserved.r   r   c                "    i | ]\  }}|d v	||S )>   r   r   r    r   r)   )rs   r   r   s      r+   
<dictcomp>z1OptionInterpreter.func_option.<locals>.<dictcomp>   s6     P P PTQ NNN qNNNr*   r   r    zOption z already exists.)optname_regexsearchr:   r   from_stringevolver?   r=   is_reserved_namerP   r   r   r	   deprecation)
rQ   r}   r   opt_namer   opt_typeparserr   n_kwargsopts
             r+   r   zOptionInterpreter.func_option   s2   * 7))5!"]^^^#H--444PP,,S11 	L!"?("JKKK&>"8,]+7xP PV\\^^ P P P fX{VG_f\>R,SU]^^$,AxAAABBBSr*   zstring optionr   nameT.Tuple[bool, _DEPRECATED_ARGS]r"   options.UserOptionc                6    t          j        |||d         g|R  S Nr   )r   UserStringOptionrQ   r   r   r}   r   s        r+   rJ   zOptionInterpreter.string_parser   s%    
 'k6'?RTRRRRr*   zboolean optionc                <    t          | t                    s| dv rd ndS )N>   truefalsez(boolean options must have boolean values)r_   r.   )xs    r+   <lambda>zOptionInterpreter.<lambda>   s,    
1d(;(;  !FqDU?U?U  \F r*   )1.1.0zuse a boolean, not a string)r   r   deprecated_valuesr-   c                J    |\  }}t          j        |||d         ||          S )Nr   )yieldingr    )r   UserBooleanOption)rQ   r   r   r}   r   r   r    s          r+   rK   z OptionInterpreter.boolean_parser   s0      $*({F7OV^kuvvvvr*   zcombo optionr   )allow_empty)r   r0   c                p    |d         }|d         }||d         d         }t          j        |||g|R d|iS )Nr   r   r   )r   UserComboOptionrQ   r   r   r}   r   r   r   s          r+   rL   zOptionInterpreter.combo_parser   sQ     #w=9%a(E&t[%X$XXXPWXXXr*   zinteger option)r   zuse an integer, not a string)r   r   	convertorr   r   r3   c                V    t          j        |||d         g|R |d         |d         dS )Nr   r   r   )	min_value	max_value)r   UserIntegerOptionr   s        r+   rM   z OptionInterpreter.integer_parser   sR     (+vgi15i iAGZ`afZgi i i 	ir*   zstring array optionr6   c           	     V   |d         }|d         |d         n|}t          |t                    rU|                    d          r)t          dd                              | j                   nt          j        d|z             t          j	        |||||d         |d         	          S )
Nr   r   [zString value for array optionz1.3.0z Value does not define an array: r   r   )r   r   r    )
r_   r#   
startswithr   user?   r   r\   r   UserStringArrayOptionr   s          r+   rN   z%OptionInterpreter.string_array_parser  s     ##)'?#>wGeS!! 	Z$$ Z!"A7KKOOPTP_````-.PSX.XYYY,+u!WAw	      	 r*   zfeature optionauto>   r   enableddisabled)r   r   r8   c                6    t          j        |||d         g|R  S r   )r   UserFeatureOptionr   s        r+   rO   z OptionInterpreter.feature_parser  s%    
 ({F7OSdSSSSr*   N)r=   r>   r?   r@   rA   rB   )rS   r#   rA   rB   )rl   rm   rA   rn   )r}   r   rA   r   )r   r   rA   rB   )r}   r   r   r   rA   rB   )
r   r#   r   r#   r}   r   r   r"   rA   r   )
r   r#   r   r#   r}   r   r   r-   rA   r   )
r   r#   r   r#   r}   r   r   r0   rA   r   )
r   r#   r   r#   r}   r   r   r3   rA   r   )
r   r#   r   r#   r}   r   r   r6   rA   r   )
r   r#   r   r#   r}   r   r   r8   rA   r   )r%   r&   r'   rR   rk   rr   r   rc   r   r   r#   r   r.   r   dictlistr   DEFAULT_YIELDINGr   r   rJ   rK   r   rL   r4   rM   rN   rO   r)   r*   r+   r<   r<   C   s       ' ' ' 'R R R R:$a $a $a $aL
' 
' 
' 
'* * * * \	&&'d'd'dee		
 	
 	
 		-b111	3))$446G6Gc6R6RSx	
 	
 	
 		'4)ARRR#  & ^Hc""      #"' ( * \	'3+++ S S S	 S \	3K F  F"$LM	
 	
 	
	 	w w w	 	w \	'C?++	)..tSeLLLW[\\\ 
Y Y Y 
Y \	#J"$MN	
 	
 	
 		%#x))	%#x)) i i i i \	'--dC88#xHII	)..tS992FFF 
      
  \	'3:J:JKjKjKj:k:klll T T T	 T T Tr*   r<   )2
__future__r   retypingTr   r   r   r   r   r	   interpreterbaser
   r   r   r   r   r   interpreter.type_checkingr   r   TYPE_CHECKINGr   r   r   typing_extensionsr   r   r   Unionr.   r#   DictList_DEPRECATED_ARGSOptionalobjectr4   r   r"   r-   r0   r3   r6   r8   r\   r:   compiler   r<   r)   r*   r+   <module>r      s'   # " " " " " 				                                   v v v v v v v v v v v v v v v v A A A A A A A A? (66666666++++++44444444$$$$$$wtS!&c*:AF3KGHY/:afSk*z#z#&	2
 	2
 	 	N    Y       i       I       i   
    )       i   
	 	 	 	 	h- 	 	 	 
+,,XT XT XT XT XT XT XT XT XT XTr*   