
    -Ph]              #         U d dl mZ d dlmZ d dlmZ d dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ ej        rd dl m!Z!m"Z"m#Z#m$Z$ dd	l%m&Z& ej'        e(e)ej*        e)e)f         ej+        e)         f         Z,d
e-d<   ej'        d         Z.d
e-d<   ej'        e)e/e(ej+        e)         f         Z0d
e-d<   ej*        de.f         Z1d
e-d<   ej2        ej3        e)         ee)f         Z4d
e-d<    G d de$d          Z5dZ6 ej7        d          Z8g dZ9dgZ:g dZ;h dZ<dZ=i Z>de-d<    G d d          Z?ej        r!ej*        ej'        e?e)f         e)f         Z@d
e-d<   ejA         G d  d!ejB        e8         e                      ZCejA         G d" d#eCe8                               ZD G d$ d%eCe)                   ZEejA         G d& d'eDe(                               ZF G d( d)eCe8                   ZGejA         G d* d+eGe/                               ZH G d, d-e/          ZIejA         G d. d/eGej'        d0eIf                                        ZJejA         G d1 d2eDe)                               ZKejA         G d3 d4eCej+        e8                                        ZLejA         G d5 d6eLe)                               ZMejA         G d7 d8eK                      ZN ej7        d9eC:          ZOdd?ZP G d@ dAeK          ZQddDZRdddHZSddNZTdO  eEdGdP e                       eEdQdRdS           eEdTdU e                       eEdVdW e                       eEdXdY e                       eEdZd[ e                       eEd\d]dE           eEd^d_ e                       eEd`da e                       eEdbdcdd           eEdedf e                       eEdgdh e                       eEdidjdk           eEdldm e                      fD             ZUdne-do<   dp  ejV        dq eNdrdsdt           eKdudvdwe9dxy           eKdzd{de:|           eKd}d~de;|           eFdddx           eKdddg dd           eKdddg d|           eFdddx           eJdd eId                     eKdddddg|           eKdddg d|           eFddd           eFdddx           eFddd           eKdddg d|           eHdddd           eKdddg dd           eFdddd           eKdddg d|           eMddg            eFddddx           eFddd           eHddd dd           eKdddGg d|           eEdddE           eEdddE           eFdddx          g          D             ZWdne-d<    e eeUX                                eWX                                                    ZYdń  eMddg            eMddg           fD             ZZdne-d<    e?dl          ddi e?db          dddϜ e?di          dddϜ e?d          i  e?d          i iZ[de-d<   g dԢZ\dՄ  ejV        dq eFdddx           eFddd           eHddd            eKdddddg|           eFddd           eEdddE           eMddg            eFdddx           eFdddx           eKdddg d|           eFddd           eKdddg d|           eKdddg d|           eFdddx           eFddd           eFddd           eKddde\ddgz   |          g          D             Z]dne-d <    G d d          Z^dS (      )annotations)OrderedDict)chainN   )HoldableObjectdefault_prefixdefault_datadirdefault_includedirdefault_infodirdefault_libdirdefault_libexecdirdefault_localedirdefault_mandirdefault_sbindirdefault_sysconfdirMesonExceptionMesonBugExceptionlistify_array_valueMachineChoice)mlog)LiteralFinal	TypeAlias	TypedDict)
SubProjectr   DeprecatedType)UserBooleanOptionUserComboOptionUserFeatureOptionUserIntegerOptionUserStdOptionUserStringArrayOptionUserStringOptionUserUmaskOptionAnyOptionTypeElementaryOptionValues	OptionKeyMutableKeyedOptionDictType_OptionKeyTuplec                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )ArgparseKWsstractiondestdefaultzT.ListchoicesN)__name__
__module____qualname____annotations__     R/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/options.pyr+   r+   3   s4         			r6   r+   F)total_T)ninjavsvs2010vs2012vs2013vs2015vs2017vs2019vs2022xcodenonerB   )plaindebugdebugoptimizedreleaseminsizecustom>%   rF   stripunityvsenvbindirlayoutlibdirmandirprefixwerrorbackenddatadirinfodirsbindirstdsplit	buildtype	errorlogs	genvslite	localedir	wrap_mode
includedir
libexecdir
licensedir
sysconfdir
unity_sizeoptimizationauto_featuresinstall_umasklocalstatedirprefer_staticwarning_levelsharedstatedirdefault_librarypkg_config_pathcmake_prefix_pathforce_fallback_fordefault_both_librariesu   Qwert Zuiopüz"T.Dict[_OptionKeyTuple, OptionKey]_optionkey_cachec                  ,    e Zd ZU dZdZded<   ded<   ded<   d	ed
<   ddej        fd2 fdZd3dZ	d4dZ
d5dZd6dZd7dZd8dZd9dZd9d Zd9d!Zd9d"Zd9d#Zd9d$Zd:d%Zd:d&Zed;d)            Zdedfd<d+Zd=d,Zd=d-Zd=d.Zd>d/Zd?d0Zd>d1Z  xZ!S )@r'   a	  Represents an option key in the various option dictionaries.

    This provides a flexible, powerful way to map option names from their
    external form (things like subproject:build.option) to something that
    internally easier to reason about and produce.
    )name
subprojectmachine_hashr,   rq   T.Optional[str]rr   r   rs   intrt    Nreturnc                   |s!t                                          |           S |||f}	 t          |         S # t          $ rG t                                          |           }|                    |||           |t          |<   |cY S w xY w)zThe use of the __new__ method allows to add a transparent cache
        to the OptionKey object creation, without breaking its API.
        )super__new__ro   KeyError_init)clsrq   rr   rs   tuple_instance	__class__s         r7   r{   zOptionKey.__new__   s      	(77??3'''#-w"=	#F++ 	 	 	wws++HNN4W555'/V$OOO		s   8 AB	B	Nonec           	        t          |t                    st          d|           t          |t                    st	          d|           d|vsJ t
                              | d|           t
                              | d|           t
                              | d|           t
                              | dt          |||f                     d S )Nz"Internal error, bad machine type: zKey name is not a string: :rq   rr   rs   rt   )
isinstancer   r   r,   r   object__setattr__hashselfrq   rr   rs   s       r7   r}   zOptionKey._init   s     '=11 	Q !Og!O!OPPP$$$ 	I#$G$G$GHHH$4...4z:::4G4444$j'/J*K*KLLLLLr6   keyvalueT.Anyc                     t          d          )Nz,OptionKey instances do not support mutation.)AttributeError)r   r   r   s      r7   r   zOptionKey.__setattr__   s    KLLLr6   T.Dict[str, T.Any]c                ,    | j         | j        | j        dS )Nrq   rr   rs   r   r   s    r7   __getstate__zOptionKey.__getstate__   s     I/|
 
 	
r6   statec                X     | j         di | | t          |                                 <   d S Nr5   )r}   ro   	_to_tuple)r   r   s     r7   __setstate__zOptionKey.__setstate__   s5    
U-1))***r6   c                    | j         S N)rt   r   s    r7   __hash__zOptionKey.__hash__   
    zr6   r)   c                *    | j         | j        | j        fS r   )rr   rs   rq   r   s    r7   r   zOptionKey._to_tuple   s    ty99r6   otherr   boolc                    t          |t                    r*|                                 |                                k    S t          S r   r   r'   r   NotImplementedr   r   s     r7   __eq__zOptionKey.__eq__   9    eY'' 	9>>##u'8'888r6   c                    t          |t                    r*|                                 |                                k    S t          S r   r   r   s     r7   __ne__zOptionKey.__ne__   r   r6   c                    t          |t                    rC| j        	|j        d uS |j        dS |                                 |                                k     S t          S NFr   r'   rr   r   r   r   s     r7   __lt__zOptionKey.__lt__   s]    eY'' 	8&'t33!)u>>##eoo&7&777r6   c                    t          |t                    rJ| j        	|j        dS | j        	|j        dS |                                 |                                k    S t          S NTFr   r   s     r7   __le__zOptionKey.__le__   sc    eY'' 	9&5+;+Gt,1A1Iu>>##u'8'888r6   c                    t          |t                    rC|j        	| j        d uS | j        dS |                                 |                                k    S t          S r   r   r   s     r7   __gt__zOptionKey.__gt__   s\    eY'' 	8'd22(u>>##eoo&7&777r6   c                    t          |t                    rJ| j        	|j        dS | j        	|j        dS |                                 |                                k    S t          S NFTr   r   s     r7   __ge__zOptionKey.__ge__   sc    eY'' 	9&5+;+Gu,1A1It>>##u'8'888r6   c                j    | j         }| j        t          j        u rd| }| j        | j         d| }|S )Nbuild.r   )rq   rs   r   BUILDrr   )r   outs     r7   __str__zOptionKey.__str__   sF    i<=... 3..C?&_,,s,,C
r6   c                8    d| j         d| j        d| j        dS )Nz
OptionKey(, )r   r   s    r7   __repr__zOptionKey.__repr__   s)    QDIQQ4?QQQQQQr6   raw'OptionKey'c                   t          |t                    sJ 	 |                    d          \  }}n# t          $ r d|}}Y nw xY wt          j        }	 |                    d          \  }}|dk    rt          j        }n|}n# t          $ r |}Y nw xY w|}d|vsJ |                    d          dk     sJ  | |||          S )zParse the raw command line format into a three part tuple.

        This takes strings like `mysubproject:build.myoption` and Creates an
        OptionKey out of them.
        r   N.build   )r   r,   split
ValueErrorr   HOSTr   count)r~   r   rr   raw2for_machinerR   raw3opts           r7   from_stringzOptionKey.from_string   s    #s#####	)"yy~~J 	) 	) 	)#SJJJ	) $(	::c??LFD  +1 	 	 	DDD	 #~~~~yy~~!!!!s3
K000s!   2 AA-B BBT.Optional[MachineChoice]c                l    t          ||n| j        |t          k    r|n| j        ||n| j                  S )a  Create a new copy of this key, but with altered members.

        For example:
        >>> a = OptionKey('foo', '', MachineChoice.Host)
        >>> b = OptionKey('foo', 'bar', MachineChoice.Host)
        >>> b == a.evolve(subproject='bar')
        True
        )r'   rq   
_BAD_VALUErr   rs   r   s       r7   evolvezOptionKey.evolve  sG     !1ty'1Z'?'?T_$+$7T\K K 	Kr6   c                .    |                      d          S )z1Convenience method for key.evolve(subproject='').rw   rr   )r   r   s    r7   as_rootzOptionKey.as_root!  s    {{b{)))r6   c                B    |                      t          j                  S )z?Convenience method for key.evolve(machine=MachineChoice.BUILD).rs   )r   r   r   r   s    r7   as_buildzOptionKey.as_build%  s    {{=#6{777r6   c                B    |                      t          j                  S )z>Convenience method for key.evolve(machine=MachineChoice.HOST).r   )r   r   r   r   s    r7   as_hostzOptionKey.as_host)  s    {{=#5{666r6   c                    d| j         v S )Nr   rq   r   s    r7   has_module_prefixzOptionKey.has_module_prefix-  s    dir6   c                p    |                                  r!| j                            dd          d         S d S )Nr   r   r   )r   rq   r   r   s    r7   get_module_prefixzOptionKey.get_module_prefix0  s6    !!## 	.9??3**1--tr6   c                (    | j         t          j        u S r   )rs   r   r   r   s    r7   is_for_buildzOptionKey.is_for_build5  s    |}222r6   )rq   r,   rr   ru   rs   r   rx   r'   )rq   r,   rr   ru   rs   r   rx   r   )r   r,   r   r   rx   r   )rx   r   )r   r   rx   r   rx   rv   )rx   r)   )r   r   rx   r   rx   r,   )r   r,   rx   r   )rq   ru   rr   ru   rs   r   rx   r   )rx   r'   rx   r   )rx   ru   )"r1   r2   r3   __doc__	__slots__r4   r   r   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   classmethodr   r   r   r   r   r   r   r   r   __classcell__r   s   @r7   r'   r'   r   sr          ;IIIIJJJ .2)6);      &M M M MM M M M
 
 
 
2 2 2 2
   : : : :   
   
               R R R R 1 1 1 [1: (,-748K K K K K$* * * *8 8 8 87 7 7 7          
3 3 3 3 3 3 3 3r6   OptionStringLikeDictc                      e Zd ZU ded<   ded<   ded<   eZded<   dZd	ed
<    ej        d          Z	ded<   ddZ
ddZddZd dZd!dZd"dZdS )#
UserOptionr,   rq   descriptionzdataclasses.InitVar[_T]value_r   yieldingFr   
deprecated)r/   readonlyr9   rx   r   c                R    |                      |          | _        | j        | _        d S r   )validate_valuer   r/   )r   r   s     r7   __post_init__zUserOption.__post_init__E  s$    ((00
"&*r6   r   r&   T.List[str]c                    t          |t                    r|S t          |t                    r|rdgndgS t          |t                    rt	          |          gS |gS )Ntruefalse)r   listr   rv   r,   r   r   s     r7   listifyzUserOption.listifyJ  se    eT"" 	LeT"" 	4$3F887)3eS!! 	 JJ<wr6   c                n    t          | j        t          t          t          t
          f          sJ | j        S r   )r   r   r,   rv   r   r   r   s    r7   printable_valuezUserOption.printable_valueS  s+    $*sCt&<=====zr6   T.Optional[T.List[str]]c                    d S r   r5   r   s    r7   printable_choiceszUserOption.printable_choicesW  s    tr6   r   c                     t          d          )Nz5Derived option class did not override validate_value.)RuntimeErrorr   s     r7   r   zUserOption.validate_value]  s    RSSSr6   newvaluec                Z    | j         }|                     |          | _         | j         |k    S r   )r   r   )r   r  oldvalues      r7   	set_valuezUserOption.set_value`  s+    :((22
zX%%r6   Nr   r9   rx   r   r   r&   rx   r   )rx   r&   rx   r   r   r   rx   r9   )r  r   rx   r   )r1   r2   r3   r4   DEFAULT_YIELDINGr   r   dataclassesfieldr   r   r   r   r   r   r  r5   r6   r7   r   r   ;  s          III####%H%%%%!&J&&&&&[&u555H5555- - - -
         T T T T& & & & & &r6   r   c                  H    e Zd ZU dZ ej        e          Zded<   d	dZ	dS )
EnumeratedUserOptionz0A generic UserOption that has enumerated values.default_factoryz
T.List[_T]r0   rx   r   c                $    d | j         D             S )Nc                ,    g | ]}t          |          S r5   r,   .0cs     r7   
<listcomp>z:EnumeratedUserOption.printable_choices.<locals>.<listcomp>m      ---1A---r6   r0   r   s    r7   r   z&EnumeratedUserOption.printable_choicesl  s    ------r6   Nr  )
r1   r2   r3   r   r
  r  r   r0   r4   r   r5   r6   r7   r  r  e  sS          ;:+++DAAAGAAAA. . . . . .r6   r  c                      e Zd ZddZdS )r#   r   r   rx   r,   c                f    t          |t                    st          d| j         d| d          |S )NzThe value of option "z" is "z", which is not a string.)r   r,   r   rq   r   s     r7   r   zUserStringOption.validate_valuer  s>    %%% 	l !j!j!j%!j!j!jkkkr6   Nr   r   rx   r,   r1   r2   r3   r   r5   r6   r7   r#   r#   p  s(             r6   r#   c                  N    e Zd ZU  ej        d           Zded<   ddZdd
ZdS )r   c                 
    ddgS r   r5   r5   r6   r7   <lambda>zUserBooleanOption.<lambda>z  s
    tUm r6   r  zT.List[bool]r0   rx   r   c                    | j         S r   r   r   s    r7   __bool__zUserBooleanOption.__bool__|  r   r6   r   r   c                .   t          |t                    r|S t          |t                    st          d| j         d| d          |                                dk    rdS |                                dk    rdS t          d| j         d| d          )	NzOption "" value z! cannot be converted to a booleanr   Tr   Fz  is not boolean (true or false).)r   r   r,   r   rq   lowerr   s     r7   r   z UserBooleanOption.validate_value  s    eT"" 	L%%% 	i !gDI!g!gu!g!g!ghhh;;==F""4;;==G##5b	bb5bbbcccr6   Nr   )r   r   rx   r   )	r1   r2   r3   r
  r  r0   r4   r"  r   r5   r6   r7   r   r   w  sk          .K->S>STTTGTTTT   	d 	d 	d 	d 	d 	dr6   r   c                  \     e Zd ZU ded<   ded<   ej        rddZd fdZddZddZ	 xZ
S )_UserIntegerBaseT.Optional[int]	min_value	max_valuevr,   rx   rv   c                    d S r   r5   )r   r+  s     r7   tointz_UserIntegerBase.toint  s      r6   r   r9   r   c                   t                                          |           g }| j        |                    d| j                   | j        |                    d| j                   d                    |          | _        d S )Nz>= z<= r   )rz   r   r)  appendr*  join_UserIntegerBase__choices)r   r   r0   r   s      r7   r   z_UserIntegerBase.__post_init__  s    f%%%!>%NN333444>%NN333444"ii00r6   r   c                    | j         gS r   )r1  r   s    r7   r   z"_UserIntegerBase.printable_choices  s    r6   r   r   c           	        t          |t                    r(t          j        d|                     |                    }t          |t
                    st          d|d| j         d          | j        .|| j        k     r#t          d| d| j         d| j         d          | j	        .|| j	        k    r#t          d| d| j         d| j	         d          t          j        d|          S )Nr9   zValue z for option "z" is not an integer.z" is less than minimum value r   z" is more than maximum value )
r   r,   Tcastr-  rv   r   rq   r)  r*  r   s     r7   r   z_UserIntegerBase.validate_value  s   eS!! 	4F4E!2!233E%%% 	a !_%!_!_	!_!_!_```>%%$.*@*@ !w%!w!wdi!w!wfjft!w!w!wxxx>%%$.*@*@ !w%!w!wdi!w!wfjft!w!w!wxxxvdE"""r6   )r+  r,   rx   rv   r  r  r  )r1   r2   r3   r4   r4  TYPE_CHECKINGr-  r   r   r   r   r   s   @r7   r'  r'    s          ,++++1 1 1 1 1 1       	# 	# 	# 	# 	# 	# 	# 	#r6   r'  c                  4    e Zd ZU dZded<   dZded<   d
d	ZdS )r    Nr(  r)  r*  valuestringr,   rx   rv   c                t    	 t          |          S # t          $ r t          d| d| j         d          w xY w)NzValue string "" for option "z#" is not convertible to an integer.rv   r   r   rq   )r   r8  s     r7   r-  zUserIntegerOption.toint  sY    	}{### 	} 	} 	} !{+!{!{TY!{!{!{|||	}s    &7r8  r,   rx   rv   )r1   r2   r3   r)  r4   r*  r-  r5   r6   r7   r    r      sT          "&I%%%%!%I%%%%} } } } } }r6   r    c                      e Zd ZddZdS )OctalIntrx   r,   c                :    t          t          |                     S r   )octrv   r   s    r7   r   zOctalInt.__str__  s    3t99~~r6   Nr   )r1   r2   r3   r   r5   r6   r7   r>  r>    s(             r6   r>  c                       e Zd ZU  ej        dd          Zded<    ej        dd          Zded<   dd
Zd fdZ	ddZ
 xZS )r$   r   F)r/   initr(  r)  i  r*  rx   r,   c                n    t          | j        t                    rt          | j        d          S | j        S )N04o)r   r   rv   formatr   s    r7   r   zUserUmaskOption.printable_value  s0    dj#&& 	-$*e,,,zr6   r   r   &T.Union[Literal['preserve'], OctalInt]c                p    |dk    rdS t          t                                          |                    S )Npreserve)r>  rz   r   )r   r   r   s     r7   r   zUserUmaskOption.validate_value  s3    J:..u55666r6   r8  rv   c                |    	 t          |d          S # t          $ r}t          d| j         d|           d }~ww xY w)N   zInvalid mode for option "z" r;  )r   r8  es      r7   r-  zUserUmaskOption.toint  s\    	O{A&&& 	O 	O 	O !MTY!M!M!!M!MNNN	Os    
;6;r   )r   r   rx   rF  r<  )r1   r2   r3   r
  r  r)  r4   r*  r   r   r-  r   r   s   @r7   r$   r$     s          "3!215!I!I!IIIIII!2!25u!M!M!MIMMMM   
7 7 7 7 7 7
O O O O O O O Or6   r$   zLiteral['preserve']c                      e Zd ZddZdS )r   r   r   rx   r,   c                d   || j         vrt          |t                    rd}n!t          |t          t          f          rd}nd}d                    d | j         D                       }t          d                    ||| j        |                    t          |t                    s
J d            |S )Nbooleannumberstringr   c                    g | ]}d | d 	S )"r5   )r  items     r7   r  z2UserComboOption.validate_value.<locals>.<listcomp>  s     &L&L&Lt{4{{{&L&L&Lr6   zjValue "{}" (of type "{}") for option "{}" is not one of the choices. Possible choices are (as string): {}.for mypy)
r0   r   r   rv   floatr0  r   rE  rq   r,   )r   r   _typeoptionsstrings       r7   r   zUserComboOption.validate_value  s    $$%&& !!EC<00 !   II&L&Lt|&L&L&LMMM  "JJP&%*E49mKM KMN N N %%%11z111r6   Nr  r  r5   r6   r7   r   r     s(             r6   r   c                  T    e Zd ZU ded<   dZded<   dZded<   dZded	<   ddZddZdS )UserArrayOptionz,dataclasses.InitVar[T.Union[_T, T.List[_T]]]r   NzT.Optional[T.List[_T]]r0   Fr   
split_args
allow_dupsr   T.Union[str, T.List[str]]rx   r   c                j    |                      |          }|                     | j        |z              dS )z*Extend the value with an additional value.N)r   r  r   )r   r   news      r7   extend_valuezUserArrayOption.extend_value  s4    !!%((tzC'(((((r6   r   c                6    | j         d S d | j         D             S )Nc                ,    g | ]}t          |          S r5   r  r  s     r7   r  z5UserArrayOption.printable_choices.<locals>.<listcomp>  r  r6   r  r   s    r7   r   z!UserArrayOption.printable_choices  s%    <4------r6   )r   r\  rx   r   r  )	r1   r2   r3   r4   r0   rZ  r[  r_  r   r5   r6   r7   rY  rY    s          9888&*G****JJ) ) ) )
. . . . . .r6   rY  c                      e Zd Zd	dZd
dZdS )r"   r   r&   rx   r   c                    	 t          || j                  S # t          $ r}t          d| j         d|          d }~ww xY w)Nerror in option "": )r   rZ  r   rq   )r   r   rK  s      r7   r   zUserStringArrayOption.listify   s^    	J&udo>>> 	J 	J 	J !HTY!H!H1!H!HIII	Js    
A ;A r\  c                ^                          |          } j        sCt          t          |                    t          |          k    rd}t	          j        |           |D ]2}t          |t                    st          d|d j	         d          3 j
        r fd|D             }|rt          d                    t          |          dk    rdnd	d
                    |           j	        t          |          dk    rdndd
                     j
                                      |S )Nz\Duplicated values in array option is deprecated. This will become a hard error in meson 2.0.zString array element "r:  z" is not a string.c                &    g | ]}|j         v|S r5   r  )r  xr   s     r7   r  z8UserStringArrayOption.validate_value.<locals>.<listcomp>  s%    @@@!4<*?*?1*?*?*?r6   z<Value{} "{}" for option "{}" {} not in allowed choices: "{}"r   rw   sr   isare)r   r[  lensetr   deprecationr   r,   r   rq   r0   rE  r0  )r   r   r  msgibads   `     r7   r   z$UserStringArrayOption.validate_value  sI   <<&& 	"3s8}}#5#5X#F#F@CS!!! 	w 	wAa%% w$%uh%u%uX\Xa%u%u%uvvvw< 		@@@@h@@@C $%c%j%jc((a--BBSIIcNNIHHMMDDuIIdl++&- &-    r6   Nr  )r   r\  rx   r   )r1   r2   r3   r   r   r5   r6   r7   r"   r"     s@        J J J J     r6   r"   c                  X    e Zd ZU  ej        d d          Zded<   ddZdd	Zdd
Z	dS )r   c                 
    g dS )N)enableddisabledautor5   r5   r6   r7   r  zUserFeatureOption.<lambda>"  s     ? ? ? r6   F)r  rB  r   r0   rx   r   c                    | j         dk    S )Nrt  r!  r   s    r7   
is_enabledzUserFeatureOption.is_enabled$  s    zY&&r6   c                    | j         dk    S )Nru  r!  r   s    r7   is_disabledzUserFeatureOption.is_disabled'  s    zZ''r6   c                    | j         dk    S )Nrv  r!  r   s    r7   is_autozUserFeatureOption.is_auto*  s    zV##r6   Nr   )
r1   r2   r3   r
  r  r0   r4   rx  rz  r|  r5   r6   r7   r   r     s          -;,??eM M MG M M M M' ' ' '( ( ( ($ $ $ $ $ $r6   r   _U)boundabrx   r   c                   t          | t                    r/t          |t                    s
J d            | j        |j        k    S t          | t                    r/t          |t                    s
J d            | j        |j        k    S t          | t                    r?t          |t                    s
J d            | j        |j        k    p| j        |j        k    S dS )zAre the choices between two options the same?

    :param a: A UserOption[T]
    :param b: A second UserOption[T]
    :return: True if the choices have changed, otherwise False
    rT  F)r   r  r0   rY  r'  r*  r)  )r  r  s     r7   choices_are_differentr  1  s     !)** 
H!122>>J>>>yAI%%	A	'	' H!_--99z999yAI%%	A'	(	( H!-..::
:::{ak)GQ[AK-GG5r6   c                  6     e Zd ZdZd fdZdddZddZ xZS )r!   aQ  
    UserOption specific to c_std and cpp_std options. User can set a list of
    STDs in preference order and it selects the first one supported by current
    compiler.

    For historical reasons, some compilers (msvc) allowed setting a GNU std and
    silently fell back to C std. This is now deprecated. Projects that support
    both GNU and MSVC compilers should set e.g. c_std=gnu11,c11.

    This is not using self.deprecated mechanism we already have for project
    options because we want to print a warning if ALL values are deprecated, not
    if SOME values are deprecated.
    langr,   all_stdsr   rx   r   c                    |                                 | _        dg|z   | _        i | _        |dk    rdn| d}t	                                          || dddg           d S )NrD   zc++cpp_std_stdz language standard to user  )r%  r  r  deprecated_stdsrz   __init__)r   r  r  opt_namer   s       r7   r  zUserStdOption.__init__U  ss    JJLL	8+13 $99d===d#E#E#EvX^W_`````r6   Fversionsgnur   gnu_deprecatedc                    t           fd|D                       sJ  xj        |z  c_        |rNd |D             }|r j                            |           d S  xj        |                                z  c_        d S d S )Nc              3  *   K   | ]}|j         v V  d S r   r  r  stdr   s     r7   	<genexpr>z-UserStdOption.set_versions.<locals>.<genexpr>^  s*      <<C3$-'<<<<<<r6   c                *    i | ]}d |dd          |S )r  r   Nr5   )r  r  s     r7   
<dictcomp>z.UserStdOption.set_versions.<locals>.<dictcomp>a  s(    EEESO#abb'OOSEEEr6   )allr0   r  updatekeys)r   r  r  r  gnu_stds_maps   `    r7   set_versionszUserStdOption.set_versions]  s    <<<<8<<<<<<<<  	4EEHEEEL 4$++L99999 1 1 3 33	4 	4r6   r   r\  c           	     b    	 t          |          }n,# t          $ r}t          d j         d|          d }~ww xY wd                     fd|D                       }|r#t          d j         d| d j         d          |D ]}| j        v r|c S |D ]W} j                            |          }|9t          j	        d	| d
 j
         dd| d| dz   dz   dz   dz   d           |c S Xt          d| d
 j
                                         dd j         d j         z             )Nrd  re  ,c              3  .   K   | ]}|j         v|V  d S r   r  r  s     r7   r  z/UserStdOption.validate_value.<locals>.<genexpr>l  s/      QQ34=8P8P38P8P8P8PQQr6   zUnknown option "r$  z. Possible values are r   zNone of the values z are supported by the z compiler.
zHowever, the deprecated z std currently falls back to z.
z$This will be an error in meson 2.0.
zEIf the project supports both GNU and MSVC compilers, a value such as
zZ"c_std=gnu11,c11" specifies that GNU is preferred but it can safely fallback to plain c11.T)oncezNone of values z compiler. zPossible values for option "z" are )r   r   rq   r0  r  r0   r  getr   rn  r  upper)r   r   
candidatesrK  unknownr  newstds   `      r7   r   zUserStdOption.validate_valueg  s   	J,U33JJ 	J 	J 	J !HTY!H!H1!H!HIII	J((QQQQ*QQQQQ 	x !vDI!v!vw!v!vfjfs!v!v!vwww 	 	Cdl""


 #  		 		C)--c22F! c*ccDIccc\s\\QW\\\];< ]] q	q x|} } } }  " ozooQUQZQ`Q`QbQbooo[DI[[T\[[\ ] ] 	]s    
<7<)r  r,   r  r   rx   r   )FF)r  r   r  r   r  r   rx   r   )r   r\  rx   r,   )r1   r2   r3   r   r  r  r   r   r   s   @r7   r!   r!   G  s         a a a a a a4 4 4 4 4] ] ] ] ] ] ] ]r6   r!   rq   r,   c                D    | dk    rdS d|                      dd          z   S )Nrh   z--warnlevelz--_-)replacer   s    r7   argparse_name_to_argr    s+    }$,,sC((((r6   rw   r   rR   c                    t          | t          t          t          f          rt	          j        d| j                  S 	 t          |         |         S # t          $ r t	          j        d| j                  cY S w xY w)Nr&   )	r   r   r    r$   r4  r5  r/   BUILTIN_DIR_NOPREFIX_OPTIONSr|   )r   rq   rR   s      r7   argparse_prefixed_defaultr    s|    #):OLMM =v.<<<=+D1&99 = = =v.<<<<<=s   A $A87A8optionparserargparse.ArgumentParserhelp_suffixr   c                   i }t          | t          t          f          r| j        }nd }t          | j        t
                    rdnd }| j        }|s8d                    |                    d          t          | |                    }n||d<   |r|s||d<   t          j        |d<   t          |          |d<   t          t          |                    } |j        |fd||z   i| d S )	N
store_truez{} (default: {}).r   r-   r0   r/   r.   help)r   r  rY  r0   r/   r   r   rE  rstripr  argparseSUPPRESSr,   r  add_argument)	r  rq   r  r  kwargsr  r  hcmdline_names	            r7   option_to_argparser    s   F&/ABB N"6>488BdAA &&qxx}}6OPVX\6]6]^^x  y )F9YYF6N'D		22LFEE1{?EfEEEEEr6   c                8    i | ]}t          |j                  |S r5   r'   rq   r  os     r7   r  r    s1     < < <Iafq< < <r6   zInstallation prefixrN   zExecutable directorybinrU   zData file directoryr^   zHeader file directoryrV   zInfo page directoryrP   zLibrary directoryr`   zLicenses directoryr_   zLibrary executable directoryr\   zLocale data directoryrf   zLocalstate data directoryvarrQ   zManual page directoryrW   zSystem executable directoryri   z'Architecture-independent data directorycomra   zSysconf data directoryz#T.Mapping[OptionKey, AnyOptionType]BUILTIN_DIR_OPTIONSc                8    i | ]}t          |j                  |S r5   r  r  s     r7   r  r    s1     ,= ,= ,=Iafq,= ,= ,=r6   zT.List[AnyOptionType]rd   z%Override value of all 'auto' featuresrv  rT   zBackend to user:   T)r0   r   r[   zSetup multiple buildtype-suffixed ninja-backend build directories, and a [builddir]_vs containing a Visual Studio meta-backend with multiple configurations that calls into themr  rY   zBuild type to userF   z*Enable debug symbols and other informationrj   zDefault library typeshared)r  staticboth)r0   r   rn   z'Default library type for both_libraries)r  r  rv  rZ   z,Whether to print the logs from failing testsre   z8Default umask to apply on permissions of installed files   rO   zBuild directory layoutmirrorflatrc   zOptimization level0)rE   r  g123ri  rg   z3Whether to try static linking before shared linkingrX   z$Split stdout and stderr in test logsrK   zStrip targets on installrL   zUnity buildoff)onr  subprojectsrb   zUnity block size   r   )r)  rh   zCompiler warning level to user  )r  r  r  r  
everythingrS   zTreat warnings as errors)r   r]   z	Wrap moder/   )r/   
nofallback
nodownloadforcefallback	nopromoterm   z$Force fallback for those subprojectsrM   z"Activate Visual Studio environment)r   zpkgconfig.relocatablez'Generate pkgconfig files as relocatablezpython.bytecompilezWhether to compile bytecode)r)  r*  zpython.install_envz&Which python environment to install to)rv  rR   systemvenvzpython.platlibdirz5Directory for site-specific, platform-specific files.zpython.purelibdirz9Directory for site-specific, non-platform-specific files.zpython.allow_limited_apiz.Whether to allow use of the Python Limited APIBUILTIN_CORE_OPTIONSc                8    i | ]}t          |j                  |S r5   r  r  s     r7   r  r    s7     D D DIafqD D Dr6   rk   z1List of additional paths for pkg-config to searchrl   z/List of additional prefixes for cmake to searchBUILTIN_OPTIONS_PER_MACHINE/usrz/etcz/varz
/var/local)r  z
/usr/localz/var/libz/var/local/libz#T.Dict[OptionKey, T.Dict[str, str]]r  )rD   mdmddmtmtdc                8    i | ]}t          |j                  |S r5   r  r  s     r7   r  r     s1     > > >Iafq> > >r6   b_pchzUse precompiled headersb_ltozUse link time optimizationb_lto_threadsz/Use multiple threads for Link Time Optimization
b_lto_modez#Select between different LTO modes.thinb_thinlto_cachez6Use LLVM ThinLTO caching for faster incremental buildsb_thinlto_cache_dirz(Directory to store ThinLTO cache objects
b_sanitizezCode sanitizer to useb_lundefz#Use -Wl,--no-undefined when linking
b_asneededz Use -Wl,--as-needed when linkingb_pgozUse profile guided optimization)r  generateuse
b_coveragezEnable coverage tracking.
b_coloroutzUse colored outputalways)rv  r  neverb_ndebugzDisable assertsr   )r   r   z
if-releaseb_staticpicz.Build static libraries as position independentb_piez)Build executables as position independent	b_bitcodez0Generate and embed bitcode (only macOS/iOS/tvOS)b_vscrtz VS run-time library type to use.from_buildtypestatic_from_buildtypeCOMPILER_BASE_OPTIONSc                     e Zd ZddddddZd}dZd~dZddZdddZddZddZ	ddZ
ddZddd!Zdd#Zdd$Zdd'Zdd(Zdd*Zdd,Zdd0Zddd4Zdd6Zdd:Zdd=Zdd?Zdd@ZddAZddBZddDZddEZddGZddIZddKZ ddMZ!ddOZ"dddQZ#ddRZ$ddTZ%ddUZ&ddVZ'ddWZ(ddXZ)ddYZ*ddZZ+dd]Z,dd`Z-dddZ.ddkZ/ddlZ0ddpZ1dddsZ2ddtZ3ddvZ4ddxZ5dd|Z6dS )OptionStore)rE   F)r  T)r  T)r  F)ri  T)rE   rF   rG   rH   rI   is_crossr   rx   r   c                    i | _         t                      | _        t                      | _        ddlm} t          |          | _        t                      | _        i | _        || _        i | _        d S )Nr   )all_languages)	optionsrm  project_optionsmodule_options	compilersr  augmentsr   pending_options)r   r   r  s      r7   r  zOptionStore.__init__#  so    =?1403,,,,,, //"uu*, 
 KMr6   c                    i | _         d S r   )r  r   s    r7   clear_pendingzOptionStore.clear_pending2  s    !r6   r   T.Union[OptionKey, str]r'   c                    t          |t                    rt          |          S | j        s)|j        t
          j        k    r|                                }|S r   )r   r,   r'   r   rs   r   r   r   r   r   s     r7   ensure_and_validate_keyz#OptionStore.ensure_and_validate_key5  sM    c3 	"S>>! } 	 0C!C!C++--C
r6   Nr/   "T.Optional[ElementaryOptionValues]r&   c                    |                      |          }|| j        v r| j        |         j        S | j                            ||          S r   )r  r  r   r  r  )r   r   r/   s      r7   get_pending_valuezOptionStore.get_pending_valueF  sK    **3//$,<$**#''W555r6   c                6    |                      |          j        S r   )get_value_objectr   r  s     r7   	get_valuezOptionStore.get_valueL  s    $$S))//r6   rv   c                *    t          | j                  S r   )rl  r  r   s    r7   __len__zOptionStore.__len__O  s    4<   r6   'T.Union[OptionKey, str]'r%   c                   |                      |          }| j                            |d           }|                     |          r|j        J |^|j        rW|                                }	 | j        |         }n# t          $ r |cY S w xY wt          |          t          |          u r|S |S |t          d| d          |S |Et          |j
        d |j                  }|| j        vrt          d| d          | j        |         S |S )Nz+Tried to access nonexistant project option r   rr   rs   z2Tried to access nonexistant project parent option )r  r  r  is_project_optionrr   r   r   r|   typer'   rq   rs   )r   r   	potential
parent_keyparent_options        r7   get_value_object_forz OptionStore.get_value_object_forR  sM   **3//L$$S$//	!!#&& 	>---$);$ [[]]
%$(L$<MM % % % %$$$	% &&$y//99((   SSSSSTTT &sxD#+VVV
T\11"#eXb#e#e#efff|J//s   -A; ;B
	B
.T.Tuple[AnyOptionType, ElementaryOptionValues]c                    t          |t                    sJ |                     |          }|j        }|j        8t          |          }|| j        v r |                    | j        |                   }||fS r   )r   r'   r  r   rr   r,   r  r   )r   r   vobjectcomputed_valuekeystrs        r7   get_value_object_and_value_forz*OptionStore.get_value_object_and_value_forp  sw    #y)))))++C00 >%XXF&&!(!7!7f8M!N!N((r6   rq   rr   ru   c                    t          |t                    rt          ||          }n|J |}|                     |          \  }}|S r   )r   r,   r'   r%  )r   rq   rr   r   r"  resolved_values         r7   get_value_forzOptionStore.get_value_forz  sT    dC   	D*--CC%%%C"&"E"Ec"J"Jr6   valobjc                    |                      |          }d|j        v rt          d|j         d          |                     ||           d S )Nr   z;Internal error: non-module option has a period in its name )r  rq   r   add_system_option_internal)r   r   r)  s      r7   add_system_optionzOptionStore.add_system_option  sZ    **3//#(?? !j_b_g!j!j!jkkk''V44444r6   c                   t          |t                    sJ t          |j        t                    st          |j        t                    sJ || j        v rd S || j        |<   | j                            |d           }|j        r@|                    d           }| 	                    ||           || j        |         j
        }||                     ||           d S d S )Nr   )r   r   rq   r,   r  r  poprr   r   r+  r   
set_option)r   r   r)  pvalproj_keys        r7   r+  z&OptionStore.add_system_option_internal  s    &*-----&+s++ 	0fk3/////$,F"S#''T22> 	4zzTz22H++Hf===||H-3OOC&&&&& r6   languager,   c                    |                      |          }|j                            |dz             st          d|j         d| d          |                     ||           d S )Nr  zLInternal error: all compiler option names must start with language prefix. (z vs z_))r  rq   
startswithr   r,  )r   r2  r   r)  s       r7   add_compiler_optionzOptionStore.add_compiler_option  s    **3//x""8c>22 	L   "Kpspx  "K  "K  G  "K  "K  "K  L  L  LsF+++++r6   c                ,   |                      |          }|j        J || j        v rt          d| d          || j        |<   | j                            |           | j                            |d           }||                     ||           d S d S )Nz.Internal error: tried to add a project option z that already exists.)	r  rr   r  r   r  addr  r.  r/  )r   r   r)  r0  s       r7   add_project_optionzOptionStore.add_project_option  s    **3//~)))$, !lRU!l!l!lmmm"S  %%%#''T22OOC&&&&& r6   
modulenamec                :   |                      |          }|j                            d          rt          d          |j                            |dz             st          d          |                     ||           | j                            |           d S )Nr   z6FATAL internal error: somebody goofed option handling.r   z]Internal error: module option name {key.name} does not start with module prefix {modulename}.)r  rq   r4  r   r+  r  r7  )r   r9  r   r)  s       r7   add_module_optionzOptionStore.add_module_option  s    **3//8x(( 	[ !YZZZx"":#344 	B   "A  B  B  B''V444$$$$$r6   rR   c                x   t           j                            |          }t           j                            |          st	          d|d          |                    d          s|                    d          r>t          |          dk    r|d         dk    rnt          |          dk    rn
|d d         }|S )	Nzprefix value z must be an absolute path/\   r   r   r  )ospath
expanduserisabsr   endswithrl  )r   rR   s     r7   sanitize_prefixzOptionStore.sanitize_prefix  s    ##F++w}}V$$ 	V !T!T!T!TUUU??3 
	%6??4#8#8 
	% 6{{aF1I$4$4 V!!r6   r  r   r   c           	     z   	 t          j        |          }n# t          $ r |cY S w xY w|j                            d          rf|                                rR|t          vrI	 |                    |          }n# t          $ r Y nw xY wd|j	        v rt          d| d| d|d          |                                S )a  
        If the option is an installation directory option, the value is an
        absolute path and resides within prefix, return the value
        as a path relative to the prefix. Otherwise, return it as is.

        This way everyone can do f.ex, get_option('libdir') and usually get
        the library directory relative to prefix, even though it really
        should not be relied upon.
        dirz..zThe value of the 'z' option is 'z[' but directory options are not allowed to contain '..'.
If you need a path outside of the z% prefix, please use an absolute path.)pathlibPurePath	TypeErrorrq   rD  is_absoluter  relative_tor   partsr   as_posix)r   rR   r  r   s       r7   sanitize_dir_option_valuez%OptionStore.sanitize_dir_option_value  s   	$U++EE 	 	 	LLL	;&& 	5+<+<+>+> 	555))&11    u{""$3 3 3e 3 39?3 3 3   ~~s    &&!A7 7
BBF	new_valuefirst_invocationc                0   j         dk    r5t          |t                    s
J d            |                     |          }n`|                               rK|                     d          }t          |t                    s
J d            |                     ||          }	 |                               n!# t          $ r t          dd          w xY wj
        du rt          j        dj         d           n;t          j
        t                    rB                    |          D ]+}|j
        v r t          j        dj         d|d           ,nt          j
        t                    r>dfdfd                    |          D             }d                    |          }nt          j
        t                    rmt          j        dj         dj
                   |                                         j
                  |          }|                    |          z  }|S j        }                    |          }	j        r#|	r!|st          dt                              j         dk    rX|rV|	rTt          |t                    s
J d            t          |t                    s
J d            |                     ||           |	rj         dk    r|dk    rt          |t                    s
J d            | j        |         \  }
}                    d          }                    d          }| j        |                             |           | j        |                             |
           |	S )NrR   rT  zUnknown options: "z" not found.TOption z is deprecated value r+  r,   rx   c                    t          j        t                    sJ j                            |           }|$t	          j        dj        d| d|           |S | S )NrS  rT   is replaced by )r   r   dictr  r   rn  rq   )r+  r  r   r   s     r7   r  z'OptionStore.set_option.<locals>.replace  sm    !#.$77777>--a00'$%csx%c%c!%c%cW_%c%cddd#Or6   c                &    g | ]} |          S r5   r5   )r  r+  r  s     r7   r  z*OptionStore.set_option.<locals>.<listcomp>  s!    AAAQggajjAAAr6   r  rV  r   z!Tried to modify read only option rY   rJ   rF   rc   )r+  r,   rx   r,   )rq   r   r,   rE  is_builtin_optionr(  rO  r  r|   r   r   r   rn  r   r   rW  r0  r/  r   r  r   r   reset_prefixed_optionsDEFAULT_DEPENDENTSr  )r   r   rP  rQ  rR   r+  valarrdirty	old_valuechangedrc   rF   dkeyoptkeyr   r  s    `            @@r7   r/  zOptionStore.set_option  s   8xi--99z999,,Y77II##C(( 	O''11Ffc**66J66666vsINNI	K++C00CC 	K 	K 	K !Ic!I!I!IJJJ	K >T!!AsxAAABBBB-- 	[[++ W W&&$%Usx%U%U!%U%U%UVVVW -- 	       BAAA#++i*@*@AAAF((II,, 	UsxUU3>UUVVVOOCJJCNJ$C$CYOOES]]9---ELI	--	**< 	SG 	S,< 	S !QSXX!Q!QRRR8x$4i--99z999i--99z999''	9=== 	9sx;..93H3Hi--99z999"&"9)"DL%::7:++DZZ^Z44FL((///L **<888s   %B; ;Cr  c                p   | j         s|                                rdS || j        v r|                     ||          S |                     |          r<| j                            |d           }|| j        |<   |d u pt          |          |k    S |                                }|                     ||          S r   )	r   r   r  r/  accept_as_pending_optionr  r  r,   r   )r   r  rP  r^  s       r7   set_option_maybe_rootz!OptionStore.set_option_maybe_root!  s    } 	!1!1 	5??1i000((++ 	1,00D99I&/D #$CI)(CC		A??1i000r6   D_argsr   U_argsc                ~   d}|g n|}|                      |          \  }}}|g n|}|D ]\  }}||                     ||          z  }|D ]\  }}||                     ||          z  }|D ]8\  }	}|	| j        v r| j        |	         |k    r|| j        |	<   d},|| j        |	<   d}9|D ]}
|
| j        v r
| j        |
= d}|S r   )classify_D_argumentsrd  r  )r   re  rf  r]  global_optionsperproject_global_optionsr  r   valstrr$  deletes              r7   set_from_configure_commandz&OptionStore.set_from_configure_command/  s#   ~6GKG`G`agGhGhD2O~6) 	= 	=KCT//V<<<EE* 	= 	=KCT//V<<<EE7 	 	NFF&&=(F22,2DM&) E(.f% 	 	F&&M&)r6   
old_prefix
new_prefixc                   t                                           D ]k\  }}| j        |         }|j        }||vrt          |         j        }n&||v r||         |j        k    r||         }n||         }|                    |           ld S r   )r  itemsr  r   BUILTIN_OPTIONSr/   r  )r   rn  ro  ra  prefix_mappingr)  rP  s          r7   rZ  z"OptionStore.reset_prefixed_optionsF  s    &B&H&H&J&J 	( 	("FN\&)FI//+F3;		//%j1V\AA$2:$>	 .z :IY''''	( 	(r6   
new_objectc                D    |                      |          }|| j        |<   d S r   r  r  )r   r   rt  s      r7   set_value_objectzOptionStore.set_value_objectV  s'    **3//&Sr6   c                F    |                      |          }| j        |         S r   rv  r  s     r7   r  zOptionStore.get_value_objectZ  s"    **3//|C  r6   c                    |                      |          sJ 	 t          j        dt          |                    d                    j                  S # t          $ r t          d| d          w xY w)Nr&   r   zRequested base option z which does not exist.)is_base_optionr4  r5  r  r   r/   r|   r   r  s     r7   get_default_for_b_optionz$OptionStore.get_default_for_b_option^  s    ""3'''''	Z624I#**`d*JeJe4f4nooo 	Z 	Z 	Z#$XS$X$X$XYYY	Zs   8A A0c                n    | j         |= 	 | j                            |           d S # t          $ r Y d S w xY wr   )r  r  remover|   r  s     r7   r}  zOptionStore.removee  sP    L	 '',,,,, 	 	 	DD	s   & 
44T.Union[str, OptionKey]c                >    |                      |          }|| j        v S r   rv  r  s     r7   __contains__zOptionStore.__contains__l  s"    **3//dl""r6   c                *    t          | j                  S r   )reprr  r   s    r7   r   zOptionStore.__repr__p  s    DL!!!r6   T.KeysView[OptionKey]c                4    | j                                         S r   )r  r  r   s    r7   r  zOptionStore.keyss  s    |  """r6   T.ValuesView[AnyOptionType]c                4    | j                                         S r   )r  valuesr   s    r7   r  zOptionStore.valuesv  s    |""$$$r6   )T.ItemsView['OptionKey', 'AnyOptionType']c                4    | j                                         S r   )r  rq  r   s    r7   rq  zOptionStore.itemsy  s    |!!###r6   r  c                *     | j         j        di | d S r   )r  r  )r   r  s     r7   r  zOptionStore.update}  s#    %%f%%%%%r6   kc                8    | j                             ||          S r   )r  
setdefault)r   r  r  s      r7   r  zOptionStore.setdefault  s    |&&q!,,,r6   T.Optional[AnyOptionType]c                *     | j         j        ||fi |S r   )r  r  )r   r  r/   r  s       r7   r  zOptionStore.get  s!    t|755f555r6   c                    || j         v S )z8Convenience method to check if this is a project option.)r  r  s     r7   r  zOptionStore.is_project_option  s    d***r6   optnamec                    |                     d t          j                  t          v rdS |                     |          S )Nr  T)r   r   r   r  is_compiler_option)r   r  s     r7   is_per_machine_optionz!OptionStore.is_per_machine_option  s:    >>T=3E>FFJeee4&&w///r6   c                    |j         t          v rdS d|j         vrdS |j                             d          d         }|dv rdS || j        v rdS dS )NTr  Fr   )r  rT   )rq   _BUILTIN_NAMESr   r  r   r   rR   s      r7   is_reserved_namezOptionStore.is_reserved_name  si    8~%%4ch5$$Q' %%%4T'''4ur6   c                H    |j         t          v p|                     |          S )z8Convenience method to check if this is a builtin option.)rq   r  is_module_optionr  s     r7   rY  zOptionStore.is_builtin_option  s"    x>)GT-B-B3-G-GGr6   c                6    |j                             d          S )z5Convenience method to check if this is a base option.b_)rq   r4  r  s     r7   rz  zOptionStore.is_base_option  s    x""4(((r6   c                j    t          |t                    r|}n|j        }|                    d          S )z8Convenience method to check if this is a backend option.backend_)r   r,   rq   r4  )r   r   rq   s      r7   is_backend_optionzOptionStore.is_backend_option  s4    c3 	DD8Dz***r6   c                r    d|j         vrdS |j                             d          d         }|| j        v rdS dS )z9Convenience method to check if this is a compiler option.r  Fr   T)rq   r   r  r  s      r7   r  zOptionStore.is_compiler_option  sF     ch5$$Q'T'''4ur6   c                    || j         v S r   )r  r  s     r7   r  zOptionStore.is_module_option  s    d)))r6   DdT.Tuple[T.List[T.Tuple[OptionKey, str]], T.List[T.Tuple[str, str]], T.List[T.Tuple[OptionKey, str]]]c                R   g }g }g }|D ]}|                     dd          \  }}t                              |          }||f}	|                     |          r|                    |	           d|j        |                    |	           ||f}
|                    |
           |||fS N=r   )r   r'   r   r  r/  rr   )r   r  ri  r  rj  setvalr$  rk  r   
valuetuplestrvaluetuples              r7   rh  z OptionStore.classify_D_arguments  s     $&! 	@ 	@F#\\#q11NFF''//CvJ%%c** @&&z2222'%%j1111 "( 0)00???? 9?KKr6   optlistT.Dict[str, str]c                P    i }|D ] }|                     dd          \  }}|||<   !|S r  )r   )r   r  optdictpr  r+  s         r7   optlist2optdictzOptionStore.optlist2optdict  s;     	 	A773??DAqGAJJr6   coll*T.Union[T.List[str], OptionStringLikeDict]8T.Tuple[str, T.Union[T.List[str], OptionStringLikeDict]]c                v   d }t          |t                    rRg }|D ]I}|                    d          r|                    dd          d         }4|                    |           J||fS i }|                                D ]6\  }}t          |t                    r|j        dk    r|}(|dk    r|}1|||<   7||fS )Nzprefix=r  r   rR   )r   r   r4  r   r/  rq  r'   rq   )r   r  rR   othersrK  others_dr  r+  s           r7   prefix_split_optionsz OptionStore.prefix_split_options  s    dD!! 	&"$F % %<<	** %WWS!__Q/FFMM!$$$$F##-/H

 $ $1a++ $(0B0BFF(]]FF"#HQKKH%%r6   project_default_optionscmd_line_optionsr   machine_file_options,T.Mapping[OptionKey, ElementaryOptionValues]T.Tuple[T.Union[T.List[str], OptionStringLikeDict], T.Union[T.List[str], OptionStringLikeDict], T.MutableMapping[OptionKey, ElementaryOptionValues]]c                   t          j        dt          j        |                    }d }|                     |          \  }}||n|}|                    t          d          d           }|t          |t                    s
J d            ||n|}|                     |          \  }}	||n|}||                     |           ||	|fS )Nz3T.MutableMapping[OptionKey, ElementaryOptionValues]rR   z0mypy: prefix from machine file was not a string?)	r4  r5  copyr  r.  r'   r   r,   hard_reset_from_prefix)
r   r  r  r  nopref_machine_file_optionsrR   possible_prefixnopref_project_default_optionspossible_prefixvnopref_cmd_line_optionss
             r7   first_handle_prefixzOptionStore.first_handle_prefix  s     '(fA49MaCbCb'd 'd# <@<U<UVm<n<n98*26::9X;N;NPTUU':6F+L+L''  OA'''+39I595N5NO_5`5`21*2''///.0GIdeer6   c                   |                      |          }t                                          D ]g\  }}| j        |         }||v r	||         }n3t          |         j        }t          |t                    s
J d            |}|                    |           h| j        t          d                                       |           d S )NrT  rR   )
rE  r  rq  r  rr  r/   r   r,   r  r'   )r   rR   ra  rs  r)  rP  _vs          r7   r  z"OptionStore.hard_reset_from_prefix  s    %%f--&B&H&H&J&J 	( 	("FN\&)F''*62		$V,4!"c**66J666	Y''''Yx(()33F;;;;;r6   project_default_options_incmd_line_options_inmachine_file_options_inc                   d}|                      |||          \  }}}t          |t                    r|g}t          |t                    r|                     |          }|i }t          |t
                    sJ |                                D ]\  }}	t          |t                    rt                              |          }
n|}
| j	        s|

                                rS|
j        rt          |
          }|	| j        |<   t|
| j        v r|                     |
|	|           |
                                }|                     |          r|                     ||	           |	| j        |
<   t          |t
                    sJ |                                D ]\  }}	t          |t                    rt                              |          }
n|}
| j	        s|

                                rS|
j        rt          |
          }|	| j        |<   t|
| j        v r|                     |
|	|           |
                                }|| j        v r|                     ||	|           |	| j        |
<   t          |t
                    sJ |                                D ]\  }}	t          |t                    rt                              |          }
n|}
| j	        s|

                                rS|
j        rt          |
          }|	| j        |<   t|
| j        v r|                     |
|	d           |
                                }|| j        v r|                     ||	d           |	| j        |
<   d S )NT)r  r   r,   r   r  rW  rq  r'   r   r   r   rr   r  r  r/  r   r  r  )r   r  r  r  rQ  r  r  r  r$  rk  r   augstrr1  s                r7   &initialize_from_top_level_project_callz2OptionStore.initialize_from_top_level_project_call  s     LPLdLdeexe|M~ M~I	 "24H -s33 	@'>&?#-t44 	T&*&:&:;R&S&S#"*&(#14888885;;== "	7 "	7NFF &#&& ++F33 = S%5%5%7%7 ~ 7S(.f%%$$V-=>>>> ;;==))(33 7OOHf555506D(--.55555288:: 	7 	7NFF&#&& ++F33 = S%5%5%7%7 ~ 
7S(.f%%$$V-=>>>>;;==t|++OOHf6FGGGG06D(--*D11111.4466 	7 	7NFF&#&& ++F33 = S%5%5%7%7 ~ 
7S(.f%%$$VT2222;;==t|++OOHfd;;;;06D(--'	7 	7r6   known_subprojects0T.Optional[T.Union[T.Set[str], T.KeysView[str]]]c                    |j         r|	|j         |vrdS |                     |          rdS |                     |          o'|                    d t          j                  t          v S )NTr  )rr   r  rz  r   r   r   r  )r   r   r  s      r7   rc  z$OptionStore.accept_as_pending_optionq  sz     > 	 (CNBS,S,St""3'' 	4##C(( a

dM4F
GGK``	br6   c                b   g }|                                 D ]n\  }}t          |t                    rt                              |          }n|}|| j        v r.|                     |          s|                    d| d           o|r'd                    |          }t          d|           d S )NrR  r   zUnknown options: )
rq  r   r,   r'   r   r  rc  r/  r0  r   )r   r  unknown_optionsr$  rk  r   r  s          r7   validate_cmd_line_optionsz%OptionStore.validate_cmd_line_options  s    .4466 	3 	3NFF&#&& ++F33d***43P3PQT3U3U*&&z3zzz222 	=99_--D !;T!;!;<<<	= 	=r6   r  c                l    t          |t                    rd |                                D             S |S )Nc                "    g | ]\  }}| d | S )r  r5   )r  r  r+  s      r7   r  z=OptionStore.hacky_mchackface_back_to_list.<locals>.<listcomp>  s&    ;;;41aqJJ1JJ;;;r6   )r   rW  rq  )r   r  s     r7   hacky_mchackface_back_to_listz)OptionStore.hacky_mchackface_back_to_list  s5    gt$$ 	<;;7==??;;;;r6   spcall_default_options_inc                   d}|                      |          }|                      |          }t          j        ||          D ]}|                    dd          \  }	}
t                              |	          }|j        |                    |          }n7|j        |k    r,|                    d           }t          d| d| d          || j	        v r| 
                    ||
|           | j                            |d            t          |          }|
| j        |<   |                                D ]\  }}
t!          |t                    st                              |          }|j        |k    r@| j                            |d            || j        v r| 
                    ||
|           ||
| j        t          |          <   d S )NTr  r   r   z4subproject name not needed in default_options; use "z" instead of "rR  )r  	itertoolsr   r   r'   r   rr   r   r   r  r/  r  r.  r,   r  rq  r   r  )r   rr   r  r  r  is_first_invocationspcall_default_optionsr  r  r$  rk  r   without_subpaug_strs                 r7   initialize_from_subproject_callz+OptionStore.initialize_from_subproject_call  s   
 #!%!C!CD]!^!^"&"D"DE_"`"`!8:PQQ 	0 	0AWWS!__NFF''//C~%jjJj77:--"zzTz::$%~\h%~%~x{%~%~%~ d***V-@AAAA$((d333c(()/g&&+1133 		1 		1KCc9-- 1++C00~++ $$S$///dl""V-@AAAA*0c#hh''		1 		1r6   r  r(   r   c           	     "   |                                 D ]\  }}|| j        vr|                     ||           &|j        |k    rt	          d|j         d| d          |                     |          }t          |          t          |          ur|                     ||j                   t          ||          re| 
                    ||           	 |                    |j                   # t          $ r& t          j        d| d|j         dd           Y w xY w| j                                        |                                z
  }|D ]7}|                     |          r |j        |k    r|                     |           8d S )	Nz&Tried to set an option for subproject z from !zOld value(s) of z, are no longer valid, resetting to default (z).F)fatal)rq  r  r8  rr   r   r  r  r/  r   r  rw  r  r   r   warningr  r  r}  )r   r  rr   r   r   oldvalpotential_removed_keyss          r7   update_project_optionsz"OptionStore.update_project_options  s   )//11 	. 	.JC$,&&''U333~++'(tQTQ_(t(tgq(t(t(tuuu**3//FF||4;;..U[1111&vu55 	. %%c5111.OOFL1111% . . .L!tC!t!tejep!t!t!t',. . . . . ..	. "&!2!2!4!47K7K7M7M!M) 	! 	!C%%c** !s~/K/KC   	! 	!s   C22,D"!D")r   r   rx   r   )rx   r   )r   r  rx   r'   r   )r   r  r/   r  rx   r&   )r   r  rx   r&   r   )r   r  rx   r%   )r   r'   rx   r   )rq   r  rr   ru   rx   r&   )r   r  r)  r%   rx   r   )r   r'   r)  r%   rx   r   )r2  r,   r   r  r)  r%   rx   r   )r9  r,   r   r  r)  r%   rx   r   )rR   r,   rx   r,   )rR   r,   r  r'   r   r   rx   r   )F)r   r'   rP  r&   rQ  r   rx   r   )r  r'   rP  r,   rx   r   )re  r   rf  r   rx   r   )rn  r,   ro  r,   rx   r   )r   r  rt  r%   rx   r   )r   r  rx   r%   )r   r'   rx   r&   )r   r'   rx   r   )r   r~  rx   r   r   )rx   r  )rx   r  )rx   r  )r  r%   rx   r   )r  r'   r  r%   rx   r%   )r  r'   r/   r  r  r   rx   r  )r   r'   rx   r   )r  r'   rx   r   )r  r   rx   r  )r  r   rx   r  )r  r  rx   r  )r  r  r  r   r  r  rx   r  )rR   r,   rx   r   )r  r  r  r   r  r  rx   r   )r   r'   r  r  rx   r   )r  r   rx   r   )r  r  rx   r   )
rr   r,   r  r   r  r  r  r   rx   r   )r  r(   rr   r   rx   r   )7r1   r2   r3   r[  r  r
  r  r  r  r  r  r%  r(  r,  r+  r5  r8  r;  rE  rO  r/  rd  rm  rZ  rw  r  r{  r}  r  r   r  r  rq  r  r  r  r  r  r  rY  rz  r  r  r  rh  r  r  r  r  r  rc  r  r  r  r  r5   r6   r7   r  r    sf       #3#.,7%1%0	 M M M M" " " "   "6 6 6 6 60 0 0 0! ! ! !   <) ) ) )    5 5 5 5' ' ' '$, , , ,
' 
' 
' 
'% % % %   "       @8 8 8 8 8t1 1 1 1   .( ( ( ( ' ' ' '! ! ! !Z Z Z Z   # # # #" " " "# # # #% % % %$ $ $ $& & & &- - - -6 6 6 6 6+ + + +0 0 0 0
   H H H H) ) ) )+ + + +	 	 	 	* * * *L L L L(   & & & &*f f f f4< < < <\7 \7 \7 \7|b b b b b= = = =   
"1 "1 "1 "1H! ! ! ! ! !r6   r  )r  r}  r  r}  rx   r   )rq   r,   rx   r,   )rw   )r   r%   rq   r'   rR   r,   rx   r&   )
r  r%   rq   r'   r  r  r  r,   rx   r   )_
__future__r   collectionsr   r  r   r  r  r
  r@  rH  typingr4  mesonlibr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   rw   r   r6  typing_extensionsr   r   r   r   interpreterbaser   Unionr   r,   DictListr   r4   r%   rv   r&   r(   TupleOptionalr)   r+   r	  TypeVarr9   backendlistgenvslitelistbuildtypelistr  r   ro   r'   r   	dataclassGenericr   r  r#   r   r'  r    r>  r$   r   rY  r"   r   r}  r  r!   r  r  r  r  r5  r  rq  rr  r  r  
MSCRT_VALSr  r  r5   r6   r7   <module>r     s  
 # " " " " " " # # # # # #                 				                                      "      ? FFFFFFFFFFFF++++++ !c16#s(3CQVC[(P QNQQQQ w	. /M / / / / )*S$s0K(LLLLL,-F;3M,NNNNN!"C-)L!MOMMMM    iu       QYt__ttt
TTT
& & &P 
79  9 9 9 9D3 D3 D3 D3 D3 D3 D3 D3L ? K&'fQWY^-Dc-I&JJJJJ'& '& '& '& '&2 '& '& '&R . . . . .:b> . . .    z#    d d d d d,T2 d d d&# # # # #z"~ # # #@ 	} 	} 	} 	} 	}(- 	} 	} 	}    s    O O O O O&qw/Dh/N'OP O O O,     *3/   $ . . . . .j, . . .$     OC0   > $ $ $ $ $ $ $ $  QYt:&&&   ,8] 8] 8] 8] 8]O 8] 8] 8]v) ) ) )= = = = =F F F F2< <#8..:J:JKK#95AA$9??;L;LMM'>@R@R@T@TUU$9??;L;LMM#68H8HII';R@@'EGYGYG[G[\\&=?P?P?R?RSS*EuMM#:NN<L<LMM$A??CTCTUU)+TV[\\'?ASASAUAUVV#< < <     &,= ,="(!&)@/+RTZ[[	#3Wk\`aaa|!	
 	
 	
 	%8'=YYY'#OQUVV)+A8UqUqUq!&	( 	( 	(02[]e < < <	> 	> 	>+'UW[\\)cememnsetetuu":HxY_N`aaa(<cKrKrKrsss/+`bghh*&LdSS'#=uEE?[?[?[\\\,(:AKKK)H#WyWyWy!&	( 	( 	(($>PUVVV[)  FK  FK  FK  	L  	L  	L24Z\^__'#GY]^^^ 	13\^cdd 	.0Mq\^jklll,.VX` D D D	F 	F 	F,.egijj,.ikmnn46fhlmmS*C *# *#,= ,= ,=  , , , ,\ +ee$7$=$=$?$?AUA[A[A]A]^^__D D/1dfhii13dfhii#D D D      Il&&!1Io&L!Q!QI*DT!U!UI!""BI!""BE      0//
> >"(!&)@'#<dCC'#?GG/+\^_``&KYajlr`sttt+-eglmm.0Z\^__l,CRHH*&KTRR,(JDQQ6GaGaGa	c 	c 	c,(CUKK.B]B]B]	_ 	_ 	_)7<[<[<[	] 	] 	]-)Y[_``'#NPUVV+'Y[`aa9;K"24K!LL	N 	N 	N)C # #> > >     6v
! v
! v
! v
! v
! v
! v
! v
! v
! v
!r6   