o
    uJAf|                  	   @  s  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-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3 ddl4m5Z5 ddlm6Z6m7Z7m8Z8m9Z9 d dl:Z;e;j<rddl
m=Z= ddl>m?Z? ddl@mAZA ddlmBZBmCZCmDZDmEZEmFZFmGZGmHZH ddlImJZJ d dlKmLZL G dd deLZMedeNe,fZOdePd< 		ddd'd(ZQdd+d,ZRG d-d. d.eejS ZTG d/d0 d0eZUG d1d2 d2eejV eZWed3eNe,fZXdePd4< G d5d6 d6eejY eZZed7e[d8d9ed:e[d8d9ed;e[d8d9ed<e[d8d9ed=e[d8d9gZ\G d>d? d?ee1 Z]e;j^d@e5dAZ_G dBdC dCee_ Z`G dDdE dEe`e5 ZaG dFdG dGee2 ZbG dHdI dIedJ ZcG dKdL dLeejd ZeG dMdN dNeejf ZgG dOdP dPeejh ZiG dQdR dReejj ZkG dSdT dTeejl ZmG dUdV dVeejn ZoG dWdX dXeejp ZqG dYdZ dZeejr ZsG d[d\ d\eejt ZuG d]d^ d^eZvG d_d` d`e6ZwG dadb dbeZxG dcdd ddee ZyG dedf dfeyeZze;j^dge;j{ej|ej}f dAZ~G dhdi diee~ ZG djdk dkeej ZG dldm dmeej ZG dndo doeej ZG dpdq dqeej} ZG drds dseej ZG dtdu dueej ZG dvdw dweej Ze;j^dxejdAZG dydz dzee ZG d{d| d|eej ZG d}d~ d~eej ZG dd deej ZG dd deej ZG dd deej ZG dd 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_KWENV_SEPARATOR_KWPKGCONFIG_DEFINE_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__ rC   rC   N/usr/lib/python3.10/site-packages/mesonbuild/interpreter/interpreterobjects.pyr<   (   s   
 r<   error_messagezKwargInfo[T.Optional[str]]_ERROR_MSG_KWTr0   '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nameis_disabled
is_enabledrM   r    )r0   rH   rJ   rL   valdisabledrP   featurerC   rC   rD   extract_required_kwarg/   s&   



r[   '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 rC   )r   
expanduser).0drC   rC   rD   
<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 rC   )r=   )r`   srC   rC   rD   rb   V   s    )r   stringlistifyrQ   
is_windowsroot
startswithis_absoluter"   )r0   Zsearch_dirs_strsearch_dirsra   rC   rC   rD   extract_search_dirsL   s   rk   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 )Nrn   auto_features)	enabledrY   allowedautoZrequireZdisable_auto_ifZenable_auto_ifZ
disable_ifZ	enable_if)super__init__is_autoTcastenvr   optionsr,   copyheld_objectrU   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)selfrm   ro   rt   	__class__rC   rD   rv   Y   s   

zFeatureOptionHolder.__init__rN   r=   c                 C  s   | j sdS | j jS NrY   )r}   valuer   rC   rC   rD   r   k   s   zFeatureOptionHolder.valuec                 C     t | j}d|_|S r   r|   deepcopyr}   r   )r   rY   rC   rC   rD   as_disabledo      zFeatureOptionHolder.as_disabledc                 C  r   Nrr   r   )r   rr   rC   rC   rD   
as_enabledt   r   zFeatureOptionHolder.as_enabledargsT.List[TYPE_var]r0   r7   rM   c                 C  
   | j dkS r   r   r   r   r0   rC   rC   rD   r   y      
z"FeatureOptionHolder.enabled_methodc                 C  r   r   r   r   rC   rC   rD   r   ~   r   z#FeatureOptionHolder.disabled_methodzfeature_option.allowed()0.59.0c                 C  s
   | j dkS r   r   r   rC   rC   rD   r         
z"FeatureOptionHolder.allowed_methodc                 C  r   )Nrt   r   r   rC   rC   rD   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 )Nrr   Feature z cannot be enabled: )r|   r   r}   r   rU   r    r   )r   r   r   err_msgrC   rC   rD   _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   rE   r   r   rC   rC   rD   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   rC   rC   rD   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   rY   r   z cannot be disabledrE   r   )r|   r   r}   r   rU   r    r   )r   r   r0   r   rC   rC   rD   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 Nrt   r   )r   r|   r   r}   r   r   rC   rC   rD   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   r|   r   r}   r   rC   rC   rD   r      r   z)FeatureOptionHolder.enable_auto_if_method)rm   rn   ro   rp   rN   r=   )rN   rn   r   r   r0   r7   rN   rM   )r   rM   r   r   rN   rn   )r   r   r0   r   rN   rn   )r   r   r0   r7   rN   rn   )r?   r@   rA   rv   propertyr   r   r   r   r   r   r   r   r   r   r   r   rM   r   rF   r   r   r   r   r   __classcell__rC   rC   r   rD   rl   X   sb    


rl   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   r]   rz   mesonlib.EnvironmentVariables
source_dirr=   	build_dirsubdirmesonintrospectin_builddirrM   checkcapturerN   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)ru   rv   rR   r*   AssertionErrorr   run_commandr   r   r   r~   r   returncode_methodstdout_methodstderr_method)r   r   r   rz   r   r   r   r   r   r   r   r   rC   rD   rv      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 rC   )shlexquote)r`   xrC   rC   rD   rb      s    z*RunProcess.run_command.<locals>.<listcomp>)ZMESON_SOURCE_ROOTZMESON_BUILD_ROOTZMESON_SUBDIRZMESONINTROSPECTzRunning command:)r   rz   cwdz--- stdout --- z--- stdout disabled ---z--- stderr ---r   z#Command `{}` failed with status {}.zCould not execute command `%s`.)get_commandjoinospathenvironr|   r   get_envr   
subprocessPIPEDEVNULLr	   debugr   	join_argsr.   r   r    formatFileNotFoundError)r   r   r   rz   r   r   r   r   r   r   Zcommand_arrayZmenvr   Z	child_envr   poerC   rC   rD   r      s<   








zRunProcess.run_commandr   r0   r7   intc                 C     | j S N)r   r   rC   rC   rD   r        zRunProcess.returncode_methodc                 C  r   r   )r   r   rC   rC   rD   r     r   zRunProcess.stdout_methodc                 C  r   r   )r   r   rC   rC   rD   r     r   zRunProcess.stderr_method)FFT)r   r*   r   r]   rz   r   r   r=   r   r=   r   r=   r   r]   r   rM   r   rM   r   rM   rN   r   )F)r   r*   r   r]   rz   r   r   r=   r   r=   r   r=   r   r]   r   rM   r   rM   rN   r   )r   r   r0   r7   rN   r   r   r   r0   r7   rN   r=   )r?   r@   rA   rv   r   r   r   r   r   r   r   rC   rC   r   rD   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   ro   rp   c                   ,   t  || | j| j| j| jd d S )N)setappendprepend)ru   rv   r~   r   
set_methodappend_methodprepend_methodr   r   ro   r   rC   rD   rv     
   
z#EnvironmentVariablesHolder.__init__rN   r=   c                 C  s   d}| | jj| jjS )Nz
<{0}: {1}>)r   r   r?   r}   envvars)r   repr_strrC   rC   rD   __repr__$  s   z#EnvironmentVariablesHolder.__repr__memoT.Dict[str, object]'EnvironmentVariablesHolder'c                 C     t t| j| jS r   )r   r|   r   r}   ro   r   r   rC   rC   rD   __deepcopy__(  s   z'EnvironmentVariablesHolder.__deepcopy__rU   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)r}   has_namer   rT   rH   current_node)r   rU   mrC   rC   rD   warn_if_has_name,  s   z+EnvironmentVariablesHolder.warn_if_has_namezenvironment.setr/   )varargsmin_varargsr   T.Tuple[str, T.List[str]]r0   'EnvironmentSeparatorKW'c                 C  s    |\}}| j |||d  d S Nr>   )r}   r   r   r   r0   rU   valuesrC   rC   rD   r   2  s   z%EnvironmentVariablesHolder.set_methodzenvironment.appendc                 C  *   |\}}|  | | j|||d  d S r   )r   r}   r   r   rC   rC   rD   r   8     
z(EnvironmentVariablesHolder.append_methodzenvironment.prependc                 C  r   r   )r   r}   r   r   rC   rC   rD   r   ?  r   z)EnvironmentVariablesHolder.prepend_method)r   r   ro   rp   r   )r   r   rN   r   )rU   r=   rN   r   )r   r   r0   r   rN   r   )r?   r@   rA   rv   r   r   r   r   r=   r   r%   r   r   r   r   rC   rC   r   rD   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.ConfigurationDataro   rp   c                   s@   t  || | j| j| j| j| j| j| j	| j
| jd d S )N)r   Zset10Z
set_quotedZhasrQ   keysZget_unquotedZ
merge_from)ru   rv   r~   r   r   set10_methodset_quoted_method
has_method
get_methodkeys_methodget_unquoted_methodmerge_from_methodr   r   rC   rD   rv   L  s   
z ConfigurationDataHolder.__init__r   T.DictrN   'ConfigurationDataHolder'c                 C  r   r   )r  r|   r   r}   ro   r   rC   rC   rD   r   X  s   z$ConfigurationDataHolder.__deepcopy__rM   c                 C     | j jS r   )r}   usedr   rC   rC   rD   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   rC   rC   rD   Z__check_used^  s   z$ConfigurationDataHolder.__check_usedzconfiguration_data.setr   %T.Tuple[str, T.Union[str, int, bool]]r0   'kwargs.ConfigurationDataSet'c                 C  s(   |    |d |d f| jj|d < d S )Nr/   r   r   )$_ConfigurationDataHolder__check_usedr}   r   r   rC   rC   rD   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   splitr}   r   )r   r   r0   Zescaped_valrC   rC   rD   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  rR   rM   r	   deprecationro   r   warningr   r}   r   r   rC   rC   rD   r  o  s   $z$ConfigurationDataHolder.set10_methodzconfiguration_data.has T.Tuple[T.Union[str, int, bool]]r7   c                 C  s   |d | j jv S Nr   r}   r   r   rC   rC   rD   r       z"ConfigurationDataHolder.has_methodzconfiguration_data.get()z0.38.0zconfiguration_data.get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.)r}   rQ   r    )r   r   r0   rU   rC   rC   rD   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  )r}   rQ   r    rR   r=   )r   r   r0   rU   rX   rC   rC   rD   r
    s   

"z+ConfigurationDataHolder.get_unquoted_methodrU   r=   1T.Tuple[T.Union[str, int, bool], T.Optional[str]]c                 C  s   | j j| S r   r  )r   rU   rC   rC   rD   rQ        zConfigurationDataHolder.getzconfiguration_data.keys()0.57.0r   r]   c                 C  s   t |  S r   )sortedr  r   rC   rC   rD   r	    s   z#ConfigurationDataHolder.keys_methodc                 C  s   t | jj S r   )listr}   r   r  r   rC   rC   rD   r    s   zConfigurationDataHolder.keyszconfiguration_data.merge_from T.Tuple[build.ConfigurationData]c                 C  s   |d }| j j|j d S r  )r}   r   r   )r   r   r0   Zfrom_objectrC   rC   rD   r    s   z)ConfigurationDataHolder.merge_from_method)r   r  ro   rp   )r   r  rN   r  rN   rM   )rN   r   )r   r  r0   r  rN   r   )r   r  r0   r  rN   r   )r   r  r0   r  rN   r   )r   r  r0   r7   rN   rM   )r   r"  r0   r7   rN   r#  )rU   r=   rN   r(  )r   r   r0   r7   rN   r]   )rN   r]   )r   r-  r0   r7   rN   r   )r?   r@   rA   rv   r   r  r  r   r=   r   rM   r   r  r   r  r  r   r  r   r  r
  rQ   r   r	  r  r   ConfigurationDatar  r   rC   rC   r   rD   r  J  sD    



	


r  compile_argsFrL   	link_argslinksincludessourcesc                      s  e Zd ZdH fddZdId	d
ZeedJddZeedKddZeedJddZ	eedJddZ
edddedeedededdejdddLd"d#Zed$d%ed$dd&eed'edMd(d)Zed*d+eed*geR  dNd.d/Zed0d1ed0egd2ed0ed3eefed4eefed5eefed6eefd7d8ed9eefedOd<d=Zed>d?eedJd@dAZedBd?eedBegd2dPdCdDZedEdeedQdFdGZ  ZS )RDependencyHolderdepr'   ro   rp   c                   sL   t  || | j| j| j| j| j| j| j	| j
| j| j| j| jd d S )N)found	type_nameversionrU   Zget_pkgconfig_variableZget_configtool_variableget_variablepartial_dependencyinclude_typeZ	as_systemZas_link_whole)ru   rv   r~   r   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   r7  ro   r   rC   rD   rv     s   
zDependencyHolder.__init__rN   rM   c                 C  s   |  g i S r   )r>  r   rC   rC   rD   r8    r)  zDependencyHolder.foundr   r   r0   r7   r=   c                 C  r  r   r}   r9  r   rC   rC   rD   r?       z!DependencyHolder.type_name_methodc                 C  s   | j jdkrdS | j  S )NinternalT)r}   r9  r8  r   rC   rC   rD   r>    s   
zDependencyHolder.found_methodc                 C  
   | j  S r   )r}   get_versionr   rC   rC   rD   r@    r   zDependencyHolder.version_methodc                 C  rL  r   )r}   get_namer   rC   rC   rD   rA    r   zDependencyHolder.name_methodz!dependency.get_pkgconfig_variablez0.56.0z4use dependency.get_variable(pkgconfig : ...) insteadrL   r   r1  define_variablerU   T.Tuple[str]'kwargs.DependencyPkgConfigVar'c                 C  sx   ddl m} t| j|st| j d|d r-t|d dkr-tjdd| j	| j
d | jj|d	 |d
 |d dS )Nr   )PkgConfigDependencyz is not a pkgconfig dependencyrO  r/   z]dependency.get_pkgconfig_variable keyword argument "define_variable"  with more than one pair1.3.0r  r   rL   )	pkgconfigdefault_valuepkgconfig_define)Zdependencies.pkgconfigrS  rR   r}   r!   rN  lenr   
single_userH   r   r;  )r   r   r0   rS  rC   rC   rD   rB    s   	
z!DependencyHolder.pkgconfig_methodz"dependency.get_configtool_variabler&  z5use dependency.get_variable(configtool : ...) insteadz#dependency.get_config_tool_variablec                 C  s@   ddl m} t| j|st| j d| jj|d ddS )Nr   )ConfigToolDependencyz  is not a config-tool dependencyr   r   )
configtoolrV  )Zdependencies.configtoolrZ  rR   r}   r!   rN  r;  )r   r   r0   rZ  rC   rC   rD   rC    s   z"DependencyHolder.configtool_methoddependency.partial_dependency0.46.0T.List[TYPE_nvar]*'kwargs.DependencyMethodPartialDependency'c                 C     | j jdi |}|S NrC   r}   get_partial_dependencyr   r   r0   ZpdeprC   rC   rD   rE       z*DependencyHolder.partial_dependency_methodzdependency.get_variablez0.51.0r   cmakerU  r[  rK  0.54.0sincerV  T.Tuple[T.Optional[str]]'kwargs.DependencyGetVariable'c                 C  s   |d }|d urt dd| j| j |d r*t|d dkr*t dd| jd| j | jj|d	 p2||d
 p7||d p<||d pA||d |d dS )Nr   z0Positional argument to dependency.get_variable()r   rW  r/   zSdependency.get_variable keyword argument "pkgconfig_define" with more than one pairrT  z?In previous versions, this silently returned a malformed value.rf  rU  r[  rK  rV  )rf  rU  r[  rK  rV  rW  )r   rT   rH   r   rX  rY  r}   r;  )r   r   r0   Zdefault_varnamerC   rC   rD   rD    s    



z DependencyHolder.variable_methodzdependency.include_typez0.52.0c                 C  rL  r   )r}   get_include_typer   rC   rC   rD   rF  +  r   z$DependencyHolder.include_type_methodzdependency.as_systemc                 C  s   | j |d pdS )Nr   system)r}   generate_system_dependencyr   rC   rC   rD   rG  1  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)rR   r}   r)   r    generate_link_whole_dependency)r   r   r0   new_deprC   rC   rD   rH  7  s   
z%DependencyHolder.as_link_whole_method)r7  r'   ro   rp   r.  r   r   )r   rQ  r0   rR  rN   r=   )r   rQ  r0   r7   rN   r=   r   r^  r0   r_  rN   r'   )r   rj  r0   rk  rN   r=   )r   rj  r0   r7   rN   r'   )r   r   r0   r7   rN   r'   )r?   r@   rA   rv   r8  r   r   r?  r>  r@  rA  r   r   r=   r   r   r&   evolverB  r   rC  _PARTIAL_DEP_KWARGSrE  r#   rD  rF  rG  rH  r   rC   rC   r   rD   r6    sx    

		r6  _EXTPROG)boundc                      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eprt  ro   rp   rN   r   c                   s0   t  || | j| j| j| j| jd d S )N)r8  r   r:  	full_path)ru   rv   r~   r   r>  path_methodr@  full_path_method)r   rw  ro   r   rC   rD   rv   C  s   
z_ExternalProgramHolder.__init__r   r   r0   r7   rM   c                 C     |   S r   r8  r   rC   rC   rD   r>  J  rJ  z#_ExternalProgramHolder.found_methodzExternalProgram.path0.55.0z'use ExternalProgram.full_path() insteadr=   c                 C  r{  r   
_full_pathr   rC   rC   rD   ry  O  s   z"_ExternalProgramHolder.path_methodzExternalProgram.full_pathc                 C  r{  r   r~  r   rC   rC   rD   rz  V     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)r8  r    r}   get_path)r   r   rC   rC   rD   r  \  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)r8  r    r}   rM  ro   r   MesonExceptionr   rC   rC   rD   r@  c  s   z%_ExternalProgramHolder.version_methodc                 C  rL  r   r}   r8  r   rC   rC   rD   r8  n  s   
z_ExternalProgramHolder.found)rw  rt  ro   rp   rN   r   r   r   r   r.  )r?   r@   rA   rv   r   r   r>  r   ry  r   rz  r  r@  r8  r   rC   rC   r   rD   rv  B  s*    
rv  c                   @     e Zd ZdS )ExternalProgramHolderNr?   r@   rA   rC   rC   rC   rD   r  q      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(   ro   rp   c                   r   )N)r8  r9  r<  )ru   rv   r~   r   r>  r?  rE  )r   r  ro   r   rC   rD   rv   u  r   zExternalLibraryHolder.__init__r   r   r0   r7   rN   r=   c                 C  r  r   rI  r   rC   rC   rD   r?  |  rJ  z&ExternalLibraryHolder.type_name_methodrM   c                 C  rL  r   r  r   rC   rC   rD   r>    r   z"ExternalLibraryHolder.found_methodr\  r]  r^  r_  r'   c                 C  r`  ra  rb  rd  rC   rC   rD   rE    re  z/ExternalLibraryHolder.partial_dependency_method)r  r(   ro   rp   r   r   rq  )r?   r@   rA   rv   r   r   r?  r>  r   r   rs  rE  r   rC   rC   r   rD   r  t  s    r  c                      s   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	eedddZ
eedddZ  ZS )MachineHoldermachine_info'MachineInfo'ro   rp   c              	     s8   t  || | j| j| j| j| j| j| j	d d S )N)rm  cpu
cpu_familyendiankernel	subsystem)
ru   rv   r~   r   system_method
cpu_methodcpu_family_methodendian_methodkernel_methodsubsystem_method)r   r  ro   r   rC   rD   rv     s   
zMachineHolder.__init__r   r   r0   r7   rN   r=   c                 C  r  r   )r}   r  r   rC   rC   rD   r    rJ  zMachineHolder.cpu_family_methodc                 C  r  r   )r}   r  r   rC   rC   rD   r    rJ  zMachineHolder.cpu_methodc                 C  r  r   )r}   rm  r   rC   rC   rD   r    rJ  zMachineHolder.system_methodc                 C  r  r   )r}   r  r   rC   rC   rD   r    rJ  zMachineHolder.endian_methodc                 C     | j jd ur
| j jS td)Nz0Kernel not defined or could not be autodetected.)r}   r  r    r   rC   rC   rD   r       zMachineHolder.kernel_methodc                 C  r  )Nz3Subsystem not defined or could not be autodetected.)r}   r  r    r   rC   rC   rD   r    r  zMachineHolder.subsystem_method)r  r  ro   rp   r   )r?   r@   rA   rv   r   r   r  r  r  r  r  r  r   rC   rC   r   rD   r    s(    
r  r2   c                   @  r  )IncludeDirsHolderNr  rC   rC   rC   rD   r    r  r  c                   @  r  )
FileHolderNr  rC   rC   rC   rD   r    r  r  c                   @  r  )HeadersHolderNr  rC   rC   rC   rD   r    r  r  c                   @  r  )
DataHolderNr  rC   rC   rC   rD   r    r  r  c                   @  r  )SymlinkDataHolderNr  rC   rC   rC   rD   r    r  r  c                   @  r  )InstallDirHolderNr  rC   rC   rC   rD   r    r  r  c                   @  r  )	ManHolderNr  rC   rC   rC   rD   r    r  r  c                   @  r  )EmptyDirHolderNr  rC   rC   rC   rD   r    r  r  c                   @  r  )GeneratedObjectsHolderNr  rC   rC   rC   rD   r    r  r  c                      s2   e Zd Zd fddZd ddZd!ddZ  ZS )"TestrU   r=   projectsuiter]   exe>T.Union[ExternalProgram, build.Executable, build.CustomTarget]depends6T.List[T.Union[build.CustomTarget, build.BuildTarget]]is_parallelrM   cmd_args1T.List[T.Union[str, mesonlib.File, build.Target]]rz   r   should_failtimeoutr   workdirr   protocolpriorityverbosec                   sl   t    || _t|| _|| _|| _|| _|| _|| _	|| _
|	| _|
| _|| _t|| _|| _|| _d S r   )ru   rv   rU   r-   r  project_namer  r  r  r  rz   r  r  r  r   Zfrom_strr  r  r  )r   rU   r  r  r  r  r  r  rz   r  r  r  r  r  r  r   rC   rD   rv     s   


zTest.__init__rN   c                 C  r   r   )r  r   rC   rC   rD   get_exe     zTest.get_exec                 C  r   r   rP  r   rC   rC   rD   rN    r  zTest.get_name)rU   r=   r  r=   r  r]   r  r  r  r  r  rM   r  r  rz   r   r  rM   r  r   r  r   r  r=   r  r   r  rM   )rN   r  r   )r?   r@   rA   rv   r  rN  r   rC   rC   r   rD   r    s    
r  c                   @  r  )NullSubprojectInterpreterNr  rC   rC   rC   rD   r    r  r  c                      sZ   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]	callstackT.Optional[T.List[str]]rN   r   c                   sV   t    || _|| _|| _|| _t| | _d | _	|| _
| j| j| jd d S )N)r;  r8  )ru   rv   r}   r  r  r  r   as_posixr   cm_interpreterr  r~   r   get_variable_methodr>  )r   r  r   r  r  r  r  r   rC   rD   rv     s   

zSubprojectHolder.__init__r   r   r0   r7   rM   c                 C  r{  r   r|  r   rC   rC   rD   r>    rJ  zSubprojectHolder.found_methodc                 C  s   t | jt S r   )rR   r}   r  r   rC   rC   rD   r8    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.)rX  r    rR   r}   r  r   r=   	variablesKeyError
_holderifyr!   )r   r   r0   varnamerC   rC   rD   r    s   
z$SubprojectHolder.get_variable_method)r   NNN)r  r  r   r=   r  r   r  r   r  r  r  r  rN   r   r   r.  )r   r   r0   r7   rN   r  )r?   r@   rA   rv   r   r   r>  r8  r   r   r  r   rC   rC   r   rD   r    s    
r  c                   @  s   e Zd Zdd	d
ZdS )ModuleObjectHoldermethod_namer=   r   r   r0   r7   rN   r6   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)r}   r~   rQ   r"   getattrr   r   r   ro   rR   r   r
   process_new_valuesnew_objectsreturn_value)r   r  r   r0   modobjmethodstateretrC   rC   rD   method_call.  s    


zModuleObjectHolder.method_callN)r  r=   r   r   r0   r7   rN   r6   )r?   r@   rA   r  rC   rC   rC   rD   r  -      r  c                   @  s   e Zd ZdddZdS )	MutableModuleObjectHolderr   T.Dict[int, T.Any]rN   'MutableModuleObjectHolder'c                 C  s   t | j|}t|| jS r   )r|   r   r}   r  ro   )r   r   r  rC   rC   rD   r   E  s   z&MutableModuleObjectHolder.__deepcopy__N)r   r  rN   r  )r?   r@   rA   r   rC   rC   rC   rD   r  D  r  r  _BuildTargetc                      s8  e Zd Zd= fddZd>d	d
Zed?ddZd@ddZee	dAddZ
ee	dBddZee	dCddZee	eddddCdd Zee	dCd!d"Ze	ed#ejeejejejfd$dDd(d)Zeed*ed+ed,d-ed.d/dEd2d3Zee	ed4d5d6dCd7d8Ze d9d:ee	dCd;d<Z!  Z"S )FBuildTargetHoldertargetr  interprp   c                   sD   t  || | j| j| j| j| j| j| j	| j
| j| jd	 d S )N)	extract_objectsextract_all_objectsrU   get_idoutdirrx  r   r8  Zprivate_dir_include)ru   rv   r~   r   extract_objects_methodextract_all_objects_methodrA  get_id_methodoutdir_methodrz  ry  r>  private_dir_include_methodr   r  r  r   rC   rD   rv   N  s   
zBuildTargetHolder.__init__rN   r=   c                 C  s2   d}| j }t|tjsJ || jj| |jS Nz<{} {}: {}>)	r}   rR   r   BuildTargetr   r   r?   r  filenamer   rhrC   rC   rD   r   [  s   zBuildTargetHolder.__repr__build.BuildTargetc                 C  s0   t | jtjr| j S t | jtjsJ | jS r   )rR   r}   r   BothLibrariesget_default_objectr  r   rC   rC   rD   _target_objecta  s   
z BuildTargetHolder._target_objectrM   c                 C  s   | j jj| j j S r   )r  environmentmachinesmatches_build_machinefor_machiner   rC   rC   rD   is_crossh  s   zBuildTargetHolder.is_crossr   r   r0   r7   c                 C  s.   t | jtjr| jjstjdd| jjd dS )NzBuildTarget.foundr   )rH   T)rR   r}   r   
Executablewas_returned_by_find_programr   rY  rH   r   rC   rC   rD   r>  k  s   zBuildTargetHolder.found_methodbuild.IncludeDirsc                 C  s   t dg d| jj| jgS )Nr   F)r   IncludeDirsro   backendZget_target_private_dirr  r   rC   rC   rD   r  r  s   z,BuildTargetHolder.private_dir_include_methodc                 C     | j j| jS r   ro   r  get_target_filename_absr  r   rC   rC   rD   rz  w  r  z"BuildTargetHolder.full_path_methodzBuildTarget.pathr}  z!Use BuildTarget.full_path insteadc                 C  r  r   r  r   rC   rC   rD   ry  |  s   zBuildTargetHolder.path_methodc                 C  r  r   )ro   r  get_target_dirr  r   rC   rC   rD   r    r  zBuildTargetHolder.outdir_methodr  )r   GT.Tuple[T.List[T.Union[mesonlib.FileOrString, 'build.GeneratedTypes']]]r9   build.ExtractedObjectsc                 C  s   | j |d S r  )r  r  r   rC   rC   rD   r    r  z(BuildTargetHolder.extract_objects_methodr  	recursiveFr]  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.
            )rL   ri  not_set_warningr^  *'kwargs.BuildTargeMethodExtractAllObjects'c                 C  s   | j |d S )Nr   )r  r  r   rC   rC   rD   r    s   z,BuildTargetHolder.extract_all_objects_methodzBuildTarget.get_idz1.2.0zThis was never formally documented and does not seem to have a real world use. See https://github.com/mesonbuild/meson/pull/6061c                 C  rL  r   )r  r  r   rC   rC   rD   r    s   
zBuildTargetHolder.get_id_methodrU   rg  c                 C  r  r   )r  rU   r   rC   rC   rD   rA    r  zBuildTargetHolder.name_method)r  r  r  rp   r   )rN   r  r.  r   )r   r   r0   r7   rN   r  r   )r   r  r0   r9   rN   r  )r   r^  r0   r  rN   r  )#r?   r@   rA   rv   r   r   r  r  r   r   r>  r  rz  r   ry  r  r   r   Filer=   r   CustomTargetCustomTargetIndexGeneratedListr  r   r   rM   textwrapdedentr  r  r   rA  r   rC   rC   r   rD   r  M  sX    


r  c                   @  r  )ExecutableHolderNr  rC   rC   rC   rD   r	    r  r	  c                   @  r  )StaticLibraryHolderNr  rC   rC   rC   rD   r
    r  r
  c                   @  r  )SharedLibraryHolderNr  rC   rC   rC   rD   r    r  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  rp   c                   s(   t  || | j| j| jd d S )N)Zget_shared_libZget_static_lib)ru   rv   r~   r   get_shared_lib_methodget_static_lib_method)r   r  r  r   rC   rD   rv     s   
zBothLibrariesHolder.__init__rN   r=   c                 C  s6   d}| j j}| j j}|| jj| |j| |jS )Nz<{} {}: {}, {}: {}>)r}   sharedstaticr   r   r?   r  r  )r   r  Zh1Zh2rC   rC   rD   r     s   "zBothLibrariesHolder.__repr__r   r   r0   r7   build.SharedLibraryc                 C  r  r   )r}   r  r   rC   rC   rD   r    rJ  z)BothLibrariesHolder.get_shared_lib_methodbuild.StaticLibraryc                 C  r  r   )r}   r  r   rC   rC   rD   r    rJ  z)BothLibrariesHolder.get_static_lib_method)r  r  r  rp   r   )r   r   r0   r7   rN   r  )r   r   r0   r7   rN   r  )
r?   r@   rA   rv   r   r   r   r  r  r   rC   rC   r   rD   r    s    
r  c                   @  r  )SharedModuleHolderNr  rC   rC   rC   rD   r    r  r  c                   @  r  )	JarHolderNr  rC   rC   rC   rD   r    r  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  rp   c                   $   t  || | jd| ji d S )Nrx  )ru   rv   r~   r   rz  r  r   rC   rD   rv        z CustomTargetIndexHolder.__init__zcustom_target[i].full_pathrg  r   r   r0   r7   rN   r=   c                 C  s    | j jd usJ | j j| jS r   ro   r  r  r}   r   rC   rC   rD   rz    s   z(CustomTargetIndexHolder.full_path_method)r  r  r  rp   r   )	r?   r@   rA   rv   r   r   r   rz  r   rC   rC   r   rD   r    s    r  _CTc                      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  r  r  rp   c                   s<   t  || | j| j| jd | jtj| j	i d S )N)rx  Zto_list)
ru   rv   r~   r   rz  to_list_method	operatorsr   INDEXop_indexr  r   rC   rD   rv     s   

z_CustomTargetHolder.__init__rN   r=   c                 C  s"   d}| j }|| jj| |jS r  )r}   r   r   r?   r  commandr  rC   rC   rD   r     s   z_CustomTargetHolder.__repr__r   r   r0   r7   c                 C  r  r   r  r   rC   rC   rD   rz    r  z$_CustomTargetHolder.full_path_methodzcustom_target.to_listrg  T.List[build.CustomTargetIndex]c                 C  s   g }| j D ]}|| q|S r   )r}   r   )r   r   r0   resultirC   rC   rD   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 .)r}   
IndexErrorr!   rU   rX  )r   r&  rC   rC   rD   r!    s
   &z_CustomTargetHolder.op_index)r  r  r  rp   r   r   )r   r   r0   r7   rN   r#  )r&  r   rN   r  )r?   r@   rA   rv   r   r   r   rz  r   r  r   r   r   r   r!  r   rC   rC   r   rD   r    s    


r  c                   @  r  )CustomTargetHolderNr  rC   rC   rC   rD   r)    r  r)  c                   @  r  )RunTargetHolderNr  rC   rC   rC   rD   r*  
  r  r*  c                   @  r  )AliasTargetHolderNr  rC   rC   rC   rD   r+    r  r+  c                   @  r  )GeneratedListHolderNr  rC   rC   rC   rD   r,    r  r,  c                
      s~   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ejdddddZ  ZS )GeneratorHoldergenbuild.Generatorro   rp   c                   r  )Nprocess)ru   rv   r~   r   process_method)r   r.  ro   r   rC   rD   rv     r  zGeneratorHolder.__init__zgenerator.processr/   )r   r   preserve_path_fromz0.45.0rh  
extra_argsT)r-   rL   rT  r   DT.Tuple[T.List[T.Union[str, mesonlib.File, 'build.GeneratedTypes']]]r0   'kwargs.GeneratorProcess'rN   build.GeneratedListc                 C  s   |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	 d
}|S )Nr2  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   )rR   r   r  r  r  )r`   arC   rC   rD   	<genexpr>)  s   $ z1GeneratorHolder.process_method.<locals>.<genexpr>r   zECalling generator.process with CustomTarget or Index of CustomTarget.r*  r3  rz   )r3  rz   )r   r   normpathisabsr!   anyr   rY  ro   rH   r}   process_files)r   r   r0   r2  glrC   rC   rD   r1    s   
zGeneratorHolder.process_method)r.  r/  ro   rp   )r   r4  r0   r5  rN   r6  )r?   r@   rA   rv   r   r=   r   r  r   r  r  r  r   r   r#   r   r,  r$   rr  r1  r   rC   rC   r   rD   r-    s    
r-  c                      s   e Zd Zd fddZ  ZS )StructuredSourcesHolderr5  build.StructuredSourcesr  rp   c                   s   t  || d S r   )ru   rv   )r   r5  r  r   rC   rD   rv   6  s   z StructuredSourcesHolder.__init__)r5  r?  r  rp   )r?   r@   rA   rv   r   rC   rC   r   rD   r>  4  s    r>  )NT)
r0   rG   rH   rI   rJ   rK   rL   rM   rN   rO   )r0   r\   rN   r]   )
__future__r   r   r   r   r|   r  pathlibr   r   r   r   r   r   r	   modulesr
   r   r   r   backend.backendsr   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$   r%   r&   dependenciesr'   r(   r)   programsr*   r+   r,   r-   r.   typingrx   TYPE_CHECKINGr0   Zcmake.interpreterr1   	envconfigr2   r3   r4   r5   r6   r7   r8   r9   ro   r:   Ztyping_extensionsr;   r<   r=   rF   rB   r[   rk   rS   rl   r   EnvironmentVariablesr   r  r/  r  rM   rs  r6  TypeVarrt  rv  r  r  r  r  r  r  r  Headersr  Datar  SymlinkDatar  
InstallDirr  Manr  EmptyDirr  ExtractedObjectsr  r  r  r  r  r  Unionr  r  r  r  r  r	  StaticLibraryr
  SharedLibraryr  r  SharedModuler  Jarr  r  r  r  r  r  r)  	RunTargetr*  AliasTargetr+  r  r,  	Generatorr-  StructuredSourcesr>  rC   rC   rC   rD   <module>   s    X$
qR,k /.1]&!