§
    ‹ã÷cY)  ã                   óH  — 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 ej        rºddlmZmZ dd	lmZ d d
lmZ  edeeeej        ej        e                  eej        e         ej        e         ej        eeej        eef         ej        e         f         dœ¦  «        Z edeej        ej        e                  eej        e         ej        e         dœ¦  «        Z G d„ dej        ¦  «        Z  e j!        d¦  «        Z" G d„ d¦  «        Z#dS )é    Né   )Úcoredata)Úmesonlib)Úmparser)Úmlog)Ú
FeatureNewÚtyped_pos_argsÚtyped_kwargsÚContainerTypeInfoÚ	KwargInfoÚpermittedKwargs©ÚTYPE_varÚTYPE_kwargs)Ú
SubProject)Ú	TypedDictÚFuncOptionArgs)ÚtypeÚdescriptionÚyieldÚchoicesÚvalueÚminÚmaxÚ
deprecatedÚ
ParserArgs)r   r   r   r   r   c                   ó   — e Zd ZdS )ÚOptionExceptionN)Ú__name__Ú
__module__Ú__qualname__© ó    ú;/usr/lib/python3/dist-packages/mesonbuild/optinterpreter.pyr   r   .   s   € € € € € Ø€Dr#   r   z[^a-zA-Z0-9_-]c                   ó   — e Zd Zd-d„Zdeddfd„Zdej        eej	        f         dd	fd
„Z
dej        dej        d         fd„Zdej	        ddfd„Z ed eded¬¦  «         eded¬¦  «         edeej        d¬¦  «         ed eee¦  «         ed¦  «        f¦  «         ede¦  «         ede ed¦  «        f¦  «         ede ed¦  «        f¦  «         edee eee¦  «         eee¦  «        fdd ¬¦  «        ¦	  «	         ede¦  «        dej        e         d!d"ddfd#„¦   «         ¦   «         Z eddh¦  «        ded!d$dej        fd%„¦   «         Z eddh¦  «        ded!d$dej        fd&„¦   «         Z eh d'£¦  «        ded!d$dej        fd(„¦   «         Z  eh d)£¦  «        ded!d$dej        fd*„¦   «         Z! eh d'£¦  «        ded!d$dej        fd+„¦   «         Z" eddh¦  «        ded!d$dej        fd,„¦   «         Z#dS ).ÚOptionInterpreterÚ
subprojectr   ÚreturnNc                 ó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__6   sI   € Ø>@ˆŒØ$ˆŒØ'+Ô'9Ø(,Ô(;Ø&*Ô&7Ø(,Ô(;Ø&*Ô&>Ø(,Ô(;ðð ˆÔÐÐr#   Úoption_filec                 óÚ  — 	 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   ÚMesonExceptionr?   Ú
isinstanceÚCodeBlockNoder   r=   ÚlinesÚcurrent_nodeÚevaluate_statementr>   Ú	ExceptionÚstr)r8   r:   ÚfÚastÚmeÚeÚcurs          r$   ÚprocesszOptionInterpreter.processA   sß  € ð	Ý�k¨GÐ4Ñ4Ô4ð D¸Ý”n Q§V¢V¡X¤X¨{Ñ;Ô;×AÒAÑCÔC�ðDð Dð Dñ Dô Dð Dð Dð Dð Dð Dð Døøøð Dð Dð Dð DøøåÔ&ð 	ð 	ð 	Ø!ˆBŒGØˆHøøøøð	øøøõ ˜#�wÔ4Ñ5Ô5ð 	ÝÐ ;Ñ<Ô<ˆAØ—z’z‘|”|ˆAŒHØ ˆAŒFØˆGØ”9ð 	Rð 	RˆCð
RØ$'�Ô!Ø×'Ò'¨Ñ,Ô,Ð,Ð,øÝÔ*ð ð ð Øœ:�”Øœ)�”Ø$�”Ø�øøøøÝð Rð Rð RÝÔ-Ý˜‘F”F 3¤:°S´YÀ[ð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(Úargr   c                 ó~  ‡ — t          |t          ¦  «        r|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          |t,          ¦  «        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Úcurargr8   s     €r$   ú
<listcomp>z3OptionInterpreter.reduce_single.<locals>.<listcomp>a   s'   ø€ ÐPÐPÐP°6�D×&Ò& 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.)rE   rK   r   Ú
StringNodeÚBooleanNodeÚ
NumberNoder   Ú	ArrayNodeÚargsÚ	argumentsÚDictNodeÚkwargsÚitemsr   rV   Ú
UMinusNodeÚintÚfloatr   Ú
single_user'   ÚNotNodeÚboolÚArithmeticNodeÚleftÚrightÚ	operation)r8   rR   ÚdÚkÚvÚresÚlÚrs   `       r$   rV   zOptionInterpreter.reduce_singleZ   s’  ø€ Ý�c�3ÑÔð "	aØˆJÝ˜�gÔ0µ'Ô2EÝ%Ô0ð2ñ 3ô 3ð  	aà”9ÐÝ˜�WÔ.Ñ/Ô/ð 	aØPÐPÐPÐP¸S¼XÔ=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Ø×$Ò$ S¤YÑ/Ô/ˆCÝ˜c¥C­ <Ñ0Ô0ð IÝ%Ð&GÑHÔHÐHÝÔ!Ð"IÈ8ÐUYÔUdÑeÔeÐeØ�4ˆKÝ˜�Wœ_Ñ-Ô-ð 	aØ×$Ò$ S¤YÑ/Ô/ˆCÝ˜c¥4Ñ(Ô(ð NÝ%Ð&LÑMÔMÐMÝÔ!Ð"IÈ8ÐUYÔUdÑeÔeÐeØ�7ˆNÝ˜�WÔ3Ñ4Ô4ð 	aØ×"Ò" 3¤8Ñ,Ô,ˆAØ×"Ò" 3¤9Ñ-Ô-ˆAØ”M UÒ*Ð*­z¸!½SÑ/AÔ/AÐ*ÅjÐQRÕTWÑFXÔFXÐ*Ý%Ð&bÑcÔcÐcÝÔ!Ð"MÈxÐY]ÔYhÑiÔiÐiØ�q‘5ˆLå!Ð"_Ñ`Ô`Ð`r#   r_   r   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"   rU   )rW   rR   r8   s     €r$   rY   z6OptionInterpreter.reduce_arguments.<locals>.<listcomp>‚   s'   ø€ ÐIÐIÐI°3�t×)Ò)¨#Ñ.Ô.ÐIÐIÐIr#   z&Keyword argument name is not a string.)
Úincorrect_orderr   r`   rb   ÚkeysrE   r   ÚIdNoderV   r   )r8   r_   Úreduced_posÚ
reduced_kwÚkeyÚas   `     r$   Úreduce_argumentsz"OptionInterpreter.reduce_arguments   s¼   ø€ Ø×ÒÑ!Ô!ð 	_Ý!Ð"]Ñ^Ô^Ð^ØIÐIÐIÐI¸$¼.ÐIÑIÔIˆØˆ
Ø”;×#Ò#Ñ%Ô%ð 	:ð 	:ˆCÝ˜c¥7¤>Ñ2Ô2ð PÝ%Ð&NÑOÔOÐOØ”˜CÔ ˆAØ$(×$6Ò$6°qÑ$9Ô$9ˆJ�s”yÑ!Ð!Ø˜JÐ&Ð&r#   Únodec                 óö   — 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.)rE   r   ÚFunctionNoder   Ú	func_namer}   r_   Úfunc_option)r8   r~   r‚   Úposargsrb   s        r$   rI   z$OptionInterpreter.evaluate_statement‹   s~   € Ý˜$¥Ô 4Ñ5Ô5ð 	UÝ!Ð"SÑTÔTÐTØ”Nˆ	Ø˜Ò Ð Ý!Ð"WÑXÔXÐXØ ×1Ò1°$´)Ñ<Ô<Ñˆ�&Ø×Ò˜ &Ñ)Ô)Ð)Ð)Ð)r#   r€   r   T)Úrequiredr   Ú )Údefaultr   z0.45.0)r‡   Úsincer   r   r   r   r   Fz0.60.0rb   r   c                 ó  ‡
— |d         }t                                |¦  «        �t          d¦  «        ‚t          j                             |¦  «                             | j        ¬¦  «        }|                     ¦   «         st          d|z  ¦  «        ‚|d         }| j	         
                    |¦  «        }|st          d|› d�¦  «        ‚|d         p|}h d	£Š
ˆ
fd
„|                     ¦   «         D ¦   «         } ||t          j        d|¦  «        ¦  «        }	|d         |	_        t          |	j        t           ¦  «        rt#          j        dd| j        ¦  «         || 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   zUnknown type ú.r   >   r   r   r   r   r   c                 ó(   •— i | ]\  }}|‰v ¯	|®||“ŒS )Nr"   )rW   ro   rp   Úknown_parser_kwargss      €r$   ú
<dictcomp>z1OptionInterpreter.func_option.<locals>.<dictcomp>±   s0   ø€ ÐgÐgÐg¡$ ! Q¸AÐATÐ<TÐ<TÐYZÐYf˜˜AÐYfÐYfÐYfr#   r   r   z-String value to "deprecated" keyword argumentz0.63.0zOption z already exists.)Úoptname_regexÚsearchr   r   Ú	OptionKeyÚfrom_stringÚevolver'   Ú
is_projectr7   Úgetrc   ÚTÚcastr   rE   rK   r   rg   r0   r   Údeprecation)r8   r_   rb   Úopt_namer{   Úopt_typeÚparserr   Úparser_kwargsÚoptrŒ   s             @r$   rƒ   zOptionInterpreter.func_option”   s–  ø€ ð ˜”7ˆÝ×Ò Ñ)Ô)Ð5Ý!Ð"]Ñ^Ô^Ð^ÝÔ ×,Ò,¨XÑ6Ô6×=Ò=ÈÌÐ=ÑYÔYˆØ�~Š~ÑÔð 	LÝ!Ð"?À(Ñ"JÑKÔKÐKà˜&”>ˆØÔ"×&Ò& xÑ0Ô0ˆØð 	?Ý!Ð"=°(Ð"=Ð"=Ð"=Ñ>Ô>Ð>Ø˜]Ô+Ð7¨xˆð JÐIÐIÐØgÐgÐgÐg¨&¯,ª,©.¬.ÐgÑgÔgˆØˆf�[¥!¤&¨°}Ñ"EÔ"EÑFÔFˆØ Ô-ˆŒÝ�c”n¥cÑ*Ô*ð 	nÝÔ!Ð"QÐS[Ð]aÔ]lÑmÔmÐmØ�$”,ÐÐÝÔÐA xÐAÐAÐAÑBÔBÐBØˆŒ�SÑÐÐr#   r   c                 óf   — |                      dd¦  «        }t          j        |||d         ¦  «        S )Nr   r†   r   )r”   r   ÚUserStringOption©r8   r   rb   r   s       r$   r1   zOptionInterpreter.string_parserº   s.   € à—
’
˜7 BÑ'Ô'ˆÝÔ(¨°e¸VÀG¼_ÑMÔMÐMr#   c                 óf   — |                      dd¦  «        }t          j        |||d         ¦  «        S )Nr   Tr   )r”   r   ÚUserBooleanOptionrŸ   s       r$   r2   z OptionInterpreter.boolean_parser¿   s.   € à—
’
˜7 DÑ)Ô)ˆÝÔ)¨+°u¸fÀW¼oÑNÔNÐNr#   >   r   r   r   c                 óÀ   — |                      d¦  «        }|st          d¦  «        ‚|                      d|d         ¦  «        }t          j        ||||d         ¦  «        S )Nr   z'Combo option missing "choices" keyword.r   r   r   )r”   r   r   ÚUserComboOption©r8   r   rb   r   r   s        r$   r3   zOptionInterpreter.combo_parserÄ   s]   € à—*’*˜YÑ'Ô'ˆØð 	MÝ!Ð"KÑLÔLÐLØ—
’
˜7 G¨A¤JÑ/Ô/ˆÝÔ'¨°W¸eÀVÈGÄ_ÑUÔUÐUr#   >   r   r   r   r   c                 óÜ   — |                      d¦  «        }|€t          d¦  «        ‚|                      d¦  «        |                      d¦  «        |f}t          j        |||d         ¦  «        S )Nr   z+Integer option must contain value argument.r   r   r   )r”   r   r   ÚUserIntegerOption)r8   r   rb   r   Úinttuples        r$   r4   z OptionInterpreter.integer_parserÌ   sd   € à—
’
˜7Ñ#Ô#ˆØˆ=Ý!Ð"OÑPÔPÐPØ—J’J˜uÑ%Ô% v§z¢z°%Ñ'8Ô'8¸%Ð@ˆÝÔ)¨+°xÀÈÄÑQÔQÐQr#   c                 óÞ   — |                      dg ¦  «        }|                      d|¦  «        }t          |t          ¦  «        st          d¦  «        ‚t	          j        ||||d         ¬¦  «        S )Nr   r   z)Array choices must be passed as an array.r   )r   Úyielding)r”   rE   Úlistr   r   ÚUserArrayOptionr¤   s        r$   r5   z%OptionInterpreter.string_array_parserÔ   sv   € à—*’*˜Y¨Ñ+Ô+ˆØ—
’
˜7 GÑ,Ô,ˆÝ˜%¥Ñ&Ô&ð 	OÝ!Ð"MÑNÔNÐNÝÔ'¨°UØ07Ø17¸´ðBñ Bô Bð 	Br#   c                 óf   — |                      dd¦  «        }t          j        |||d         ¦  «        S )Nr   Úautor   )r”   r   ÚUserFeatureOptionrŸ   s       r$   r6   z OptionInterpreter.feature_parserÞ   s.   € à—
’
˜7 FÑ+Ô+ˆÝÔ)¨+°u¸fÀW¼oÑNÔNÐNr#   )r'   r   r(   N)$r   r    r!   r9   rK   rQ   r•   ÚUnionr   ÚBaseNoderV   ÚArgumentNodeÚTupler}   rI   r
   r   ri   r   Údefault_yieldingr   rª   r   Úobjectre   Údictr	   rƒ   r   Ú
UserOptionr1   r2   r3   r4   r5   r6   r"   r#   r$   r&   r&   5   s  € € € € € ð	ð 	ð 	ð 	ðR 3ð R¨4ð Rð Rð Rð Rð2#a ¤¨¨gÔ.>Ð)>Ô!?ð #aÀJð #að #að #að #aðJ
' WÔ%9ð 
'¸a¼gÐF_Ô>`ð 
'ð 
'ð 
'ð 
'ð* wÔ'7ð *¸Dð *ð *ð *ð *ð €\�(Ø�)˜F C°$Ð7Ñ7Ô7Ø�)˜M¨3¸Ð;Ñ;Ô;Ø�)˜G T°8Ô3LÐT\Ð]Ñ]Ô]Ø�)˜IÐ(9Ð(9¸$ÀÑ(DÔ(DÀdÀdÈ4ÁjÄjÐ'QÑRÔRØ�)˜G VÑ,Ô,Ø�)˜E C¨¨¨d©¬Ð#4Ñ5Ô5Ø�)˜E C¨¨¨d©¬Ð#4Ñ5Ô5Ø�)˜L¨4°Ð6GÐ6GÈÈcÑ6RÔ6RÐTeÐTeÐfjÐloÑTpÔTpÐ*qØ$)°ð;ñ ;ô ;ñ
ô 
ð €^�H˜cÑ"Ô"ð  ¤¨¤ð  Ð6Fð  È4ð  ð  ð  ñ #Ô"ñ
ô 
ð ð4 €_�g˜wÐ'Ñ(Ô(ðN¨ð N°lð NÀxÔGZð Nð Nð Nñ )Ô(ðNð €_�g˜wÐ'Ñ(Ô(ðO¨#ð O°|ð OÈÔH[ð Oð Oð Oñ )Ô(ðOð €_Ð2Ð2Ð2Ñ3Ô3ðV¨ð V°\ð VÀhÔFYð Vð Vð Vñ 4Ô3ðVð €_Ð5Ð5Ð5Ñ6Ô6ðR¨#ð R°|ð RÈÔH[ð Rð Rð Rñ 7Ô6ðRð €_Ð2Ð2Ð2Ñ3Ô3ðB¨sð B¸Lð BÈXÔM`ð Bð Bð Bñ 4Ô3ðBð €_�g˜wÐ'Ñ(Ô(ðO¨#ð O°|ð OÈÔH[ð Oð Oð Oñ )Ô(ðOð Oð Or#   r&   )$ÚreÚtypingr•   r†   r   r   r   r   Úinterpreterbaser   r	   r
   r   r   r   ÚTYPE_CHECKINGr   r   r   Útyping_extensionsr   rK   ri   ÚOptionalÚListr´   re   r¯   ÚDictr   r   rD   r   ÚcompilerŽ   r&   r"   r#   r$   ú<module>rÀ      s  ðð 
€	€	€	Ø Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tØ„?ð Ø6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ø+Ð+Ð+Ð+Ð+Ð+Ø+Ð+Ð+Ð+Ð+Ð+Ø�YÐ/ØØØØ”:˜aœf SœkÔ*ØØŒz˜#ŒØŒz˜#ŒØ”g˜d C¨¬°°S°Ô)9¸1¼6À#¼;ÐFÔGð	2
ð 	2
ñ 	ô 	€Nð �˜<ØØ”:˜aœf SœkÔ*ØØŒz˜#ŒØŒz˜#Œð*
ð *
ñ ô €Jð	ð 	ð 	ð 	ð 	�hÔ-ñ 	ô 	ð 	ð �”
Ð+Ñ,Ô,€ðlOð lOð lOð lOð lOñ lOô lOð lOð lOð lOr#   