o
    ld-                     @  s  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 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 deZ$G dd deZ%G dd deZ&G dd deZ'G dd deZ(G dd deZ)G dd dej*Z+e,dZ-G dd dZ.dS )     )annotationsN   )coredata)mesonlib)mparser)mlog)
FeatureNew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__ r%   r%   xhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/optinterpreter.pyr   ,      
 r   c                   @  r   )BooleanArgsboolr   Nr    r%   r%   r%   r&   r(   /   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      
 r+   c                   @  s&   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%   r&   r.   6   s   
 r.   c                   @  r*   )StringArrayArgsz%T.Optional[T.Union[str, T.List[str]]]r   r,   r   Nr    r%   r%   r%   r&   r0   ;   r-   r0   c                   @  r*   )FeatureArgsz&Literal['enabled', 'disabled', 'auto']r   r,   r   Nr    r%   r%   r%   r&   r1   ?   r-   r1   c                   @  s   e Zd ZdS )OptionExceptionN)r!   r"   r#   r%   r%   r%   r&   r2   D   s    r2   z[^a-zA-Z0-9_-]c                   @  s  e Zd ZdYddZdZd	d
Zd[ddZd\ddZd]ddZede	de
deh dde	de
dd e	d!ee
eee
eee
fd"d#e
d$id%e	d&eejd'd(dd)ede
d^d-d.Zed/e	d0e
dd d_d4d5Zed6e	d0ee
fdd7d8 e
d9id:d`d<d=Zed>e	d0e
efe	d?eee
d"d@ddAdadCdDZedEe	d0ee
fde
dFiedGe	dHeefe	dIeefdbdKdLZedMe	d0eee
e
efe	d?eee
g d dcdOdPZedQe	d0e
dReh dSdTdddVdWZdXS )eOptionInterpreter
subproject'SubProject'returnNonec                 C  s0   i | _ || _| j| j| j| j| j| jd| _d S )N)stringbooleancombointegerarrayfeature)	optionsr4   string_parserboolean_parsercombo_parserinteger_parserstring_array_parserfeature_parseroption_types)selfr4   r%   r%   r&   __init__L   s   zOptionInterpreter.__init__option_filer   c                 C  s  z"t |dd}t| | }W d    n1 sw   Y  W n tjy4 } z||_|d }~ww t|tj	sIt
d}| |_||_||jD ]>}z
|| _| | W qL tjyr } z|j|_|j|_||_|d }~w ty } ztjt||j|j|dd }~ww d S )Nzutf-8)encodingzOption file is malformed.)linenocolnofile)openr   Parserreadparser   MesonExceptionrL   
isinstanceZCodeBlockNoder2   rJ   linesZcurrent_nodeevaluate_statementrK   	Exceptionr   )rF   rH   fastmeecurr%   r%   r&   processX   s@   

zOptionInterpreter.processargT.Union[str, mparser.BaseNode]
'TYPE_var'c                   s  t |tr|S t |tjtjtjfr|jS t |tjr& fdd|jj	D S t |tj
rMi }|jj D ]\}}t |tjsBtd |||j< q4|S t |tjro |j}t |ttfsdtdtdd j | S t |tjr |j}t |tstdtdd j | S t |tjr |j} |j}|jd	krt |trt |tstd
tdd j || S td)Nc                      g | ]}  |qS r%   reduce_single).0ZcurargrF   r%   r&   
<listcomp>x       z3OptionInterpreter.reduce_single.<locals>.<listcomp>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.)rR   r   r   Z
StringNodeZBooleanNodeZ
NumberNoder   Z	ArrayNodeargs	argumentsZDictNodekwargsitemsr2   ra   Z
UMinusNoder/   floatr   Z
single_user4   ZNotNoder)   ZArithmeticNodeleftrightZ	operation)rF   r\   dkvreslrr%   rc   r&   ra   q   sF   

zOptionInterpreter.reduce_singlerg   mparser.ArgumentNode"T.Tuple['TYPE_var', 'TYPE_kwargs']c                   sn   |  rtd fdd|jD }i }|j D ]}t|tjs%td|j| } |||j	< q||fS )Nz9All keyword arguments must be after positional arguments.c                   r_   r%   r`   )rb   r\   rc   r%   r&   rd      re   z6OptionInterpreter.reduce_arguments.<locals>.<listcomp>z&Keyword argument name is not a string.)
Zincorrect_orderr2   rh   ri   keysrR   r   ZIdNodera   r   )rF   rg   Zreduced_posZ
reduced_kwkeyar%   rc   r&   reduce_arguments   s   
z"OptionInterpreter.reduce_argumentsnodemparser.BaseNodec                 C  sJ   t |tjs
td|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.)rR   r   ZFunctionNoder2   	func_namery   rg   func_option)rF   rz   r}   Zposargsri   r%   r%   r&   rT      s   z$OptionInterpreter.evaluate_statementr|   r   T>   r8   r;   r9   r=   r:   r<   )required	validatorr    )defaultr   Fz0.60.0z0.63.0)r   sinceZsince_valuesr   z0.45.0)r   r   )Zallow_unknownT.Tuple[str]ri   'FuncOptionArgs'c           
      C  s   |d }t |d urtdtj|j| jd}| s$td| |d }| j	| }|d p2|}dd |
 D }|||d	 |d
 f|}	|| jv rVtd| d |	| j|< d S )Nr   z9Option names can only contain letters, numbers or dashes.)r4   zOption name %s is reserved.r   r   c                 S  s   i | ]\}}|d vr||qS )>   r   r   r   r   r%   )rb   ro   rp   r%   r%   r&   
<dictcomp>   s    z1OptionInterpreter.func_option.<locals>.<dictcomp>r   r   zOption z already exists.)optname_regexsearchr2   r   Z	OptionKeyZfrom_stringZevolver4   Z
is_projectrE   rj   r>   r   Zdeprecation)
rF   rg   ri   opt_namerw   Zopt_typeparserr   Zn_kwargsoptr%   r%   r&   r~      s   

zOptionInterpreter.func_optionzstring optionr   T.Tuple[bool, _DEPRECATED_ARGS]r   coredata.UserOptionc                 C     t j||d g|R  S Nr   )r   ZUserStringOptionrF   r   rg   ri   r%   r%   r&   r?         zOptionInterpreter.string_parserzboolean optionc                 C  s   t | ts	| dv rd S dS )N>   falsetruez(boolean options must have boolean values)rR   r)   )xr%   r%   r&   <lambda>   s    zOptionInterpreter.<lambda>)1.1.0zuse a boolean, not a string)r   r   deprecated_valuesr(   c                 C  r   r   )r   ZUserBooleanOptionr   r%   r%   r&   r@      s   z OptionInterpreter.boolean_parserzcombo optionr   )Zallow_empty)r   r+   c                 C  s:   |d }|d }|d u r|d d }t j|||g|R  S )Nr   r   r   )r   ZUserComboOptionrF   r   rg   ri   r   r   r%   r%   r&   rA      s
   zOptionInterpreter.combo_parserzinteger option)r   zuse an integer, not a string)r   r   Z	convertorr   r   r.   c                 C  s.   |d }|d |d |f}t j||g|R  S )Nr   r   r   )r   ZUserIntegerOption)rF   r   rg   ri   r   Zinttupler%   r%   r&   rB      s   z OptionInterpreter.integer_parserzstring array optionr0   c                 C  s<   |d }|d d ur|d n|}t j||||d |d dS )Nr   r   r   r   )r   Zyieldingr   )r   ZUserArrayOptionr   r%   r%   r&   rC     s   z%OptionInterpreter.string_array_parserzfeature optionauto>   r   disabledenabled)r   r   r1   c                 C  r   r   )r   ZUserFeatureOptionr   r%   r%   r&   rD     r   z OptionInterpreter.feature_parserN)r4   r5   r6   r7   )rH   r   r6   r7   )r\   r]   r6   r^   )rg   rt   r6   ru   )rz   r{   r6   r7   )rg   r   ri   r   r6   r7   )r   r   rg   r   ri   r   r6   r   )r   r   rg   r   ri   r(   r6   r   )r   r   rg   r   ri   r+   r6   r   )r   r   rg   r   ri   r.   r6   r   )r   r   rg   r   ri   r0   r6   r   )r   r   rg   r   ri   r1   r6   r   )r!   r"   r#   rG   r[   ra   ry   rT   r
   r   r   r   r)   r   dictlistr   ZDEFAULT_YIELDINGr	   r~   r?   r@   r   rA   r/   rB   rC   rD   r%   r%   r%   r&   r3   K   s    



%
	

r3   )/
__future__r   retypingTr   r   r   r   r   Zinterpreterbaser   r	   r
   r   r   Zinterpreter.type_checkingr   r   TYPE_CHECKINGr   r   r   typing_extensionsr   r   Unionr)   r   DictListZ_DEPRECATED_ARGSOptionalobjectr/   r   r   r(   r+   r.   r0   r1   rQ   r2   compiler   r3   r%   r%   r%   r&   <module>   sB   "
