
    <hu              "      n   % S SK Jr  S SKJr  S SKJr  S SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrSSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  SSKJr  \R>                  (       a  S SK J!r!J"r"J#r#J$r$  SS	K%J&r&  \RN                  \(\)\RT                  \)\)4   \RV                  \)   4   r,S
\-S'   \RN                  S   r.S
\-S'   \RN                  \)\/\(\RV                  \)   4   r0S
\-S'   \RT                  S\.4   r1S
\-S'   \Rd                  \Rf                  \)   \\)4   r4S
\-S'    " S S\$SS9r5Sr6\Rn                  " S5      r8/ SQr9S/r:/ SQr;1 Skr<Sr=0 r>S\-S'    " S S5      r?\R>                  (       a  \RT                  \?\04   r@S
\-S'   \R                   " S  S!\R                  \8   \5      5       rC\R                   " S" S#\C\8   5      5       rD " S$ S%\C\)   5      rE\R                   " S& S'\D\(   5      5       rF " S( S)\C\8   5      rG\R                   " S* S+\G\/   5      5       rH " S, S-\/5      rI\R                   " S. S/\G\RN                  S0\I4      5      5       rJ\R                   " S1 S2\D\)   5      5       rK\R                   " S3 S4\C\RV                  \8      5      5       rL\R                   " S5 S6\L\)   5      5       rM\R                   " S7 S8\K5      5       rN\Rn                  " S9\CS:9rOSS; jrP " S< S=\K5      rQSS> jrRSSSA jjrSSSB jrT\E" S@SC\" 5       5      \E" SDSESF5      \E" SGSH\" 5       5      \E" SISJ\" 5       5      \E" SKSL\" 5       5      \E" SMSN\" 5       5      \E" SOSPS?5      \E" SQSR\" 5       5      \E" SSST\" 5       5      \E" SUSVSW5      \E" SXSY\" 5       5      \E" SZS[\" 5       5      \E" S\S]S^5      \E" S_S`\" 5       5      4 V s0 s H  n \?" U R                  5      U _M     sn rVSa\-Sb'   \R                  " Sc\N" SdSeSf5      \K" SgShSi\9SjSk9\K" SlSmS\:Sn9\K" SoSpSq\;Sn9\F" SqSrSj5      \K" SsStSu/ SvQSSw9\K" SxSySu/ SzQSn9\F" S{S|Sj5      \J" S}S~\I" S5      5      \K" SSSSS/Sn9\K" SSS/ SQSn9\F" SSS5      \F" SSSj5      \F" SSS5      \K" SSS/ SQSn9\H" SSSSS9\K" SSS/ SQSSw9\F" SSSSS9\K" SSS/ SQSn9\M" SS/ 5      \F" SSSSjS9\F" SSS5      \H" SSS SSS9\K" SSS@/ SQSn9\E" SSS?5      \E" SSS?5      \F" SSSj5      /5       V s0 s H  n \?" U R                  5      U _M     sn rXSa\-S'   \" \" \VR                  5       \XR                  5       5      5      rZ\M" SS/ 5      \M" SS/ 5      4 V s0 s H  n \?" U R                  5      U _M     sn r[Sa\-S'   \?" S_5      SS0\?" SU5      SSS.\?" S\5      SSS.\?" S5      0 \?" S5      0 0r\S\-S'   / SQr]\R                  " Sc\F" SSSj5      \F" SSS5      \H" SSS 5      \K" SSSSS/Sn9\F" SSS5      \E" SSS?5      \M" SS/ 5      \F" SSSj5      \F" SSSj5      \K" SSS/ SQSn9\F" SSS5      \K" SSS/ SQSn9\K" SSS/ SQSn9\F" SSSj5      \F" SSS5      \F" SSS5      \K" SSS\]SS/-   Sn9/5       V s0 s H  n \?" U R                  5      U _M     sn r^Sa\-S'    " S S5      r_gs  sn f s  sn f s  sn f s  sn f )    )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                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S'   Srg	)
ArgparseKWs3   stractiondestdefaultzT.Listchoices N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r2       s/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/options.pyr+   r+   3   s    	r9   r+   F)total_T)ninjavsvs2010vs2012vs2013vs2015vs2017vs2019vs2022xcodenonerE   )plaindebugdebugoptimizedreleaseminsizecustom>%   rI   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                    ^  \ rS rSr% SrSrS\S'   S\S'   S\S	'   S
\S'   SS\R                  4       S&U 4S jjjr	S'S jr
S(S jrS)S jrS*S jrS+S jrS,S jrS-S jrS-S jrS-S jrS-S jrS-S jrS-S jrS.S jrS.S jr\S/S j5       rS\S4       S0S jjrS1S jrS1S  jrS1S! jrS2S" jrS3S# jr S2S$ jr!S%r"U =r#$ )4r'   r   zRepresents 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-   ru   T.Optional[str]rv   r   rw   intrx    Nc                   > U(       d  [         TU ]  U 5      $ X#U4n [        U   $ ! [         a/    [         TU ]  U 5      nUR	                  XU5        U[        U'   Us $ f = f)z|The use of the __new__ method allows to add a transparent cache
to the OptionKey object creation, without breaking its API.
)super__new__rr   KeyError_init)clsru   rv   rw   tuple_instance	__class__s         r:   r~   OptionKey.__new__   sl     7?3''#-"=	#F++ 	ws+HNN4W5'/V$O		s   & 6AAc           	     n   [        U[        5      (       d  [        SU 35      e[        U[        5      (       d  [	        SU 35      eSU;  d   e[
        R                  U SU5        [
        R                  U SU5        [
        R                  U SU5        [
        R                  U S[        XU45      5        g )Nz"Internal error, bad machine type: zKey name is not a string: :ru   rv   rw   rx   )
isinstancer   r   r-   r   object__setattr__hashselfru   rv   rw   s       r:   r   OptionKey._init   s     '=11 #EgY!OPP$$$#&@$GHH$4.4z:4G44$'/J*KLr9   c                    [        S5      e)Nz,OptionKey instances do not support mutation.)AttributeError)r   keyvalues      r:   r   OptionKey.__setattr__   s    KLLr9   c                J    U R                   U R                  U R                  S.$ )Nru   rv   rw   r   r   s    r:   __getstate__OptionKey.__getstate__   s!    II//||
 	
r9   c                V    U R                   " S0 UD6  U [        U R                  5       '   g Nr2   )r   rr   	_to_tuple)r   states     r:   __setstate__OptionKey.__setstate__   s#    

U-1)*r9   c                    U R                   $ N)rx   r   s    r:   __hash__OptionKey.__hash__       zzr9   c                H    U R                   U R                  U R                  4$ r   )rv   rw   ru   r   s    r:   r   OptionKey._to_tuple   s    tyy99r9   c                z    [        U[        5      (       a!  U R                  5       UR                  5       :H  $ [        $ r   r   r'   r   NotImplementedr   others     r:   __eq__OptionKey.__eq__   .    eY''>>#u'888r9   c                z    [        U[        5      (       a!  U R                  5       UR                  5       :g  $ [        $ r   r   r   s     r:   __ne__OptionKey.__ne__   r   r9   c                    [        U[        5      (       aJ  U R                  c  UR                  S L$ UR                  c  gU R                  5       UR                  5       :  $ [        $ NFr   r'   rv   r   r   r   s     r:   __lt__OptionKey.__lt__   sX    eY''&''t33!!)>>#eoo&777r9   c                    [        U[        5      (       aW  U R                  c  UR                  b  gU R                  b  UR                  c  gU R                  5       UR                  5       :*  $ [        $ NTFr   r   s     r:   __le__OptionKey.__le__   s^    eY''&5+;+;+G,1A1A1I>>#u'888r9   c                    [        U[        5      (       aJ  UR                  c  U R                  S L$ U R                  c  gU R                  5       UR                  5       :  $ [        $ r   r   r   s     r:   __gt__OptionKey.__gt__   sV    eY'''d22(>>#eoo&777r9   c                    [        U[        5      (       aW  U R                  c  UR                  b  gU R                  b  UR                  c  gU R                  5       UR                  5       :  $ [        $ NFTr   r   s     r:   __ge__OptionKey.__ge__   s^    eY''&5+;+;+G,1A1A1I>>#u'888r9   c                    U R                   nU R                  [        R                  L a  SU 3nU R                  b  U R                   SU 3nU$ )Nbuild.r   )ru   rw   r   BUILDrv   )r   outs     r:   __str__OptionKey.__str__   sL    ii<<=...3%.C??&__%Qse,C
r9   c                \    SU R                   < SU R                  < SU R                  < S3$ )Nz
OptionKey(, )r   r   s    r:   __repr__OptionKey.__repr__   s+    DII=4??*=R?OqQQr9   c                r   [        U[        5      (       d   e UR                  S5      u  p#[        R
                  n UR                  S5      u  pVUS:X  a  [        R                  nOUn UnSU;  d   eUR                  S5      S:  d   eU " XrU5      $ ! [         a    SUp2 Nwf = f! [         a    Un NKf = f)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   rawrv   raw2for_machinerU   raw3opts           r:   from_stringOptionKey.from_string   s     #s####	)"yy~J $((	::c?LF +11 #~~yy~!!!3K00#  	)#S	)  	D	s(   B )B' 'B' B$#B$'B65B6c                    [        Ub  UOU R                  U[        :w  a  UOU R                  Ub  U5      $ U R                  5      $ )zCreate 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'   ru   
_BAD_VALUErv   rw   r   s       r:   evolveOptionKey.evolve  sK     !1tyy'1Z'?T__$+$7K 	K=A\\K 	Kr9   c                     U R                  SS9$ )z1Convenience method for key.evolve(subproject='').r{   rv   )r   r   s    r:   as_rootOptionKey.as_root!  s    {{b{))r9   c                <    U R                  [        R                  S9$ )z?Convenience method for key.evolve(machine=MachineChoice.BUILD).rw   )r   r   r   r   s    r:   as_buildOptionKey.as_build%  s    {{=#6#6{77r9   c                <    U R                  [        R                  S9$ )z>Convenience method for key.evolve(machine=MachineChoice.HOST).r   )r   r   r   r   s    r:   as_hostOptionKey.as_host)  s    {{=#5#5{66r9   c                     SU R                   ;   $ )Nr   ru   r   s    r:   has_module_prefixOptionKey.has_module_prefix-  s    diir9   c                l    U R                  5       (       a  U R                  R                  SS5      S   $ g )Nr   r   r   )r   ru   r   r   s    r:   get_module_prefixOptionKey.get_module_prefix0  s.    !!##99??3*1--r9   c                :    U R                   [        R                  L $ r   )rw   r   r   r   s    r:   is_for_buildOptionKey.is_for_build5  s    ||}2222r9   r2   )ru   r-   rv   ry   rw   r   returnr'   )ru   r-   rv   ry   rw   r   r   None)r   r-   r   T.Anyr   r   )r   T.Dict[str, T.Any])r   r   r   r   r   rz   )r   r)   )r   r   r   boolr   r-   )r   r-   r   'OptionKey')ru   ry   rv   ry   rw   zT.Optional[MachineChoice]r   r   )r   r'   r   r   )r   ry   )$r3   r4   r5   r6   __doc__	__slots__r7   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   r8   __classcell__r   s   @r:   r'   r'   r   s     ;I
IJ .2)6););+ ' AJ &MM
2
:

R 1 1: (,-748K$K*K 2K >IK$*87 
3 3r9   
OptionDictc                      \ rS rSr% S\S'   S\S'   S\S'   \rS\S'   S	rS
\S'   \R                  " S	S9r
S\S'   SrS\S'   SS jrSS jrSS jrSS jrSS jrSS jrSrg)
UserOptioni;  r-   ru   descriptionzdataclasses.InitVar[_T]value_r   yieldingFr   
deprecated)r0   readonlyNzT.Optional[UserOption]parentc                R    U R                  U5      U l        U R                  U l        g r   )validate_valuer   r0   )r   r  s     r:   __post_init__UserOption.__post_init__F  s    ((0
"&**r9   c                    [        U[        5      (       a  U$ [        U[        5      (       a  U(       a  S/$ S/$ [        U[        5      (       a  [	        U5      /$ U/$ )Ntruefalse)r   listr   rz   r-   r   r   s     r:   listifyUserOption.listifyK  sR    eT""LeT""$F837)3eS!!J<wr9   c                |    [        U R                  [        [        [        [
        45      (       d   eU R                  $ r   )r   r   r-   rz   r   r  r   s    r:   printable_valueUserOption.printable_valueT  s,    $**sCt&<====zzr9   c                    g r   r2   r   s    r:   printable_choicesUserOption.printable_choicesX  s    r9   c                    [        S5      e)Nz5Derived option class did not override validate_value.)RuntimeErrorr  s     r:   r  UserOption.validate_value^  s    RSSr9   c                d    U R                   nU R                  U5      U l         U R                   U:g  $ r   )r   r  )r   newvalueoldvalues      r:   	set_valueUserOption.set_valuea  s,    ::((2
zzX%%r9   )r0   r   r  r<   r   r   )r   r&   r   T.List[str])r   r&   r   zT.Optional[T.List[str]]r   r   r   r<   )r   r   r   r   )r3   r4   r5   r6   r7   DEFAULT_YIELDINGr  r  dataclassesfieldr	  r
  r  r  r  r  r  r"  r8   r2   r9   r:   r  r  ;  sh     I##%Hd%!&J& &&u5Hd5%)F")-
T&r9   r  c                  N    \ rS rSr% Sr\R                  " \S9rS\	S'   S	S jr
Srg)
EnumeratedUserOptionif  z0A generic UserOption that has enumerated values.default_factoryz
T.List[_T]r1   c                X    U R                    Vs/ s H  n[        U5      PM     sn$ s  snf r   r1   r-   r   cs     r:   r  &EnumeratedUserOption.printable_choicesm  s"     $-1A---s   'r2   Nr&  )r3   r4   r5   r6   r   r)  r*  r  r1   r7   r  r8   r2   r9   r:   r,  r,  f  s!     ;%++DAGZA.r9   r,  c                      \ rS rSrSS jrSrg)r#   iq  c                h    [        U[        5      (       d  [        SU R                   SU S35      eU$ )NzThe value of option "z" is "z", which is not a string.)r   r-   r   ru   r  s     r:   r  UserStringOption.validate_values  s4    %%% #86%Pi!jkkr9   r2   Nr   r   r   r-   r3   r4   r5   r6   r  r8   r2   r9   r:   r#   r#   q  s    r9   r#   c                  V    \ rS rSr% \R
                  " S S9rS\S'   S
S jrSS jr	Sr
g	)r   ix  c                 
    SS/$ r   r2   r2   r9   r:   <lambda>UserBooleanOption.<lambda>{  s    tUmr9   r-  zT.List[bool]r1   c                    U R                   $ r   r   r   s    r:   __bool__UserBooleanOption.__bool__}  r   r9   c                   [        U[        5      (       a  U$ [        U[        5      (       d  [        SU R                   SU S35      eUR                  5       S:X  a  gUR                  5       S:X  a  g[        SU R                   SU S35      e)	NOption "" value z! cannot be converted to a booleanr  Tr  Fz  is not boolean (true or false).)r   r   r-   r   ru   lowerr  s     r:   r   UserBooleanOption.validate_value  s    eT""L%%% 8DII;hugEf!ghh;;=F";;=G#x		{(5'Aabccr9   r2   Nr   )r   r   r   r   )r3   r4   r5   r6   r)  r*  r1   r7   r?  r  r8   r2   r9   r:   r   r   x  s%     (-->STG\T	dr9   r   c                     ^  \ rS rSr% S\S'   S\S'   \R                  (       a  S
S jrSU 4S jjrSS jr	SS jr
S	rU =r$ )_UserIntegerBasei  T.Optional[int]	min_value	max_valuec                    g r   r2   )r   vs     r:   toint_UserIntegerBase.toint  s    r9   c                  > [         TU ]  U5        / nU R                  b  UR                  SU R                  < 35        U R                  b  UR                  SU R                  < 35        SR                  U5      U l        g )Nz>= z<= r   )r}   r  rI  appendrJ  join_UserIntegerBase__choices)r   r  r1   r   s      r:   r  _UserIntegerBase.__post_init__  si    f%!>>%NNS 234>>%NNS 234"ii0r9   c                    U R                   /$ r   )rR  r   s    r:   r  "_UserIntegerBase.printable_choices  s    r9   c           	        [        U[        5      (       a&  [        R                  " SU R	                  U5      5      n[        U[
        5      (       d  [        SU< SU R                   S35      eU R                  b8  XR                  :  a)  [        SU SU R                   SU R                   S35      eU R                  b8  XR                  :  a)  [        SU SU R                   SU R                   S35      e[        R                  " SU5      $ )Nr<   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castrM  rz   r   ru   rI  rJ  r  s     r:   r  _UserIntegerBase.validate_value  s    eS!!FF4E!23E%%% 6%-		{J^!_``>>%%..*@ 6%dii[Hefjftfteuuv!wxx>>%%..*@ 6%dii[Hefjftfteuuv!wxxvvdE""r9   )	__choices)rL  r-   r   rz   r$  r&  r'  )r3   r4   r5   r6   r7   rW  TYPE_CHECKINGrM  r  r  r  r8   r   r  s   @r:   rG  rG    s-    +1 	# 	#r9   rG  c                  <    \ rS rSr% SrS\S'   SrS\S'   SS jrSrg)	r    i  NrH  rI  rJ  c                n     [        U5      $ ! [         a    [        SU SU R                   S35      ef = f)NzValue string "" for option "z#" is not convertible to an integer.rz   r   r   ru   )r   valuestrings     r:   rM  UserIntegerOption.toint  sC    	}{## 	} >+nTYYKWz!{||	}s   
 '4r2   r`  r-   r   rz   )	r3   r4   r5   r6   rI  r7   rJ  rM  r8   r2   r9   r:   r    r      s     "&I%!%I%}r9   r    c                      \ rS rSrSS jrSrg)OctalInti  c                *    [        [        U 5      5      $ r   )octrz   r   s    r:   r   OctalInt.__str__  s    3t9~r9   r2   Nr   )r3   r4   r5   r6   r   r8   r2   r9   r:   rd  rd    s    r9   rd  c                     ^  \ rS rSr% \R
                  " SSS9rS\S'   \R
                  " SSS9rS\S'   SS	 jr	SU 4S
 jjr
SS jrSrU =r$ )r$   i  r   F)r0   initrH  rI  i  rJ  c                    [        U R                  [        5      (       a  [        U R                  S5      $ U R                  $ )N04o)r   r   rz   formatr   s    r:   r  UserUmaskOption.printable_value  s.    djj#&&$**e,,zzr9   c                B   > US:X  a  g[        [        TU ]	  U5      5      $ )Npreserve)rd  r}   r  )r   r   r   s     r:   r  UserUmaskOption.validate_value  s#    J.u566r9   c                v     [        US5      $ ! [         a   n[        SU R                   SU 35      eS nAff = f)N   zInvalid mode for option "z" r_  )r   r`  es      r:   rM  UserUmaskOption.toint  sD    	O{A&& 	O #<TYYKr!!MNN	Os    
838r2   r   )r   r   r   z&T.Union[Literal['preserve'], OctalInt]rb  )r3   r4   r5   r6   r)  r*  rI  r7   rJ  r  r  rM  r8   r   r  s   @r:   r$   r$     sI     "-!2!215!III!,!2!25u!MIM
7
O Or9   r$   zLiteral['preserve']c                      \ rS rSrSS jrSrg)r   i  c                   XR                   ;  a  [        U[        5      (       a  SnO [        U[        [        45      (       a  SnOSnSR                  U R                    Vs/ s H	  nSU S3PM     sn5      n[        SR                  XU R                  U5      5      e[        U[        5      (       d   S5       eU$ s  snf )Nbooleannumberstringr   "zjValue "{}" (of type "{}") for option "{}" is not one of the choices. Possible choices are (as string): {}.for mypy)
r1   r   r   rz   floatrQ  r   rl  ru   r-   )r   r   _typeitemoptionsstrings        r:   r  UserComboOption.validate_value  s    $%&&!EC<00   IIt||&L|t4&{|&LMM  "JJP&%*499mKMN N %%%1z1% 'Ms   !B<r2   Nr7  r8  r2   r9   r:   r   r     s    r9   r   c                  ^    \ rS rSr% S\S'   SrS\S'   SrS\S	'   SrS\S
'   SS jrSS jr	Sr
g)UserArrayOptioni  z,dataclasses.InitVar[T.Union[_T, T.List[_T]]]r  NzT.Optional[T.List[_T]]r1   Fr   
split_args
allow_dupsc                b    U R                  U5      nU R                  U R                  U-   5        g)z*Extend the value with an additional value.N)r  r"  r   )r   r   news      r:   extend_valueUserArrayOption.extend_value  s'    !!%(tzzC'(r9   c                t    U R                   c  g U R                    Vs/ s H  n[        U5      PM     sn$ s  snf r   r0  r1  s     r:   r  !UserArrayOption.printable_choices  s/    << $-1A---s   5r2   )r   zT.Union[str, T.List[str]]r   r   r&  )r3   r4   r5   r6   r7   r1   r  r  r  r  r8   r2   r9   r:   r  r    s3     98&*G#*JJ)
.r9   r  c                  (    \ rS rSrSS jrSS jrSrg)r"   i  c                     [        XR                  5      $ ! [         a!  n[        SU R                   SU< 35      eS nAff = f)Nerror in option "": )r   r  r   ru   )r   r   rs  s      r:   r  UserStringArrayOption.listify  sF    	J&uoo>> 	J #4TYYKs1%!HII	Js    
A=Ac                   U R                  U5      nU R                  (       d9  [        [        U5      5      [        U5      :w  a  Sn[        R
                  " U5        U H5  n[        U[        5      (       a  M  [        SU< SU R                   S35      e   U R                  (       a  U Vs/ s H  oUU R                  ;  d  M  UPM     nnU(       ar  [        SR                  [        U5      S:X  a  SOSS	R                  U5      U R                  [        U5      S:X  a  S
OSS	R                  U R                  5      5      5      eU$ s  snf )Nz\Duplicated values in array option is deprecated. This will become a hard error in meson 2.0.String array element "r^  " is not a string.z<Value{} "{}" for option "{}" {} not in allowed choices: "{}"r   r{   sr   isare)r  r  lensetr   deprecationr   r-   r   ru   r1   rl  rQ  )r   r   r   msgixbads          r:   r  $UserStringArrayOption.validate_value  s   <<&3s8}#5X#F@CS!Aa%%$'=h\X\XaXaWbbt%uvv  <<&@h4<<*?1hC@$%c%j%jc(a-BSIIcNIIHMDuIIdll+&-    As   ,EEr2   N)r   r   r   r%  )r3   r4   r5   r6   r  r  r8   r2   r9   r:   r"   r"     s    Jr9   r"   c                  b    \ rS rSr% \R
                  " S SS9rS\S'   SS jrSS jr	SS	 jr
S
rg)r   i  c                 
    / SQ$ )N)enableddisabledautor2   r2   r9   r:   r;  UserFeatureOption.<lambda>#  s     ?r9   F)r.  ri  r%  r1   c                     U R                   S:H  $ )Nr  r>  r   s    r:   
is_enabledUserFeatureOption.is_enabled%  s    zzY&&r9   c                     U R                   S:H  $ )Nr  r>  r   s    r:   is_disabledUserFeatureOption.is_disabled(  s    zzZ''r9   c                     U R                   S:H  $ )Nr  r>  r   s    r:   is_autoUserFeatureOption.is_auto+  s    zzV##r9   r2   Nr   )r3   r4   r5   r6   r)  r*  r1   r7   r  r  r  r8   r2   r9   r:   r   r     s1     ',,?eMG[ M'($r9   r   _U)boundc                    [        U [        5      (       a5  [        U[        5      (       d   S5       eU R                  UR                  :g  $ [        U [        5      (       a5  [        U[        5      (       d   S5       eU R                  UR                  :g  $ [        U [        5      (       aU  [        U[        5      (       d   S5       eU R
                  UR
                  :g  =(       d    U R                  UR                  :g  $ g)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
r{  F)r   r,  r1   r  rG  rJ  rI  )abs     r:   choices_are_differentr  2  s     !)**!122>J>2yyAII%%	A	'	'!_--9z9-yyAII%%	A'	(	(!-..:
:.{{akk)GQ[[AKK-GGr9   c                  H   ^  \ rS rSrSrSU 4S jjrSS	S jjrS
S jrSrU =r	$ )r!   iH  a)  
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.
c                   > UR                  5       U l        S/U-   U l        0 U l        US:X  a  SOU S3n[        TU ]  X1 S3SS/S9  g )NrG   zc++cpp_std_stdz language standard to user1   )rD  langall_stdsdeprecated_stdsr}   __init__)r   r  r  opt_namer   s       r:   r  UserStdOption.__init__V  sY    JJL	8+13 $9dV4=V+D#EvX^W_`r9   c                @  ^  [        U 4S jU 5       5      (       d   eT =R                  U-  sl        U(       a`  U Vs0 s H  nSUSS   3U_M     nnU(       a  T R                  R                  U5        g T =R                  UR	                  5       -  sl        g g s  snf )Nc              3  @   >#    U  H  oTR                   ;   v   M     g 7fr   r  .0stdr   s     r:   	<genexpr>-UserStdOption.set_versions.<locals>.<genexpr>_  s     <8C$--'8s   gnur   )allr1   r  updatekeys)r   versionsr  gnu_deprecatedr  gnu_stds_maps   `     r:   set_versionsUserStdOption.set_versions^  s    <8<<<<< <DEHSc#ab'OS0HLE$$++L9 1 1 33 Es   Bc           	       ^   [        U5      nU H5  n[        U[        5      (       a  M  [        SU< ST R                   S35      e   SR                  U 4S jU 5       5      nU(       a)  [        ST R                   S	U S
T R                   S35      eU H  nUT R                  ;   d  M  Us  $    U H^  nT R                  R                  U5      nUc  M#  [        R                  " SU ST R                   S3SU SU S3-   S-   S-   S-   SS9  Us  $    [        SU ST R                  R                  5        S3ST R                   ST R                   3-   5      e! [         a!  n[        ST R                   SU< 35      eS nAff = f)Nr  r  r  r^  r  ,c              3  J   >#    U  H  oTR                   ;  d  M  Uv   M     g 7fr   r  r  s     r:   r  /UserStdOption.validate_value.<locals>.<genexpr>p  s     Q*34==8P33*s   #	#zUnknown option "rC  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   ru   r   r-   rQ  r  r1   r  getr   r  r  upper)r   r   
candidatesrs  r  unknownnewstds   `      r:   r  UserStdOption.validate_valueh  s   	J,U3J Cc3''$'=j^>Z^ZcZcYddv%wxx  ((Q*QQ #3DII;hwiOefjfsfsettu!vwwCdll"
  C))--c2F!  )*5KDII;Vbc.se3PQWPXX[\];< ]] q	q x|}   zl:PQUQZQZQ`Q`QbPccno;DII;fT\\N[\ ] 	]/  	J #4TYYKs1%!HII	Js   E 
F&FF)r  r  r  )r  r-   r  r%  r   r   )FF)r  r%  r  r   r  r   r   r   r7  )
r3   r4   r5   r6   r   r  r  r  r8   r   r  s   @r:   r!   r!   H  s    a4] ]r9   r!   c                :    U S:X  a  gSU R                  SS5      -   $ )Nrk   z--warnlevelz--_-)replacer   s    r:   argparse_name_to_argr    s#    $,,sC(((r9   r{   rU   c                    [        U [        [        [        45      (       a!  [        R
                  " SU R                  5      $  [        U   U   $ ! [         a$    [        R
                  " SU R                  5      s $ f = f)Nr&   )	r   r   r    r$   rW  rX  r0   BUILTIN_DIR_NOPREFIX_OPTIONSr   )r   ru   rU   s      r:   argparse_prefixed_defaultr    sg    #):OLMMvv.<<=+D1&99 =vv.<<=s   A +A=<A=c                   0 n[        U [        [        45      (       a  U R                  nOS n[        U R                  [
        5      (       a  SOS nU R                  nU(       d+  SR                  UR                  S5      [        X5      5      nOXdS'   U(       a  U(       d  XTS'   [        R                  US'   [        U5      US'   [        [        U5      5      nUR                  " U4SXs-   0UD6  g )	N
store_truez{} (default: {}).r   r.   r1   r0   r/   help)r   r,  r  r1   r0   r   r  rl  rstripr  argparseSUPPRESSr-   r  add_argument)	optionru   parserhelp_suffixkwargsr2  r  hcmdline_names	            r:   option_to_argparser    s    F&/ABBNN"6>>488dAA&&qxx}6OPV6]^xy ))F9YF6N'D	2L
E1?EfEr9   zInstallation prefixrQ   zExecutable directorybinrX   zData file directoryra   zHeader file directoryrY   zInfo page directoryrS   zLibrary directoryrc   zLicenses directoryrb   zLibrary executable directoryr_   zLocale data directoryri   zLocalstate data directoryvarrT   zManual page directoryrZ   zSystem executable directoryrl   z'Architecture-independent data directorycomrd   zSysconf data directoryz#T.Mapping[OptionKey, AnyOptionType]BUILTIN_DIR_OPTIONSzT.List[AnyOptionType]rg   z%Override value of all 'auto' featuresr  rW   zBackend to user=   T)r1   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  r\   zBuild type to userI   z*Enable debug symbols and other informationrm   zDefault library typeshared)r  staticboth)r1   r  rq   z'Default library type for both_libraries)r  r  r  r]   z,Whether to print the logs from failing testsrh   z8Default umask to apply on permissions of installed files   rR   zBuild directory layoutmirrorflatrf   zOptimization level0)rH   r  g123r  rj   z3Whether to try static linking before shared linkingr[   z$Split stdout and stderr in test logsrN   zStrip targets on installrO   zUnity buildoff)onr  subprojectsre   zUnity block size   r   )rI  rk   zCompiler warning level to user  )r  r  r  r  
everythingrV   zTreat warnings as errors)r  r`   z	Wrap moder0   )r0   
nofallback
nodownloadforcefallback	nopromoterp   z$Force fallback for those subprojectsrP   z"Activate Visual Studio environment)r	  zpkgconfig.relocatablez'Generate pkgconfig files as relocatablezpython.bytecompilezWhether to compile bytecode)rI  rJ  zpython.install_envz&Which python environment to install to)r  rU   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_OPTIONSrn   z1List of additional paths for pkg-config to searchro   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  )rG   mdmddmtmtd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)r  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                  T   \ rS rSrSSSSSS.rS:S jrS;S	 jrS<S=S jjrS>S jrS?S jr	S@S jr
SAS jrSBS jrS<SCS jjrSDS jrSES jrSFS jrSDS jrSGS jrSHS jrSIS jrSJSKS jjrSJSLS jjrSMS jrSNS jrSOS jrSPS jrSQS jrSRS  jrSSS! jrSTS" jrSUS# jrSVS$ jr SWS% jr!SXS& jr"SYS' jr#S<SZS( jjr$S[S) jr%S\S* jr&S[S+ jr'S[S, jr(S[S- jr)S[S. jr*S[S/ jr+S[S0 jr,S]S1 jr-        S^S2 jr.S_S3 jr/        S`S4 jr0SJSaS5 jjr1SbS6 jr2            ScS7 jr3SdS8 jr4S9r5g
)eOptionStorei  )rH   F)r  T)r  T)r  F)r  T)rH   rI   rJ   rK   rL   c                    0 U l         [        5       U l        [        5       U l        [        5       U l        SSKJn  [        U5      U l        0 U l        Xl        0 U l	        0 U l
        g )Nr   )all_languages)optionsr  r  project_optionsmodule_options	compilersr.  augmentsis_crosspending_optionspending_subproject_options)r   r4  r.  s      r:   r  OptionStore.__init__'  sU    =?'*u1403, /$&  ,.68'r9   c                    [        U[        5      (       a  [        U5      $ U R                  (       d.  UR                  [
        R                  :X  a  UR                  5       nU$ r   )r   r-   r'   r4  rw   r   r   r   r   r   s     r:   ensure_and_validate_key#OptionStore.ensure_and_validate_key7  sC    c3S>! }}0C0C!C++-C
r9   Nc                    U R                  U5      nXR                  ;   a  U R                  U   R                  $ U R                  R	                  X5      $ r   )r:  r/  r   r5  r  )r   r   r0   s      r:   get_pending_valueOptionStore.get_pending_valueH  sH    **3/,,<<$***##''55r9   c                $    U R                  U5      $ r   )get_value_forr9  s     r:   	get_valueOptionStore.get_valueN  s    !!#&&r9   c                ,    [        U R                  5      $ r   )r  r/  r   s    r:   __len__OptionStore.__len__Q  s    4<<  r9   c                r   U R                  U5      nU R                  R                  US 5      nU R                  U5      (       a$  UR                  c   eUc  [        SU S35      e U$ UcL  [        UR                  S UR                  S9nX0R                  ;  a  [        SU S35      eU R                  U   $ U$ )Nz+Tried to access nonexistant project option r   rv   rw   z2Tried to access nonexistant project parent option )	r:  r/  r  is_project_optionrv   r   r'   ru   rw   )r   r   	potential
parent_keys       r:   get_value_object_for OptionStore.get_value_object_forT  s    **3/LL$$S$/	!!#&&>>--- !LSEQRSTT !   &sxxD#++V
\\1"%WXbWccd#eff ||J//r9   c                @   [        U[        5      (       d   eU R                  U5      nU R                  U5      nUR                  nXR
                  ;   a!  UR                  c   eU R
                  U   nX#4$ UR                  (       a  UR                  R                  nX#4$ r   )	r   r'   r:  rK  r   r3  rv   r  r
  )r   r   vobjectcomputed_values       r:   get_value_object_and_value_for*OptionStore.get_value_object_and_value_fore  s    #y))))**3/++C0 -->>---!]]3/N (( $^^11N((r9   c                P    U R                  U5      u  p4UR                  U5      U:H  $ r   )rP  r  )r   r   r   rN  current_values        r:   option_has_valueOptionStore.option_has_valueq  s+    !%!D!DS!I%%e,==r9   c                |    [        U[        5      (       a  [        X5      nOUb   eUnU R                  U5      u  pEU$ r   )r   r-   r'   rP  )r   ru   rv   r   rN  resolved_values         r:   r@  OptionStore.get_value_foru  sC    dC  D-C%%%C"&"E"Ec"Jr9   c                    U R                  U5      nSUR                  ;   a  [        SUR                   S35      eU R                  X5        g )Nr   z;Internal error: non-module option has a period in its name )r:  ru   r   add_system_option_internal)r   r   valobjs      r:   add_system_optionOptionStore.add_system_option~  sI    **3/#((? #^_b_g_g^hhi!jkk''4r9   c                   [        U[        5      (       d   e[        UR                  [        5      (       d!  [        UR                  [        5      (       d   eXR                  ;   a  g U R
                  R                  US 5      nUR                  (       a3  UR                  S S9nU R                  XB5        Ub  X0R                  U'   g g X R                  U'   Ub  U R                  X5        g g )Nr   )r   r  ru   r-   r/  r5  poprv   r   rZ  r3  
set_option)r   r   r[  pvalproj_keys        r:   rZ  &OptionStore.add_system_option_internal  s    &*----&++s++fkk3////,,##''T2>>zzTz2H++H=%)c"   !'LL*  r9   c                    U R                  U5      nUR                  R                  US-   5      (       d  [        SUR                   SU S35      eU R	                  X#5        g )Nr  zLInternal error: all compiler option names must start with language prefix. (z vs z_))r:  ru   
startswithr   r\  )r   languager   r[  s       r:   add_compiler_optionOptionStore.add_compiler_option  su    **3/xx""8c>22 #opspxpxoyy}  G  ~H  HJ  "K  L  Ls+r9   c                F   U R                  U5      nUR                  c   eXR                  ;   a  [        SU S35      eUR                  (       aN  UR                  (       a=  UR                  5       n U R                  U   n[        U5      [        U5      L a  XBl        [        UR                  5      Ul        X R                  U'   U R                  R                  U5        U R                  R                  US 5      nUb  U R                  X5        g g ! [         a     Nf = f)Nz.Internal error: tried to add a project option z that already exists.)r:  rv   r/  r   r  r   typer
  r   r   r0  addr5  r_  r`  )r   r   r[  rJ  parent_optionra  s         r:   add_project_optionOptionStore.add_project_option  s    **3/~~))),, #QRUQVVk!lmm??s~~J	 $Z 8 &$v,6$1M
 v}}-"S  %##''T2OOC&    s   2,D 
D D c                0   U R                  U5      nUR                  R                  S5      (       a  [        S5      eUR                  R                  US-   5      (       d  [        S5      eU R	                  X#5        U R
                  R                  U5        g )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:  ru   re  r   rZ  r1  rk  )r   
modulenamer   r[  s       r:   add_module_optionOptionStore.add_module_option  s    **3/88x(( !YZZxx"":#344   "A  B  B''4$r9   c                h   [         R                  R                  U5      n[         R                  R                  U5      (       d  [	        SU< S35      eUR                  S5      (       d  UR                  S5      (       a2  [        U5      S:X  a  US   S:X  a   U$ [        U5      S:X  a   U$ US S nU$ )	Nzprefix value z must be an absolute path/\   r   r   r  )ospath
expanduserisabsr   endswithr  )r   rU   s     r:   sanitize_prefixOptionStore.sanitize_prefix  s    ##F+ww}}V$$ =
:S!TUU??36??4#8#8 6{aF1I$4 	 V!   r9   c           	         [         R                  " U5      nUR                  R	                  S5      (       aW  UR                  5       (       aB  U[        ;  a8   UR                  U5      nSUR                  ;   a  [        SU SU SU< S35      eUR                  5       $ ! [         a    Us $ f = f! [         a     NTf = f)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	TypeErrorru   r{  is_absoluter  relative_tor   partsr   as_posix)r   rU   r  r   s       r:   sanitize_dir_option_value%OptionStore.sanitize_dir_option_value  s    	$$U+E ;;&&5+<+<+>+>55))&1 u{{"$(eW E99?
 C33  ~~%  	L	  s#   B B1 B.-B.1
B>=B>c                  ^^ SnUmTR                   S:X  a  TR                  S S9mUR                  S:X  a.  [        U[        5      (       d   S5       eU R                  U5      nOUU R                  U5      (       a?  U R                  S5      n[        U[        5      (       d   S5       eU R                  XQU5      n U R                  U5      mTR                  SL a  [        R                  " S	T S
35        GO9[        TR                  [        5      (       aI  TR!                  U5       H3  nUTR                  ;   d  M  [        R                  " S	T SU< S35        M5     O[        TR                  ["        5      (       aA  SUU4S jjnTR!                  U5       Vs/ s H
  og" U5      PM     nnSR%                  U5      nOq[        TR                  [        5      (       aR  [        R                  " S	T STR                  < 35        X@R'                  UR                  TR                  S9X#5      -  nTR)                  U5      nXR*                  ;   a%  TR,                  n	TR/                  U5        STl        OCUR                   c   eU R2                  R5                  UTR,                  5      n	X R2                  U'   XIU:g  -  nTR6                  (       a  U(       a  U(       d  [        ST S35      eUR                  S:X  aW  U(       aP  U(       aI  [        U	[        5      (       d   S5       e[        U[        5      (       d   S5       eU R9                  X5        U(       a  UR                  S:X  au  US:w  ao  [        U[        5      (       d   S5       eU R:                  U   u  pUR                  SS9nUR                  SS9nU R'                  XU5        U R'                  XU5        U$ ! [         a    [        ST S35      ef = fs  snf )NFr{   r   rU   r{  Unknown option: "".TrB  z" is deprecatedrC  z is deprecatedc                   > [        TR                  [        5      (       d   eTR                  R                  U 5      nUb#  [        R
                  " ST SU < SU< 35        U$ U $ )NrB  rC  z is replaced by )r   r  dictr  r   r  )rL  r   	error_keyr   s     r:   r  'OptionStore.set_option.<locals>.replace	  sb    !#..$7777>>--a0'$$x	{(1%GWX`Wc%de#Or9   r  z" is replaced by r   z"Tried to modify read only option "rz  r\   rM   rI   rf   )rL  r-   r   r-   )rv   r   ru   r   r-   r|  is_builtin_optionr@  r  rK  r   r   r  r   r  r  r  r  rQ  r`  r  r/  r   r"  r  r3  r  r	  reset_prefixed_optionsDEFAULT_DEPENDENTS)r   r   	new_valuefirst_invocationchangedrU   rL  r  valarr	old_valuerf   rI   dkeyoptkeyr  r   s                 @@r:   r`  OptionStore.set_option  st   	2%!((D(9I88xi--9z9-,,Y7I##C((''1Ffc**6J6*66vINI	D++C0C >>T!x	{/BC--[[+&$$x	{(1%~%VW , --  +.++i*@A*@Qgaj*@FA(I,,x	{2CCNNCUVWszzs~~z'F	ddG&&y1	,,		IMM)$ CL>>---))#syy9I!*MM#	))<<G,< #Ei[PQ!RSS88x$4i--9z9-i--9z9-''	=sxx;.93Hi--9z9-"&"9"9)"DL::7:+DZZ^Z4FOOD)9:OOF2BCg  	D #4YKr!BCC	D" Bs   :O! O>!O;c                6   U R                   (       d  UR                  5       (       a  gXR                  ;   a  U R                  XU5      $ UR	                  S S9nUR
                  b!  X@R                  ;   a  U R                  XU5      $ U R                  XS9(       aC  U R                  R                  US 5      nX R                  U'   US L =(       d    [        U5      U:g  $ UR
                  c"  UR                  5       nU R                  XU5      $ [        SU S35      e)NFr   )r  r  r  )r4  r   r/  r`  r   rv   accept_as_pending_optionr5  r  r-   r   r   )r   or  r  global_optionr  s         r:   set_user_optionOptionStore.set_user_option4  s    }}!1!1 ??11ABB D1<<#(E??11ABB(((N,,00D9I&/  #$CI)(CC\\!		A??11ABB #4QCr!:;;r9   c                `   SnUR                  5        H  u  p4Ub  X R                  X45      -  nM  X0R                  ;   a  U R                  U	 SnM=  U R                  U5      nX%R                  (       + =(       a    [        UR                  5      -  n[        UR                  5      Ul        M     U$ r   )itemsr  r3  get_value_objectr  r   r
  )r   D_argsdirtyr   valstrr   s         r:   set_from_configure_command&OptionStore.set_from_configure_commandU  s    !<<>KC!--c::mm#MM#& ++C0\\)>d3::.>>#CJJ/) ** r9   c                   [         R                  5        Hj  u  p4U R                  U   nUR                  nX$;  a  [        U   R
                  nO X;   a  XA   UR                  :X  a  XB   nOXB   nUR                  U5        Ml     g r   )r  r  r/  r   BUILTIN_OPTIONSr0   r"  )r   
old_prefix
new_prefixr  prefix_mappingr[  r  s          r:   r  "OptionStore.reset_prefixed_optionsn  sz    &B&H&H&J"F\\&)FI/+F3;;	/%1V\\A$2$>	 . :IY' 'Kr9   c                B    U R                  U5      nX R                  U'   g r   r:  r/  )r   r   
new_objects      r:   set_value_objectOptionStore.set_value_object~  s    **3/&Sr9   c                B    U R                  U5      nU R                  U   $ r   r  r9  s     r:   r  OptionStore.get_value_object  s!    **3/||C  r9   c                    U R                  U5      (       d   e [        R                  " S[        UR	                  S S9   R
                  5      $ ! [         a    [        SU S35      ef = f)Nr&   r   zRequested base option z which does not exist.)is_base_optionrW  rX  r*  r   r0   r   r   r9  s     r:   get_default_for_b_option$OptionStore.get_default_for_b_option  sp    ""3''''	Z6624I#**`d*Je4f4n4noo 	Z#&<SEAW$XYY	Zs   4A A)c                v    U R                   U	  U R                  R                  U5        g ! [         a     g f = fr   )r/  r0  remover   r9  s     r:   r  OptionStore.remove  s9    LL	  '', 		s   + 
88c                @    U R                  U5      nXR                  ;   $ r   r  r9  s     r:   __contains__OptionStore.__contains__  s    **3/ll""r9   c                ,    [        U R                  5      $ r   )reprr/  r   s    r:   r   OptionStore.__repr__  s    DLL!!r9   c                6    U R                   R                  5       $ r   )r/  r  r   s    r:   r  OptionStore.keys  s    ||  ""r9   c                6    U R                   R                  5       $ r   )r/  valuesr   s    r:   r  OptionStore.values  s    ||""$$r9   c                6    U R                   R                  5       $ r   )r/  r  r   s    r:   r  OptionStore.items  s    ||!!##r9   c                <    U R                   R                  " S0 UD6  g r   )r/  r  )r   r  s     r:   r  OptionStore.update  s    %f%r9   c                8    U R                   R                  X5      $ r   )r/  
setdefault)r   kr  s      r:   r  OptionStore.setdefault  s    ||&&q,,r9   c                <    U R                   R                  " X40 UD6$ r   )r/  r  )r   r  r0   r  s       r:   r  OptionStore.get  s    ||5f55r9   c                    XR                   ;   $ )z8Convenience method to check if this is a project option.)r0  r9  s     r:   rH  OptionStore.is_project_option  s    ****r9   c                r    UR                  S [        R                  S9[        ;   a  gU R	                  U5      $ )NrG  T)r   r   r   r  is_compiler_option)r   optnames     r:   is_per_machine_option!OptionStore.is_per_machine_option  s2    >>T=3E3E>FJee&&w//r9   c                    UR                   [        ;   a  gSUR                   ;  a  gUR                   R                  S5      S   nUS;   a  gX R                  ;   a  gg)NTr  Fr   )r  rW   )ru   _BUILTIN_NAMESr   r.  r   r   rU   s      r:   is_reserved_nameOptionStore.is_reserved_name  sW    88~%chh$Q' %%'''r9   c                X    UR                   [        ;   =(       d    U R                  U5      $ )z8Convenience method to check if this is a builtin option.)ru   r  is_module_optionr9  s     r:   r  OptionStore.is_builtin_option  s!    xx>)GT-B-B3-GGr9   c                8    UR                   R                  S5      $ )z5Convenience method to check if this is a base option.b_)ru   re  r9  s     r:   r  OptionStore.is_base_option  s    xx""4((r9   c                l    [        U[        5      (       a  UnOUR                  nUR                  S5      $ )z8Convenience method to check if this is a backend option.backend_)r   r-   ru   re  )r   r   ru   s      r:   is_backend_optionOptionStore.is_backend_option  s,    c3D88Dz**r9   c                    SUR                   ;  a  gUR                   R                  S5      S   nX R                  ;   a  gg)z9Convenience method to check if this is a compiler option.r  Fr   T)ru   r   r.  r  s      r:   r  OptionStore.is_compiler_option  s<     chh$Q''''r9   c                    XR                   ;   $ r   )r1  r9  s     r:   r  OptionStore.is_module_option  s    ))))r9   c                    S n0 nUR                  5        H=  u  pEUR                  S:X  a$  [        U[        5      (       d  [	        S5      eUnM9  XSU'   M?     X#4$ )NrU   z2Incorrect type for prefix option (expected string))r  ru   r   r-   r   )r   collrU   others_dr  rL  s         r:   prefix_split_options OptionStore.prefix_split_options  sZ    !JJLDAvv!!!S))()]^^ ! !!r9   c                L   [         R                   " U5      nS nU R                  U5      u  pgUc  UOUnUR                  [        S5      S 5      nUb  [	        U[
        5      (       d   S5       eUc  UOUnU R                  U5      u  piUc  UOUnUb  U R                  U5        XyU4$ )NrU   z0mypy: prefix from machine file was not a string?)copyr  r_  r'   r   r-   hard_reset_from_prefix)
r   project_default_optionscmd_line_optionsmachine_file_optionsnopref_machine_file_optionsrU   possible_prefixnopref_project_default_optionspossible_prefixvnopref_cmd_line_optionss
             r:   first_handle_prefixOptionStore.first_handle_prefix  s     '+ii0D&E#<@<U<UVm<n9*26::9X;NPTU':6F+L+L  	A  OA  	AL+39I595N5NO_5`2*2''/.Ideer9   c                d   U R                  U5      n[        R                  5        H`  u  p#U R                  U   nX;   a  X1   nO1[        U   R
                  n[        U[        5      (       d   S5       eUnUR                  U5        Mb     U R                  [        S5         R                  U5        g )Nr{  rU   )
r|  r  r  r/  r  r0   r   r-   r"  r'   )r   rU   r  r  r[  r  _vs          r:   r  "OptionStore.hard_reset_from_prefix  s    %%f-&B&H&H&J"F\\&)F'*2	$V,44!"c**6J6*	Y' 'K 	Yx()33F;r9   c                   U R                  UUU5      u  pEnUR                  5        H`  u  pxU R                  (       d  UR                  5       (       a  M-  UR                  (       a  XR
                  U'   MN  U R                  XxS5        Mb     UR                  5        HR  u  pxU R                  (       d  UR                  5       (       a  M-  UR                  (       a  M@  U R                  XxS5        MT     UR                  5        HR  u  pxU R                  (       d  UR                  5       (       a  M-  UR                  (       a  M@  U R                  XxS5        MT     g )NT)r  r  r4  r   rv   r6  r  )	r   project_default_options_incmd_line_options_inmachine_file_options_inr  r  r  r   r  s	            r:   &initialize_from_top_level_project_call2OptionStore.initialize_from_top_level_project_call  s    MQLdLdeexe|M~I	 4H 388:KC ==S%5%5%7%7~~ 8>//4 $$S$7 ;$ 0557KC ==S%5%5%7%7>>>$$S$7 8 ,113KC ==S%5%5%7%7>>>$$S$7 4r9   c                    U R                  U5      (       a  gU(       a  U R                  U5      (       a  gU R                  U5      =(       a%    UR                  S [        R
                  S9[        ;   $ )NTrG  )r  r  r  r   r   r   r*  )r   r   r  s      r:   r  $OptionStore.accept_as_pending_option<  sd     ""3'' 6 6s ; ;##C( a

dM4F4F
GK``	br9   c                   / nUR                  5        HC  u  p4X0R                  ;   d  M  U R                  U5      (       a  M.  UR                  SU S35        ME     U(       a  SR	                  U5      n[        SU 35      eg )Nrz  r   zUnknown options: )r  r5  r  rP  rQ  r   )r   r  unknown_optionsr   r  r  s         r:   validate_cmd_line_options%OptionStore.validate_cmd_line_optionsF  sz    +113KC***43P3PQT3U3U&&3%qz2 4 99_-D #4TF!;<< r9   c                   0 nUR                  5        HV  u  pxUR                  U:X  a!  UR                  S S9n	[        SU	 SU S35      eUR                  c  UR                  US9nXU'   MX     U R                  R                  5        H  u  pxUR                  U:X  d  M  XU'   M     UR                  5        HV  u  pxUR                  U:X  a!  UR                  S S9n	[        SU	 SU S35      eUR                  c  UR                  US9nXU'   MX     [
        R                  " UR                  5       UR                  5       5       Hw  u  pxUR                  b  M  U R                  UR                  5       5      (       a  M:  UR                  US9n
U R                  R                  U
S 5        UR                  U
S 5        My     [
        R                  " UR                  5       UR                  5       5       H  u  pxUR                  U:X  d  M  XU'   M     UR                  5        H  u  pxUR                  U:w  aX  UR                  U R                  ;   a.  U R                  Xx5      (       d  [        R                  " S5        M]  XR                  U'   Mm  U R                  R                  US 5        U R                  R                  US 5        XpR                  ;  d  M  U R!                  XxS5        M     U R                  R#                  U5        g )Nr   z4subproject name not needed in default_options; use "z" instead of "rz  zMoption {key} is set in subproject {subproject} but has already been processedT)r  rv   r   r   r6  	itertoolsr   rH  r   r_  r  rT  r   warningr5  r3  r  rk  )r   rv   spcall_default_optionsr  r  r  r/  r   r  without_subpsubp_keys              r:   initialize_from_subproject_call+OptionStore.initialize_from_subproject_callP  s    ! 388:KC~~+"zzTz:$'[\h[iiwx{w||}%~~~%jjJj7!CL ;  ::@@BKC~~+% C
 2779KC~~+"zzTz:$'[\h[iiwx{w||}%~~~%jjJj7!CL : %??+?+E+E+GIYI_I_IabKC~~%d.D.DS[[].S.S:::<//33HdCHd+	 c %??+?+E+E+GIYI_I_IabKC~~+% c
 #==?KC~~+>>T%5%55d>S>STW>`>`LL!pq 8>//4++//T:  $$S$/--'$$S$7 + 	Z(r9   c           	     (   UR                  5        H  u  p4X0R                  ;  a  U R                  X45        M'  UR                  U:w  a  [	        SUR                   SU S35      eU R                  U5      n[        U5      [        U5      La  U R                  X4R                  5        M  [        XT5      (       d  M  U R                  X45         UR                  UR                  5        M     U R                  R                  5       UR                  5       -
  nU H>  nU R!                  U5      (       d  M  UR                  U:X  d  M-  U R#                  U5        M@     g ! [         a+    [        R                  " SU SUR                   S3SS9   GM  f = f)	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)r  r/  rm  rv   r   r  rj  r`  r   r  r  r"  r   r   r  r  rH  r  )r   r0  rv   r   r   oldvalpotential_removed_keyss          r:   update_project_options"OptionStore.update_project_options  sV   )//1JC,,&''3~~+'*PQTQ_Q_P``fgqfrrs(tuu**3/FF|4;.[[1&v55 %%c1.OOFLL1! 2, "&!2!2!47K7K7M!M)C%%c**s~~/KC  * & .LL#3C58dejepepdqqs!t',..s   E0FF)	r.  r3  r4  r1  r/  r5  r6  r0  r  )r4  r   r   r   )r   T.Union[OptionKey, str]r   r'   r   )r   r  r0   z"T.Optional[ElementaryOptionValues]r   r&   )r   r  r   r&   r   )r   'T.Union[OptionKey, str]'r   r%   )r   r'   r   z.T.Tuple[AnyOptionType, ElementaryOptionValues])r   r'   r   r&   r   r   )ru   r  rv   ry   r   r&   )r   r  r[  r%   r   r   )r   r'   r[  r%   r   r   )rf  r-   r   r  r[  r%   r   r   )rp  r-   r   r  r[  r%   r   r   )rU   r-   r   r-   )rU   r-   r  r'   r   r   r   r   )F)r   r'   r  r&   r  r   r   r   )r  r'   r  r&   r  r   r   r   )r  z"T.Dict[OptionKey, T.Optional[str]]r   r   )r  r-   r  r-   r   r   )r   r  r  r%   r   r   )r   r  r   r%   )r   r'   r   r&   )r   r'   r   r   )r   zT.Union[str, OptionKey]r   r   r   )r   zT.KeysView[OptionKey])r   zT.ValuesView[AnyOptionType])r   z)T.ItemsView['OptionKey', 'AnyOptionType'])r  r%   r   r   )r  r'   r  r%   r   r%   )r  r'   r0   T.Optional[AnyOptionType]r  r   r   r  )r   r'   r   r   )r  r'   r   r   )r  r  r   z$T.Tuple[T.Optional[str], OptionDict])r  r  r  r  r  r  r   z+T.Tuple[OptionDict, OptionDict, OptionDict])rU   r-   r   r   )r  r  r  r  r  r  r   r   )r   r'   r  r   r   r   )r  r  r   r   )rv   r-   r  r  r  r  r  r  r  r  r   r   )r0  r(   rv   r   r   r   )6r3   r4   r5   r6   r  r  r:  r=  rA  rD  rK  rP  rT  r@  r\  rZ  rg  rm  rq  r|  r  r`  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  rH  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r8   r2   r9   r:   r,  r,    s   #3#.,7%1%0	9 "6'!"
)>5+$,'2%" @CJ<B2( '!Z#"#%$&-6+0
H)+	*
"f5?f.8f 3=f ;	f.<&8KU&8DN&8 IS&8 X\&8Pb=?)47?)@J?) BL?) ;E	?)
 ?I?)
 NR?)B!r9   r,  )r  r  r  r  r   r   )ru   r-   r   r-   )r{   )r   r%   ru   r'   rU   r-   r   r&   )
r  r%   ru   r'   r  zargparse.ArgumentParserr  r-   r   r   )`
__future__r   collectionsr   r  r   r  r  r)  rw  r  typingrW  mesonlibr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r{   r   r[  typing_extensionsr   r   r   r   interpreterbaser   Unionr   r-   DictListr   r7   r%   rz   r&   r(   TupleOptionalr)   r+   r(  TypeVarr<   backendlistgenvslitelistbuildtypelistr  r   rr   r'   r  	dataclassGenericr  r,  r#   r   rG  r    rd  r$   r   r  r"   r   r  r  r!   r  r  r  ru   r  rX  r  r  r  r  r  
MSCRT_VALSr*  r,  )r  s   0r:   <module>r1     s  
 # #      	      " ??FF+ !c166#s(3CQVVC[(P QNIQ ww	. /M9 / )*S$s0K(LIL,-FF;3M,N	N!"C-)L!MOYMiu    YYt_t
T
&P 
79 4 9D3 D3L ??FF9.D#DEJ	E(&2 (& (&T .:b> . .z#  d,T2 d d&#z"~ #@ 	}(- 	} 	}s  O&qww/Dh/N'OP O O, *3/  $ .j, . .$ OC0  > $ $ $  YYt:&,;]O ;]|)=F6 	#8.:JK#95A$9?;LM'>@R@TU$9?;LM#68HI';R@'EGYG[\&=?P?RS*EuM#:N<LM$A?CTU)+TV[\'?ASAUV#<#QIaffq #< 8 ( #$&&)@/+RTZ[	#3Wk\`a|!	
 	%8'=Y'#OQUV)+A8Uq!&	(02[]e <	>+'UW[\)cemnsetu":HxY_N`a(<cKrs/+`bgh*&LdS'#=uE?[\,(:AK)H#Wy!&	(($>PUV[)  FK  	L24Z\^_'#GY]^ 	13\^cd 	.0Mq\^jkl,.VX` D	F,.egij,.ikmn46fhlmS*C *#,=*#QIaffq *#,= 9 ,\ e$7$=$=$?AUA[A[A]^_ 	/1dfhi13dfhi#D#QIaffq #D @  l&&!1o&L!Q*DT!U!"B!"BE A  0
 #$&&)@'#<dC'#?G/+\^_`&KYajlr`st+-eglm.0Z\^_l,CRH*&KTR,(JDQ6Ga	c,(CUK.B]	_)7<[	]-)Y[_`'#NPUV+'Y[`a9;K"24K!LL	N)C #>#QIaffq #> : 6L
! L
!c<&,=`D&>s   ?Z#7Z(Z-3Z2