o
    uJAfv                     @  s  U d dl mZ d dlZddlmZmZ d dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZ d dlmZmZ d dlm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"m#Z#m$Z$m%Z%m&Z&m'Z'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l0Z1e1j2rddlm3Z3 ddl4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z: ddl;m<Z< ddlm=Z= ddl>m?Z? e1j@e1jAeBdf df ZCe1jAd ZDe1j@eDdf ZEe1jFe1jFeBdf eBe=e1jFeBdf e8f ZGe1jFeBe1jFeBdf f ZHe1j@eBeIejJeB ejJeI f ZKdZLeLZMeMNdr!eMOdZPdePd< eBeQePd d ePd< dRePZMg dZSdgZTg dZUdZVe1WdZXdd"d#ZYG d$d% d%eZZG d&d' d'e1j[eX eZ\G d(d) d)e\eB Z]G d*d+ d+e\e^ Z_G d,d- d-e\eQ Z`G d.d/ d/eQZaG d0d1 d1e`e\e1j@eBeaf  ZbG d2d3 d3e\eB ZcG d4d5 d5e\e1jdeB  ZeG d6d7 d7ecZfG d8d9 d9ecZgeG d:d dejhZiG d;d< d<e.jjZkG d=d> d>ZlG d?d@ d@ZmG dAdB dBZne1WdCZoG dDdE dEZpG dFdG dGe-jqZrG dHdI dIZsddNdOZtddQdRZuddVdWZvddXdYZwddZd[Zxdd\d]ZyddadbZzdd dedfZ{ddhdiZ|ddldmZ}dddqdrZ~ddtduZe1jWdve\eX dwZG dxdy dye1j[eXef Zee%dzee]d{e fe%d|ee]d}d~fe%dee]de fe%dee]de fe%dee]de fe%dee]de fe%dee]ddnfe%dee]de fe%dee]de  fe%dee]ddfe%dee]de! fe%dee]de" fe%dee]ddfe%dee]de# fgZded< ee%deefddfe%deecddeSdcdfe%deecddeTdfe%deecddeUdfe%dee_ddcfe%deecddg dddfe%dee_ddcfe%deebddfe%deecddddgdfe%deecddg ddfe%dee_ddfe%dee_ddcfe%dee_ddfe%deecddg dâdfe%dăee`ddƃfe%dǃeecddg dʢddfe%d˃ee_dddd͍fe%d΃eecddg dѢdfe%d҃eeedg fe%dԃee_dddcd֍fe%dddٍee_ddfe%dddٍee`ddރfe%dddٍeecddzg ddfe%dddٍee]ddnfe%dddٍee]ddnfe%dddٍee_ddcfgZded< eee e Zee%deeedg fe%deeedg fgZded< e%dddie%dddde%dddde%dddٍi e%dddٍi iZded< eh dZdS (      )annotationsN   )mlogmparser)chain)PurePath)OrderedDictabc)	dataclass)HoldableObjectMesonExceptionEnvironmentExceptionMachineChoice
PerMachinePerMachineDefaultabledefault_libdirdefault_libexecdirdefault_prefixdefault_datadirdefault_includedirdefault_infodirdefault_localedirdefault_mandirdefault_sbindirdefault_sysconfdir
split_args	OptionKey
OptionTypestringlistifypickle_load)WrapMode)dependencies)CompilerCompileResult	RunResultCompileCheckMode)TV_DepID)Environment)FileOrString)CMakeCacheEntryUserOption[T.Any]OptionsView)r   r*   .z1.3.1z.99.0)ninjavsZvs2010Zvs2012Zvs2013Zvs2015Zvs2017Zvs2019vs2022Zxcodenoner2   )plaindebugdebugoptimizedreleaseminsizecustomF_Treturn	list[str]c                   C  s   t dd S )Nr   r/   )buildtypelist r>   r>   8/usr/lib/python3.10/site-packages/mesonbuild/coredata.py get_genvs_default_buildtype_listV   s   r@   c                      s$   e Zd ZdZdd fd	d
Z  ZS )MesonVersionMismatchExceptionzQBuild directory generated with Meson version is incompatible with current version old_versionstrcurrent_version	extra_msgr;   Nonec                   s.   t  d| d| d|  || _|| _d S )Nz6Build directory has been generated with Meson version z1, which is incompatible with the current version r,   )super__init__rC   rE   )selfrC   rE   rF   	__class__r>   r?   rI   ^   s   
z&MesonVersionMismatchException.__init__rB   )rC   rD   rE   rD   rF   rD   r;   rG   )__name__
__module____qualname____doc__rI   __classcell__r>   r>   rK   r?   rA   \   s    rA   c                      sJ   e Zd Z	dd fd
dZdddZdddZdddZd ddZ  ZS )!
UserOptionFdescriptionrD   choices$T.Optional[T.Union[str, T.List[_T]]]yieldingbool
deprecated1T.Union[bool, str, T.Dict[str, str], T.List[str]]c                   s>   t    || _|| _t|tstd|| _|| _d| _	d S )Nz&Value of "yielding" must be a boolean.F)
rH   rI   rU   rT   
isinstancerX   r   rW   rY   readonly)rJ   rT   rU   rW   rY   rK   r>   r?   rI   g   s   


zUserOption.__init__valueT.Anyr;   T.List[T.Any]c                 C  s   |gS Nr>   rJ   r]   r>   r>   r?   listifys      zUserOption.listify8T.Union[str, int, bool, T.List[T.Union[str, int, bool]]]c                 C  s   t | jttttfsJ | jS r`   )r[   r]   rD   intrX   listrJ   r>   r>   r?   printable_valuev   s   zUserOption.printable_valuer:   c                 C  s   t d)Nz5Derived option class did not override validate_value.)RuntimeErrorra   r>   r>   r?   validate_value}      zUserOption.validate_valuenewvaluec                 C  s"   t | dd }| || _| j|kS )Nr]   )getattrrj   r]   )rJ   rl   Zoldvaluer>   r>   r?   	set_value   s   
zUserOption.set_valueF)rT   rD   rU   rV   rW   rX   rY   rZ   r]   r^   r;   r_   )r;   rd   )r]   r^   r;   r:   )rl   r^   r;   rX   )	rN   rO   rP   rI   rb   rh   rj   rn   rR   r>   r>   rK   r?   rS   f   s    


rS   c                      s.   e Zd Zedfd fd
dZdddZ  ZS )UserStringOptionFrT   rD   r]   r^   rW   rX   rY   rZ   c                   s    t  |d || | | d S r`   rH   rI   rn   rJ   rT   r]   rW   rY   rK   r>   r?   rI      s   zUserStringOption.__init__r;   c                 C  s   t |tstdt| |S )Nz-Value "%s" for string option is not a string.)r[   rD   r   ra   r>   r>   r?   rj      s   
zUserStringOption.validate_valuerT   rD   r]   r^   rW   rX   rY   rZ   r]   r^   r;   rD   rN   rO   rP   DEFAULT_YIELDINGrI   rj   rR   r>   r>   rK   r?   rq      s
    rq   c                      s8   e Zd Zedfd fd	d
ZdddZdddZ  ZS )UserBooleanOptionFrT   rD   r]   rX   rW   rY   rZ   c                   s$   t  |ddg|| | | d S NTFrr   rs   rK   r>   r?   rI      s   zUserBooleanOption.__init__r;   c                 C  s   | j S r`   r]   rg   r>   r>   r?   __bool__   rc   zUserBooleanOption.__bool__r^   c                 C  sT   t |tr|S t |tstd| d| dkrdS | dkr$dS td| )NzValue z! cannot be converted to a booleantrueTfalseFz(Value %s is not boolean (true or false).)r[   rX   rD   r   lowerra   r>   r>   r?   rj      s   

z UserBooleanOption.validate_value)rT   rD   r]   rX   rW   rX   rY   rZ   r;   rX   )r]   r^   r;   rX   )rN   rO   rP   rw   rI   r{   rj   rR   r>   r>   rK   r?   rx      s    
rx   c                      s8   e Zd Zedfd fd
dZdddZdddZ  ZS )UserIntegerOptionFrT   rD   r]   r^   rW   rX   rY   rZ   c           
        sx   |\}}}|| _ || _g }|d ur|dt|  |d ur'|dt|  d|}	t ||	|| | | d S )Nz>=z<=, )	min_value	max_valueappendrD   joinrH   rI   rn   )
rJ   rT   r]   rW   rY   r   r   default_valuecrU   rK   r>   r?   rI      s   

zUserIntegerOption.__init__r;   re   c                 C  sv   t |tr
| |}t |tstd| jd ur&|| jk r&td|| jf | jd ur9|| jkr9td|| jf |S )Nz/New value for integer option is not an integer.z+New value %d is less than minimum value %d.z+New value %d is more than maximum value %d.)r[   rD   tointre   r   r   r   ra   r>   r>   r?   rj      s   


z UserIntegerOption.validate_valuevaluestringc                 C  s&   zt |W S  ty   td| w )Nz3Value string "%s" is not convertible to an integer.re   
ValueErrorr   )rJ   r   r>   r>   r?   r      s
   
zUserIntegerOption.tointrt   )r]   r^   r;   re   )r   rD   r;   re   )rN   rO   rP   rw   rI   rj   r   rR   r>   r>   rK   r?   r      s    
r   c                   @  s   e Zd Zdd ZdS )OctalIntc                 C  s   t t| S r`   )octre   rg   r>   r>   r?   __str__   s   zOctalInt.__str__N)rN   rO   rP   r   r>   r>   r>   r?   r      s    r   c                      sF   e Zd Zedfd fd
dZdddZd fddZdddZ  ZS )UserUmaskOptionFrT   rD   r]   r^   rW   rX   rY   rZ   c                   s&   t  |dd|f|| ddg| _d S )Nr   i  preservez	0000-0777)rH   rI   rU   rs   rK   r>   r?   rI      s   zUserUmaskOption.__init__r;   c                 C  s   | j dkr| j S t| j dS )Nr   Z04o)r]   formatrg   r>   r>   r?   rh      s   
zUserUmaskOption.printable_valueT.Union[str, OctalInt]c                   s   |dkrdS t t |S )Nr   )r   rH   rj   ra   rK   r>   r?   rj      s   zUserUmaskOption.validate_valuer   re   c              
   C  s4   zt |dW S  ty } ztd| d }~ww )N   zInvalid mode: r   )rJ   r   er>   r>   r?   r      s   zUserUmaskOption.tointrt   )r;   rD   )r]   r^   r;   r   )r   r   r;   re   )	rN   rO   rP   rw   rI   rh   rj   r   rR   r>   r>   rK   r?   r      s    
r   c                      s.   e Zd Zedfd fddZdddZ  ZS )UserComboOptionFrT   rD   rU   T.List[str]r]   r^   rW   rX   rY   rZ   c                   sR   t  |||| t| jtstd| jD ]}t|ts!tdq| | d S )NzCombo choices must be an array.z&Combo choice elements must be strings.)rH   rI   r[   rU   rf   r   rD   rn   )rJ   rT   rU   r]   rW   rY   irK   r>   r?   rI      s   

zUserComboOption.__init__r;   c                 C  sb   || j vr/t|trd}nt|ttfrd}nd}ddd | j D }td||| j||S )NZbooleanZnumberstringr   c                 S  s   g | ]}d | d qS )"r>   ).0itemr>   r>   r?   
<listcomp>   s    z2UserComboOption.validate_value.<locals>.<listcomp>zpValue "{}" (of type "{}") for combo option "{}" is not one of the choices. Possible choices are (as string): {}.)	rU   r[   rX   re   floatr   r   r   rT   )rJ   r]   _typeZoptionsstringr>   r>   r?   rj      s   


zUserComboOption.validate_value)
rT   rD   rU   r   r]   r^   rW   rX   rY   rZ   ru   rv   r>   r>   rK   r?   r      s
    r   c                      sX   e Zd Zddeddfd fddZed d!ddZd"ddZd#ddZd$ddZ	  Z
S )%UserArrayOptionFNrT   rD   r]   T.Union[str, T.List[str]]r   rX   
allow_dupsrW   rU   T.Optional[T.List[str]]rY   rZ   c                   s8   t  ||d ur
|ng || || _|| _| | d S r`   )rH   rI   r   r   rn   )rJ   rT   r]   r   r   rW   rU   rY   rK   r>   r?   rI      s   zUserArrayOption.__init__shlex_split_argsr;   r   c                 C  s   t | tr=| dr!zt| }W |S  ty    td|  w | dkr)g }|S |r1t| }|S dd | dD }|S t | t	rF| }|S td|  d)	N[zmalformed option rB   c                 S  s   g | ]}|  qS r>   )stripr   vr>   r>   r?   r         z1UserArrayOption.listify_value.<locals>.<listcomp>,r   z)" should be a string array, but it is not)
r[   rD   
startswithastliteral_evalr   r   r   splitrf   )r]   r   rl   r>   r>   r?   listify_value  s(   



zUserArrayOption.listify_valuer^   r_   c                 C  s   |  || jS r`   )r   r   ra   r>   r>   r?   rb        zUserArrayOption.listifyc                   s     |} jstt|t|krd}t| |D ]}t|ts*td|dq j	rH fdd|D }|rHtd
d|d j	|S )Nz]Duplicated values in array option is deprecated. This will become a hard error in the future.zString array element "z" is not a string.c                      g | ]	}| j vr|qS r>   rU   r   xrg   r>   r?   r   )      z2UserArrayOption.validate_value.<locals>.<listcomp>z-Options "{}" are not in allowed choices: "{}"r   )rb   r   lensetr   deprecationr[   rD   r   rU   r   r   )rJ   r]   rl   msgr   Zbadr>   rg   r?   rj     s   


zUserArrayOption.validate_valuerG   c                 C  s   |  |}| | j|  dS )z*Extend the value with an additional value.N)rj   rn   r]   )rJ   r]   newr>   r>   r?   extend_value/  s   
zUserArrayOption.extend_value)rT   rD   r]   r   r   rX   r   rX   rW   rX   rU   r   rY   rZ   ro   )r]   r   r   rX   r;   r   rp   )r]   r   r;   r   )r]   r   r;   rG   )rN   rO   rP   rw   rI   staticmethodr   rb   rj   r   rR   r>   r>   rK   r?   r      s    


r   c                      sJ   e Zd Zg dZedfd fddZdddZdddZdddZ  Z	S )UserFeatureOption)enableddisabledautoFrT   rD   r]   r^   rW   rX   rY   rZ   c                   s    t  || j||| d | _d S r`   )rH   rI   static_choicesnamers   rK   r>   r?   rI   8  s   
zUserFeatureOption.__init__r;   c                 C  
   | j dkS )Nr   rz   rg   r>   r>   r?   
is_enabled=     
zUserFeatureOption.is_enabledc                 C  r   )Nr   rz   rg   r>   r>   r?   is_disabled@  r   zUserFeatureOption.is_disabledc                 C  r   )Nr   rz   rg   r>   r>   r?   is_autoC  r   zUserFeatureOption.is_autort   r   )
rN   rO   rP   r   rw   rI   r   r   r   rR   r>   r>   rK   r?   r   5  s    

r   c                      s8   e Zd ZdZd fdd	ZddddZdddZ  ZS )UserStdOptionaQ  
    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.
    langrD   all_stdsr   r;   rG   c                   s8   |  | _dg| | _i | _t | ddgd d S )Nr3   z language standard to use)r~   r   r   deprecated_stdsrH   rI   )rJ   r   r   rK   r>   r?   rI   T  s   
zUserStdOption.__init__FversionsgnurX   gnu_deprecatedc                   sh   t  fdd|D sJ   j|7  _|r2dd |D }|r' j| d S   j| 7  _d S d S )Nc                 3  s    | ]}| j v V  qd S r`   r   r   stdrg   r>   r?   	<genexpr>\  s    z-UserStdOption.set_versions.<locals>.<genexpr>c                 S  s    i | ]}d |dd  |qS )r   r   Nr>   r   r>   r>   r?   
<dictcomp>_       z.UserStdOption.set_versions.<locals>.<dictcomp>)allrU   r   updatekeys)rJ   r   r   r   Zgnu_stds_mapr>   rg   r?   set_versions[  s   zUserStdOption.set_versionsr]   r   c              	     s   t |} fdd|D }|r"td j  d| d j d|D ]}| jv r/|  S q$|D ],} j|}|d ur^t	
d| d j d	d
| d| d d d d  |  S q2td| d j  dd j  )Nc                   r   r>   r   r   rg   r>   r?   r   g  r   z0UserStdOption.validate_value.<locals>.<listcomp>zUnknown z std 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 the future.
zEIf the project supports both GNU and MSVC compilers, a value such as
zY"c_std=gnu11,c11" specifies that GNU is prefered but it can safely fallback to plain c11.zNone of values z compiler. zPossible values are )r   r   r   r   upperr   rU   r   getr   r   )rJ   r]   Z
candidatesunknownr   Znewstdr>   rg   r?   rj   e  s6   
$

zUserStdOption.validate_value)r   rD   r   r   r;   rG   )FF)r   r   r   rX   r   rX   r;   rG   )r]   r   r;   rD   )rN   rO   rP   rQ   rI   r   rj   rR   r>   r>   rK   r?   r   F  s
    
r   c                   @  sP   e Zd ZU dZded< dZded< dZded< dddZdddZdddZ	dS )r+   zOA view on an options dictionary for a given subproject and with overrides.
    KeyedOptionDictTypeoptionsNT.Optional[str]
subprojectzFT.Optional[T.Mapping[OptionKey, T.Union[str, int, bool, T.List[str]]]]	overrideskeyr   r;   rS   c                 C  s   |j | jd}| s | j|}|d u s|jr| j|  }n| j| }|jr1| j| |}| jrJ| j| }|d urJt|}|	| |S )Nr   )
evolver   
is_projectr   r   rW   as_rootr   copyrn   )rJ   r   optZoverride_valuer>   r>   r?   __getitem__  s   


zOptionsView.__getitem__T.Iterator[OptionKey]c                 C  
   t | jS r`   )iterr   rg   r>   r>   r?   __iter__  r   zOptionsView.__iter__re   c                 C  r   r`   )r   r   rg   r>   r>   r?   __len__  r   zOptionsView.__len__)r   r   r;   rS   )r;   r   )r;   re   )
rN   rO   rP   rQ   __annotations__r   r   r   r   r   r>   r>   r>   r?   r+   |  s   
 

c                   @  s&   e Zd ZdZdZdZeddd	Zd
S )DependencyCacheTyper   r      dep'dependencies.Dependency'r;   'DependencyCacheType'c                 C  s&   |j dkr| jS |j dkr| jS | jS )N	pkgconfigcmake)	type_name
PKG_CONFIGCMAKEOTHER)clsr   r>   r>   r?   	from_type  s
   

zDependencyCacheType.from_typeN)r   r   r;   r   )rN   rO   rP   r   r   r   classmethodr   r>   r>   r>   r?   r     s    r   c                   @  s>   e Zd ZdddZdd	d
ZdddZdddZdddZdS )DependencySubCachetype_r   c                 C  s   |g| _ i | _d S r`   )types_DependencySubCache__cache)rJ   r   r>   r>   r?   rI     s   
zDependencySubCache.__init__r   T.Tuple[str, ...]r;   r   c                 C  s
   | j | S r`   r   rJ   r   r>   r>   r?   r     r   zDependencySubCache.__getitem__r]   rG   c                 C  s   || j |< d S r`   r  )rJ   r   r]   r>   r>   r?   __setitem__  r   zDependencySubCache.__setitem__rX   c                 C  s
   || j v S r`   r  r  r>   r>   r?   __contains__  r   zDependencySubCache.__contains__%T.Iterable['dependencies.Dependency']c                 C  s
   | j  S r`   )r   valuesrg   r>   r>   r?   r    r   zDependencySubCache.valuesN)r   r   )r   r   r;   r   )r   r   r]   r   r;   rG   )r   r   r;   rX   )r;   r  )rN   rO   rP   rI   r   r  r  r  r>   r>   r>   r?   r     s    



r   c                   @  sj   e Zd ZdZd&ddZd'ddZd(ddZd)ddZd*ddZd+ddZ	d(ddZ
d,d!d"Zd-d#d$Zd%S ).DependencyCachezClass that stores a cache of dependencies.

    This class is meant to encapsulate the fact that we need multiple keys to
    successfully lookup by providing a simple get/put interface.
    builtins'KeyedOptionDictType'for_machiner   c                 C  s.   t  | _|| _td|d| _td|d| _d S )Npkg_config_path)machinecmake_prefix_path)r   _DependencyCache__cache_DependencyCache__builtinsr   _DependencyCache__pkg_conf_key_DependencyCache__cmake_key)rJ   r  r
  r>   r>   r?   rI     s   zDependencyCache.__init__r   r   r;   r   c                 C  sN   t jt| j| j jt jt| j| j jt jg i}||v s!J dt	|| S )Nz;Someone forgot to update subkey calculations for a new type)
r   r   r   r  r  r]   r   r  r   tuple)rJ   r   datar>   r>   r?   Z__calculate_subkey  s   z"DependencyCache.__calculate_subkeyT.Iterator['TV_DepID']c                 C  s   |   S r`   )r   rg   r>   r>   r?   r     rk   zDependencyCache.__iter__r   
'TV_DepID'r   r   rG   c                 C  s>   t |}|| jvrt|| j|< | |}|| j| |< d S r`   )r   r   r  r   "_DependencyCache__calculate_subkey)rJ   r   r   tsubkeyr>   r>   r?   put  s
   


zDependencyCache.put%T.Optional['dependencies.Dependency']c              	   C  s^   z| j | }W n
 ty   Y dS w |jD ]}| |}z|| W   S  ty,   Y qw dS )zdGet a value from the cache.

        If there is no cache entry then None will be returned.
        N)r  KeyErrorr   r  )rJ   r   valr  r  r>   r>   r?   r     s   

zDependencyCache.get%T.Iterator['dependencies.Dependency']c                 c  s$    | j  D ]	}| E d H  qd S r`   )r  r  )rJ   r   r>   r>   r?   r    s   zDependencyCache.valuesc                 C     t | j S r`   )r   r  r   rg   r>   r>   r?   r     r   zDependencyCache.keysBT.Iterator[T.Tuple['TV_DepID', T.List['dependencies.Dependency']]]c                 c  sT    | j  D ]!\}}g }|jD ]}| |}||v r!|||  q||fV  qd S r`   )r  itemsr   r  r   )rJ   kr   r1   r  r  r>   r>   r?   r     s   

zDependencyCache.itemsc                 C  s   | j   d S r`   )r  clearrg   r>   r>   r?   r"    r   zDependencyCache.clearN)r  r	  r
  r   )r   r   r;   r   )r;   r  )r   r  r   r   r;   rG   )r   r  r;   r  )r;   r  )r;   r  r;   rG   )rN   rO   rP   rQ   rI   r  r   r  r   r  r   r   r"  r>   r>   r>   r?   r    s    


	




	r  c                   @  sF   e Zd ZdZdddZdddZdd	d
ZdddZedddZ	dS )CMakeStateCachezClass that stores internal CMake compiler states.

    This cache is used to reduce the startup overhead of CMake by caching
    all internal CMake compiler variables.
    r;   rG   c                 C  s   i | _ i | _d S r`   )_CMakeStateCache__cachecmake_cacherg   r>   r>   r?   rI     s   
zCMakeStateCache.__init__2T.Iterator[T.Tuple[str, T.Dict[str, T.List[str]]]]c                 C  r  r`   r   r%  r   rg   r>   r>   r?   r     r   zCMakeStateCache.__iter__c                 C  r  r`   r(  rg   r>   r>   r?   r     r   zCMakeStateCache.itemslanguagerD   	variablesT.Dict[str, T.List[str]]c                 C  s(   || j vr
i | j |< | j | | d S r`   )r%  r   )rJ   r)  r*  r>   r>   r?   r     s   

zCMakeStateCache.update
T.Set[str]c                 C  r  r`   )r   r%  r   rg   r>   r>   r?   	languages   s   zCMakeStateCache.languagesNr#  )r;   r'  )r)  rD   r*  r+  )r;   r,  )
rN   rO   rP   rQ   rI   r   r   r   propertyr-  r>   r>   r>   r?   r$  
  s    



r$  _Vc                   @  s  e Zd Zd^ddZed_ddZdd Zd`ddZdaddZdbddZ	edcd!d"Z
ddd$d%Zded'd(Zdfdgd,d-Zdhd.d/Zdid1d2Zdjd3d4Zedkd6d7Zdld;d<Zdld=d>Zdmd?d@ZejfdndBdCZdodDdEZdpdqdHdIZdrdNdOZdsdPdQZdtdTdUZdudWdXZdvd[d\Zd]S )wCoreDatar   argparse.Namespacescratch_dirrD   meson_commandr   c                 C  s   dddddd| _ tt  | _tt  | _tt  | _|| _i | _	t
| _
i | _| ||d| _tt t | _t | _t|  t| jtjt| jtj| _t | _t | _tt t | _| ||d| _|    | !d d S )Nz$8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942z$3AC096D0-A1C2-E12C-1390-A8335801FDABz$2150E333-8FDC-42A3-9474-1A3956D46DE8)defaultr   cpptestZ	directorycrossnativerB   )"Z
lang_guidsrD   uuiduuid4r   Z	test_guidZ
regen_guidZinstall_guidr3  Ztarget_guidsversionr   _CoreData__load_config_filescross_filesr   r   	compilersr   Zinitialized_subprojectsr   r4  is_cross_buildr  r   BUILDHOSTdepscompiler_check_cacherun_check_cacher$  r&  Zconfig_files"builtin_options_libdir_cross_fixupinit_builtins)rJ   r   r2  r3  r>   r>   r?   rI   .  s6   zCoreData.__init__ftyper;   c              
   C  s  |dkr| j }n| j}|sg S g }g }g }t|D ]\}}tjtj|}tj|rtj|r=|	tj
| qtj|rM|	tj
| nMtj|t  d| d}	t|dd&}
t|	ddd}||
  W d    n1 s|w   Y  W d    n1 sw   Y  |	|	 |	||< qtjdkrtjdtjd	gtjd
dd }|D ]}tj|d||}tj|r|	|  nq|	| q|	| q|r|rtjd|dg|R   tjd|dg|R   td| d| |S )Nr7  r,   z.iniutf-8encodingwwin32ZXDG_DATA_HOMEz~/.local/shareZXDG_DATA_DIRSz/usr/local/share:/usr/share:mesonzFound invalid candidates forzfile:z&Could not find any valid candidate forzfiles:zCannot find specified z file: )
cross_filenative_file	enumerateospath
expanduser
expandvarsexistsisfiler   abspathisdirr   r9  r:  openwritereadsysplatformenvironr   r   r   logr   )r   r2  rG  	filenamesZfound_invalidmissingrealr   fr   ZrfZwfpathsrS  Zpath_to_tryr>   r>   r?   Z__load_config_filesV  s\   



zCoreData.__load_config_filesc                 C  s   | j rdttd _d S d S )Nliblibdir)r=  BUILTIN_OPTIONSr   r4  rg   r>   r>   r?   rE    s   z+CoreData.builtin_options_libdir_cross_fixupprefixc                 C  s|   t j|}t j|std|d|ds|dr<t|dkr-|d dkr-	 |S t|dkr6	 |S |d d }|S )	Nzprefix value z must be an absolute path/\   r   rM  r.   )rR  rS  rT  isabsr   endswithr   )rJ   ri  r>   r>   r?   sanitize_prefix  s   zCoreData.sanitize_prefixoptionr   r]   r^   c                 C  s   zt |}W n ty   | Y S w |jdrD| rD|tvrDz||}W n	 ty0   Y nw d|jv rDt	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.)r   	TypeErrorr   rn  is_absoluteBUILTIN_DIR_NOPREFIX_OPTIONSrelative_tor   partsr   as_posix)rJ   ri  rp  r]   r>   r>   r?   sanitize_dir_option_value  s&   

z"CoreData.sanitize_dir_option_valuer   rG   c              	   C  sh   t  D ]\}}| | j|j|d| qttD ]}t D ]\}}| | j|j||d| qqd S )Nr   r   r  )rh  r   add_builtin_optionr   r   r   r   BUILTIN_OPTIONS_PER_MACHINE)rJ   r   r   r   r
  r>   r>   r?   rF    s   zCoreData.init_builtinsopts_map'MutableKeyedOptionDictType'r   r   'BuiltinOption'c                 C  s<   |j r|jrd S | |  j}nd }|||t | |< d S r`   )r   rW   r   r]   init_optionr   )r|  r   r   r]   r>   r>   r?   rz    s   zCoreData.add_builtin_optionbackend_namec                 C  sF   |dkrt dd| jtd< d S |dr!tdd| jtd< d S d S )	Nr0   z;Maximum number of linker processes to run or 0 for no limit)r   Nr   Zbackend_max_linksr1   z+Default project to execute in Visual StudiorB   Zbackend_startup_project)r   r   r   r   rq   )rJ   r  r>   r>   r?   init_backend_options  s   
zCoreData.init_backend_options.T.Union[T.List[str], str, int, bool, WrapMode]c                 C  s   z| j | j}|jdkrt| W S |W S  ty   Y nw z| j |  }|jr7|jdkr3t|j W S |jW S W n	 tyA   Y nw tdt| )N	wrap_modez$Tried to get unknown builtin option )	r   r]   r   r    r  r   rW   r   rD   )rJ   r   r   r>   r>   r?   
get_option  s&   


zCoreData.get_optionFfirst_invocationrX   c                   s  d}   r  jdkr| |}n| jtd j}| | |}z| j  W n ty7   tdt	  w j
du rHtd jd nhtj
tri|D ]}|j
v rgtd jd|d qSnGtj
tr fdd	fd
d|D }d|}n(tj
t	rj
}t|j jd}	td jd| || |	||O }|}
|
rňjr|stdt	 ||
O } jdkr|| |O }|S )NFri  z$Tried to set unknown builtin option TOption z is deprecated value c                   s:   j | }|d urtd jd| d| |S | S )Nr  r   is replaced by )rY   r   r   r   r   )r   rl   )r   r   r>   r?   replace  s
   z$CoreData.set_option.<locals>.replacec                   s   g | ]} |qS r>   r>   r   r  r>   r?   r     r   z'CoreData.set_option.<locals>.<listcomp>r   r   r  zTried modify read only option 	buildtype)
is_builtinr   ro  r   r   r]   rx  r  r   rD   rY   r   r   r[   rf   rb   dictr   from_stringr   r   
set_optionrn   r\   _set_others_from_buildtype)rJ   r   r]   r  dirtyri  r   rl   ZnewnameZnewkeychangedr>   )r   r   r  r?   r    sF   


	

zCoreData.set_optionc                 C  s0   | j j  | j j  | j  | j  d S r`   )rB  hostr"  buildrC  rD  rg   r>   r>   r?   clear_cache0  s   
zCoreData.clear_cacheAT.List[T.Union[T.Tuple[str, str, str], T.Tuple[str, bool, bool]]]c                 C  s   g }| j td j}|dkrd}d}n,|dkrd}d}n#|dkr%d}d}n|d	kr.d
}d}n|dkr7d}d}n|dks=J g S | j td j}| j td j}||kr[|d||f ||krg|d||f |S )Nr  r4   Fr5   r-   Tr6   2r7   3r8   sr9   optimization)r   r   r]   r   )rJ   resultr]   r   r5   Z
actual_optZactual_debugr>   r>   r?   get_nondefault_buildtype_args6  s4   z&CoreData.get_nondefault_buildtype_argsc                 C  s   d}|dkrd}d}n,|dkrd}d}n#|dkrd}d}n|dkr&d	}d}n|d
kr/d}d}n|dks5J dS || j td |O }|| j td |O }|S )NFr4   r5   r-   Tr6   r  r7   r  r8   r  r9   r  )r   r   rn   )rJ   r]   r  r   r5   r>   r>   r?   r  S  s*   z#CoreData._set_others_from_buildtypeoptnamec                 C  s   | j tv rdS | jd uS )NT)r   r{  r   )r  r>   r>   r?   is_per_machine_optionn  s   

zCoreData.is_per_machine_optionr
  r   r   c                 C     | j td||d jS )Nargsr  r   r   r   r]   rJ   r
  r   r>   r>   r?   get_external_argst     zCoreData.get_external_argsc                 C  r  )N	link_argsr  r  r  r>   r>   r?   get_external_link_argsw  r  zCoreData.get_external_link_argsc              
   C  s   |  D ]S\}}| sq|| jvr|| j|< q| j| }t|t|ur+|| j|< q|j|jkrW|| j|< z||j W q tyV   tj	d| d|j ddd Y qw qd S )NzOld value(s) of z, are no longer valid, resetting to default (z).Ffatal)
r   r   r   typerU   rn   r]   r   r   warning)rJ   r   r   r]   Zoldvalr>   r>   r?   update_project_optionsz  s(   




zCoreData.update_project_optionswhen_building_forc                 C  s   |t jkrdS t| jdkS )NFr   )r   r@  r   r=  )rJ   r  r>   r>   r?   r?    s   
zCoreData.is_cross_buildc              	   C  s   d}|   rJ tD ]}| j| }|| j|  |jO }q
| j D ]'\}}|jtj	u rK|
 }z| j| }|||jO }W q$ tyJ   Y q$w q$|S )NF)r?  r{  r   as_buildrn   r]   r   r  r   r@  as_hostr  )rJ   r  r!  oZbkZbvZhkZhvr>   r>   r?   $copy_build_options_from_regular_ones  s    

z-CoreData.copy_build_options_from_regular_onesrB   T.Dict[OptionKey, T.Any]c                 C  sB  d}|   sdd | D }td}||v rC| || }|| jtd |O }tD ]}||vrB|| j| t| ||O }q,g }| D ])\}	}
|	|krRqI|	| jv ra|| 	|	|
|O }qI|	j
tjkrr|	jtjkrr||	 qI|rdtdd |D }|rd| d	nd
}t| d| d|   s||  O }|S )NFc                 S  s"   i | ]\}}|j tjur||qS r>   )r  r   r@  r   r!  r   r>   r>   r?   r     s   " z(CoreData.set_options.<locals>.<dictcomp>ri  r   c                 s  s    | ]}t |V  qd S r`   rD   )r   r  r>   r>   r?   r         z'CoreData.set_options.<locals>.<genexpr>zIn subproject : rB   zUnknown options: "r   )r?  r   r   ro  r   rn   rt  rh  prefixed_defaultr  r  r   r@  r  r   COMPILERr   r   sortedr   r  )rJ   r   r   r  r  Zpfkri  r   Zunknown_optionsr!  r   Zunknown_options_strsubr>   r>   r?   set_options  s6    

zCoreData.set_optionsdefault_options T.MutableMapping[OptionKey, str]env'Environment'c                 C  s   t  }| D ]\}}|r|j|kr|||< q||j ||_t  }|j D ]0\}}|jr5|j|kr5q(|rH| rH| j|jdtjd j	rHq(|j
tjtjtjhv rTq(|||< q(| j|||jd d S )NrB   ry  )r   r  )r   r   r   r   r   r  r   r   rA  rW   r  r   r  BACKENDBASEr  r  )rJ   r  r   r  r   r!  r   r>   r>   r?   set_default_options  s"   $
zCoreData.set_default_optionsc                 C  sB   |  D ]\}}|j|}|d ur|| | j|| qd S r`   )r   r   r   rn   
setdefault)rJ   r   r   r
  r  r!  r  r]   r>   r>   r?   add_compiler_options  s   
zCoreData.add_compiler_optionscompT.Type['Compiler']c                 C  s(   ddl m } | j||||| dS )zOAdd global language arguments that are needed before compiler/linker detection.r   r>  N)r>  r   r   Zget_global_options)rJ   r   r  r
  r  r>  r>   r>   r?   add_lang_args  s   zCoreData.add_lang_args
'Compiler'c                 C  s   ddl m} | | ||j| g }|jD ]'}|| jv rqt|j| }||jv r8|	|j|  |
| || j|< q| | d S )Nr   r  )rB   r>  r  get_optionsr
  Zbase_optionsr   r   deepcopyrn   r   emit_base_options_warnings)rJ   r   r  r  r>  enabled_optsr   Zoobjr>   r>   r?   process_new_compiler  s   



zCoreData.process_new_compilerr  T.List[OptionKey]c                 C  s0   t d|v rtjddd tjddd d S d S )NZ	b_bitcodezBase option 'b_bitcode' is enabled, which is incompatible with many linker options. Incompatible options such as 'b_asneeded' have been disabled.Fr  zjPlease see https://mesonbuild.com/Builtin-options.html#Notes_about_Apple_Bitcode_support for more details.)r   r   r  )rJ   r  r>   r>   r?   r    s   z#CoreData.emit_base_options_warningsN)r   r1  r2  rD   r3  r   )r   r1  r2  rD   rG  rD   r;   r   )ri  rD   r;   rD   )ri  rD   rp  r   r]   r^   r;   r^   )r   rD   r;   rG   )r|  r}  r   r   r   r~  r;   rG   )r  rD   r;   rG   )r   r   r;   r  ro   )r   r   r  rX   r;   rX   r#  )r;   r  )r]   rD   r;   rX   )r  r   r;   rX   )r
  r   r   rD   r;   r   )r   r}  r;   rG   )r  r   r;   rX   r   )rB   F)r   r  r   rD   r  rX   r;   rX   )r  r  r   rD   r  r  r;   rG   )
r   r}  r   rD   r
  r   r  r  r;   rG   )
r   rD   r  r  r
  r   r  r  r;   rG   )r   rD   r  r  r  r  r;   rG   )r  r  r;   rG   )rN   rO   rP   rI   r   r<  rE  ro  rx  rF  rz  r  r  r  r  r  r  r  r  r  r  r   rA  r?  r  r  r  r  r  r  r  r>   r>   r>   r?   r0  ,  s:    
(9


 


5







&

	r0  c                      s8   e Zd Zd fddZdd fddZdddZ  ZS )CmdLineFileParserr;   rG   c                   s   t  jdgd d d S )N=)
delimitersZinterpolation)rH   rI   rg   rK   r>   r?   rI     s   zCmdLineFileParser.__init__rH  ra  7T.Union['StrOrBytesPath', T.Iterable['StrOrBytesPath']]rJ  r   r   c                   s   t  ||S r`   )rH   r\  )rJ   ra  rJ  rK   r>   r?   r\    r   zCmdLineFileParser.read	optionstrrD   c                 C  s   |S r`   r>   )rJ   r  r>   r>   r?   optionxform  s   zCmdLineFileParser.optionxformr#  )rH  )ra  r  rJ  r   r;   r   )r  rD   r;   rD   )rN   rO   rP   rI   r\  r  rR   r>   r>   rK   r?   r    s    r  c                   @  s*   e Zd ZdddZdddZdddZdS )MachineFileParserra  r   	sourcedirrD   r;   rG   c                 C  s   t  | _ddd| _i | _|D ]J}t|dd:}| }|d|}|dtj	|}z	| j
|| W n tjyI } ztd| d }~ww W d    n1 sTw   Y  q| jd	ri| j| d	 | j D ]}|d	kruqn| || j|< qnd S )
NTF)TrueFalserH  rI  z@GLOBAL_SOURCE_ROOT@z	@DIRNAME@zMalformed machine file: 	constants)r  parserr  sectionsrZ  r\  r  rR  rS  dirnameZread_stringconfigparserErrorr   Zhas_sectionr   _parse_section)rJ   ra  r  fnamerd  contentr   r  r>   r>   r?   rI     s0   
zMachineFileParser.__init__r  1T.Dict[str, T.Union[str, bool, int, T.List[str]]]c                 C  s  | j  | _i }| j|D ]w\}}d|v s"d|v s"d|v s"d|v r*td|d|dd}zt|d		 }|j
s@td
| |j
d }W n2 tyb } ztd|dt| dd }~w ty{ } ztd|jd d|dd }~ww |||< || j|< q|S )N 	'r   zMalformed variable name z in machine file.rk  z\\Zmachinefilezvalue cannot be emptyr   z)Malformed value in machine file variable r  r,   zUndefined constant z in machine file variable )r  r   scoper  r   r   r  r   Parserparselines_evaluate_statementr   rD   r  r  )rJ   r  sectionentryr]   r   resr   r>   r>   r?   r  7  s*    z MachineFileParser._parse_sectionnodemparser.BaseNode$T.Union[str, bool, int, T.List[str]]c                   s
  t |tjr	|jS t |tjr|jS t |tjr|jS t |tjr, fdd|jjD S t |tj	r8 j
|j S t |tjr |j} |j}|jdkrkt |trYt |tsct |trgt |trg|| S td|jdkrt |trt |trtj||S td)Nc                   s   g | ]}  |qS r>   )r  )r   argrg   r>   r?   r   U      z9MachineFileParser._evaluate_statement.<locals>.<listcomp>addZdivzUnsupported node type)r[   r   ZBaseStringNoder]   ZBooleanNodeZ
NumberNodeZ	ArrayNoder  	argumentsZIdNoder  ZArithmeticNoder  leftrightZ	operationrD   rf   rR  rS  r   r   )rJ   r  lrr>   rg   r?   r  L  s2   

z%MachineFileParser._evaluate_statementN)ra  r   r  rD   r;   rG   )r  rD   r;   r  )r  r  r;   r  )rN   rO   rP   rI   r  r  r>   r>   r>   r?   r    s    

r  ra  r   r  rD   c                 C  s   t | |}|jS r`   )r  r  )ra  r  r  r>   r>   r?   parse_machine_filesd  s   
r  	build_dirc                 C  s   t j| ddS )Nmeson-privatezcmd_line.txt)rR  rS  r   )r  r>   r>   r?   get_cmd_line_fileh  s   r  r   r1  rG   c                 C  s   t | }tj|sd S t }|| dd |d  D }||j ||_|d }|j	s9t
|dd|_	|jsHt
|dd|_d S d S )Nc                 S  s   i | ]
\}}t ||qS r>   )r   r  r  r>   r>   r?   r   u  s    z&read_cmd_line_file.<locals>.<dictcomp>r   
propertiesrO  z[]rP  )r  rR  rS  rW  r  r\  r   r   cmd_line_optionsrO  r   r   r   rP  )r  r   filenameconfigdr  r>   r>   r?   read_cmd_line_filek  s   
r  c                 C  s   t | }t }t }|jr|j|d< |jr|j|d< dd |j D |d< ||d< t|ddd	}|| W d    d S 1 sBw   Y  d S )
NrO  rP  c                 S     i | ]\}}t |t |qS r>   r  r  r>   r>   r?   r         z'write_cmd_line_file.<locals>.<dictcomp>r   r  rK  rH  rI  )	r  r  r   rO  rP  r  r   rZ  r[  )r  r   r   r  r  rd  r>   r>   r?   write_cmd_line_file  s   

"r  c                 C  st   t | }t }|| |d dd |j D  t|ddd}|| W d    d S 1 s3w   Y  d S )Nr   c                 S  r  r>   r  r  r>   r>   r?   r     r  z(update_cmd_line_file.<locals>.<dictcomp>rK  rH  rI  )r  r  r\  r   r  r   rZ  r[  )r  r   r   r  rd  r>   r>   r?   update_cmd_line_file  s   
"r  c                 C  s\   dd | j  D }| jr|dd | jD 7 }| jr$|dd | jD 7 }ddd |D S )Nc                 S  s    g | ]\}}d  t||qS )z-D{}={})r   rD   r  r>   r>   r?   r     r   z+format_cmd_line_options.<locals>.<listcomp>c                 S     g | ]}d | qS )z--cross-file=r>   r   rd  r>   r>   r?   r     r  c                 S  r  )z--native-file=r>   r	  r>   r>   r?   r     r  r  c                 S  s   g | ]}t |qS r>   )shlexquoter   r>   r>   r?   r     r  )r  r   rO  rP  r   )r   Zcmdliner>   r>   r?   format_cmd_line_options  s   r  v1v2rX   c                 C  s<   |  dd\}}| dd\}}||kpd||hv o||kS )Nr,   r   Z99)rsplit)r  r  Zv1_majorZv1_minorZv2_majorZv2_minorr>   r>   r?   major_versions_differ  s   r  Tsuggest_reconfigurec                 C  s   t j| dd}t|dt|S )Nr  coredata.datZCoredata)rR  rS  r   r   r0  )r  r  r   r>   r>   r?   load  s   r  objc                 C  s   t j|dd}|d }|d }t| jtrtdt j|r*dd l}||| t	|d}t
| | |  t |  W d    n1 sKw   Y  t || |S )Nr  r  z.prev~z"Fatal version mismatch corruption.r   wb)rR  rS  r   r  r;  r   rV  shutilcopyfilerZ  pickledumpflushfsyncfilenor  )r  r  r   Zprev_filenameZtempfilenamer  rd  r>   r>   r?   save  s   r  r  argparse.ArgumentParserc                 C  sx   t  D ]\}}|t|| d qt D ]\}}|t|| d |t| | d q| jdddg ddd	 d S )
NrB   z (just for host machine)z (just for build machine)z-Dr   projectoptionsrp  zNSet the value of an option, can be used several times to set multiple options.)actiondestr4  metavarhelp)rh  r   add_to_argparserD   r{  r  add_argument)r  nbr>   r>   r?   register_builtin_arguments  s   
r)  rB   r   T.Dict[OptionKey, str]c              	   C  sj   t  }| D ]-}z
|dd\}}W n ty    td|dw t|}|r.|j|d}|||< q|S )Nr  r   r  z, must have a value separated by equals sign.r   )r   r   r   r   r   r  r   )r   r   r  r  r   r]   r!  r>   r>   r?   create_options_dict  s   

r+  r  c              	   C  s   t | j| _tt dd t D t D ]2}t|}t| |d }|d urI|| jv r?t	
|}td| d| d| d|| j|< t| | qd S )Nc                 s  s    | ]}|  V  qd S r`   )r  )r   r!  r>   r>   r?   r     r  z)parse_cmd_line_options.<locals>.<genexpr>zGot argument z as both -Dz and z. Pick one.)r+  r   r  r   rh  r   r{  rD   rm   BuiltinOptionargparse_name_to_argr   delattr)r  r   r   r]   cmdline_namer>   r>   r?   parse_cmd_line_options  s$   



r0  _U)boundc                   @  sf   e Zd ZdZd+dddd,ddZd-ddZd.ddZd/ddZed0d d!Z	d1d2d#d$Z
d3d)d*ZdS )4r,  zaClass for a builtin option type.

    There are some cases that are not fully supported yet.
    TNFrU   r\   opt_type
T.Type[_U]rT   rD   r4  r^   rW   rX   rU   r\   c                C  s(   || _ || _|| _|| _|| _|| _d S r`   )r4  rT   r4  rU   rW   r\   )rJ   r4  rT   r4  rW   rU   r\   r>   r>   r?   rI     s   
zBuiltinOption.__init__r   'OptionKey'r]   T.Optional[T.Any]ri  r;   r1  c                 C  sP   |du r
|  ||}| j|d}| jr| j|d< | j| jfi |}| j|_|S )z-Create an instance of opt_type and return it.N)rW   r]   rU   )r  rW   rU   r4  rT   r\   )rJ   r   r]   ri  keywordsr  r>   r>   r?   r    s   
zBuiltinOption.init_optionr   c                 C  s   t | jtrdS d S )N
store_true)r[   r4  rX   rg   r>   r>   r?   _argparse_action  s   zBuiltinOption._argparse_actionc                 C  s(   | j tu r	ddgS | j tu rtjS | jS ry   )r4  rx   r   r   rU   rg   r>   r>   r?   _argparse_choices  s
   

zBuiltinOption._argparse_choicesc                 C  s   | dkrdS d|  dd S )Nwarning_levelz--warnlevelz--_-r  )r   r>   r>   r?   r-    s   z"BuiltinOption.argparse_name_to_argrB   c                 C  s:   | j ttfv r
| jS zt| | W S  ty   Y | jS w r`   )r4  r   r   r4  rt  r  )rJ   r   ri  r>   r>   r?   r    s   zBuiltinOption.prefixed_defaultr  r  help_suffixrG   c           	      C  s   t  }|  }|  }| j}|sd|d| |}n||d< |r)|s)||d< tj|d< ||d< | 	|}|j
|fd|| i| d S )Nz{} (default: {}).r,   r!  rU   r4  r"  r$  )r   r;  r:  rT   r   rstripr  argparseSUPPRESSr-  r&  )	rJ   r   r  r?  kwargsr   r(  hr/  r>   r>   r?   r%  "  s   

zBuiltinOption.add_to_argparseT)r4  r5  rT   rD   r4  r^   rW   rX   rU   r^   r\   rX   )r   r6  r]   r7  ri  rD   r;   r1  )r;   r   )r;   r^   )r   rD   r;   rD   rM   )r   r6  ri  rD   r;   r^   )r   rD   r  r  r?  rD   r;   rG   )rN   rO   rP   rQ   rI   r  r:  r;  r   r-  r  r%  r>   r>   r>   r?   r,    s    
	

	r,  ri  zInstallation prefixbindirzExecutable directorybindatadirzData file directory
includedirzHeader file directoryinfodirzInfo page directoryrg  zLibrary directory
licensedirzLicenses directory
libexecdirzLibrary executable directory	localedirzLocale data directorylocalstatedirzLocalstate data directoryvarmandirzManual page directorysbindirzSystem executable directorysharedstatedirz'Architecture-independent data directoryZcom
sysconfdirzSysconf data directoryr}  BUILTIN_DIR_OPTIONSauto_featuresz%Override value of all 'auto' featuresr   backendzBackend to user0   r3  	genvslitezSetup 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 user5   z*Enable debug symbols and other informationdefault_libraryzDefault library typeshared)rY  staticZboth)rU   rW   	errorlogsz,Whether to print the logs from failing testsinstall_umaskz8Default umask to apply on permissions of installed filesZ022layoutzBuild directory layoutZmirrorZflatr  zOptimization level)r4   r-   g1r  r  r  prefer_staticz3Whether to try static linking before shared linkingstdsplitz$Split stdout and stderr in test logsr   zStrip targets on installunityzUnity buildoff)onrc  subprojects
unity_sizezUnity block size)r   N   r<  zCompiler warning level to user_  )r-   r_  r  r  Z
everythingwerrorzTreat warnings as errors)rW   r  z	Wrap moder4  )r4  Z
nofallbackZ
nodownloadZforcefallbackZ	nopromoteforce_fallback_forz$Force fallback for those subprojectsvsenvz"Activate Visual Studio environment)r\   Zrelocatabler   )modulez'Generate pkgconfig files as relocatableZbytecompileZpythonzWhether to compile bytecode)r.   r   r   Zinstall_envz&Which python environment to install to)r   ri  systemvenv
platlibdirz5Directory for site-specific, platform-specific files.Z
purelibdirz9Directory for site-specific, non-platform-specific files.Zallow_limited_apiz.Whether to allow use of the Python Limited APIBUILTIN_CORE_OPTIONSr  z1List of additional paths for pkg-config to searchr  z/List of additional prefixes for cmake to searchr{  /usrz/etcz/varz
/var/local)rp  z
/usr/localz/var/libz/var/local/libz#T.Dict[OptionKey, T.Dict[str, str]]rt  >   Zphonyinstallzcoverage-htmlZcoveragezcoverage-xmlreconfigurezclean-ctlistZ	distcheckZ	uninstalldistzcoverage-textz
clean-gcdar6  z
scan-buildz
clean-gcnocleanr   Z	benchmarkZPHONYzbuild.ninja)r;   r<   )ra  r   r  rD   )r  rD   r;   rD   )r  rD   r   r1  r;   rG   )r  rD   r   r1  )r   r1  r;   rD   )r  rD   r  rD   r;   rX   rE  )r  rD   r  rX   r;   r0  )r  r0  r  rD   r;   rD   )r  r  r;   rG   rM   )r   r   r   rD   r;   r*  )r  r1  r;   rG   )
__future__r   r   rB   r   r   r  rR  r9  r]  	itertoolsr   pathlibr   collectionsr   r	   dataclassesr
   mesonlibr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   wrapr    r   rA  r  enumr
  typingTTYPE_CHECKINGr!   Zcompilers.compilersr"   r#   r$   r%   Zdependencies.detectr&   environmentr'   r(   Zcmake.traceparserr)   UnionDictrD   ZOptionDictTypeZMutableKeyedOptionDictTyper   TupleZCompilerCheckCacheKeyZRunCheckCacheKeybytesPathLikeStrOrBytesPathr;  Zstable_versionrn  r   Zstable_version_arrayre   r   ZbackendlistZgenvslitelistr=   rw   TypeVarr:   r@   rA   GenericrS   rq   rX   rx   r   r   r   r   Listr   r   r   Mappingr+   Enumr   r   r  r$  r/  r0  ConfigParserr  r  r  r  r  r  r  r  r  r  r  r)  r+  r0  r1  r,  rT  r   ro  r   rh  r{  rt  	frozensetZFORBIDDEN_TARGET_NAMESr>   r>   r>   r?   <module>   sD  \	
(




  :6#G
   h
F





	P










1