o
    WodG                     @  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 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l-Z.e.j/rdd
lm0Z0 ddl1m2Z2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8 ddlm9Z9m:Z: ddl;m<Z< e.j=e.j>e?df e9f Z@e.j>d ZAe.j=eAe9f ZBe.jCe.jCe?df e?e:e.jCe?df e?f ZDe.jCe?e.jCe?df f ZEe.j=e?eFejGe? ejGeF f ZHdZIg dZJdZKe.LdZMG dd deZNG dd de.jOeM eZPG dd dePe? ZQG dd dePeR ZSG dd  d ePeT ZUG d!d" d"eTZVG d#d$ d$eUePe.j=e?eVf  ZWG d%d& d&ePe? ZXG d'd( d(ePe.jYe?  ZZG d)d* d*eXZ[G d+d, d,e+j\Z]G d-d. d.Z^G d/d0 d0Z_G d1d2 d2Z`e.Ld3ZaG d4d5 d5ZbG d6d7 d7e*jcZdG d8d9 d9Zed:d; Zfdd?d@ZgddDdEZhddFdGZiddHdIZjddJdKZkddOdPZlddQdRZmddTdUZnddXdYZoddd^d_ZpddadbZqe.jLdcePeM ddZrG dedf dfe.jOeMerf Zsee"dgeseQdhe fe"dieseQdjdkfe"dleseQdme fe"dneseQdoe fe"dpeseQdqe fe"dreseQdse fe"dteseQdudZfe"dveseQdwe fe"dxeseQdye fe"dzeseQd{d|fe"d}eseQd~e fe"deseQde fe"deseQddfe"deseQde  fgZtdeud< ee"dese[ddfe"deseXddeJddfe"deseXddg ddfe"deseSddfe"deseXddg dddfe"deseSddfe"deseWddfe"deseXddddgdfe"deseXddg ddfe"deseSddfe"deseSddfe"deseSddfe"deseXddg ddfe"deseUddfe"deseXddg dddfe"deseSddddfe"deseXddg ddfe"deseZdg fe"deseSddddčfe"dddǍeseSddfe"dddǍeseXddgg d̢dfe"dddǍeseQddZfe"dddǍeseQddZfgZvdeud< eeetw evw Zxee"d҃eseZdg fe"dԃeseZdg fgZydeud< e"dddie"dzdddۜe"ddddۜe"dddǍi e"dddǍi iZzdeud< e{h dZ|dS )    )annotationsN   )mlogmparser)chain)PurePath)OrderedDict)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)TV_DepID)Environment)OptionOverrideProxyFileOrString)CMakeCacheEntryUserOption[T.Any])r   r)   .z1.1.1)ninjavsZvs2010Zvs2012Zvs2013Zvs2015Zvs2017Zvs2019Zvs2022ZxcodenoneF_Tc                      s"   e Zd ZdZd	 fddZ  ZS )
MesonVersionMismatchExceptionzQBuild directory generated with Meson version is incompatible with current versionold_versionstrcurrent_versionreturnNonec                   s*   t  d| d| d || _|| _d S )Nz6Build directory has been generated with Meson version z1, which is incompatible with the current version .)super__init__r/   r1   )selfr/   r1   	__class__ rhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/coredata.pyr6   J   s
   

z&MesonVersionMismatchException.__init__)r/   r0   r1   r0   r2   r3   )__name__
__module____qualname____doc__r6   __classcell__r:   r:   r8   r;   r.   H   s    r.   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descriptionr0   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)
r5   r6   rC   rB   
isinstancerF   r
   rE   rG   readonly)r7   rB   rC   rE   rG   r8   r:   r;   r6   R   s   


zUserOption.__init__valueT.Anyr2   T.List[T.Any]c                 C  s   |gS Nr:   r7   rK   r:   r:   r;   listify^      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 rN   )rI   rK   r0   intrF   listr7   r:   r:   r;   printable_valuea   s   zUserOption.printable_valuer-   c                 C  s   t d)Nz5Derived option class did not override validate_value.)RuntimeErrorrO   r:   r:   r;   validate_valueh      zUserOption.validate_valuenewvaluec                 C  s"   t | dd }| || _| j|kS )NrK   )getattrrX   rK   )r7   rZ   Zoldvaluer:   r:   r;   	set_valuek   s   
zUserOption.set_valueF)rB   r0   rC   rD   rE   rF   rG   rH   )rK   rL   r2   rM   )r2   rR   )rK   rL   r2   r-   )rZ   rL   r2   rF   )	r<   r=   r>   r6   rP   rV   rX   r\   r@   r:   r:   r8   r;   rA   Q   s    


rA   c                      s.   e Zd Zedfd fd
dZdddZ  ZS )UserStringOptionFrB   r0   rK   rL   rE   rF   rG   rH   c                   s    t  |d || | | d S rN   r5   r6   r\   r7   rB   rK   rE   rG   r8   r:   r;   r6   q   s   zUserStringOption.__init__r2   c                 C  s   t |tstdt| |S )Nz-Value "%s" for string option is not a string.)rI   r0   r
   rO   r:   r:   r;   rX   v   s   
zUserStringOption.validate_valuerB   r0   rK   rL   rE   rF   rG   rH   rK   rL   r2   r0   r<   r=   r>   DEFAULT_YIELDINGr6   rX   r@   r:   r:   r8   r;   r^   p   s
    r^   c                      s8   e Zd Zedfd fdd	ZdddZdddZ  ZS )UserBooleanOptionFrB   r0   rE   rF   rG   rH   c                   s$   t  |ddg|| | | d S NTFr_   r`   r8   r:   r;   r6   |   s   zUserBooleanOption.__init__r2   c                 C  s   | j S rN   rK   rU   r:   r:   r;   __bool__   rQ   zUserBooleanOption.__bool__rK   rL   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).)rI   rF   r0   r
   lowerrO   r:   r:   r;   rX      s   

z UserBooleanOption.validate_value)rB   r0   rE   rF   rG   rH   r2   rF   )rK   rL   r2   rF   )r<   r=   r>   rd   r6   rh   rX   r@   r:   r:   r8   r;   re   {   s    
re   c                      s8   e Zd Zedfd fd
dZdddZdddZ  ZS )UserIntegerOptionFrB   r0   rK   rL   rE   rF   rG   rH   c           
        sx   |\}}}|| _ || _g }|d ur|dt|  |d ur'|dt|  d|}	t ||	|| | | d S )Nz>=z<=, )	min_value	max_valueappendr0   joinr5   r6   r\   )
r7   rB   rK   rE   rG   ro   rp   default_valuecrC   r8   r:   r;   r6      s   

zUserIntegerOption.__init__r2   rS   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.)rI   r0   tointrS   r
   ro   rp   rO   r:   r:   r;   rX      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.rS   
ValueErrorr
   )r7   rv   r:   r:   r;   ru      s
   
zUserIntegerOption.tointra   )rK   rL   r2   rS   )rv   r0   r2   rS   )r<   r=   r>   rd   r6   rX   ru   r@   r:   r:   r8   r;   rm      s    
rm   c                   @  s   e Zd Zdd ZdS )OctalIntc                 C  s   t t| S rN   )octrS   rU   r:   r:   r;   __str__   s   zOctalInt.__str__N)r<   r=   r>   r{   r:   r:   r:   r;   ry      s    ry   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 )UserUmaskOptionFrB   r0   rK   rL   rE   rF   rG   rH   c                   s&   t  |dd|f|| ddg| _d S )Nr   i  preservez	0000-0777)r5   r6   rC   r`   r8   r:   r;   r6      s   zUserUmaskOption.__init__r2   c                 C  s   | j dkr| j S t| j dS )Nr}   Z04o)rK   formatrU   r:   r:   r;   rV      s   
zUserUmaskOption.printable_valueT.Union[str, OctalInt]c                   s$   |d u s|dkr
dS t t |S )Nr}   )ry   r5   rX   rO   r8   r:   r;   rX      s   zUserUmaskOption.validate_valuerv   rS   c              
   C  s4   zt |dW S  ty } ztd| d }~ww )N   zInvalid mode: rw   )r7   rv   er:   r:   r;   ru      s   zUserUmaskOption.tointra   )r2   r0   )rK   rL   r2   r   )rv   r   r2   rS   )	r<   r=   r>   rd   r6   rV   rX   ru   r@   r:   r:   r8   r;   r|      s    
r|   c                      s.   e Zd Zedfd fddZdddZ  ZS )UserComboOptionFrB   r0   rC   T.List[str]rK   rL   rE   rF   rG   rH   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.)r5   r6   rI   rC   rT   r
   r0   r\   )r7   rB   rC   rK   rE   rG   ir8   r:   r;   r6      s   

zUserComboOption.__init__r2   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booleannumberstringrn   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): {}.)	rC   rI   rF   rS   floatrr   r
   r~   rB   )r7   rK   Z_typeZoptionsstringr:   r:   r;   rX      s   


zUserComboOption.validate_value)
rB   r0   rC   r   rK   rL   rE   rF   rG   rH   rb   rc   r:   r:   r8   r;   r      s
    r   c                      sN   e Zd Zdddeddfd fddZddddZddddZdddZ  ZS ) UserArrayOptionFNrB   r0   rK   T.Union[str, T.List[str]]r   rF   
user_input
allow_dupsrE   rC   T.Optional[T.List[str]]rG   rH   c	           	        s>   t  ||d ur
|ng || || _|| _| j||d| _d S )N)r   )r5   r6   r   r   rX   rK   )	r7   rB   rK   r   r   r   rE   rC   rG   r8   r:   r;   r6      s   zUserArrayOption.__init__Tr2   r   c                 C  s   |st |tr|dstd| t |trP|dr3zt|}W |S  ty2   td| w |dkr;g }|S | jrDt|}|S dd |dD }|S t |t	rY|}|S td| d	)
N[z Value does not define an array: zmalformed option  c                 S  s   g | ]}|  qS r:   )stripr   vr:   r:   r;   r         z+UserArrayOption.listify.<locals>.<listcomp>,r   z)" should be a string array, but it is not)
rI   r0   
startswithr
   astliteral_evalrx   r   splitrT   )r7   rK   r   rZ   r:   r:   r;   rP      s,   



zUserArrayOption.listifyc                   s     ||} jstt|t|krd}t| |D ]}t|ts+td|dq j	rI fdd|D }|rIt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                   s   g | ]	}| j vr|qS r:   rC   r   xrU   r:   r;   r     s    z2UserArrayOption.validate_value.<locals>.<listcomp>z-Options "{}" are not in allowed choices: "{}"rn   )rP   r   lensetr   deprecationrI   r0   r
   rC   r~   rr   )r7   rK   r   rZ   msgr   badr:   rU   r;   rX     s   

zUserArrayOption.validate_valuer3   c                 C  s   |  |}| | j|  dS )z*Extend the value with an additional value.N)rX   r\   rK   )r7   rK   newr:   r:   r;   extend_value  s   
zUserArrayOption.extend_value)rB   r0   rK   r   r   rF   r   rF   r   rF   rE   rF   rC   r   rG   rH   T)rK   r   r   rF   r2   r   )rK   r   r2   r3   )	r<   r=   r>   rd   r6   rP   rX   r   r@   r:   r:   r8   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autoFrB   r0   rK   rL   rE   rF   rG   rH   c                   s    t  || j||| d | _d S rN   )r5   r6   static_choicesnamer`   r8   r:   r;   r6   &  s   
zUserFeatureOption.__init__r2   c                 C  
   | j dkS )Nr   rg   rU   r:   r:   r;   
is_enabled+     
zUserFeatureOption.is_enabledc                 C  r   )Nr   rg   rU   r:   r:   r;   is_disabled.  r   zUserFeatureOption.is_disabledc                 C  r   )Nr   rg   rU   r:   r:   r;   is_auto1  r   zUserFeatureOption.is_autora   rl   )
r<   r=   r>   r   rd   r6   r   r   r   r@   r:   r:   r8   r;   r   #  s    

r   c                   @  s&   e Zd ZdZdZdZeddd	Zd
S )DependencyCacheTyper   r      dep'dependencies.Dependency'r2   'DependencyCacheType'c                 C  s6   ddl m} t||jr| jS t||jr| jS | jS )Nr   r   )r   r    rI   ZPkgConfigDependency
PKG_CONFIGZCMakeDependencyCMAKEOTHER)clsr   r    r:   r:   r;   	from_type;  s   zDependencyCacheType.from_typeN)r   r   r2   r   )r<   r=   r>   r   r   r   classmethodr   r:   r:   r:   r;   r   5  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 rN   )types_DependencySubCache__cache)r7   r   r:   r:   r;   r6   H  s   
zDependencySubCache.__init__keyT.Tuple[str, ...]r2   r   c                 C  s
   | j | S rN   r   r7   r   r:   r:   r;   __getitem__L  r   zDependencySubCache.__getitem__rK   r3   c                 C  s   || j |< d S rN   r   )r7   r   rK   r:   r:   r;   __setitem__O     zDependencySubCache.__setitem__rF   c                 C  s
   || j v S rN   r   r   r:   r:   r;   __contains__R  r   zDependencySubCache.__contains__%T.Iterable['dependencies.Dependency']c                 C  s
   | j  S rN   )r   valuesrU   r:   r:   r;   r   U  r   zDependencySubCache.valuesN)r   r   )r   r   r2   r   )r   r   rK   r   r2   r3   )r   r   r2   rF   )r2   r   )r<   r=   r>   r6   r   r   r   r   r:   r:   r:   r;   r   F  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)r7   r   r   r:   r:   r;   r6   a  s   zDependencyCache.__init__r   r   r2   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   rK   r   r   r   tuple)r7   r   datar:   r:   r;   Z__calculate_subkeyg  s   z"DependencyCache.__calculate_subkeyT.Iterator['TV_DepID']c                 C  s   |   S rN   )keysrU   r:   r:   r;   __iter__p  rY   zDependencyCache.__iter__r   
'TV_DepID'r   r   r3   c                 C  s>   t |}|| jvrt|| j|< | |}|| j| |< d S rN   )r   r   r   r   "_DependencyCache__calculate_subkey)r7   r   r   tsubkeyr:   r:   r;   puts  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   )r7   r   valr   r   r:   r:   r;   getz  s   

zDependencyCache.get%T.Iterator['dependencies.Dependency']c                 c  s$    | j  D ]	}| E d H  qd S rN   )r   r   )r7   rt   r:   r:   r;   r     s   zDependencyCache.valuesc                 C     t | j S rN   )iterr   r   rU   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 rN   )r   itemsr   r   rq   )r7   kr   r+   r   r   r:   r:   r;   r     s   

zDependencyCache.itemsc                 C  s   | j   d S rN   )r   clearrU   r:   r:   r;   r     r   zDependencyCache.clearN)r   r   r   r   )r   r   r2   r   )r2   r   )r   r   r   r   r2   r3   )r   r   r2   r   )r2   r   )r2   r   r2   r3   )r<   r=   r>   r?   r6   r   r   r   r   r   r   r   r   r:   r:   r:   r;   r   Y  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.
    r2   r3   c                 C  s   i | _ i | _d S rN   )_CMakeStateCache__cachecmake_cacherU   r:   r:   r;   r6     s   
zCMakeStateCache.__init__2T.Iterator[T.Tuple[str, T.Dict[str, T.List[str]]]]c                 C  r   rN   r   r   r   rU   r:   r:   r;   r     r   zCMakeStateCache.__iter__c                 C  r   rN   r   rU   r:   r:   r;   r     r   zCMakeStateCache.itemslanguager0   	variablesT.Dict[str, T.List[str]]c                 C  s(   || j vr
i | j |< | j | | d S rN   )r   update)r7   r   r   r:   r:   r;   r     s   

zCMakeStateCache.update
T.Set[str]c                 C  r   rN   )r   r   r   rU   r:   r:   r;   	languages  s   zCMakeStateCache.languagesNr   )r2   r   )r   r0   r   r   )r2   r   )
r<   r=   r>   r?   r6   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 Zd_ddZd`ddZ	edad!d"Z
dbd$d%Zdcd'd(Zddded,d-Zd.d/ Zd0d1 Zdfd2d3Zedgd5d6Zdhd:d;Zdhd<d=Zdid>d?ZejfdjdAdBZdkdCdDZdldmdGdHZdndMdNZdodOdPZdpdSdTZdqdVdWZdrdZd[Zd\S )sCoreDataoptionsargparse.Namespacescratch_dirr0   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)defaultrt   cpptest	directorycrossZnativer   )"Z
lang_guidsr0   uuiduuid4upperZ	test_guidZ
regen_guidZinstall_guidr   Ztarget_guidsversionr   _CoreData__load_config_filescross_filesr   r   	compilersr   Zinitialized_subprojectsr   r   is_cross_buildr   r   BUILDHOSTdepsZcompiler_check_cacheZrun_check_cacher   r   Zconfig_files"builtin_options_libdir_cross_fixupinit_builtins)r7   r   r   r   r:   r:   r;   r6     s6   zCoreData.__init__ftyper2   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 )Nr  r4   z.iniutf-8encodingwwin32XDG_DATA_HOMEz~/.local/shareXDG_DATA_DIRSz/usr/local/share:/usr/share:Z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isfilerq   abspathisdirrr   r  r  openwritereadsysplatformenvironr   r   r   logr
   )r   r   r  	filenamesZfound_invalidmissingrealr   fcopyZrfZwfpathsr  Zpath_to_tryr:   r:   r;   Z__load_config_files  s\   



zCoreData.__load_config_filesc                 C  s   | j rdttd _d S d S )Nliblibdir)r  BUILTIN_OPTIONSr   r   rU   r:   r:   r;   r  &  s   z+CoreData.builtin_options_libdir_cross_fixupc                 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   r  )r  r  r  isabsr
   endswithr   )r7   prefixr:   r:   r;   sanitize_prefix-  s   zCoreData.sanitize_prefixr:  optionr   rK   rL   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   r9  is_absoluteBUILTIN_DIR_NOPREFIX_OPTIONSrelative_torx   partsr
   as_posix)r7   r:  r<  rK   r:   r:   r;   sanitize_dir_option_value>  s(   

z"CoreData.sanitize_dir_option_value
subprojectr3   c              	   C  sh   t  D ]\}}| | j|j|d| qttD ]}t D ]\}}| | j|j||d| qqd S )NrE  rE  r   )r3  r   add_builtin_optionr   evolver   r   BUILTIN_OPTIONS_PER_MACHINE)r7   rE  r   optr   r:   r:   r;   r  ^  s   zCoreData.init_builtinsopts_map'MutableKeyedOptionDictType'r   rK  'BuiltinOption'c                 C  s<   |j r|jrd S | |  j}nd }|||t | |< d S rN   )rE  rE   as_rootrK   init_optionr   )rL  r   rK  rK   r:   r:   r;   rH  f  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 )	Nr*   z;Maximum number of linker processes to run or 0 for no limit)r   Nr   Zbackend_max_linksr+   z+Default project to execute in Visual Studior   Zbackend_startup_project)rm   r   r   r   r^   )r7   rQ  r:   r:   r;   init_backend_optionsr  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   rK   r   r   r   rO  rE   r
   r0   )r7   r   r   r:   r:   r;   
get_option}  s&   


zCoreData.get_optionFfirst_invocationrF   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  jdv r|   d}|S )NFr:  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 )NrW  rX   is replaced by )rG   r   r   r   r   )r   rZ   )r   rK  r:   r;   replace  s
   z$CoreData.set_option.<locals>.replacec                   s   g | ]} |qS r:   r:   r   rZ  r:   r;   r     r   z'CoreData.set_option.<locals>.<listcomp>r   rF  rY  zTried modify read only option 	buildtype>   rT  force_fallback_for)
is_builtinr   r;  r   r   rK   rD  r   r
   r0   rG   r   r   rI   rT   rP   dictrr   from_stringrI  rE  
set_optionr\   rJ   _set_others_from_buildtypeclear_deps_cache)r7   r   rK   rV  dirtyr:  r   rZ   ZnewnameZnewkeychangedr:   )r   rK  rZ  r;   ra    sN   


	


zCoreData.set_optionc                 C  s   | j j  | j j  d S rN   )r  hostr   buildrU   r:   r:   r;   rc    s   zCoreData.clear_deps_cachec                 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\  plainFdebug0Tdebugoptimized2release3minsizescustomoptimization)r   r   rK   rq   )r7   resultrK   rK  ri  Z
actual_optZactual_debugr:   r:   r;   get_nondefault_buildtype_args  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 )NFrh  ri  rj  Trk  rl  rm  rn  ro  rp  rq  rr  )r   r   r\   )r7   rK   rd  rK  ri  r:   r:   r;   rb    s*   z#CoreData._set_others_from_buildtypeoptnamec                 C  s   | j tv rdS | jd uS )NT)r   rJ  lang)ru  r:   r:   r;   is_per_machine_option  s   

zCoreData.is_per_machine_optionr   r   rv  c                 C     | j td||d jS )Nargsr   rv  r   r   rK   r7   r   rv  r:   r:   r;   get_external_args     zCoreData.get_external_argsc                 C  rx  )NZ	link_argsrz  r{  r|  r:   r:   r;   get_external_link_args  r~  zCoreData.get_external_link_argsc              
   C  s   |  D ]S\}}| sq|| jvr|| j|< q| j| }t|t|k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   Z
is_projectr   typerC   r\   rK   r
   r   warning)r7   r   r   rK   Zoldvalr:   r:   r;   update_project_options  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  )r7   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
  rJ  r   as_buildr\   rK   r   r   r   r  Zas_hostr   )r7   rd  r   oZbkZbvZhkZhvr:   r:   r;   $copy_build_options_from_regular_ones/  s    

z-CoreData.copy_build_options_from_regular_onesr   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;   
<dictcomp>C  s   " z(CoreData.set_options.<locals>.<dictcomp>r:  rn   c                 s  s    | ]}t |V  qd S rN   r0   )r   rp  r:   r:   r;   	<genexpr>V      z'CoreData.set_options.<locals>.<genexpr>zIn subproject z: r   zUnknown options: "r   )r
  r   r   r;  r   r\   r@  r3  prefixed_defaultra  r   r   r  r  r   COMPILERrq   rr   sortedr
   r  )r7   r   rE  rV  rd  Zpfkr:  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 )Nr   rG  )rE  rV  )r   r   rE  r   r   r^  rI  r   r  rE   r  r   r  ZBACKENDZBASEr  rV  )r7   r  rE  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 rN   )r   r   r   r\   
setdefault)r7   r   rv  r   r  r   r  rK   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)r7   rv  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|j |< | | ||j| g }|jD ]'}|| jv r&qt|j| }||jv r@|	|j|  |
| || j|< q| | d S )Nr   r  )r   r	  r   r  Zget_optionsZbase_optionsr   r/  deepcopyr\   rq   emit_base_options_warnings)r7   rv  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  )r7   r  r:   r:   r;   r    s   z#CoreData.emit_base_options_warningsN)r   r   r   r0   r   r   )r   r   r   r0   r  r0   r2   r   )r:  r0   r<  r   rK   rL   r2   rL   )rE  r0   r2   r3   )rL  rM  r   r   rK  rN  r2   r3   )rQ  r0   r2   r3   )r   r   r2   rS  r]   )r   r   rV  rF   r2   rF   )rK   r0   r2   rF   )ru  r   r2   rF   )r   r   rv  r0   r2   r   )r   rM  r2   r3   )r  r   r2   rF   rl   )r   F)r   r  rE  r0   rV  rF   r2   rF   )r  r  rE  r0   r  r  r2   r3   )
r   rM  rv  r0   r   r   r  r  r2   r3   )
rv  r0   r  r  r   r   r  r  r2   r3   )rv  r0   r  r  r  r  r2   r3   )r  r  r2   r3   )r<   r=   r>   r6   staticmethodr  r  r;  rD  r  rH  rR  rU  ra  rc  rt  rb  rw  r}  r  r  r   r  r
  r  r  r  r  r  r  r  r:   r:   r:   r;   r     s:    
(9

 

;






&

	r   c                      s8   e Zd Zd fddZdd fddZdddZ  ZS )CmdLineFileParserr2   r3   c                   s   t  jdgd d d S )N=)
delimitersinterpolation)r5   r6   rU   r8   r:   r;   r6     s   zCmdLineFileParser.__init__r  r+  7T.Union['StrOrBytesPath', T.Iterable['StrOrBytesPath']]r  r0   r   c                   s   t  ||S rN   )r5   r&  )r7   r+  r  r8   r:   r;   r&    r   zCmdLineFileParser.readr<  c                 C  s   |S rN   r:   )r7   r<  r:   r:   r;   optionxform  s   zCmdLineFileParser.optionxformr   )r  )r+  r  r  r0   r2   r   )r<  r0   r2   r0   )r<   r=   r>   r6   r&  r  r@   r:   r:   r8   r;   r    s    r  c                   @  s&   e Zd ZdddZdd Zd	d
 ZdS )MachineFileParserr+  r   r2   r3   c                 C  sr   t  | _ddd| _i | _| j| | jdr"| j| d | j D ]}|dkr.q'| || j|< q'd S )NTF)TrueFalse	constants)r  parserr  sectionsr&  has_sectionr   _parse_section)r7   r+  rp  r:   r:   r;   r6     s   zMachineFileParser.__init__c                 C  s   | j  | _i }| j|D ]f\}}d|v s"d|v s"d|v s"d|v r*td|d|dd}zt|d		 }| 
|jd
 }W n( tyQ   td|d tyj } ztd|jd
 d|dd }~ww |||< || j|< q|S )N 	'r   zMalformed variable name z in machine file.r5  z\\Zmachinefiler   z)Malformed value in machine file variable r4   zUndefined constant z in machine file variable )r  r/  scoper  r   r   rZ  r   Parserparse_evaluate_statementlinesr
   r   ry  )r7   rp  sectionentryrK   r   resr   r:   r:   r;   r    s$    z MachineFileParser._parse_sectionc                   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   argrU   r:   r;   r         z9MachineFileParser._evaluate_statement.<locals>.<listcomp>addZdivzUnsupported node type)rI   r   Z
StringNoderK   ZBooleanNodeZ
NumberNodeZ	ArrayNodery  	argumentsZIdNoder  ZArithmeticNoder  leftrightZ	operationr0   rT   r  r  rr   r   )r7   nodelrr:   rU   r;   r    s2   

z%MachineFileParser._evaluate_statementN)r+  r   r2   r3   )r<   r=   r>   r6   r  r  r:   r:   r:   r;   r    s    
r  c                 C  s   t | }|jS rN   )r  r  )r+  r  r:   r:   r;   parse_machine_files  s   r  	build_dirr0   r2   c                 C  s   t j| ddS )Nmeson-privatezcmd_line.txt)r  r  rr   )r  r:   r:   r;   get_cmd_line_file  s   r  r   r   r3   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    s    z&read_cmd_line_file.<locals>.<dictcomp>r   
propertiesr  z[]r  )r  r  r  r!  r  r&  r   r   cmd_line_optionsr  r   r   r   r  )r  r   filenameconfigdr  r:   r:   r;   read_cmd_line_file  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 )
Nr  r  c                 S     i | ]\}}t |t |qS r:   r  r  r:   r:   r;   r        z'write_cmd_line_file.<locals>.<dictcomp>r   r  r  r  r  )	r  r  r   r  r  r  r   r$  r%  )r  r   r  r  r  r.  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>r  r  r  )r  r  r&  r   r  r   r$  r%  )r  r   r  r  r.  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~   r0   r  r:   r:   r;   r   )  s     z+format_cmd_line_options.<locals>.<listcomp>c                 S     g | ]}d | qS )z--cross-file=r:   r   r.  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   r  r  rr   )r   Zcmdliner:   r:   r;   format_cmd_line_options(  s   r  v1v2rF   c                 C  s<   |  dd\}}| dd\}}||kpd||hv o||kS )Nr4   r   Z99)rsplit)r  r  Zv1_majorZv1_minorZv2_majorZv2_minorr:   r:   r;   major_versions_differ0  s   r  c                 C  s   t j| dd}t|dtS )Nr  coredata.datZCoredata)r  r  rr   r   r   )r  r  r:   r:   r;   load6  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)r  r  rr   r  r  r
   r   shutilcopyfiler$  pickledumpflushfsyncfilenorZ  )r  r  r  Zprev_filenameZtempfilenamer  r.  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 )
Nr   z (just for host machine)z (just for build machine)z-Drq   projectoptionsr<  zNSet the value of an option, can be used several times to set multiple options.)actiondestr   metavarhelp)r3  r   add_to_argparser0   rJ  r  add_argument)r  nbr:   r:   r;   register_builtin_argumentsL  s   
r  r   r   rE  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   rW  z, must have a value separated by equals sign.rF  )r   r   rx   r
   r   r`  rI  )r   rE  rs  r  r   rK   r   r:   r:   r;   create_options_dictU  s   

r  ry  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 rN   )r  )r   r   r:   r:   r;   r  h  r  z)parse_cmd_line_options.<locals>.<genexpr>zGot argument z as both -Dz and z. Pick one.)r  r  r  r   r3  r   rJ  r0   r[   BuiltinOptionargparse_name_to_argr
   delattr)ry  r   r   rK   cmdline_namer:   r:   r;   parse_cmd_line_optionsb  s$   



r  _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rC   rJ   opt_type
T.Type[_U]rB   r0   r   rL   rE   rF   rC   rJ   c                C  s(   || _ || _|| _|| _|| _|| _d S rN   )r  rB   r   rC   rE   rJ   )r7   r  rB   r   rE   rC   rJ   r:   r:   r;   r6     s   
zBuiltinOption.__init__r   'OptionKey'rK   T.Optional[T.Any]r:  r2   r  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)rE   rK   rC   )r  rE   rC   r  rB   rJ   )r7   r   rK   r:  keywordsr  r:   r:   r;   rP    s   
zBuiltinOption.init_optionT.Optional[str]c                 C  s   t | jtrdS d S )N
store_true)rI   r   rF   rU   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 rf   )r  re   r   r   rC   rU   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_argr   c                 C  s:   | j ttfv r
| jS zt| | W S  ty   Y | jS w rN   )r  r   rm   r   r@  r   )r7   r   r:  r:   r:   r;   r    s   zBuiltinOption.prefixed_defaultr  r  help_suffixr3   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: {}).r4   r  rC   r   r  r  )r   r	  r  rB   r~   rstripr  argparseZSUPPRESSr  r  )	r7   r   r  r  kwargsrt   r  hr  r:   r:   r;   r    s   

zBuiltinOption.add_to_argparser   )r  r  rB   r0   r   rL   rE   rF   rC   rL   rJ   rF   )r   r  rK   r  r:  r0   r2   r  )r2   r  )r2   rL   )r   r0   r2   r0   r   )r   r  r:  r0   r2   rL   )r   r0   r  r  r  r0   r2   r3   )r<   r=   r>   r?   r6   rP  r  r	  r  r  r  r  r:   r:   r:   r;   r  x  s    
	

	r  r:  zInstallation prefixZbindirzExecutable directorybinZdatadirzData file directoryZ
includedirzHeader file directoryZinfodirzInfo page directoryr2  zLibrary directoryZ
licensedirzLicenses directoryZ
libexecdirzLibrary executable directory	localedirzLocale data directoryZlocalstatedirzLocalstate data directoryvarZmandirzManual page directoryZsbindirzSystem executable directoryZsharedstatedirz'Architecture-independent data directoryZcomZ
sysconfdirzSysconf data directoryrM  BUILTIN_DIR_OPTIONSZauto_featuresz%Override value of all 'auto' featuresr   ZbackendzBackend to user*   Tr   r\  zBuild type to useri  )rh  ri  rk  rm  ro  rq  r   z*Enable debug symbols and other informationZdefault_libraryzDefault library typeshared)r  staticZboth)rC   rE   Z	errorlogsz,Whether to print the logs from failing testsZinstall_umaskz8Default umask to apply on permissions of installed filesZ022ZlayoutzBuild directory layoutZmirrorZflatrr  zOptimization levelrj  )rh  rj  g1rl  rn  rp  Zprefer_staticz3Whether to try static linking before shared linkingZstdsplitz$Split stdout and stderr in test logsr   zStrip targets on installZunityzUnity buildoff)onr  ZsubprojectsZ
unity_sizezUnity block size)r   N   r
  zCompiler warning level to user  )rj  r  rl  rn  Z
everythingZwerrorzTreat warnings as errors)rE   rT  z	Wrap moder   )r   Z
nofallbackZ
nodownloadZforcefallbackZ	nopromoter]  z$Force fallback for those subprojectsZvsenvz"Activate Visual Studio environment)rJ   ZrelocatableZ	pkgconfig)modulez'Generate pkgconfig files as relocatableZinstall_envpythonz&Which python environment to install to)r   r:  systemvenv
platlibdirz5Directory for site-specific, platform-specific files.Z
purelibdirz9Directory for site-specific, non-platform-specific files.BUILTIN_CORE_OPTIONSr   z1List of additional paths for pkg-config to searchr   z/List of additional prefixes for cmake to searchrJ  /usrz/etcz/varz
/var/local)r$  z
/usr/localz/var/libz/var/local/libz#T.Dict[OptionKey, T.Dict[str, str]]r@  >   ZPHONYzcoverage-xmlinstallz
clean-gcda	benchmarkzbuild.ninjareconfigurez
scan-buildZcoverager   zcoverage-textZphonydistzcoverage-htmlZ	uninstallZ	distcheckcleanzclean-ctlistallz
clean-gcno)r  r0   r2   r0   )r  r0   r   r   r2   r3   )r  r0   r   r   )r   r   r2   r0   )r  r0   r  r0   r2   rF   )r  r0   r2   r   )r  r   r  r0   r2   r0   )r  r  r2   r3   r  )r   r   rE  r0   r2   r  )ry  r   r2   r3   )}
__future__r   r/  r   r   r   r  r  r  r'  	itertoolsr   pathlibr   collectionsr   Zmesonlibr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   wrapr   r   r  configparserenumr  typingTTYPE_CHECKINGr    Zcompilers.compilersr!   r"   r#   Zdependencies.detectr$   environmentr%   r&   r'   Zcmake.traceparserr(   UnionDictr0   ZOptionDictTypeZMutableKeyedOptionDictTypeZKeyedOptionDictTypeTupleZCompilerCheckCacheKeyZRunCheckCacheKeybytesPathLikeZStrOrBytesPathr  Zbackendlistrd   TypeVarr-   r.   GenericrA   r^   rF   re   rS   rm   ry   r|   r   Listr   r   Enumr   r   r   r   r   r   ConfigParserr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  __annotations__r#  r   r3  rJ  r@  	frozensetZFORBIDDEN_TARGET_NAMESr:   r:   r:   r;   <module>   s  \	
(
	  =G
   m;








	
O






%