
    e.                       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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 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          Z. G d d          Z/dS )     )annotationsN   )coredata)mesonlib)mparser)mlog)
FeatureNewFeatureDeprecatedtyped_pos_argstyped_kwargsContainerTypeInfo	KwargInfo)NoneTypein_set_validator)TYPE_varTYPE_kwargs)
SubProject)	TypedDictLiteral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__     >/usr/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)   r.   r.   2   s'         


r(   r.   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)   r1   r1   6   s3         


r(   r1   c                  $    e Zd ZU ded<   ded<   dS )StringArrayArgsz%T.Optional[T.Union[str, T.List[str]]]r   r/   r   Nr"   r'   r(   r)   r4   r4   ;   s*         4444r(   r4   c                  $    e Zd ZU ded<   ded<   dS )FeatureArgsz&Literal['enabled', 'disabled', 'auto']r   r/   r   Nr"   r'   r(   r)   r6   r6   ?   s*         5555r(   r6   c                      e Zd ZdS )OptionExceptionN)r#   r$   r%   r'   r(   r)   r8   r8   D   s        Dr(   r8   z[^a-zA-Z0-9_-]c                     e Zd ZdLdZdMdZdNdZdOdZdPd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
          dQd(                        Z ed) e	d*e
d                    dRd.            Z ed/ e	d*ee
fdd0 e
d1i2                    dSd4            Z ed5 e	d*e
ef           e	d6 eee
d7          d8                    dTd:            Z ed; e	d*ee
fde
d<ie=           e	d>eef           e	d?eef                    dUdA            Z edB e	d* eee
          e
ef           e	d6 eee
          g                     dVdD            Z edE e	d*e
dF eh dG          H                    dWdJ            ZdKS )XOptionInterpreter
subproject'SubProject'returnNonec                z    i | _         || _        | j        | j        | j        | j        | j        | j        d| _        d S )N)stringbooleancombointegerarrayfeature)	optionsr;   string_parserboolean_parsercombo_parserinteger_parserstring_array_parserfeature_parseroption_types)selfr;   s     r)   __init__zOptionInterpreter.__init__L   sK    >@$(*&*-*P
 P
r(   option_filer!   c                   	 t          |d          5 }t          j        |                                |                                          }d d d            n# 1 swxY w Y   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Option file is malformed.)linenocolnofile)openr   Parserreadparser   MesonExceptionrU   
isinstanceCodeBlockNoder8   rS   linescurrent_nodeevaluate_statementrT   	Exceptionr!   )rN   rP   fastmeecurs          r)   processzOptionInterpreter.processX   s   	kG444 DnQVVXX{;;AACCD D D D D D D D D D D D D D D& 	 	 	!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s^   A% :AA% AA%  A!A% %B4	A==BC77E(!D''E(4/E##E(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curargrN   s     r)   
<listcomp>z3OptionInterpreter.reduce_single.<locals>.<listcomp>z   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   ParenthesizedNoderm   innerBaseStringNodeBooleanNode
NumberNoder   	ArrayNodeargs	argumentsDictNodekwargsitemsr8   
UMinusNoder2   floatr	   
single_user;   NotNoder,   ArithmeticNodeleftright	operation)rN   rg   dkvreslrs   `       r)   rm   zOptionInterpreter.reduce_singleq   s   c3 	Jc7455 "	a%%ci000g4g6I%02 3 3  	a9W.// 	aPPPPSX=OPPPPW-.. 	aA--// 3 31!!W%;<< 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(   rx   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'   rl   )rn   rg   rN   s     r)   rp   z6OptionInterpreter.reduce_arguments.<locals>.<listcomp>   s'    III3t))#..IIIr(   z&Keyword argument name is not a string.)
incorrect_orderr8   ry   r{   keysr[   r   IdNoderm   r   )rN   rx   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   FunctionNoder8   	func_namer   r   rx   func_option)rN   r   r   posargsr{   s        r)   r_   z$OptionInterpreter.evaluate_statement   s    $ 455 	U!"STTTN(	  !"WXXX 11$)<<&&)))))r(   r   r   T>   rD   rB   r@   rA   rE   rC   )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                  }|                                s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'   )rn   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searchr8   r   	OptionKeyfrom_stringevolver;   
is_projectrM   r|   rF   r   deprecation)
rN   rx   r{   opt_namer   opt_typeparserr   n_kwargsopts
             r)   r   zOptionInterpreter.func_option   s.   * 7))5!"]^^^ ,,X66===YY~~ 	L!"?("JKKK&>"8,]+7xP PV\\^^ P P P f[6'?F<4H"I8TT$,AxAAABBBSr(   zstring optionr   T.Tuple[bool, _DEPRECATED_ARGS]r    coredata.UserOptionc                4    t          j        ||d         g|R  S Nr   )r   UserStringOptionrN   r   rx   r{   s       r)   rG   zOptionInterpreter.string_parser   s#    
 (fWoMMMMMr(   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                4    t          j        ||d         g|R  S r   )r   UserBooleanOptionr   s       r)   rH   z OptionInterpreter.boolean_parser   s#     )+vgNNNNNr(   zcombo optionr   )allow_empty)r   r.   c                j    |d         }|d         }||d         d         }t          j        |||g|R  S )Nr   r   r   )r   UserComboOptionrN   r   rx   r{   r   r   s         r)   rI   zOptionInterpreter.combo_parser   sH     #w=9%a(E'WeKdKKKKr(   zinteger option)r   zuse an integer, not a string)r   r   	convertorr   r   r1   c                Z    |d         }|d         |d         |f}t          j        ||g|R  S )Nr   r   r   )r   UserIntegerOption)rN   r   rx   r{   r   inttuples         r)   rJ   z OptionInterpreter.integer_parser   s<     w5M6%=%8)+xG$GGGGr(   zstring array optionr4   c                T   |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   yieldingr   )
r[   r!   
startswithr
   user;   r   rZ   r   UserArrayOptionr   s         r)   rK   z%OptionInterpreter.string_array_parser  s     ##)'?#>wGeS!! 	Z$$ Z!"A7KKOOPTP_````-.PSX.XYYY'U0715a377< < < 	<r(   zfeature optionauto>   r   enableddisabled)r   r   r6   c                4    t          j        ||d         g|R  S r   )r   UserFeatureOptionr   s       r)   rL   z OptionInterpreter.feature_parser  s#    
 )+vgNNNNNr(   N)r;   r<   r=   r>   )rP   r!   r=   r>   )rg   rh   r=   ri   )rx   r   r=   r   )r   r   r=   r>   )rx   r   r{   r   r=   r>   )r   r!   rx   r   r{   r    r=   r   )r   r!   rx   r   r{   r+   r=   r   )r   r!   rx   r   r{   r.   r=   r   )r   r!   rx   r   r{   r1   r=   r   )r   r!   rx   r   r{   r4   r=   r   )r   r!   rx   r   r{   r6   r=   r   )r#   r$   r%   rO   rf   rm   r   r_   r   r   r!   r   r,   r   dictlistr   DEFAULT_YIELDINGr   r   rG   rH   r   rI   r2   rJ   rK   rL   r'   r(   r)   r:   r:   K   s       

 

 

 

R R R R2%a %a %a %aN
' 
' 
' 
'* * * * \	&&'d'd'dee		
 	
 	
 		-b111	3))$446G6Gc6R6RSx	
 	
 	
 		'4)B(SSS#  & ^Hc""      #"' ( * \	'3+++ N N N	 N \	3K F  F"$LM	
 	
 	
	 	O O O	 	O \	'C?++	)..tSeLLLW[\\\ 
L L L 
L \	#J"$MN	
 	
 	
 		%#x))	%#x)) H H H H
 \	'--dC88#xHII	)..tS992FFF 
< < < 
< \	'3:J:JKjKjKj:k:klll O O O	 O O Or(   r:   )0
__future__r   retypingTr   r   r   r   r   interpreterbaser	   r
   r   r   r   r   interpreter.type_checkingr   r   TYPE_CHECKINGr   r   r   typing_extensionsr   r   Unionr,   r!   DictList_DEPRECATED_ARGSOptionalobjectr2   r   r    r+   r.   r1   r4   r6   rZ   r8   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- 	 	 	 
+,,SO SO SO SO SO SO SO SO SO SOr(   