o
    Wod                  	   @  sR  U 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mZm	Z	 ddl
mZ ddl
mZ ddl
mZ ddl
mZ dd	lmZmZmZmZ 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* ddl+m,Z,m-Z- ddl.m/Z/m0Z0m1Z1 ddl2m3Z3 ddlm4Z4m5Z5m6Z6m7Z7 d dl8Z9e9j:rddl
m;Z; ddl<m=Z= ddl>m?Z? ddlm@Z@mAZAmBZBmCZCmDZDmEZEmFZF ddlGmHZH d dlImJZJ G dd deJZKedeLe,fZMdeNd< 		ddd'd(ZOdd+d,ZPG d-d. d.eejQ ZRG d/d0 d0eZSG d1d2 d2eejT eZUed3eLe,fZVdeNd4< G d5d6 d6eejW eZXed7eYd8d9ed:eYd8d9ed;eYd8d9ed<eYd8d9ed=eYd8d9gZZG d>d? d?ee/ Z[G d@dA dAee3 Z\G dBdC dCee0 Z]G dDdE dEedF Z^G dGdH dHeej_ Z`G dIdJ dJeeja ZbG dKdL dLeejc ZdG dMdN dNeeje ZfG dOdP dPeejg ZhG dQdR dReeji ZjG dSdT dTeejk ZlG dUdV dVeejm ZnG dWdX dXeejo ZpG dYdZ dZeZqG d[d\ d\e4ZrG d]d^ d^eZsG d_d` d`ee ZtG dadb dbeteZue9jvdce9jwejxejyf ddZzG dedf dfeez Z{G dgdh dhe{ej| Z}G didj dje{ej~ ZG dkdl dle{ej ZG dmdn dne{ejy ZG dodp dpe{ej ZG dqdr dre{ej ZG dsdt dteej ZG dudv dveej ZG dwdx dxeej ZG dydz dzeej ZG d{d| d|eej ZG d}d~ d~eej ZG dd deej ZdS )    )annotationsN)PathPurePath   )mesonlib)coredata)build)mlog)ModuleReturnValueModuleObjectModuleStateExtensionModule)TestProtocol)ContainerTypeInfo	KwargInfoMesonOperatorMesonInterpreterObjectObjectHolderMutableInterpreterObject
FeatureNewFeatureDeprecatedtyped_pos_argstyped_kwargstyped_operatornoArgsFlattening	noPosargsnoKwargsunholder_returnflattenresolve_second_level_holdersInterpreterExceptionInvalidArgumentsInvalidCode)NoneTypeENV_SEPARATOR_KW)
DependencyExternalLibraryInternalDependency)ExternalProgram)HoldableObject	OptionKeylistify
Popen_safe   )kwargs)CMakeInterpreter)MachineInfo)FeatureCheckBaseInterpreterObject
SubProjectTYPE_varTYPE_kwargs	TYPE_nvarTYPE_nkwargs)Interpreter)	TypedDictc                   @  s   e Zd ZU ded< dS )EnvironmentSeparatorKWstr	separatorN)__name__
__module____qualname____annotations__ rA   rA   home/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/interpreter/interpreterobjects.pyr:   (   s   
 r:   error_messagezKwargInfo[T.Optional[str]]_ERROR_MSG_KWTr.   'kwargs.ExtractRequired'
subproject'SubProject'feature_checkT.Optional[FeatureCheckBase]defaultboolreturn$T.Tuple[bool, bool, T.Optional[str]]c                 C  s   |  d|}d}d}d }t|tjr/|stdd}|| |j}| r(d}n| r.d}nt|t	r7|}nt
d|| d< |||fS )NrequiredFzUser option "feature"z0.47.0Tz=required keyword argument must be boolean or a feature option)get
isinstancer   UserFeatureOptionr   usenameZis_disabled
is_enabledrK   r    )r.   rF   rH   rJ   valdisabledrN   ZfeaturerA   rA   rB   extract_required_kwarg/   s&   



rW   'kwargs.ExtractSearchDirs'T.List[str]c                 C  sf   t | dg }dd |D }|D ]}t  r|jdrq| s+td| dqdd |D S )Ndirsc                 S  s   g | ]}t | qS rA   )r   
expanduser).0drA   rA   rB   
<listcomp>N   s    z'extract_search_dirs.<locals>.<listcomp>\zSearch directory z is not an absolute path.c                 S  s   g | ]}t |qS rA   )r;   )r\   srA   rA   rB   r^   V       )r   ZstringlistifyrO   Z
is_windowsroot
startswithis_absoluter"   )r.   Zsearch_dirs_strZsearch_dirsr]   rA   rA   rB   extract_search_dirsL   s   re   c                      sX  e Zd Zd: fddZed;d	d
Zd<ddZd<ddZee	d=ddZ
ee	d=ddZee	eddd=ddZee	d=ddZd>d!d"Zed#ded$eed$ed?d'd(Zed)d*ed+eed+ed?d,d-Zed.d*ed/eed/ed?d0d1Zed2de	ed3ed@d4d5Zed6d*e	ed7ed@d8d9Z  ZS )AFeatureOptionHolderoptioncoredata.UserFeatureOptioninterpreter'Interpreter'c                   s   t  || |r%| r%td| jjjtd }t		|| _
|j| j
_| j| j| j| j| j| j| j| j| j| jd	 d S )Nrh   Zauto_features)	enabledrV   allowedautorequireZdisable_auto_ifZenable_auto_ifZ
disable_ifZ	enable_if)super__init__Zis_autoTcastenvr   optionsr*   copyheld_objectrS   methodsupdateenabled_methoddisabled_methodallowed_methodauto_methodrequire_methoddisable_auto_if_methodenable_auto_if_methoddisable_if_methodenable_if_method)selfrg   ri   rm   	__class__rA   rB   rp   Y   s   

zFeatureOptionHolder.__init__rL   r;   c                 C  s   | j sdS | j jS NrV   )rv   valuer   rA   rA   rB   r   k   s   zFeatureOptionHolder.valuec                 C     t | j}d|_|S r   ru   deepcopyrv   r   )r   rV   rA   rA   rB   as_disabledo      zFeatureOptionHolder.as_disabledc                 C  r   Nrk   r   )r   rk   rA   rA   rB   
as_enabledt   r   zFeatureOptionHolder.as_enabledargsT.List[TYPE_var]r.   r5   rK   c                 C  
   | j dkS r   r   r   r   r.   rA   rA   rB   ry   y      
z"FeatureOptionHolder.enabled_methodc                 C  r   r   r   r   rA   rA   rB   rz   ~   r   z#FeatureOptionHolder.disabled_methodzfeature_option.allowed()0.59.0c                 C  s
   | j dkS r   r   r   rA   rA   rB   r{         
z"FeatureOptionHolder.allowed_methodc                 C  r   )Nrm   r   r   rA   rA   rB   r|      r   zFeatureOptionHolder.auto_method	conditionmessageT.Optional[str]c                 C  sL   |st | jS | jdkr"d| jj d}|r|d| 7 }t||  S )Nrk   Feature z cannot be enabled: )ru   r   rv   r   rS   r    r   )r   r   r   err_msgrA   rA   rB   _disable_if   s   
zFeatureOptionHolder._disable_ifzfeature_option.require()zfeature_option.requireT.Tuple[bool]'kwargs.FeatureOptionRequire'c                 C  s   |  |d  |d S Nr   rC   r   r   rA   rA   rB   r}      s   z"FeatureOptionHolder.require_methodzfeature_option.disable_if()z1.1.0zfeature_option.disable_ifc                 C  s   |  |d |d S r   r   r   rA   rA   rB   r      s   z%FeatureOptionHolder.disable_if_methodzfeature_option.enable_if()zfeature_option.enable_ifc                 C  sX   |d s
t | jS | jdkr(d| jj d}|d r$|d|d  7 }t||  S )Nr   rV   r   z cannot be disabledrC   r   )ru   r   rv   r   rS   r    r   )r   r   r.   r   rA   rA   rB   r      s   
z$FeatureOptionHolder.enable_if_methodz feature_option.disable_auto_if()zfeature_option.disable_auto_ifc                 C  s&   | j dks	|d st| jS |  S Nrm   r   )r   ru   r   rv   r   r   rA   rA   rB   r~         &z*FeatureOptionHolder.disable_auto_if_methodzfeature_option.enable_auto_if()zfeature_option.enable_auto_ifc                 C  s&   | j dkr|d r|  S t| jS r   )r   r   ru   r   rv   r   rA   rA   rB   r      r   z)FeatureOptionHolder.enable_auto_if_method)rg   rh   ri   rj   rL   r;   )rL   rh   r   r   r.   r5   rL   rK   )r   rK   r   r   rL   rh   )r   r   r.   r   rL   rh   )r   r   r.   r5   rL   rh   )r=   r>   r?   rp   propertyr   r   r   r   r   ry   rz   r   r{   r|   r   r   rK   r   rD   r}   r   r   r~   r   __classcell__rA   rA   r   rB   rf   X   sb    


rf   c                      sj   e Zd Z			d#d$ fddZ	d%d&ddZeed'ddZeed(dd Zeed(d!d"Z	  Z
S ))
RunProcessFTcmdr(   r   rY   rs   build.EnvironmentVariables
source_dirr;   	build_dirsubdirmesonintrospectin_builddirrK   checkcapturerL   Nonec                   sf   t    t|tstd|
| _| |||||||||		\| _| _| _	| j
| j| j| jd d S )Nz1BUG: RunProcess must be passed an ExternalProgram)
returncodestdoutstderr)ro   rp   rP   r(   AssertionErrorr   run_commandr   r   r   rw   rx   returncode_methodstdout_methodstderr_method)r   r   r   rs   r   r   r   r   r   r   r   r   rA   rB   rp      s   

&
zRunProcess.__init__T.Tuple[int, str, str]c
                 C  sB  |  | }
|||ddd |D d}|rtj||}ntj||}tj }|| ||}| jr;t	j
nt	j}tdt|
 zIt|
|||d\}}}| jratd t| nd}td	 td
 t| td |	r|jdkrtdt|
|j|j||fW S  ty   tdt|
 w )N c                 S  s   g | ]}t |qS rA   )shlexquote)r\   xrA   rA   rB   r^      s    z*RunProcess.run_command.<locals>.<listcomp>)ZMESON_SOURCE_ROOTZMESON_BUILD_ROOTZMESON_SUBDIRZMESONINTROSPECTzRunning command:)r   rs   cwdz--- stdout --- z--- stdout disabled ---z--- stderr ---r   z#Command `{}` failed with status {}.zCould not execute command `%s`.)Zget_commandjoinospathenvironru   rx   Zget_envr   
subprocessPIPEDEVNULLr	   debugr   Z	join_argsr,   r   r    formatFileNotFoundError)r   r   r   rs   r   r   r   r   r   r   Zcommand_arrayZmenvr   Z	child_envr   poerA   rA   rB   r      s<   








zRunProcess.run_commandr   r.   r5   intc                 C     | j S N)r   r   rA   rA   rB   r        zRunProcess.returncode_methodc                 C  r   r   )r   r   rA   rA   rB   r     r   zRunProcess.stdout_methodc                 C  r   r   )r   r   rA   rA   rB   r     r   zRunProcess.stderr_method)FFT)r   r(   r   rY   rs   r   r   r;   r   r;   r   r;   r   rY   r   rK   r   rK   r   rK   rL   r   )F)r   r(   r   rY   rs   r   r   r;   r   r;   r   r;   r   rY   r   rK   r   rK   rL   r   )r   r   r.   r5   rL   r   r   r   r.   r5   rL   r;   )r=   r>   r?   rp   r   r   r   r   r   r   r   rA   rA   r   rB   r      s     
,r   c                      s   e Zd Zd# fddZd$d	d
Zd%ddZd&ddZedeedde	de
d'ddZedeedde	de
d'ddZed eedde	d e
d'd!d"Z  ZS )(EnvironmentVariablesHolderobjr   ri   rj   c                   ,   t  || | j| j| j| jd d S )N)setappendprepend)ro   rp   rw   rx   
set_methodappend_methodprepend_methodr   r   ri   r   rA   rB   rp     
   
z#EnvironmentVariablesHolder.__init__rL   r;   c                 C  s   d}| | jj| jjS )Nz
<{0}: {1}>)r   r   r=   rv   envvars)r   repr_strrA   rA   rB   __repr__$  s   z#EnvironmentVariablesHolder.__repr__memoT.Dict[str, object]'EnvironmentVariablesHolder'c                 C     t t| j| jS r   )r   ru   r   rv   ri   r   r   rA   rA   rB   __deepcopy__(  s   z'EnvironmentVariablesHolder.__deepcopy__rS   r   c                 C  s6   | j |rd|d}t|d| j| j d S d S )Nz2Overriding previous value of environment variable z with a new one0.58.0)rv   Zhas_namer   rR   rF   current_node)r   rS   mrA   rA   rB   warn_if_has_name,  s   z+EnvironmentVariablesHolder.warn_if_has_namezenvironment.setr-   )varargsmin_varargsr   T.Tuple[str, T.List[str]]r.   'EnvironmentSeparatorKW'c                 C  s    |\}}| j |||d  d S Nr<   )rv   r   r   r   r.   rS   valuesrA   rA   rB   r   2  s   z%EnvironmentVariablesHolder.set_methodzenvironment.appendc                 C  *   |\}}|  | | j|||d  d S r   )r   rv   r   r   rA   rA   rB   r   8     
z(EnvironmentVariablesHolder.append_methodzenvironment.prependc                 C  r   r   )r   rv   r   r   rA   rA   rB   r   ?  r   z)EnvironmentVariablesHolder.prepend_method)r   r   ri   rj   r   )r   r   rL   r   )rS   r;   rL   r   )r   r   r.   r   rL   r   )r=   r>   r?   rp   r   r   r   r   r;   r   r$   r   r   r   r   rA   rA   r   rB   r     s    


r   description_CONF_DATA_SET_KWSc                      sj  e Zd ZdE fddZdFddZdGddZdHddZedeee	e
fededIddZedeeededJddZedee	e
fededKd d!Zed"ee	e
fedLd%d&Zed'd(ed)eee	e
fgd*edMd-d.Zed/d0ed1eee	e
fgd*edMd2d3ZdNd7d8Zed9d:eedOd=d>ZdPd?d@ZedAejedQdCdDZ  ZS )RConfigurationDataHolderr   build.ConfigurationDatari   rj   c                   s@   t  || | j| j| j| j| j| j| j	| j
| jd d S )N)r   Zset10Z
set_quotedZhasrO   keysZget_unquotedZ
merge_from)ro   rp   rw   rx   r   set10_methodset_quoted_method
has_method
get_methodkeys_methodget_unquoted_methodmerge_from_methodr   r   rA   rB   rp   L  s   
z ConfigurationDataHolder.__init__r   T.DictrL   'ConfigurationDataHolder'c                 C  r   r   )r   ru   r   rv   ri   r   rA   rA   rB   r   X  s   z$ConfigurationDataHolder.__deepcopy__rK   c                 C     | j jS r   )rv   usedr   rA   rA   rB   is_used[  s   zConfigurationDataHolder.is_usedr   c                 C  s   |   rtdd S )Nz>Can not set values on configuration object that has been used.)r  r    r   rA   rA   rB   Z__check_used^  s   z$ConfigurationDataHolder.__check_usedzconfiguration_data.setr   %T.Tuple[str, T.Union[str, int, bool]]r.   'kwargs.ConfigurationDataSet'c                 C  s(   |    |d |d f| jj|d < d S )Nr-   r   r   )$_ConfigurationDataHolder__check_usedrv   r   r   rA   rA   rB   r   b  s    z"ConfigurationDataHolder.set_methodzconfiguration_data.set_quotedT.Tuple[str, str]c                 C  s@   |    d|d d}d| d|d f| jj|d < d S )Nz\"r-   "r   r   )r  r   splitrv   r   )r   r   r.   Zescaped_valrA   rA   rB   r   h  s   $z)ConfigurationDataHolder.set_quoted_methodzconfiguration_data.set10 T.Tuple[str, T.Union[int, bool]]c                 C  sj   |    t|d ts#tjd| jjd |d dk r#tjd| jjd t|d |d f| j	j
|d < d S )Nr-   zZconfiguration_data.set10 with number. the `set10` method should only be used with booleans)locationr   zwPassing a number that is less than 0 may not have the intended result, as meson will treat all non-zero values as true.r   )r  rP   rK   r	   Zdeprecationri   r   warningr   rv   r   r   rA   rA   rB   r   o  s   $z$ConfigurationDataHolder.set10_methodzconfiguration_data.has T.Tuple[T.Union[str, int, bool]]r5   c                 C  s   |d | j jv S Nr   rv   r   r   rA   rA   rB   r        z"ConfigurationDataHolder.has_methodzconfiguration_data.get()z0.38.0zconfiguration_data.getZoptargs1T.Tuple[str, T.Optional[T.Union[str, int, bool]]]T.Union[str, int, bool]c                 C  sF   |d }|| j v r| j |d S |d d ur|d S td| d)Nr   r-   Entry  not in configuration data.)rv   rO   r    )r   r   r.   rS   rA   rA   rB   r     s   
z"ConfigurationDataHolder.get_methodz!configuration_data.get_unquoted()0.44.0zconfiguration_data.get_unquotedc                 C  s|   |d }|| j v r| j |d }n|d d ur|d }ntd| dt|tr<|d dkr<|d dkr<|dd S |S )Nr   r-   r  r  r
  )rv   rO   r    rP   r;   )r   r   r.   rS   rU   rA   rA   rB   r     s   

"z+ConfigurationDataHolder.get_unquoted_methodrS   r;   1T.Tuple[T.Union[str, int, bool], T.Optional[str]]c                 C  s   | j j| S r   r  )r   rS   rA   rA   rB   rO        zConfigurationDataHolder.getzconfiguration_data.keys()0.57.0r   rY   c                 C  s   t |  S r   )sortedr   r   rA   rA   rB   r     s   z#ConfigurationDataHolder.keys_methodc                 C  s   t | jj S r   )listrv   r   r   r   rA   rA   rB   r     s   zConfigurationDataHolder.keyszconfiguration_data.merge_from T.Tuple[build.ConfigurationData]c                 C  s   |d }| j j|j d S r  )rv   r   rx   )r   r   r.   Zfrom_objectrA   rA   rB   r     s   z)ConfigurationDataHolder.merge_from_method)r   r   ri   rj   )r   r  rL   r  rL   rK   )rL   r   )r   r  r.   r  rL   r   )r   r	  r.   r  rL   r   )r   r  r.   r  rL   r   )r   r  r.   r5   rL   rK   )r   r  r.   r5   rL   r  )rS   r;   rL   r  )r   r   r.   r5   rL   rY   )rL   rY   )r   r  r.   r5   rL   r   )r=   r>   r?   rp   r   r  r  r   r;   r   rK   r   r   r   r   r   r   r   r   r   r   rO   r   r   r   r   ConfigurationDatar   r   rA   rA   r   rB   r   J  sD    



	


r   Zcompile_argsF)rJ   Z	link_argsZlinksincludessourcesc                      s  e Zd ZdL fddZdMd	d
ZeedNddZeedOddZeedNddZ	eedNddZ
edddedeededeefedeeeddg ddd  d!dPd$d%Zed&d'ed&dd(eed)edQd*d+Zed,d-eed,geR  dRd0d1Zed2d3ed2egd4ed2ed5eefed6eefed7eefed8eefd9d:ed;eefed<eeeddg dd=dSd@dAZedBdCeedNdDdEZedFdCeedFegd4dTdGdHZedIdeedUdJdKZ  ZS )VDependencyHolderdepr%   ri   rj   c                   sL   t  || | j| j| j| j| j| j| j	| j
| j| j| j| jd d S )N)found	type_nameversionrS   get_pkgconfig_variableget_configtool_variableget_variablepartial_dependencyZinclude_typeZ	as_systemZas_link_whole)ro   rp   rw   rx   found_methodtype_name_methodversion_methodname_methodpkgconfig_methodconfigtool_methodvariable_methodpartial_dependency_methodinclude_type_methodas_system_methodas_link_whole_method)r   r%  ri   r   rA   rB   rp     s   
zDependencyHolder.__init__rL   rK   c                 C  s   |  g i S r   )r-  r   rA   rA   rB   r&    r  zDependencyHolder.foundr   r   r.   r5   r;   c                 C  r  r   rv   r'  r   rA   rA   rB   r.       z!DependencyHolder.type_name_methodc                 C  s   | j jdkrdS | j  S )NinternalT)rv   r'  r&  r   rA   rA   rB   r-    s   
zDependencyHolder.found_methodc                 C  
   | j  S r   )rv   get_versionr   rA   rA   rB   r/    r   zDependencyHolder.version_methodc                 C  r;  r   )rv   get_namer   rA   rA   rB   r0    r   zDependencyHolder.name_methodz!dependency.get_pkgconfig_variablez0.56.0z4use dependency.get_variable(pkgconfig : ...) insteadrJ   Zdefine_variableT)pairsc                 C  s   t | dvrdS d S )N>   r   r   zmust be of length 2 or empty)len)r   rA   rA   rB   <lambda>  ra   zDependencyHolder.<lambda>)rJ   r+   	validatorT.Tuple[str]'kwargs.DependencyPkgConfigVar'c                 C  s   | j j|d fi |S r  )rv   r)  r   rA   rA   rB   r1    s   z!DependencyHolder.pkgconfig_methodz"dependency.get_configtool_variabler  z5use dependency.get_variable(configtool : ...) insteadz#dependency.get_config_tool_variablec                 C     | j |d S r  )rv   r*  r   rA   rA   rB   r2    s   z"DependencyHolder.configtool_methoddependency.partial_dependency0.46.0T.List[TYPE_nvar]*'kwargs.DependencyMethodPartialDependency'c                 C     | j jdi |}|S NrA   rv   Zget_partial_dependencyr   r   r.   ZpdeprA   rA   rB   r4       z*DependencyHolder.partial_dependency_methodzdependency.get_variablez0.51.0r  cmake	pkgconfig
configtoolr:  0.54.0sincedefault_valuepkgconfig_define)rJ   r+   T.Tuple[T.Optional[str]]'kwargs.DependencyGetVariable'c                 C  sf   |d }|d urt dd| j| j | jj|d p||d p ||d p%||d p*||d |d	 d
S )Nr   z0Positional argument to dependency.get_variable()r   rN  rO  rP  r:  rT  rU  )rN  rO  rP  r:  rT  rU  )r   rR   rF   r   rv   r+  )r   r   r.   Zdefault_varnamerA   rA   rB   r3    s   



z DependencyHolder.variable_methodzdependency.include_typez0.52.0c                 C  r;  r   )rv   Zget_include_typer   rA   rA   rB   r5    r   z$DependencyHolder.include_type_methodzdependency.as_systemc                 C  s   | j |d pdS )Nr   system)rv   Zgenerate_system_dependencyr   rA   rA   rB   r6  #  s   z!DependencyHolder.as_system_methodzdependency.as_link_wholec                 C  s"   t | jts
td| j }|S )NzFas_link_whole method is only supported on declare_dependency() objects)rP   rv   r'   r    Zgenerate_link_whole_dependency)r   r   r.   Znew_deprA   rA   rB   r7  )  s   
z%DependencyHolder.as_link_whole_method)r%  r%   ri   rj   r   r   r   )r   rB  r.   rC  rL   r;   )r   rB  r.   r5   rL   r;   r   rG  r.   rH  rL   r%   )r   rV  r.   rW  rL   r;   )r   rV  r.   r5   rL   r%   )r   r   r.   r5   rL   r%   )r=   r>   r?   rp   r&  r   r   r.  r-  r/  r0  r   r   r;   r   r   r#   r   r  r1  r   r2  _PARTIAL_DEP_KWARGSr4  r3  r5  r6  r7  r   rA   rA   r   rB   r$    s    
	r$  c                      s   e Zd Zd! fddZeed"ddZeeedddd#ddZeee	ddd#ddZ
d$ddZeee	ddd#ddZd%dd Z  ZS )&ExternalProgramHolderepr(   ri   rj   rL   r   c                   0   t  || | j| j| j| j| jd d S )N)r&  r   r(  	full_path)ro   rp   rw   rx   r-  path_methodr/  full_path_method)r   r\  ri   r   rA   rB   rp   3     
zExternalProgramHolder.__init__r   r   r.   r5   rK   c                 C     |   S r   r&  r   rA   rA   rB   r-  :  r9  z"ExternalProgramHolder.found_methodzExternalProgram.path0.55.0z'use ExternalProgram.full_path() insteadr;   c                 C  rb  r   
_full_pathr   rA   rA   rB   r_  ?  s   z!ExternalProgramHolder.path_methodzExternalProgram.full_pathc                 C  rb  r   re  r   rA   rA   rB   r`  F     z&ExternalProgramHolder.full_path_methodc                 C  s*   |   std| j }|d usJ |S )Nz6Unable to get the path of a not-found external program)r&  r    rv   get_path)r   r   rA   rA   rB   rf  L  s
   
z ExternalProgramHolder._full_pathzExternalProgram.versionz0.62.0c                 C  s8   |   stdz| j| jW S  tjy   Y dS w )Nz9Unable to get the version of a not-found external programunknown)r&  r    rv   r<  ri   r   ZMesonExceptionr   rA   rA   rB   r/  S  s   z$ExternalProgramHolder.version_methodc                 C  r;  r   rv   r&  r   rA   rA   rB   r&  ^  s   
zExternalProgramHolder.found)r\  r(   ri   rj   rL   r   r   r   r   r   )r=   r>   r?   rp   r   r   r-  r   r_  r   r`  rf  r/  r&  r   rA   rA   r   rB   r[  2  s*    
r[  c                      sj   e Zd Zd fddZeedddZeedddZeddee	dge
R  dddZ  ZS )ExternalLibraryHolderelr&   ri   rj   c                   r   )N)r&  r'  r,  )ro   rp   rw   rx   r-  r.  r4  )r   rl  ri   r   rA   rB   rp   b  r   zExternalLibraryHolder.__init__r   r   r.   r5   rL   r;   c                 C  r  r   r8  r   rA   rA   rB   r.  i  r9  z&ExternalLibraryHolder.type_name_methodrK   c                 C  r;  r   rj  r   rA   rA   rB   r-  n  r   z"ExternalLibraryHolder.found_methodrE  rF  rG  rH  r%   c                 C  rI  rJ  rK  rL  rA   rA   rB   r4  s  rM  z/ExternalLibraryHolder.partial_dependency_method)rl  r&   ri   rj   r   r   rY  )r=   r>   r?   rp   r   r   r.  r-  r   r   rZ  r4  r   rA   rA   r   rB   rk  a  s    rk  c                      sf   e Zd Zd fddZeedddZeedddZeedddZeedddZ	  Z
S )MachineHoldermachine_info'MachineInfo'ri   rj   c                   r]  )N)rX  cpu
cpu_familyendian)ro   rp   rw   rx   system_method
cpu_methodcpu_family_methodendian_method)r   rn  ri   r   rA   rB   rp   |  ra  zMachineHolder.__init__r   r   r.   r5   rL   r;   c                 C  r  r   )rv   rq  r   rA   rA   rB   ru    r9  zMachineHolder.cpu_family_methodc                 C  r  r   )rv   rp  r   rA   rA   rB   rt    r9  zMachineHolder.cpu_methodc                 C  r  r   )rv   rX  r   rA   rA   rB   rs    r9  zMachineHolder.system_methodc                 C  r  r   )rv   rr  r   rA   rA   rB   rv    r9  zMachineHolder.endian_method)rn  ro  ri   rj   r   )r=   r>   r?   rp   r   r   ru  rt  rs  rv  r   rA   rA   r   rB   rm  {  s    rm  r0   c                   @     e Zd ZdS )IncludeDirsHolderNr=   r>   r?   rA   rA   rA   rB   rx        rx  c                   @  rw  )
FileHolderNry  rA   rA   rA   rB   r{    rz  r{  c                   @  rw  )HeadersHolderNry  rA   rA   rA   rB   r|    rz  r|  c                   @  rw  )
DataHolderNry  rA   rA   rA   rB   r}    rz  r}  c                   @  rw  )SymlinkDataHolderNry  rA   rA   rA   rB   r~    rz  r~  c                   @  rw  )InstallDirHolderNry  rA   rA   rA   rB   r    rz  r  c                   @  rw  )	ManHolderNry  rA   rA   rA   rB   r    rz  r  c                   @  rw  )EmptyDirHolderNry  rA   rA   rA   rB   r    rz  r  c                   @  rw  )GeneratedObjectsHolderNry  rA   rA   rA   rB   r    rz  r  c                      s2   e Zd Zd fddZd ddZd!ddZ  ZS )"TestrS   r;   projectsuiterY   exe>T.Union[ExternalProgram, build.Executable, build.CustomTarget]depends6T.List[T.Union[build.CustomTarget, build.BuildTarget]]is_parallelrK   cmd_args1T.List[T.Union[str, mesonlib.File, build.Target]]rs   r   should_failtimeoutr   workdirr   protocolpriorityverbosec                   sl   t    || _t|| _|| _|| _|| _|| _|| _	|| _
|	| _|
| _|| _t|| _|| _|| _d S r   )ro   rp   rS   r+   r  project_namer  r  r  r  rs   r  r  r  r   Zfrom_strr  r  r  )r   rS   r  r  r  r  r  r  rs   r  r  r  r  r  r  r   rA   rB   rp     s   


zTest.__init__rL   c                 C  r   r   )r  r   rA   rA   rB   get_exe     zTest.get_exec                 C  r   r   )rS   r   rA   rA   rB   r=    r  zTest.get_name)rS   r;   r  r;   r  rY   r  r  r  r  r  rK   r  r  rs   r   r  rK   r  r   r  r   r  r;   r  r   r  rK   )rL   r  r   )r=   r>   r?   rp   r  r=  r   rA   rA   r   rB   r    s    
r  c                   @  rw  )NullSubprojectInterpreterNry  rA   rA   rA   rB   r    rz  r  c                      sX   e Zd Z			dd fddZeedddZd ddZeee	d!ddZ
  ZS )"SubprojectHolderr   Nsubinterpreter1T.Union['Interpreter', NullSubprojectInterpreter]r   r;   warningsr   disabled_featurer   	exceptionT.Optional[Exception]rL   r   c                   sP   t    || _|| _|| _|| _t| | _d | _	| j
| j| jd d S )N)r+  r&  )ro   rp   rv   r  r  r  r   as_posixr   Zcm_interpreterrw   rx   get_variable_methodr-  )r   r  r   r  r  r  r   rA   rB   rp     s   

zSubprojectHolder.__init__r   r   r.   r5   rK   c                 C  rb  r   rc  r   rA   rA   rB   r-    r9  zSubprojectHolder.found_methodc                 C  s   t | jt S r   )rP   rv   r  r   rA   rA   rB   r&    s   zSubprojectHolder.found$T.Union[TYPE_var, InterpreterObject]c                 C  s   t |dk st |dkrtdt| jtrtd| j d|d }t|ts,tdz| jj| W S  ty<   Y nw t |dkrK| j	|d S t
d| d	)
Nr-   r   z(Get_variable takes one or two arguments.zSubproject "z$" disabled can't get_variable on it.r   z-Get_variable first argument must be a string.zRequested variable "z" not found.)r?  r    rP   rv   r  r   r;   	variablesKeyErrorZ
_holderifyr!   )r   r   r.   ZvarnamerA   rA   rB   r    s   
z$SubprojectHolder.get_variable_method)r   NN)r  r  r   r;   r  r   r  r   r  r  rL   r   r   r   )r   r   r.   r5   rL   r  )r=   r>   r?   rp   r   r   r-  r&  r   r   r  r   rA   rA   r   rB   r    s    
r  c                   @  s   e Zd Zdd	d
ZdS )ModuleObjectHoldermethod_namer;   r   r   r.   r5   rL   r4   c                 C  s   | j }|j|}|std|dt|ddst|}t|dds*t||\}}t| j}t	|t
r8| j|_||||}t	|trM| j|j |j}|S )NzUnknown method z in object.zno-args-flatteningFz!no-second-level-holder-flattening)rv   rw   rO   r"   getattrr   r   r   ri   rP   r   r
   Zprocess_new_valuesZnew_objectsreturn_value)r   r  r   r.   modobjmethodstateretrA   rA   rB   method_call  s    


zModuleObjectHolder.method_callN)r  r;   r   r   r.   r5   rL   r4   )r=   r>   r?   r  rA   rA   rA   rB   r        r  c                   @  s   e Zd ZdddZdS )	MutableModuleObjectHolderr   T.Dict[int, T.Any]rL   'MutableModuleObjectHolder'c                 C  s   t | j|}t|| jS r   )ru   r   rv   r  ri   )r   r   r  rA   rA   rB   r     s   z&MutableModuleObjectHolder.__deepcopy__N)r   r  rL   r  )r=   r>   r?   r   rA   rA   rA   rB   r    r  r  _BuildTarget)boundc                      s,  e Zd Zd: fddZd;d	d
Zed<ddZd=ddZee	d>ddZ
ee	d?ddZee	d@ddZee	edddd@dd Zee	d@d!d"Ze	ed#ejeejejejfd$dAd(d)Zeed*ed+ed,d-ed.d/dBd2d3Zee	d@d4d5Ze d6d7ee	d@d8d9Z!  Z"S )CBuildTargetHoldertargetr  interprj   c                   sD   t  || | j| j| j| j| j| j| j	| j
| j| jd	 d S )N)	extract_objectsextract_all_objectsrS   get_idoutdirr^  r   r&  Zprivate_dir_include)ro   rp   rw   rx   extract_objects_methodextract_all_objects_methodr0  get_id_methodoutdir_methodr`  r_  r-  private_dir_include_methodr   r  r  r   rA   rB   rp   (  s   
zBuildTargetHolder.__init__rL   r;   c                 C  s2   d}| j }t|tjsJ || jj| |jS Nz<{} {}: {}>)	rv   rP   r   BuildTargetr   r   r=   r  filenamer   rhrA   rA   rB   r   5  s   zBuildTargetHolder.__repr__build.BuildTargetc                 C  s0   t | jtjr| j S t | jtjsJ | jS r   )rP   rv   r   BothLibrariesZget_default_objectr  r   rA   rA   rB   _target_object;  s   
z BuildTargetHolder._target_objectrK   c                 C  s   | j jj| j j S r   )r  environmentZmachinesZmatches_build_machineZfor_machiner   rA   rA   rB   is_crossB  s   zBuildTargetHolder.is_crossr   r   r.   r5   c                 C  s.   t | jtjr| jjstjdd| jjd dS )NzBuildTarget.foundr   )rF   T)rP   rv   r   
ExecutableZwas_returned_by_find_programr   
single_userF   r   rA   rA   rB   r-  E  s   zBuildTargetHolder.found_methodbuild.IncludeDirsc                 C  s   t dg d| jj| jgS )Nr   F)r   IncludeDirsri   backendZget_target_private_dirr  r   rA   rA   rB   r  L  s   z,BuildTargetHolder.private_dir_include_methodc                 C     | j j| jS r   ri   r  get_target_filename_absr  r   rA   rA   rB   r`  Q  r  z"BuildTargetHolder.full_path_methodzBuildTarget.pathrd  z!Use BuildTarget.full_path insteadc                 C  r  r   r  r   rA   rA   rB   r_  V  s   zBuildTargetHolder.path_methodc                 C  r  r   )ri   r  Zget_target_dirr  r   rA   rA   rB   r  \  r  zBuildTargetHolder.outdir_methodr  )r   GT.Tuple[T.List[T.Union[mesonlib.FileOrString, 'build.GeneratedTypes']]]r7   build.ExtractedObjectsc                 C  rD  r  )r  r  r   rA   rA   rB   r  a  r  z(BuildTargetHolder.extract_objects_methodr  	recursiveFrF  a                  extract_all_objects called without setting recursive
                keyword argument. Meson currently defaults to
                non-recursive to maintain backward compatibility but
                the default will be changed in the future.
            )rJ   rS  Znot_set_warningrG  *'kwargs.BuildTargeMethodExtractAllObjects'c                 C  s   | j |d S )Nr  )r  r  r   rA   rA   rB   r  f  s   z,BuildTargetHolder.extract_all_objects_methodc                 C  r;  r   )r  r  r   rA   rA   rB   r  v  r   zBuildTargetHolder.get_id_methodrS   rQ  c                 C  r  r   )r  rS   r   rA   rA   rB   r0  {  rg  zBuildTargetHolder.name_method)r  r  r  rj   r   )rL   r  r   r   )r   r   r.   r5   rL   r  r   )r   r  r.   r7   rL   r  )r   rG  r.   r  rL   r  )#r=   r>   r?   rp   r   r   r  r  r   r   r-  r  r`  r   r_  r  r   r   Filer;   r   CustomTargetCustomTargetIndexGeneratedListr  r   r   rK   textwrapdedentr  r  r   r0  r   rA   rA   r   rB   r  '  sR    


r  c                   @  rw  )ExecutableHolderNry  rA   rA   rA   rB   r    rz  r  c                   @  rw  )StaticLibraryHolderNry  rA   rA   rA   rB   r    rz  r  c                   @  rw  )SharedLibraryHolderNry  rA   rA   rA   rB   r    rz  r  c                      sL   e Zd Zd fddZdd	d
ZeedddZeedddZ  Z	S )BothLibrariesHolderlibsbuild.BothLibrariesr  rj   c                   s(   t  || | j| j| jd d S )N)Zget_shared_libZget_static_lib)ro   rp   rw   rx   get_shared_lib_methodget_static_lib_method)r   r  r  r   rA   rB   rp     s   
zBothLibrariesHolder.__init__rL   r;   c                 C  s6   d}| j j}| j j}|| jj| |j| |jS )Nz<{} {}: {}, {}: {}>)rv   sharedstaticr   r   r=   r  r  )r   r  Zh1Zh2rA   rA   rB   r     s   "zBothLibrariesHolder.__repr__r   r   r.   r5   build.SharedLibraryc                 C  r  r   )rv   r  r   rA   rA   rB   r    r9  z)BothLibrariesHolder.get_shared_lib_methodbuild.StaticLibraryc                 C  r  r   )rv   r  r   rA   rA   rB   r    r9  z)BothLibrariesHolder.get_static_lib_method)r  r  r  rj   r   )r   r   r.   r5   rL   r  )r   r   r.   r5   rL   r  )
r=   r>   r?   rp   r   r   r   r  r  r   rA   rA   r   rB   r    s    
r  c                   @  rw  )SharedModuleHolderNry  rA   rA   rA   rB   r    rz  r  c                   @  rw  )	JarHolderNry  rA   rA   rA   rB   r    rz  r  c                      s:   e Zd Zd fddZeddeedddZ  ZS )CustomTargetIndexHolderr  build.CustomTargetIndexr  rj   c                   $   t  || | jd| ji d S )Nr^  )ro   rp   rw   rx   r`  r  r   rA   rB   rp        z CustomTargetIndexHolder.__init__zcustom_target[i].full_pathrQ  r   r   r.   r5   rL   r;   c                 C  s    | j jd usJ | j j| jS r   ri   r  r  rv   r   rA   rA   rB   r`    s   z(CustomTargetIndexHolder.full_path_method)r  r  r  rj   r   )	r=   r>   r?   rp   r   r   r   r`  r   rA   rA   r   rB   r    s    r  c                      sp   e Zd Zd fddZdd	d
ZeedddZeddeedddZ	ee
ejedddZ  ZS ) CustomTargetHolderr  'build.CustomTarget'r  rj   c                   s<   t  || | j| j| jd | jtj| j	i d S )N)r^  Zto_list)
ro   rp   rw   rx   r`  to_list_methodZ	operatorsr   INDEXop_indexr  r   rA   rB   rp     s   

zCustomTargetHolder.__init__rL   r;   c                 C  s"   d}| j }|| jj| |jS r  )rv   r   r   r=   r  commandr  rA   rA   rB   r     s   zCustomTargetHolder.__repr__r   r   r.   r5   c                 C  r  r   r  r   rA   rA   rB   r`    r  z#CustomTargetHolder.full_path_methodzcustom_target.to_listrQ  T.List[build.CustomTargetIndex]c                 C  s   g }| j D ]}|| q|S r   )rv   r   )r   r   r.   resultirA   rA   rB   r    s   
z!CustomTargetHolder.to_list_methodotherr   r  c                 C  sB   z| j | W S  ty    td| d| j j dt| j  dw )NzIndex z  out of bounds of custom target z output of size .)rv   
IndexErrorr!   rS   r?  )r   r  rA   rA   rB   r    s
   &zCustomTargetHolder.op_index)r  r  r  rj   r   r   )r   r   r.   r5   rL   r  )r  r   rL   r  )r=   r>   r?   rp   r   r   r   r`  r   r  r   r   r  r   r  r   rA   rA   r   rB   r    s    


r  c                   @  rw  )RunTargetHolderNry  rA   rA   rA   rB   r    rz  r  c                   @  rw  )AliasTargetHolderNry  rA   rA   rA   rB   r    rz  r  c                   @  rw  )GeneratedListHolderNry  rA   rA   rA   rB   r    rz  r  c                
      st   e Zd Zd fddZeddeejej	ej
ejfd	eded
eefddedeeedg ddddZ  ZS )GeneratorHoldergenbuild.Generatorri   rj   c                   r  )Nprocess)ro   rp   rw   rx   process_method)r   r  ri   r   rA   rB   rp     r  zGeneratorHolder.__init__zgenerator.processr-   )r   r   preserve_path_fromz0.45.0rR  
extra_argsT)r+   rJ   r   DT.Tuple[T.List[T.Union[str, mesonlib.File, 'build.GeneratedTypes']]]r.   'kwargs.GeneratorProcess'rL   build.GeneratedListc                 C  sz   |d }|d urt j|}t j|stdtdd |d D r,tdd| jj	 | j
j|d | j||d d	}|S )
Nr  z;Preserve_path_from must be an absolute path for now. Sorry.c                 s  s&    | ]}t |tjtjtjfV  qd S r   )rP   r   r  r  r  )r\   arA   rA   rB   	<genexpr>  s   $ z1GeneratorHolder.process_method.<locals>.<genexpr>r   zECalling generator.process with CustomTarget or Index of CustomTarget.r  r  )r  )r   r   normpathisabsr!   anyr   r  ri   rF   rv   Zprocess_files)r   r   r.   r  glrA   rA   rB   r    s   	zGeneratorHolder.process_method)r  r   ri   rj   )r   r  r.   r  rL   r  )r=   r>   r?   rp   r   r;   r   r  r   r  r  r  r   r   r#   r   r  r  r   rA   rA   r   rB   r    s    r  c                      s   e Zd Zd fddZ  ZS )StructuredSourcesHolderr#  build.StructuredSourcesr  rj   c                   s   t  || d S r   )ro   rp   )r   r#  r  r   rA   rB   rp     s   z StructuredSourcesHolder.__init__)r#  r  r  rj   )r=   r>   r?   rp   r   rA   rA   r   rB   r    s    r  )NT)
r.   rE   rF   rG   rH   rI   rJ   rK   rL   rM   )r.   rX   rL   rY   )
__future__r   r   r   r   ru   r  pathlibr   r   r   r   r   r   r	   modulesr
   r   r   r   Zbackend.backendsr   Zinterpreterbaser   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   Zinterpreter.type_checkingr#   r$   dependenciesr%   r&   r'   Zprogramsr(   r)   r*   r+   r,   typingrq   TYPE_CHECKINGr.   Zcmake.interpreterr/   Z	envconfigr0   r1   r2   r3   r4   r5   r6   r7   ri   r8   typing_extensionsr9   r:   r;   rD   r@   rW   re   rQ   rf   r   ZEnvironmentVariablesr   r   r!  r   rK   rZ  r$  r[  rk  rm  r  rx  r  r{  ZHeadersr|  ZDatar}  ZSymlinkDatar~  Z
InstallDirr  ZManr  ZEmptyDirr  ZExtractedObjectsr  r  r  r  r  r  TypeVarUnionr  r  r  r  r  r  ZStaticLibraryr  ZSharedLibraryr  r  ZSharedModuler  ZJarr  r  r  r  r  Z	RunTargetr  ZAliasTargetr  r  r  	Generatorr  ZStructuredSourcesr  rA   rA   rA   rB   <module>   s    X$
qR,kv//Z& 