
    -Phq             
      l   d dl m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	 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 ddlmZmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ ddl m!Z!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+ ddl&m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl&m2Z2m3Z3m4Z4m5Z5 ddl&m6Z6m7Z7 ddl&m8Z8m9Z9m:Z:m;Z; ddl&m<Z<m=Z= ddl&m>Z> ddl?m@Z@mAZAmBZBmCZCmDZD ddlEmFZF ddlmGZH ddlmIZJ dd lKmLZL dd!lMmNZN dd"lGmOZOmPZPmQZQmRZRmSZSmTZT dd#lUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZmZmZmZmZ dd$lmZ d d%lmZ d d&lmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZej        rd d'lmZ dd(lmZ dd)lmZ dd*lmZmZmZ dd+l mZ dd,lUmZ ej        ej        ej        ej        ej        ej        ej        ej        ej        ef	         Zej        ej        ej        ej        ej        ej        ej        ej        ej        f         Zej        ej        ej        ej        f         Zej        ej        e!ej        ef         gef         Z ej        d-eP.          Zd@d3Z G d4 d5          Zej        ej        z  d6 ej        d7hz
  D             z  d8 ej        d7hz
  D             z  Zeej        z  ej        z  d9hz  Z G d: d;e          Zh d<Zd=Z G d> d?e(e          ZdS )A    )annotationsN   )mparser)environment)coredata)dependencies)mlog)options)build)	compilers)	envconfig)wrapWrapMode)mesonlib)EnvironmentVariablesExecutableSerialisationMesonBugExceptionMesonExceptionHoldableObjectFileModeMachineChoiceis_parent_pathlistifyextract_as_listhas_path_seppath_is_in_root
PerMachine)	OptionKey)ExternalProgramNonExistingExternalProgram)
Dependency)DepFile)ContainerTypeInfoInterpreterBase	KwargInfotyped_kwargstyped_pos_args)	noPosargsnoKwargspermittedKwargsnoArgsFlatteningnoSecondLevelHolderResolvingunholder_return)InterpreterExceptionInvalidArgumentsInvalidCodeSubdirDoneRequest)DisablerdisablerIfNotFound)
FeatureNewFeatureDeprecatedFeatureBrokenFeatureNewKwargs)ObjectHolderContextManagerObject)stringifyUserArguments)ExtensionModuleModuleObjectMutableModuleObjectNewExtensionModuleNotFoundExtensionModule)optname_regex   )interpreterobjects)compiler)	MesonMain)DependencyFallbacksHolder)SubprojectHolderTest
RunProcessextract_required_kwargextract_search_dirsNullSubprojectInterpreter).BUILD_TARGET_KWS
COMMAND_KWCT_BUILD_ALWAYSCT_BUILD_ALWAYS_STALECT_BUILD_BY_DEFAULTCT_INPUT_KWCT_INSTALL_DIR_KW_EXCLUSIVE_EXECUTABLE_KWSEXECUTABLE_KWSJAR_KWSLIBRARY_KWSMULTI_OUTPUT_KW	OUTPUT_KWDEFAULT_OPTIONSDEPENDENCIES_KW
DEPENDS_KWDEPEND_FILES_KW
DEPFILE_KWDISABLER_KWD_MODULE_VERSIONS_KWENV_KWENV_METHOD_KWENV_SEPARATOR_KWINCLUDE_DIRECTORIES
INSTALL_KWINSTALL_DIR_KWINSTALL_MODE_KWINSTALL_FOLLOW_SYMLINKSLINK_WITH_KWLINK_WHOLE_KWCT_INSTALL_TAG_KWINSTALL_TAG_KWLANGUAGE_KW	NATIVE_KWPRESERVE_PATH_KWREQUIRED_KWSHARED_LIB_KWSSHARED_MOD_KWSDEPENDENCY_SOURCES_KWSOURCES_VARARGSSTATIC_LIB_KWSVARIABLES_KWTEST_KWSNoneTypein_set_validatorenv_convertor_with_method)
primitives)Path)Enum)Literal)kwargs)Backend)InterpreterObjectTYPE_varTYPE_kwargs)OverrideProgram)SourcesVarargsType	TestClass)boundvalue)T.Union[T.List, str, mesonlib.File, None]returnT.Optional[str]c                    t          | t                    r7t          |           dk    rdS t          | d         t          j                  sdS d S )NrA   z,when passed as array must have a length of 1r   z(when passed as array must contain a File)
isinstancelistlenr   File)r   s    b/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/interpreter/interpreter.py_project_version_validatorr      sL    % >u::??AAE!Hhm44 	>==4    c                  *    e Zd ZddZddZd Zd ZdS )Summaryproject_namestrproject_versionc                l    || _         || _        t          j        t                    | _        d| _        d S Nr   )r   r   collectionsdefaultdictdictsectionsmax_key_len)selfr   r   s      r   __init__zSummary.__init__   s2    (.#/55r   sectionvaluesT.Dict[str, T.Any]bool_ynboollist_sepr   
subprojectr   Nonec                   |                                 D ]R\  }}|| j        |         v rt          d|d|          g }t          |          D ]}	t	          |	t
                    rZ|r>|                    |	rt          j        d          nt          j	        d                     X|                    |	rdnd           rt	          |	t          t          f          r#|                    t          |	                     t	          |	t          t          f          r?t          j        dd|           |                    |	                                           t	          |	t"                    r?t          j        d	d
|           |                    t          j	        d                     `t	          |	t$          j                  r?t          j        dd|           |                    |	                                           d}
t          |
                    ||                    ||f| j        |         |<   t-          | j        t1          |                    | _        Td S )NzSummary section z already have key YESNOtruefalsez)dependency or external program in summary0.57.0zdisabler in summary0.64.0zfeature option in summary0.58.0ztSummary value in section {!r}, key {!r}, must be string, integer, boolean, dependency, disabler, or external program)itemsr   r.   r   r   r   appendr	   greenredr   intr   r!   r4   
single_usesummary_valuer2   r
   
UserOptionprintable_valueformatmaxr   r   )r   r   r   r   r   r   kvformatted_valuesims              r   add_sectionzSummary.add_section   s[   LLNN 	= 	=DAqDM'****+`g+`+`[\+`+`aaa!QZZ E Ea&& E J(//Q0Z
50A0A0ADHUYNN[[[[(//!0HIIIIC:.. E$++CFF3333OZ#@AA E)*UW_aklll$++AOO,=,=>>>>8,, E)*?:VVV$++DHTNN;;;;7#566 E)*ExQ[\\\$++A,=,=,?,?@@@@ OA.qxx/C/CDDD)98(DDM'"1%"4#3SVV<<D3	= 	=r   c                B   t          j        | j        t          j        | j                             | j                                        D ]\  }}t          j        d           |r't          j        dt          j        |                     |                                D ]h\  }}|\  }}| j        t          |          z
  }|rdnd}t          j        d|d|z  z   dz   |           | j        dz   }| 
                    |||           it          j        d           d S )N  z   :)end   )r	   logr   normal_cyanr   r   r   boldr   r   
dump_value)	r   r   r   r   r   r   paddingr   indents	            r   dumpzSummary.dump   s   "D$4T5I$J$JKKK#}2244 
	5 
	5OGVHRLLL 2di00111 5 518*SVV3&ccB!cGm"3c"9sCCCC)A-8V44445 	r   c                   dd|z  z   }|t          j        ||dd d S t          j                    j        }g }|}|                                |z   }|D ]\}t          |          t          |          z   }	|r||	z   |k    rt          j        |||d |}g }|                    |           ||	z  }]t          j        ||dd d S )N
r   F)sepdisplay_timestamp)r   r   )r	   r   shutilget_terminal_sizecolumnsrstripr   r   )
r   arrr   r   	lines_sepmax_lenlineline_lenr   v_lens
             r   r   zSummary.dump_value   s    3<'	HcyEBBBBF*,,4OO%%	1	 	 	AFFS]]*E 5(722$H)<<<<!KKNNNHH$H>>>>>>r   N)r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   )__name__
__module____qualname__r   r   r   r    r   r   r   r      sZ           = = = =:  ? ? ? ? ?r   r   c                    h | ]}| d S )_shared_argsr   .0ls     r   	<setcomp>r      !    DDDADDDr   javac                    h | ]}| d S )_static_argsr   r   s     r   r   r      r   r   target_typec                      e Zd ZdZdZdS )InterpreterRuleRelaxationz Defines specific relaxations of the Meson rules.

    This is intended to be used for automatically converted
    projects (CMake subprojects, build system mixing) that
    generate a Meson AST via introspection, etc.
    rA   N)r   r   r   __doc__ALLOW_BUILD_DIR_FILE_REFERENCESr   r   r   r   r      s"          '(###r   r   >   mainmethodnativestaticmodulesversionfallbacklanguagerequired
cmake_args
componentsinclude_typeallow_fallbackdefault_optionsprivate_headersoptional_modulescmake_module_pathnot_found_messagecmake_package_versionzYou should add the boolean check kwarg to the run_command call.
         It currently defaults to false,
         but it will default to true in meson 2.0.
         See also: https://github.com/mesonbuild/meson/issues/9300c                  B,    e Zd Z	 	 	 	 	 	 	 	 d(d) fdZd*dZd+dZd+dZd+dZd,d Zd-d#Z	d.d'Z
d+d(Zd/d*Zd0d-Zd1d/Zd+d0Z ed1e           ed1 ej        d23           ej        d23                    ed2d:                                    Z ed;e<          ed3dA                        Ze edB edC eee          dDg E           ej        dFdGH           ej        dG3           edI eee          dDg E          e ee! e"j        dJ3          e# edK eee$j%        ef          dDg dLM           e&j        dNedOiP           edQee'f           edR eee(j)                  dDg dSM                    d4dW                        Z* edXe+egY          ed5d[                        Z,d\ Z- ed]e(j.        e/e0j1        e$j%        efe(j.        e/e0j1        e$j%        ef<           ed] ed^e+e'fd_3           ed`e+dDd_a           e2j        db3                    d6df                        Z3	 d7d8djZ4dk Z5 ede           ede e6j        dl3           edQ eee          g dDm                    d9dq                        Z7	 	 d:d;dwZ8	 	 d:d<d}Z9	 	 	 d=d>dZ:d?dZ;d?dZ< ede          ed@d                        Z= ede>gY          edAd                        Z?d+dZ@ edee<           ede6 edee'f           edQee$j%        e'efdeAd            ed eee          e'fddDm           ed eee          g dDdS           eded                    dBd                        ZB ed ede+e'fdN3          e           ede<          dCd                        ZCdDdZDeEedEd                        ZFd ZGeE eHdd           edee>feIgY           ed eded           ede+dg           edee'fdN3                    dFd                                                ZJdGdZKd+dZLeE eHdd          ed                                     ZMeEed                         ZNeE eHdd          ed                                     ZOeed                         ZP ede           ed eded eQddh                              dHd                        ZRdIdZSdJdZTdIdZUdKdńZVdLdɄZWdMd̈́ZXdNd΄ZYdOd҄ZZdPdԄZ[e\j]        ddDdDddddfdQd݄Z^dRd߄Z_dSdZ`dTdZa edee$j%        fd           ed ej        d3          ebe ed eee          g dDd           edQ eee          g dDd묕           ededda           e6j        d3                    edUd                                    Zc eddddg           edddOdg           edddNdg           eddddg           edddbg d           eddddg           eddddg          e eeef           eded           ed e6j        dl3          dD          dVd                                                                                                                                    Zg eHdd          eed                                      ZhdWdZi eee(jj                   edeek<           edgelR ddDidXd                                    Zm eee(jn                   ed	eek<           ed	geoR ddDidYd                                    Zp eee(jq                   edeek<           edgerR ddDidZd                                    Zs eeet           edeek<           edgeuR ddDievd[d                                                Zw eHdd           eee(jx                   edeek<           edgeyR ddDid\d                                                Zz eeet           edeek<           edgeuR ddDievd]d                                                Z{ eee(j|                   edeee$j%        e(j}        e(j~        e(j        e(j)        e(j        f<           edgeR ddDid^d                                     Z edd!dd"d#g           eee           ed!eek<           ed!geR ddDid_d&                                                Ze ed' ej        dD(          e ed) eeee(j        e(j}        e(j~        e/e$j%        f          dDg E           edee'f           ed*ed+           ej        d,3           ej        d,3           ej        d,3           ej        d,3          
  
        d`d0                        Z eHd1dJ          eedad4                                    Zdbd8Z ed9egY           ed9eeeeeeeeeee e2j        d3          e ej        d_3           ed:e+dgd2a           ed`e+dg           ed;e+dgd<a                    dcd>                        Z ed?e           ed?ee e2j        d3                    dddB                        Z eHdCd           edCee(j        e(j        fd          ededF                                    Z edGe(j.        e/f           edG edH eeedgI          dDdDJ           edK eeedgI          dDdDJ          ee ed`e+dgdLa                    dfdP                        Z edQee(j.        e(j        e/e$j%        e(j}        e(j~        f           edQgeR  dgdT                        Z edUee(j.        e(j        e/e$j%        e(j}        e(j~        f           edUge edVe+dD          R  dhdY                        Zdid\ZefdjdaZdkddZ edeee$j%        f<           edee ed
ee'f           ej        d_3          ee          dldi                        Z edjee$j%        f<           edj edkee'fdl3           ej        d_3          e          dmdo                        Z eHdpdq           edpe edree'fdG3                    dnds                        Z eHdtdu           edve           edt edwedD(           edxedD(          e          dodz                                    Z eHd{dG           ed{eIe>gY          eeEdpd~                                                Z ed
e           ed
 ed eeeI          d dg dD                    dqd                        ZdrdZ edee$j%        f<           ed ed eeee$j%        f          dDg E           ed eee          g dDdJ           ej        dl3           ej        dq3          e ej        d3          e          dsd                        Z	 	 	 dtdudZ ede           ed edxedD(           ede+dg           ed eee          g dDdd            ed eee          g dDdd            ej        dl3           ej        dq3          e          dvd                        Ze ed ej        d3           ej        d3           ej        dq3           ed`e+dgda           ed) eee(j.        e/e0j1        e$j%        efdgI          e'fdD           ed ee>eee+f          e(j        e'f           ede+dgd_a           ededd_a           ededdJ eQh d                     ed eee$j%        ef          dDg E           ede+e'fdb3           edxee+fdd           e ededd_ddi eQh d                     edee'fdda                    dwd                        ZdxdydZ ede<           ed ede+dg                    dzd                        Zd7d{dZ ede           ed ed eeee/f          dDg E           ede+dg           eded笖           ed eee          dDg dM           ede+dgda          e2          d|dȄ                        Z ede<           edebe          d}d˄                        Z ede<           edebe          d}d̈́                        Z ede<           edebe          d}dτ                        Z ede<           edebe          d}dф                        Z eHdd           edej        <           edebe          d~dԄ                                    ZddՄZdd؄ZÐddڄZĐdd܄ZeE edeee>fgY           ede ej        dG3                    dd߄                                    Z eded          edd                        Zɐd+ fdZʐd+dZːd+dZ̐d Zej        ddd            Zej        d7dd            Zej        dd            Zej        ddd            Zej        ddd            ZАdddZeѐdd            ZҐddZ eHddJ          d[d            ZԐddZՐddZ֐ddZej        dd            Zej        dd            Zej        dd            Zej        dd            Zej        dd	            ZؐddZؐd Zِd Zڐd ZېddZܐddZ edeeI          eeEevdd                                                Z edeefeIgY          eeEedd                                                Z ede          edd                        Z eHddq           ede          edd                                    Zeѐdd             Z eHd!d           ed!eI          edd#                                    Ze eHd$dl           ed$eeegY          dd'                                    Z xZS (  InterpreterNr   subprojects_buildbuild.BuildbackendT.Optional[Backend]r   r   subdirsubproject_dirdefault_project_options"T.Optional[T.Dict[OptionKey, str]]ast!T.Optional[mparser.CodeBlockNode]relaxations,T.Optional[T.Set[InterpreterRuleRelaxation]]user_defined_options%T.Optional[coredata.SharedCMDOptions]r   r   c
                ^   t                                          |j                                        ||||j                   d| _        || _        || _        i | _        i | _        |pt                      | _
        ||                                  n|| _        |                                  | j                            dt!          | j        |           i           t                      | _        d| _        d| _        i | _        g | _        i | _        |rt/          |t0                    sJ || _        ni | _        g | _        |                                  |                                  |	| _        t=          i i           | _        |                                   | !                                 d S )Nr   mesonF)"superr   r   get_source_diractive_projectnamer   r  summaryr   setr  load_root_meson_filer  sanity_check_astbuiltinupdaterD   validated_cacheproject_args_frozenglobal_args_frozenr  subproject_stackconfigure_file_outputsr   r   r  project_default_optionsbuild_func_dictbuild_holder_mapr  r   r   parse_project_redetect_machines)r   r  r  r   r
  r  r  r  r  r  	__class__s             r   r   zInterpreter.__init__
  s    	+::<<fjR`bhbtuuu"$
/18:&/#%%;%%''''DHWi
D&A&ABCCC+.55#( "':<-/8:#" 	.5t<<<<<+BD((+-D(46$$8!HRSUWYHZHZ!!!!!r   -T.Tuple[T.Tuple[object], T.Dict[str, object]]c                     t          d          )NzThis class is unpicklable)r   r   s    r   __getnewargs_ex__zInterpreter.__getnewargs_ex__7  s     ;<<<r   c                   | j         j        j                                        }t          j        | j        j        j                   |_         |                                | j         j        _        | j         j        j        j         j        J | j         j        j        j	        j        J | j         j        j        j
        j        J t          j        | j         j        j        j         |           | j        d<   t          j        | j         j        j        j	        |           | j        d<   t          j        | j         j        j        j
        |           | j        d<   d S )Nbuild_machinehost_machinetarget_machine)r   r   machinesmiss_defaultingdetect_machine_infor   r   default_missingcpuhosttargetOBJMachineHolderr  )r   r2  s     r   r(  zInterpreter._redetect_machines:  s     :)2BBDD$89P9VWW*2*B*B*D*D
'z%.48DDDz%.37CCCz%.59EEE dj4=CTJJ 	_% dj4=BDII 	^$ dj4=DdKK 	%&&&r   c                   | j                             i d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j	        d	| j
        d
| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        i d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j         d | j!        d!| j"        d"| j#        i d#| j$        d$| j%        d%| j&        d&| j'        d'| j(        d(| j)        d)| j*        d*| j+        d+| j,        d,| j-        d-| j.        d.| j/        d/| j0        d0| j1        d1| j2        d2| j3        d3| j4        | j5        | j6        | j7        | j8        | j9        | j:        | j;        | j<        d4           d5tz          j>        v r!| j                             d6| j?        i           d7tz          j>        v r#| j                             d8| j@        i           d S d S )9Nadd_global_argumentsadd_global_link_argumentsadd_languagesadd_project_argumentsadd_project_dependenciesadd_project_link_argumentsadd_test_setupalias_targetassert	benchmarkboth_librariesbuild_targetconfiguration_dataconfigure_filecustom_targetdebugdeclare_dependency
dependencydisablerr   error
executablefilesfind_program	generator
get_optionget_variableimportinclude_directoriesinstall_datainstall_emptydirinstall_headersinstall_maninstall_subdirinstall_symlinkis_disableris_variablejar
join_pathslibrarymessageoptionprojectrangerun_command
run_targetset_variablestructured_sourcesr
  shared_libraryshared_module)static_librarysubdir_doner   r  testunset_variablevcs_tagwarningMESON_UNIT_TEST	exceptionMESON_RUNNING_IN_PROJECT_TESTSexpect_error)Afuncsr  func_add_global_argumentsfunc_add_global_link_argumentsfunc_add_languagesfunc_add_project_argumentsfunc_add_project_dependenciesfunc_add_project_link_argumentsfunc_add_test_setupfunc_alias_targetfunc_assertfunc_benchmarkfunc_both_libfunc_build_targetfunc_configuration_datafunc_configure_filefunc_custom_target
func_debugfunc_declare_dependencyfunc_dependencyfunc_disablerfunc_environment
func_errorfunc_executable
func_filesfunc_find_programfunc_generatorfunc_get_optionfunc_get_variablefunc_importfunc_include_directoriesfunc_install_datafunc_install_emptydirfunc_install_headersfunc_install_manfunc_install_subdirfunc_install_symlinkfunc_is_disablerfunc_is_variablefunc_jarfunc_join_pathsfunc_libraryfunc_messagefunc_optionfunc_project
func_rangefunc_run_commandfunc_run_targetfunc_set_variablefunc_structured_sourcesfunc_subdirfunc_shared_libfunc_shared_modulefunc_static_libfunc_subdir_donefunc_subprojectfunc_summary	func_testfunc_unset_variablefunc_vcs_tagfunc_warningosenvironfunc_exceptionfunc_expect_errorr,  s    r   r%  zInterpreter.build_func_dictL  s   
 ;143Q ;68[;*D,C; 3D4S; 6t7Y	;
 89]; ,T-E; *4+A; $T%5; '(;; ,T-?; *4+A; 01M; ,T-E; +D,C; #DO;  01M!; ;" ()=#;$ &t'9%;& )$*?';( #DO);* ()=+;, #DO-;. *4+A/;0 '(;1;2 ()=3;4 *4+A5;6 $T%57;8 1$2O9;: *4+A;;< .t/I=;> -d.G?;@ )$*?A;B ,T-EC; ; ;D -d.GE;F )$*?G;H )$*?I;J !$-K;L ()=M;N %d&7O;P %d&7Q;R $T%5S;T %d&7U;V #DOW;X )$*?Y;Z ()=[;\ *4+A];^ 01M_;` $T%5a;b ,T-Ac;d +D,Ce; ;f .2-A*.*?)-)=&*&7#'>-1-E&*&7&*&7u; ; ; ;	 ;	 ;	x 
**J{D,?@AAA+rz99J~t/EFGGGGG :9r   c                x   | j                             i t          t          j        t
          t          j        t          t          j        t          t          j
        t          t          j        t          j        t          j        t          j        t          j        t          j        t          j        t&          j        t*          j        t.          j        t*          j        t.          j        t*          j        t.          j        t*          j        t.          j        t*          j        t.          j         t*          j!        t.          j"        t*          j#        t.          j$        t*          j%        t.          j&        t*          j'        i t.          j(        t*          j)        t.          j*        t*          j+        t.          j,        t*          j-        t.          j.        t*          j/        t.          j0        t*          j1        t.          j2        t*          j3        t.          j4        t*          j5        t.          j6        t*          j7        t.          j8        t*          j9        t.          j:        t*          j;        t.          j<        t*          j=        t.          j>        t*          j?        t&          j@        t*          jA        t.          jB        t*          jC        t          jE        t          jG        t          jI        t*          jJ        t          jL        t*          jM        t          jO        t*          jP        t.          jQ        t*          jR        i           	 | jS                            t          jT        t*          jU        t          t*          jW        t          jX        t          jY        t          t*          j[        t          t*          j]        i           dS )z
            Build a mapping of `HoldableObject` types to their corresponding
            `ObjectHolder`s. This mapping is used in `InterpreterBase` to automatically
            holderify all returned values from methods and functions.
        N)^
holder_mapr  r   P_OBJArrayHolderr   
DictHolderr   IntegerHolderr   BooleanHolderr   StringHolderMesonVersionStringMesonVersionStringHolderDependencyVariableStringDependencyVariableStringHolderOptionStringOptionStringHolderr   r   r9  
FileHolderr   SharedLibrarySharedLibraryHolderStaticLibraryStaticLibraryHolderBothLibrariesBothLibrariesHolderSharedModuleSharedModuleHolder
ExecutableExecutableHolderJar	JarHolderCustomTargetCustomTargetHolderCustomTargetIndexCustomTargetIndexHolder	GeneratorGeneratorHolderGeneratedListGeneratedListHolderExtractedObjectsGeneratedObjectsHolder	RunTargetRunTargetHolderAliasTargetAliasTargetHolderHeadersHeadersHolderMan	ManHolderEmptyDirEmptyDirHolderData
DataHolderSymlinkDataSymlinkDataHolder
InstallDirInstallDirHolderIncludeDirsIncludeDirsHolderr   EnvironmentVariablesHolderStructuredSourcesStructuredSourcesHolderr   	RunResultcompilerOBJTryRunResultHolderr   ExternalLibraryExternalLibraryHolderr
   UserFeatureOptionFeatureOptionHolderr   MachineInfor:  ConfigurationDataConfigurationDataHolderbound_holder_mapr!   DependencyHolderr   ExternalProgramHolderCompilerCompilerHolderr<   ModuleObjectHolderr=   MutableModuleObjectHolderr,  s    r   r&  zInterpreter.build_holder_map  s    	 ( 
%#( 
 %"( 
 $	( 

 %%( 
 #( 
 $e&D( 
 *E,P( 
  8( 
 M3>( 
 !8( 
 !8( 
 !8( 
   6!( 
" c2#( 
$ Is}%( 
&  6'( 
( #S%@)( 
 ( 
* OS0+( 
, !8-( 
. "C$>/( 
0 OS01( 
2 s43( 
4 M3,5( 
6 Is}7( 
8 NC.9( 
: J;( 
< s4=( 
> c2?( 
@ s4A( 
B )3+IC( 
D #S%@E( 
F !?G( 
H (#*CI( 
J %s'>K( 
 ( 
L !3#4#S%@O( 
 ( 
 (	 (	 (	T	 	$$#S%9S6 :#0!>&
 	 	 	 	 	r   	held_typeT.Type[mesonlib.HoldableObject]holder_typeT.Type[ObjectHolder]c                >    | j                             ||i           dS )z
            Adds one additional mapping to the `holder_map`.

            The intended use for this function is in the `initialize` method of
            modules to register custom object holders.
        N)r  r  )r   r  r  s      r   append_holder_mapzInterpreter.append_holder_map  s2     	{ 
 	 	 	 	 	r   invalues2T.List[T.Union[TYPE_var, ExecutableSerialisation]]c                   t          |          }|D ]`}t          |t                    rt          d          t          |t          j        t          j        t          j        f          r|                     |j	        |           tt          |t                    r|                     |           t          |t                    r,| j        |_        | j        j                            |           t          |t          j                  r!| j        j                            |           t          |t          j                  r!| j        j                            |           Vt          |t(          j                  r"|                     |j        d                    t          |t          j                  r!| j        j                            |           t          |t2                    r!| j        j                            |           t          |t6          t8          t:          t<          t          t          j        t@          t          j!        f          rOt          d|d          d S )Nz%Modules must not return ObjectHoldersr   z(Module returned a value of unknown type .)"r   r   r8   r.   r   BuildTargetr  r  
add_targetnamer   process_new_valuesr   r   install_scriptsr   r  datar  symlinksr   InternalDependencysourcesr  install_dirsrG   testsr   r   r   r2   r  r   r  )r   r  r   s      r   r  zInterpreter.process_new_values  s6   8$$ 	^ 	^A!\** T*+RSSS!e/1CU_UVV ^****At$$ ^''****A677 ^#
*11!4444Auz** ^
&&q))))Au011 ^
#**1----A|>?? ^ ''	!5555Au/00 ^
'..q1111At$$ ^
 ''****AS$,H[ /1H J K K ^*+\VW+\+\+\]]]5	^ 	^r   pvlocationmparser.BaseNodec                    t          j        t          j        |          s&t	          j        dt          j         d| |          |t           j        | j        <   d S )NzMeson version is z but project requires node)	r   version_comparer   stable_versionr.   	from_noder   project_meson_versionsr   )r   r  r  s      r   handle_meson_versionz Interpreter.handle_meson_version  sl    '(?DD 	B&01qXEU1q1qmo1q1q  yA  B  B  B  B;='888r   c                   | j         j        sd S | j         j        d         }t          |t          j                  sd S |j        j                                        D ]i\  }}t          |t          j                  s
J d            |j	        dk    r5t          |t          j
                  r|                     |j	        |           jd S )Nr   for mypymeson_version)r  linesr   r   FunctionNodeargsr~   r   IdNoder   
StringNoder!  )r   re  kwvals       r   handle_meson_version_from_astz)Interpreter.handle_meson_version_from_ast  s    x~ 	F(.#'7#788 	F|*0022 	> 	>GBb'.11==:===x?**c7#566 >--ci===	> 	>r   mesonlib.OrderedSet[str]c                    | j         S N)build_def_filesr,  s    r   get_build_def_fileszInterpreter.get_build_def_files  s    ##r   fmesonlib.FileOrStringc                   t          |t          j                  r<|j        rd S t          j                            |                                          }nst          j                            |          rQ|	                    d          s;t          | j                                                  }t          | j                                                  }	 t          |                                          }n# t          $ r t          |          }|                                }t#          |d          rO|j        t           j        z  dk    r7|j        t           j        k    r"|j                                        |j        z  }n Y nw xY w||j        v rd S ||j        v r|                    |          }t5          |          }nd S || j        vr| j                            |           d S d S )Nz/dev/st_file_attributesr   )r   r   r   is_builtr  pathnormpathrelative_nameisfile
startswithr{   r   r  get_build_dirresolveOSErrorstathasattrr5  FILE_ATTRIBUTE_REPARSE_POINTst_reparse_tagIO_REPARSE_TAG_APPEXECLINKparentr  parentsrelative_tor   r0  add)r   r2  srcdirbuilddirf_ss         r   add_build_def_filezInterpreter.add_build_def_file  s   
 a'' 	z   !2!233AAW^^A 	q||G'<'< 	$*99;;<<FD,::<<==H!WW__&& 
 
 
!WWGGIIA344 ,t/PPTUUU(D,KKK **,,rw6BB B
 2:%%##^^F++BAAFD((( $$Q''''' )(s   !C< <BFFT.Dict[str, InterpreterObject]c                    | j         S r/  	variablesr,  s    r   get_variableszInterpreter.get_variables1  s
    ~r   c                   t           j        g}| j                                        r|                    t           j                   |D ]}| j        j        j        |         }| j        j	        |         
                                D ]}	 t          j        |                    |                    }n# t          $ r Y 7w xY wt          |          dk    r"t!          j        dd| j        | j                   d|t           j        u i}|dz   }t)          | |g          }|                    |           |                    |d          }	|	| j        j        |         |<   ؐd S )	NrA   zstdlib without variable name0.56.0r  r   _stdlibT)force_fallback)r   HOSTr   is_cross_buildr   BUILDr   r   
propertiesr   keysr   stringlistify
get_stdlibKeyErrorr   r4   r   r   current_noderE   set_fallbacklookupstdlibs)
r   machine_choicesfor_machinepropsr   dir~   r  dfdeps
             r   check_stdlibszInterpreter.check_stdlibs4  s~   (-.='')) 	8""=#6777* 	9 	9KJ*5kBE],[9>>@@ 9 9!/0@0@0C0CDDBB   Hr77a<<)*H(TXTcnrn  A  A  A  A"K=3F$F 9}.tdV<<###iiti<<58
";/229	9 	9s   	'B11
B>=B>rV  0.59.0)sincer  r'  T.Tuple[str]r~   'kwtypes.FuncImportModule'ET.Union[ExtensionModule, NewExtensionModule, NotFoundExtensionModule]c           
     V   |d         }t          || j                  \  }}}|rt          |          S |                    d          rt	          d| d          d}|                    d          rd|                    d          r2t          j        d| d	|                    dd
d           d|           |t          d          dz   d          }	d}n|}	|	| j	        v r| j	        |	         S 	 d|	 }
t          j        |
          }|                    |           }t          |t          t          f          s
J d            | j        j	                            |	           n# t$          $ r}|j        |
k    rG|r|t          j        d| d           t+          j        |          D ]}t          j        |           |rt	          d| d          t          |	          }Y d }~nd }~ww xY w|j        j        r4t5          j        d|j        j         |j        j        | j        |           |j        j        r4t;          j        d|j        j         |j        j        | j        |           |r5|j        j        s)|j        j        t	          d|j        j         d          |j        j        ~|r7t;          j        d|j        j         d|j        j        | j        d|           nt5          j        d|j        j         d|j        j        | j        d|j        j         d|           nn|j        j        rb|s;|r)t	          d|j        j         d|j        j                   t          |	          }n%t          j        d|j        j         d|d           || j	        |	<   |S )Nr   _zModule "z" does not existF)z	unstable-	unstable_rq  zImporting unstable modules as "z" instead of "-rA   "rT  unstableTzmesonbuild.modules.r#  z" exists but failed to import.zmodule zModule z4 has never been unstable, remove "unstable-" prefix.z has been stabilizedz,drop "unstable-" prefix from the module namez as stable modulezeConsider either adding "unstable-" to the module name, or updating the meson required version to ">= z<" has not been stabilized, and must be imported as unstable-zS has no backwards or forwards compatibility and might not exist in future releases.)r  fatal) rI   r   r?   r;  r/   r	   deprecationreplacer   r   	importlibimport_module
initializer   r;   r>   r   rG  ImportErrorr  rr  	tracebackformat_exceptionrK  INFOaddedr4   r   
deprecatedr5   rt  
stabilized)r   r  r'  r~   modnamedisabledr   rp  expect_unstablereal_modnamefull_module_pathmodule
ext_moduleer   s                  r   r  zInterpreter.func_importI  s    q' 6vt O O(A 	4*7333 c"" 	I"#Gg#G#G#GHHH 899 	#!!+.. 0 !y7!y!yZaZiZijmortuZvZv!y!y!y*.0 0 0 0"3z??Q#6#7#78L"OO"L4<''<--	1C\CC,-=>>F  **400Jj?<N*OPP\\R\\\\J""<0000!  	? 	? 	?v))) GOOOOPPP%6q99 % %DJt$$$$ M&'K''K'K'KLLL0>>JJJJJJ	?" ?  	{!"BJO,@"B"BJODY[_[juyzzzz?% 	G()I:?3G)I)I:?Kegkgv  BF  G  G  G  G 	y:?#; 	y
@Z@b"#wZ_-A#w#w#wxxx?%1 #!,Hjo2HHHO.B!	# # # # # %Ejo2EEEO. Z  }G  }L  }W  Z  Z  Z!	# # # # #
 _% 	n" n `*  ,_jo6J  ,_  ,_  IS  IX  I]  ,_  ,_  `  `  `4\BB

  Qz';  Q  Q  Q  \`  hm  n  n  n  n%/\"s   /E# #
G--A6G((G-rQ  )varargsmparser.FunctionNodeT.Tuple[T.List[str]]'TYPE_kwargs'T.List[mesonlib.File]c                8    |                      |d                   S r   )source_strings_to_filesr   r  r'  r~   s       r   r  zInterpreter.func_files  s     ++DG444r   rL  compile_argsT)r   defaultd_import_dirs0.62.0)r  rk  	link_argsz0.46.0extra_filesz1.2.0)r   r  rk  0.54.0rS  )rk  since_valuesr   objects1.1.0T.List[TYPE_var]kwtypes.FuncDeclareDependencydependencies.Dependencyc                N   |d         }|                      |          }|d         }|d         }|d         }|                     |d                   }	|                     |d                   }
|d         }|d         }|d	         }|d
         }|| j        }|d         }|                      |d          }| j        j        }t
          j                            t
          j                            || j	                            }t
          j                            t
          j                            || j
                            }|                                D ]\  }}|st          j        dd| j        |           t
          j                            |          rj|                                 st#          ||          sFt#          ||          r6t
          j                            |          rt'          j        |          ||<   t+          j        |||||||	|
|||||          }|S )Nr   	link_with
link_wholer  r  r  r  r  rP  r   d_module_versionsr  z*empty variable value in declare_dependency1.4.0rT  )extract_incdirsr  r   r   
source_dirr  r7  abspathjoinr  root_subdirr   r4   r   r   isabsis_subprojectr   isdirr  r  r   r  )r   r  r'  r~   depsincslibs
libs_wholer  r  r  r  r  rP  r   r  r  rH  r  project_rootr   r   rh  s                          r   r  z#Interpreter.func_declare_dependency  s!   & n%##F++k"L)
#..vi/@AA226-3HIIn-;'	;'	#?*G"#67,,V_EE!,fd>Q)R)RSSwrw||FD<L'M'MNNOO%% 	A 	ADAq }%&RT[]a]lw{||||w}}Q A++--A5CNTU5V5VA&|Q77A a((A  %=a@@	!-gt\.7z7T_.2I?PR_.57 7 
r   rD  )optargsT.Tuple[bool, T.Optional[str]]c                    |\  }}|t          j        dd| j        |           |sP|<ddlm}  |            }|j        j        d                             |           |j        }t          d|z             d S )Nz(assert function without message argument0.53.0rT  r   )
AstPrinterr   zAssert failed: )
r4   r   r   r  r  r'  	argumentsacceptresultr.   )r   r  r'  r~   r   rc  r  printers           r   r  zInterpreter.func_assert  s     w?!"LhX\Xgrvwwww 	D,,,,,,$*,,	#A&--g666!.&'87'BCCC	D 	Dr   c                    |6|t          |          k    r#t          d| dt          |           d          t          ||          D ]&\  }}|t          ||          st          d          'd S )Nz	Expected z arguments, got r  zIncorrect argument type.)r   r/   zipr   )r   r'  argcount	arg_typesactualwanteds         r   validate_argumentszInterpreter.validate_arguments  s    3t99$$&'Y8'Y'YSQUYY'Y'Y'YZZZ!$	22 	G 	GNFF!!&&11 G*+EFFF	G 	Gr   rg  check0.47.0capture)r  rk  0.50.0T.Tuple[T.Union[build.Executable, ExternalProgram, compilers.Compiler, mesonlib.File, str], T.List[T.Union[build.Executable, ExternalProgram, compilers.Compiler, mesonlib.File, str]]]'kwtypes.RunCommand'rH   c                .    |                      ||          S r/  )run_command_implr  s       r   r  zInterpreter.func_run_command  s     $$T6222r   Fin_builddirr   c                	   |\  }}|d         }|d         }| j                                         }| j                                         }	|d         }
|
t          j        t
          d           d}
d}g }t          |t          j                  r| j        j	        
                                D ]\  }}||k    r|} n&t          d|                                d	          t          |                    ||                                                    t          |t                    r;|                                s%t          d
|                                d          nt          |t"          j                  rc|                                }|                                }t          |d          }|                                st          d|d          |}nt          |t*          j                  r|                    ||	          }t0          j                            || j                  }t          |d|g          }|                                st          d|d          |}|D ]}t          |t8                    r|                    |           .t          |t*          j                  r*|                    |                    ||	                     rt          |t                    r(|                    |                                           t          |t"          j                  rt?          j         dd| j!        | j"                   t          |                                d          }|                                st          d|d          |                    |                                           ^t          |                    |j#        |                                                    | $                    |                                           |D ]`}t0          j        %                    |          s*t0          j                            |r|	n|| j        |          }| $                    |           atM          |||||	| j        | j         '                                dgz   ||
|
  
        S )Nr  envr  TonceFzoProgram {!r} was overridden with the compiled executable {!r} and therefore cannot be used during configurationzProgram zK is a compiled executable and therefore cannot be used during configurationzcommand z not found or not executablesilent)r  search_dirszProgram or command z7Compiler object as a variadic argument to `run_command`0.61.0rT  
introspect)r  r  r  )(r   r  r<  r	   rr  implicit_check_false_warningr   r   r  find_overridesr   r.   descriptionr   r   foundget_namer   r  get_exe_argsget_exer   r   absolute_pathr  r7  r  r
  r   r   get_pathr4   r   r   r_  r  rL  r  rH   get_build_command)r   r'  r~   r  cmdcargsr  r  rH  rI  r  overridden_msgexpanded_argsr  exeprognameprog
search_diras                      r   r  zInterpreter.run_command_impl   s   
 
U#Um!0022#1133w=L5DAAAAE* &(c5+,, 	[!Z6<<>> X X	c#::#HE  +  ,Wcoo6G6G  ,W  ,W  ,W  X  X  X&~'<'<XsGXGX'Y'YZZZc?++ 	99;; f*+dcllnn+d+d+deeefY/00 	,,..M++--C"3t444D::<< [*+Yc+Y+Y+YZZZCC#x}-- :''99fdk::J"3t*NNND::<< f*+d+d+d+deeeC 	] 	]A!S!! ]$$Q''''Ax}-- ]$$Q__VX%F%FGGGGA// 	]$$QZZ\\2222Ay122 ]%&_aikokz  FJ  FW  X  X  X  X&qyy{{4@@@zz|| _./]#/]/]/]^^^$$T]]__5555*>+@+@IZIZ+[+[\\\ 	/// 	' 	'A7==## VGLL[!DfdkSTUU##A&&&&#}c68T[*<<>>,O&1Q Q Q 	Qr   c                     t          d          )NzYTried to call option() in build description file. All options must be in the option file.)r.   )r   nodesr'  r~   s       r   r  zInterpreter.func_optionK  s    "#~r   z0.38.0)r  r   r  kwtypes.SubprojectrF   c                n    |d         |d         |d         d g d}|                      |d         |          S )Nr   r   r   )r   r   r   r
   cmake_optionsr   )do_subproject)r   r  r'  r~   r*  s        r   r  zInterpreter.func_subprojectN  sK     z*%&78i($
 $
 !!$q'2...r   	subp_namedisabled_featurer   rt  T.Optional[Exception]c                    t          t                      t          j                            | j        |          ||          }|| j        |<   |S )N)r  rt  )rF   rK   r  r7  r  r  r  )r   r  r  rt  subs        r   disabled_subprojectzInterpreter.disabled_subproject_  sO    8::BGLLI\^g<h<h0@IW W W&)#
r   kwtypes.DoSubprojectforce_methodT.Optional[wrap.Method]extra_default_options7T.Optional[T.Dict[str, options.ElementaryOptionValues]]c           	     	   |dk    r	 t          || j                  \  }}}|r`|s
J d            t          j        dt          j        |          ddt          j        |          d           |                     ||          S |d         }t          |t                    r|g}t          |t                    rt          d	 |D                       }|ri ||}|d
k    rt          d          |d         dk    rt          d          d|v rt          d          t          j                            |          rt          d          t          |          rt          j        d| j                   || j        v r3| j        |gz   }	d                    |	          }
t'          d|
 d          || j        v r| j        |         }|r,|                                st          d|j         d          |d         rT| j        j        |         }|d         }|dk    st1          j        ||          d         st          d| d| d| d          |S | j        j        }	 |                    ||          \  }}n# t:          j        $ r}||                                dz   }nd}|t          j        |          dt          j         d           g}|sCt          j        |           t          j        g |d!R   |                     ||"          cY d }~S t          j!        |  |d }~ww xY wt          j"        t          j                            | j        j        #                                |          d#$           d#| _$        d                    | j        |gz             }d%t          j        |          g}|d&k    r|d't          j        |          gz  }t          j        g |d(R d)d*i | j%        | j&        | j'        d+}	  ||         ||||          S # t&          $ r  tP          $ r}|st          j)        |          5  t          j*        |t          j+        d,          -           d d d            n# 1 swxY w Y   t          j        d.t          j        |          dt          j         d           d!           |                     ||"          cY d }~S |d }~ww xY w)/N
sub_staticr#  
Subprojectr   skipped: featurer  )r  r   c              3  B   K   | ]}|                     d d          V  dS )=rA   N)splitr   xs     r   	<genexpr>z,Interpreter.do_subproject.<locals>.<genexpr>t  s.      #M#MAGGCOO#M#M#M#M#M#Mr   r   z"Subproject name must not be empty.r   r  z-Subproject name must not start with a period...z5Subproject name must not contain a ".." path segment.z-Subproject name must not be an absolute path.zJSubproject name has a path separator. This may cause unexpected behaviour.rT   => z"Recursive include of subprojects: zSubproject "z" required but not found.r   	undefinedSubproject  version is  but 
 required.z subprojectzis buildable:r   z(disabling))rt  Texist_okz
Executing subprojectr  r   r   nestedF)r  cmakecargoz
Exception:)prefixz
Subproject),rI   r   r	   r   r   r  r   r   r   r   r.   r  r7  r  r   rr  r_  r"  r  r0   r  r  r
  r   r   version_compare_manyr   wrap_resolverr=  r   WrapExceptiontitler   rO  makedirsr<  r!  _do_subproject_meson_do_subproject_cmake_do_subproject_cargo	Exceptionr
  rt  yellow)r   r  r~   r  r  r  r   featurer   	fullstackincpathr   r  r  rr
  r   r  r  msgstackr   methods_maps                          r   r  zInterpreter.do_subprojectf  s   $$&<VT_&U&U#(G 	Q&&J&&&H\49Y#7#7>PRVR[\cRdRdfpqqq++I+PPP !23os++ 	0./Oot,, 	O"#M#M_#M#M#MNNO  	KJ!6J/JO??&'KLLLQ<3&'VWWW9&'^___7==## 	X&'VWWW	"" 	5Le"&"35 5 5 5----;Ikk),,GM7MMMNNN((())4J h
 0 0 2 2 h*+f*:K+f+f+fgggi  qZ+I6	*$$H,I"f,U,UVW,X$./oY/o/oTV/o/o]c/o/o/oppp*	YYy,??NFFF! 	 	 	'%++--=%49Y//$(4..QC H-#-}----//	Q/GGGGGGGGJG	 	BGLL!7!E!E!G!GPP[_````"&.)<==%ty'7'78W(DIf--..A(!(T(((%((( ...D
 D
	&;v&y&/6RRR 	 	 	 	 	 	 H[++ H H N1T[-F-FGGGGH H H H H H H H H H H H H H H 6):):OTXVZ^^]jkkk//	Q/GGGGGGGGG	sn   I9 9L(BL#L(L##L(P S)S?)Q4(S4Q8	8S;Q8	<ASSSSr   +T.Dict[str, options.ElementaryOptionValues]r0  T.Optional[T.List[str]]c                   t          j        |          5  |rddlm}m}	  |	d          }
|                     |                       |                    |
           |
                                 t          j        	                    | j
        j                                        |d          }t          |dd          5 }|                    |
j                   d d d            n# 1 swxY w Y   t          j        d	|           t          j        |           | j
                                        }t'          || j        ||| j        |||| j        
	  	        }| j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |gz   |_        | j        }t          j                    5  |                                 t          j                     }d d d            n# 1 swxY w Y   t          j        dt          j!        |          d           d d d            n# 1 swxY w Y   t          j                     |d         rI|j"        }|d         }|dk    stG          j$        ||          d         stK          d| d| d| d          || _        | j        &                    |j                   tO          |||| j                  | j        |<   |r| j(        &                    |           | j(        &                    |j(                   | j
        )                    |j
                   |j"        | j
        j        |<   | j        |         S )Nr   )AstIndentationGeneratorr  T)update_ast_line_nosmeson.buildwutf-8encodingzGenerated Meson AST:)r  r  r  r  z	finished.r   r  r   r  r  r  r  )warnings	callstack)*r	   r
  r  r"  r  r  post_processr  r7  r  r   r   r<  openwriter  r   cmd_ci_includecopyr  r  r  r  r  r   r  r  r  r"  r  nested_warningsrunget_warning_countr   r   r   r  r.   r  rF   r0  merge)r   r  r
  r   r~   r  r0  r  r"  r  r  meson_filenamer2  	new_buildsubicurrent_activesubi_warningsr  r  s                      r   r  z Interpreter._do_subproject_meson  s#    [##  	F  	F 4EEEEEEEE$*>>>

2244555

7###$$&&&!#dj.D.R.R.T.TV\^k!l!l.#@@@ ,AGGGN+++, , , , , , , , , , , , , , ,/@@@#N333
))Iy$,	64K^.C[484MO O OD  $/D<DL"oDO$($9D!<DL$($9YK$GD!!4N%'' 9 9


 $ 6 8 89 9 9 9 9 9 9 9 9 9 9 9 9 9 9 H\49Y#7#7EEEA 	F  	F  	F  	F  	F  	F  	F  	F  	F  	F  	F  	F  	F  	F  	FD 	


) 	m%BI&F[  (Eb&(Q(QRS(T *+k+k+kPR+k+kY_+k+k+klll"0 0111&6tVmAEAV'X 'X 'X#  	9 ''888##D$8999
$$$,0,@
y)	**s[   B-H6C)H6)C-	-H60C-	1CH6(G7+H67G;	;H6>G;	?+H66H:=H:c           
        ddl m} t          j        |          5  | j        j                            d          }ddlm} |	                    d          p	 |            }|	                    dg           |j
        z   }	 |t          |          t          |          | j        j        | j                  }
|
                    |	           |
                                 |
                    |j                  }|                     |||||d |
j        D             t*          j        h          }|
|_        d d d            n# 1 swxY w Y   |S )	Nr   )CMakeInterpreterr  )CMakeSubprojectOptionsr
   r  c                ,    g | ]}t          |          S r   r   )r   r2  s     r   
<listcomp>z4Interpreter._do_subproject_cmake.<locals>.<listcomp>  s    555SVV555r   )r  )r  r:  r	   r
  r   optstoreget_value_formodules.cmaker;  getr  r{   r   r   r  
initialiseanalysepretend_to_be_mesontarget_optionsr  bs_filesr   r   cm_interpreter)r   r  r
  r   r~   r:  r  r;  kw_optsr  cm_intr  r  s                r   r  z Interpreter._do_subproject_cmake  s    	-,,,,,[## 	+ 	+]+99(CCF>>>>>>jj++G/E/E/G/GG"JJ;;g>SSM%%d6llDLL$*BXZ^ZfggFm,,,NN ,,W-CDDC..vC55V_5551Q!	 /  F %+F!)	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+* s   DEEEc                   ddl m} t          j        dd| j        | j                   t          j        dd| j                   | j        j        $|	                    | j                  | j        _        t          j
        |          5  | j        j                            |          }|                     |||||t          j                            |d	          g          cd d d            S # 1 swxY w Y   d S )
Nr   )r  zCargo subproject1.3.0rT  zZCargo subproject is an experimental feature and has no backwards compatibility guarantees.T)r  r  z
Cargo.toml)r   r  r4   r   r   r_  r	   rr  r   r  r
  	interpretr  r  r7  r  )r   r  r
  r   r~   r  r  s          r   r  z Interpreter._do_subproject_cargo  sD    	0'4?UYUfggggq):	< 	< 	< 	<!)%*%6%6t7G%H%HD"[## 	6 	6"(226::C,,6?FCfl3346 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   	AC..C25C2rT  r   'T.Union[options.UserOption, 'TYPE_var']c                   |d         }d|v rt          d          t          j        |                    dd          d                   t          d|          	 t	          j        || j                  }| j        j        	                    |          \  }}n# t          $ ry | j        j                            |          r"| j        j                            |          }d }n5| j        rt          d	| d
| j         d          t          d	| d          Y nw xY wt          |t          j                  r$t!          j        |          }||_        ||_        |S |dk    rD|t          |t          j                  sJ |sdS d                    t+          |                    S t          |t,                    rt/          j        |d| d          S |S )Nr   r   zuHaving a colon in option name is forbidden, projects are not allowed to directly access options of other subprojects.r  rA   )maxsplitzInvalid option name zOption z does not exist for subproject  does not exist.
b_sanitizenone,{})r.   r@   searchr  r
   r   r   r   r?  get_value_object_and_value_forr^  is_base_optionget_default_for_b_optionr   r   r  r/  r  r   UserStringArrayOptionr  sortedr   r  r  )	r   r  r'  r~   optnameoptkeyvalue_objectr   ocopys	            r   r  zInterpreter.func_get_option'  s    q''>>& (G H H H cA > >r BCCO&'Ig'I'IJJJ
	J&w@@F"&-"8"W"WX^"_"_L%% 	J 	J 	J}%44V<< J .GGOO#? o()m7)m)m[_[j)m)m)mnnn$%Hw%H%H%HIII	 	J  lG$=>> 	+Il++E EJEKL$$':lGDa+b+b'''
  v88F5MM***eS!! 	?%e-='-=-=-=>>>s   <B B DDrH  'T.Tuple[T.Optional[T.Dict[str, T.Any]]]build.ConfigurationDatac                   |d         }|ot          j        dd| j        |           |                                D ]=\  }}t	          |t
          t          t          f          st          d|d|d          >t          j
        |          S )Nr   zconfiguration_data dictionary0.49.0rT  4"configuration_data": initial value dictionary key "$"" must be "str | int | bool", not "rs  )r4   r   r   r   r   r   r   r   r/   r   r  )r   r  r'  r~   initial_valuesr   r   s          r   r  z#Interpreter.func_configuration_data]  s     a%!"A8T_gkllll&,,.. @ @1!!c3%566 @*~q~~xy~~~@ @ @@ &~666r   c                     j         d S ddl m} t          d           j        j        v rN j        j                            t          d                    }|                    | j	                    _         nM j        j                            t          d                    }|
                    | j	                    _          j         t          d| d          | j         j        k    r j         j                            d          r1t          j        dt          j         j         j                              j        j        st'          d	| d
 j         j                    j                            t          d           j         j        d            j        j        r j                            |            fd j        j                                        D             } j                            |           d S )Nr   )backends	genvsliter  zUnknown backend "".vsz$Auto detected Visual Studio backend:zBackend changed from z to T)first_invocationc                d    i | ],\  }}j         j        j                            |          )||-S r   )r   r   r?  is_backend_option)r   r   r   r   s      r   
<dictcomp>z+Interpreter.set_backend.<locals>.<dictcomp>  sQ      A  A  ADAqHXHaHjH|H|}~HH  A1a  A  A  Ar   )r  rj  r   r  cmd_line_optionsr   r?  r@  get_genvslite_backendr   get_backend_from_namer.   r  r;  r	   r   r   r   rn  r   
set_optioninit_backend_optionsr
   r   set_options)r   rj  backend_namer
   s   `   r   set_backendzInterpreter.set_backendj  s	   <#F&&&&&&[!!T%>%OOO  =1??	+@V@VWWL#99,
TXYYDLL=1??	)@T@TUUL#99,
TXYYDL<&'K<'K'K'KLLL4<,,,| ++D11 _?4<K\A]A]^^^#4 g'(e(e(eRVR^Rc(e(efffM$$Yy%9%94<;L_c$ddd , 	=M..|<<< A  A  A  AD$4$<$B$B$D$D  A  A  A!!'*****r   re  r$  r  c                @    t          | t                    r| d         n| S r   r   r   r  s    r   <lambda>zInterpreter.<lambda>  s    
1d(;(; B! r   )r  	validator	convertorlicenselicense_files)r  r   rk  )r  T.Tuple[str, T.List[str]]'kwtypes.Project'c                2   |\  }}d|v rt          d|d          |d         r|                     |d         |           n%t          j                    t          j        | j        <   |                                  |d         | _        t          | j        t                    r| j        g| _        t          | j        t          t          f          sJ | j        j        s| j        dk    r| j        | j        j        vr| j        dk    r;| j        j                            | j        | j        j        | j        j                   na| j        }| j        j                            | j        || j        | j        j                   | j        j                            | j                   |                                 s| j        j                            t5          d                    }|t          |t                    s
J d            | j        j                            t5          d	                    }t          |t6                    s
J d            |p|                    d
          }	t          j        |	           |                                  |                                 s5| j        j                            | j        j                   || j         _!        || _"        |d         }
|

J d            t          |
t          j#                  r
tI          j%        dd| j        |           | &                    |
           |
'                    | j        j(        | j        j)                  }	 tU          |          +                    d          ,                    d          }n# tZ          $ r t]          d          w xY wt_          |          dk    r|d         dk    r
|dd         }t_          |          dk    rt]          d          |d         | _0        n|
| _0        | j         j0        | j0        | j         _0        |d         dg}|d         rt          d          n|d         }g }| 1                    |d                   D ]C}|'                    | j        j(        | j        j)                  }|2                    ||f           DtA          j3        | j0        ||| j                  | j         j4        |<   | j        | j         j5        v rtm          d          |d         }t          |t                    st]          d          tn          j8        9                    |          rt]          d          |                    d          rt]          d           d!|v rt]          d"          |                                 s|| _:        | j:        | j         _:        tn          j8        ;                    | j<        |          }|                                 s|t{          j>        | j        j                            t5          d#                              }t          j@        | j        A                                || j        |          | j        _B        n;| j        jB        
J d            | j        jB        C                    || j                   || j         j5        | j        <   t          jE        d$t          jF        |                     t          jE        d%t          jF        | j0                             | G                    |d&t          jI                   | G                    |d't          jJ                   |                                 s| K                                 d S d S )(Nr   zProject name z must not contain ':'r$  r   r   r  r#  vsenvrm  r   zversion from filer   rT  r&  r'  r   zVersion file not found.r   rA   r   z3Version file must contain exactly one line of text.r  unknownr  zDProject `license` name must be specified when `license_files` is setzSecond call to project().r  zSubproject_dir must be a stringz,Subproject_dir must not be an absolute path.r  z,Subproject_dir must not begin with a period.r  z/Subproject_dir must not contain a ".." segment.	wrap_modezProject name:zProject version:TF)Lr/   r!  r   NoProjectVersionr   r   _load_option_filer$  r   r   r   r   r   rn  r   initialized_subprojectsr?  &initialize_from_top_level_project_callr  rr  r
   r  initialize_from_subproject_callrG  r  r@  r   r   r;  setup_vsenvry  validate_cmd_line_optionsr   r   r  r   r4   r   rL  r  r  	build_dirr{   	read_textr  FileNotFoundErrorr.   r   r   r  r   DepManifestdep_manifestprojectsr0   r  r7  r  r  r  r
  r   from_stringr   Resolverr  r  load_and_merger	   r   r   r>  r   rW  rY  ri  )r   r  r'  r~   	proj_name
proj_langsinvoker_method_default_optionsr  r  force_vsenvr   ifnamever_dataproj_licenseproj_license_filesr   	spdirnamesubprojects_dirr  s                      r   r  zInterpreter.func_project  su   " !%	:)"#U9#U#U#UVVV /" 	[%%f_&=tDDDD?G?X?Z?ZH+DO<   '-.?'@$d2C88 	J,0,H+ID($6tEEEEE, 	KB1F1F4?bfbo  cH  LH  LH"$$&MMdNjNRNgNxNRN^Nfh h h h 261M.&FFtGeGKGcGKG`Gqs s s 599$/JJJ!!## 
	.
 m,::9Y;O;OPPG?j#&>&>??
???M*8879K9KLLEeT**66J666;7#5#5d#;#;K ---!!## 	0M"<<T=V=ghhh&/DJ#"+#""J"""gx}-- 	+!"5x[_````##G,,,**4+;+F+/+;+EG GFF<<1171CCII$OO$ F F F*+DEEEF8}}!!hqkR&7&7#AaC=8}}!!*+`aaa#+A;D  #*D :%-)-)=DJ&)$%;Lo& o&'mnnno "),L--f_.EFF 	3 	3A__T%5%@%)%5%?A AF%%vqk2222-2->t?SUa?QSWSb.d .d
	*?dj1119::: +,	)S)) 	J&'HIII7==## 	W&'UVVV$$ 	W&'UVVV9&'XYYY!!## 	,"+D$($7
! ',,t{I>>!!## 	\ ,T]-C-Q-QR[\gRhRh-i-ijjI-1]4;K;Z;Z;\;\^moso~  AJ  .K  .KD**#1==z===*99/4?[[[/8
DO,$)I"6"6777#TYt/C%D%DEEE:t]-?@@@:um.ABBB!!## 	!     	! 	!s   *6N! !N;r>  r   'kwtypes.FuncAddLanguages'c           	        |d         }t          || j                  \  }}}|d         }|rh|s
J d            t          |t          j                  D ]>}	t          j        dt          j        |	          dt          j        |          d           ?dS |*|                     ||| 	                    |                    S t          j        | j                  }
t          j        |
d	          rt          j        d
|           |                     ||t          j                  }||                     |dt          j                  z  }|S )Nr   r   r#  keyCompiler for languager  r  Fr  zXadd_languages is missing native:, assuming languages are wanted for both host and build.rT  )rI   r   r]  r   
sort_clinkr	   r   r   r>  machine_from_native_kwargr4   get_target_versioncheck_versionrr  r   rW  rY  )r   r  r'  r~   langsr  r   r  r   langtvsuccesss               r   rz  zInterpreter.func_add_languages  sY    Q&<VT_&U&U#(G! 	&&J&&&u)*>??? w w0$)D//CUW[W`ahWiWikuvvvv5%%eXt7U7UV\7]7]^^^ .t??B'H55 ,w&*, , , , ((-:LMMGt))%8KLLLGNr   	func_nameT.List[str]c                     	  fd|D             S # t           $ r&}t          | dt          |                     d }~ww xY w)Nc                :    g | ]}t          |j                  S r   )r:   r   )r   r   r   s     r   r>  z9Interpreter._stringify_user_arguments.<locals>.<listcomp>.  s&    MMM1*1do>>MMMr   z(): )r/   r   )r   r'  r  r  s   `   r   _stringify_user_argumentsz%Interpreter._stringify_user_arguments,  sc    	?MMMMMMMM 	? 	? 	?"i#=#=SVV#=#=>>>	?s    
A!<Ac                    t          |          dk    rt          j        dd| j        |           |                     |d          }|                     |           d S )NrA   z#message with more than one argumentr  rT  rc  )r   r4   r   r   r  message_implr   r  r'  r~   args_strs        r   r  zInterpreter.func_message2  sb     t99q==!"GSWSbmqrrrr11$	BB(#####r   c                N    t          j        t          j        d          g|R   d S )NzMessage:)r	   r   r   r   r'  s     r   r  zInterpreter.message_impl:  s*    :&&.......r   r  r  r   r   r   <T.Tuple[T.Union[str, T.Dict[str, T.Any]], T.Optional[T.Any]]'kwtypes.Summary'c                *   |d         3t          |d         t                    st          d          |d         }n:t          |d         t                    st          d          |d         |d         i}|                     |d         ||           d S )NrA   r   z*Summary first argument must be dictionary.z&Summary first argument must be string.r   )r   r   r.   r   summary_impl)r   r  r'  r~   r   s        r   r  zInterpreter.func_summary=  s     7?d1gt,, Y*+WXXX!WFFd1gs++ U*+STTT1gtAw'F&+VV<<<<<r   c                    | j         | j        vr't          | j        | j                  | j        | j         <   | j        | j                                      |||d         |d         | j                    d S )Nr   r   )r   r  r   r  r   r   )r   r   r   r~   s       r   r  zInterpreter.summary_implR  sv    ?$,..,3D4KTMa,b,bDL)T_%11VVI.z0BDO	U 	U 	U 	U 	Ur   c                   t          j                    }t          | j                                                  D ]\  }}|                                g}|j        r|d|j        dgz  }n9|j        r|t          |j                  gz  }n|j	        dk    r||j	         dgz  }|j
        r$d                    |j
                  }|d| dgz  }|||<   |r|                     d|d	d
d           | j        rt          j                    }| j        j        r| j        j        |d<   | j        j        r| j        j        |d<   d }t          | j        j                                        |          }|                    d |D                        |r|                     d|dd d           t%          j        d           | j                            dd           }	t          | j                                                  D ]8\  }
}| j        |
                                         r|                                 9|	r|	                                 d S d S )NzFeature z	 disabledr   z	 warningsr  z(from )SubprojectsTr   )r   r   zCross fileszNative filesc                x    t          | t                    r| d         } t          | t                    r| S | j        S r   )r   tupler   r  )rK  s    r   compatibility_sort_helperz=Interpreter._print_summary.<locals>.compatibility_sort_helpert  s;    a'' !Aa%% Hvr   r  c                4    i | ]\  }}t          |          |S r   r=  r   r   r   s      r   rq  z.Interpreter._print_summary.<locals>.<dictcomp>{  s$    @@@A3q661@@@r   zUser defined optionsFr   )r   OrderedDictr]  r  r   r  r  rt  r   r)  r*  r  r  r  
cross_filenative_filerr  r  r	   r   r  popr   )r   all_subprojectsr  subpr   r  r   r  sorted_optionsmain_summaryr  r  s               r   _print_summaryzInterpreter._print_summaryX  s   %133 !1!7!7!9!9:: 	* 	*JD$ZZ\\NE$ 7GT%:GGGHH 7#dn--..""T]55566~ -DN33+5+++,,$)OD!! 	"m_*.+.! !" " "
 $ 	h ,..F(3 M(,(A(L}%(4 O)-)B)N~&   $D$=$N$T$T$V$V\uvvvNMM@@@@@AAA h!!"8&eaeBfBfggg|''D11"(););)=)=">"> 	 	Iw	*0022  	 	  	 r   rr  z0.44.0c                    t          |          dk    rt          j        dd| j        |           |                     |d          }t          j        |d|i d S )NrA   z#warning with more than one argumentr  rT  rr  r  )r   r4   r   r   r  r	   rr  r  s        r   r  zInterpreter.func_warning  sc     t99q==!"GSWSbmqrrrr11$	BBh......r   c                    t          |          dk    rt          j        dd| j        |           |                     |d          }t          dd                    |          z             )NrA   z!error with more than one argumentr   rT  rO  zProblem encountered: r   )r   r4   r   r   r  r.   r  r  s        r   r  zInterpreter.func_error  sh     t99q==!"ExQUQ`kopppp11$@@"#:SXXh=O=O#OPPPr   rK  0.63.0c                V    |                      |d          }t          j        dg|R   d S )NrK  zDebug:)r  r	   rK  r  s        r   r  zInterpreter.func_debug  s7     11$@@
8'h''''''r   c                     t          d          )Nzunit test traceback :))RuntimeErrorr  s       r   r  zInterpreter.func_exception  s     3444r   rv  howliteralre)r  r~  r9   c                d     G d dt                     } ||d         |d         | j                  S )Nc                  &     e Zd Zd	 fdZd Z xZS )
8Interpreter.func_expect_error.<locals>.ExpectErrorObjectr  r   r  r   r   r   c                   t                                          |           t          j        | _        t          j                    xt          _        | _        t          | j        dd           t          j        _	        || _
        || _        d S )Ncolorize_console)r  r   sysstdout
old_stdoutioStringIO
new_stdoutgetattrr  r  r  )r   r  r  r   r)  s       r   r   zAInterpreter.func_expect_error.<locals>.ExpectErrorObject.__init__  sd      ,,,"%*/1{}}<
T_.5doGY[_.`.`
+r   c                   | j         t          _        | j                                                                        D ]9}d|v r$t          |                    dd                     *t          |           :|t          d          t          |t          j                  rft          |          }| j        dk    r| j        |k    s%| j        dk    r4t          j        | j        |          st          d| j        d|          d	S d S )
NzERROR:ERRORzERROR (msbuild proof)z+Expecting an error but code block succeededr  r  zExpecting error z	 but got T)r  r  r  r  getvalue
splitlinesprintrw  r.   r   r   r   r   r  r  r  match)r   exc_typeexc_valexc_tbr   r  s         r   __exit__zAInterpreter.func_expect_error.<locals>.ExpectErrorObject.__exit__  s   !_
1133>>@@ ! !A1}}aii1HIIJJJJa?./\]]]gx'>??  g,,CI--$(c//D(($(C1H1H(23bdh3b3b[^3b3bccc4   r   )r  r   r  r   r   r   r   r   )r   r   r   r   r  __classcell__r)  s   @r   ExpectErrorObjectr    sL                          r   r  r   r  )r9   r   )r   r  r'  r~   r  s        r   r  zInterpreter.func_expect_error  sN    	  	  	  	  	  4 	  	  	 0 ! a&-IIIr   r   rd  r   c                    |                      |||          }| j                                        s| j                                         |                                  |S r/  )add_languages_forr   rX  $copy_build_options_from_regular_onesr(  )r   r'  r   rd  r  s        r   r>  zInterpreter.add_languages  s[    ((xEE}++-- 	AM>>@@@!!!r   c                    | j         j        j                            dd          }t	          |t
                    st          d          |t          j        k    r|sdS | j         	                                s|sdS |S )Nskip_sanity_checkFz+Option skip_sanity_check must be a boolean.)
r   rZ  r7  rB  r   r   r.   r   rW  rX  )r   rd  shoulds      r   should_skip_sanity_checkz$Interpreter.should_skip_sanity_check  s    !,1556I5QQ&$'' 	V&'TUUU-,,,V,5..00 	 	5r   c                ,   d |D             }t          | j        |                                                   }|                    |           d|v r;d|vr7t	          j        dd| j        | j                   |                    d           d|v r"t	          j        dd	| j        | j                   d
}t          |t          j
                  D ]}|| j        |         v r|                                }| j        j        |                             |          }|s	 |                     |          }	|	rt          j        dd
           t          j        | j        |||	| j                  }|t'          d| d          nD# t(          j        $ r2 |s.t          j        dt          j        |          d|d           d}Y  w xY w|dk    rKt/          | j        d          r6t          j        d                    |                     d| j        j        |<   n'| j                            ||| j        | j                   |t:          j        k    s| j                                        rt          j        }
nt          j        }
 |
|                                 d|dt          j        d!                    |"                                                    |#                                           |j$        s |
|                                 d|dt          j        d!                    |j$        "                                                    |j$        j%        |j$        j&                   | j'        (                    |           || j        |         |<   |S )Nc                6    g | ]}|                                 S r   )lower)r   r  s     r   r>  z1Interpreter.add_languages_for.<locals>.<listcomp>  s     (((a		(((r   valaczAdding Vala language without Crj  rT  nasmzAdding NASM languager   Tr  z8Cross compiler sanity tests disabled via the cross file.r  zTried to use unknown language "rl  r  zfor thezmachine not found.Fcudaallow_thin_archivesznadded cuda as language, disabling thin archives for {}, since nvcc/nvlink cannot handle thin archives nativelyzcompiler for thezmachine:r   zlinker for the))r  r   r[  r  r4   r   r   r_  r   r]  r  get_lower_case_namer   rB  r  r	   r   detect_compiler_forr   r/   r   r   r   r@  r  rK  r   r   process_compiler_optionsr   rW  rX  get_display_languager  get_exelistget_version_stringlinkeridr   r   ensure_static_linker)r   r'  r   rd  r  r  r  machine_namecompr  
logger_funs              r   r  zInterpreter.add_languages_for  s   ((4(((DN;/446677T U??s%//!"BHdohlhyzzzzKKU??!"8(DO^b^opppp4Y%9::: (	5 (	5Dt~k222&::<<L=*;7;;DAAD f(,(E(Ek(R(R%( h![bfgggg$89I4Q\^oqu  rA  B  BD|./YQU/Y/Y/YZZZ $.   # !8!%4)\!57 7 7 #(  6>>gdl<Q&R&R>J   P   W   W  Xc   d   d  e  e  eDIDL4[A 66tT4CSUYUdeeem000D4D4S4S4U4U0!X

!Z
Jt00224FV`y$*:*:*<*<!=!=>>@W@W@Y@Y[ [ [{&
444668H,Xb9SXXdk.E.E.G.G%H%HII4;>[_[f[np p pJ++D11104DN;'--s   A$F=GG	prognamesT.List[mesonlib.FileOrString]T.Optional[ExternalProgram]c                    |D ]u}t          |t          j                  rt          |t                    st	          d          t          j        | j        ||          }t          |t                    s|c S vd S )Nz Executable name must be a string)	r   r   r   r   r.   r   from_bin_listr   r    )r   rd  r  pr  s        r   program_from_file_forz!Interpreter.program_from_file_for  s     		 		A!X]++ a%% O*+MNNN"01A;PQRRD d$>?? tr   r  
extra_infoT.List[mlog.TV_Loggable]c                   t           j                            | j                                        | j                  }|D ]D}t          |t          j                  r|j	        r=t           j                            | j        
                                |j                  }n<t           j                            | j                                        |j                  }|j        }|g}n4t          |t                    r|r|g|z   }n|g}nt          d|          t          ||d          }|                                rB|                    dd                    |                                           d           |c S Fd S )Nz1find_program only accepts strings and files, not T)r  r  (r   r  )r  r7  r  r   r  r
  r   r   r   r6  r<  fnamer   r/   r   r  r   get_command)r   r'  r  r  r  exenamer  extprogs           r   program_from_systemzInterpreter.program_from_system   s~   
 W\\$"2"A"A"C"CT[QQ
 	 	G'8=11 h# >!#d.>.L.L.N.N.5n"> ">JJ "$d.>.M.M.O.O.5n"> ">J!-)lGS)) h /#-,"<KK#-,KK&'f[b'f'fggg%g;tTTTG}} !!"Hchhw/B/B/D/D&E&E"H"H"HIII tr   command_namesT.List['mlog.TV_Loggable']GT.Optional[T.Union[ExternalProgram, OverrideProgram, build.Executable]]c                    |D ]c}t          |t                    s|| j        j        v r=| j        j        |         }|                    t          j        d                     |c S dd S )Nz(overridden))r   r   r   r  r   r	   blue)r   r  r  r  r  s        r   program_from_overridesz"Interpreter.program_from_overrides=  sz     " 	 	DdC(( tz000j/5!!$)N";";<<<


 1 tr   c                x    |D ]6}t          |t                    r| j        j                            |           7d S r/  )r   r   r   searched_programsrG  )r   r  r  s      r   store_name_lookupszInterpreter.store_name_lookupsI  sG    ! 	7 	7D$$$ 7
,00666	7 	7r   r  r  =T.Union[build.Executable, ExternalProgram, 'OverrideProgram']c                2   || j         j        v rt          d| d          || j         j        v rt          d| d          || j         j        |<   |dk    r=t	          |t
                    r*ddlm} |                    |t          j
                   d S d S d S )Nz)Tried to override finding of executable "z" which has already been found.zTried to override executable "z$" which has already been overridden.z
pkg-configr   )PkgConfigInterface)r   r$  r.   r  r   r   dependencies.pkgconfigr(  set_program_overrider   rW  )r   r  r  r(  s       r   add_find_program_overridez%Interpreter.add_find_program_overrideN  s    4:///&'xSW'x'x'xyyy4:,,,&'r'r'r'rsss*-
!$'<JsO$D$DCCCCCC33C9KLLLLL  r   r   c                `     t          d                     fd|D                                 S )Nr   c                    g | ]C}t          |t                    r|n)|                    j        j        j        j                  DS r   )r   r   r  r   r  r  )r   r  r   s     r   r>  z0Interpreter.notfound_program.<locals>.<listcomp>Z  sW        Q$$rQQ!//$:J:UW[WgWq*r*r   r   )r    r  r  s   ` r   notfound_programzInterpreter.notfound_programX  sK    )#((     + +   	r   =T.Optional[T.Dict[OptionKey, options.ElementaryOptionValues]]r  r  T.Union[str, T.List[str]]version_argversion_funcT.Optional[ProgramVersionFunc]AT.Union['ExternalProgram', 'build.Executable', 'OverrideProgram']c
                   t          j        |          }g }
|                     ||||||||	|
	  	        }||                     |||	|
          s|                     |          }t          |t                    r|                                s|sKt          j	        dt          j
        |                                          dt          j        d          g|
R   |r6d}t          |                    |                                                    |S |                     |           |s>t          j	        dt          j
        |j                  dt          j        d          g|
R   t          |t$          j                  rd|_        |S )NProgramfound:r   z(Program {!r} not found or not executabler   T)r   r   program_lookupcheck_program_versionr.  r   r   r  r	   r   r   r  r   r.   r   r%  r  r   r   r  was_returned_by_find_program)r   r'  rd  r   r   r  r  r  r1  r2  r  progobjr   s                r   find_program_implzInterpreter.find_program_impl_  s    %%/1
%%dK(T_agit  wC  EO  P  P?$"<"<Wfl\f"g"g?++D11Gg// 	 	 jDIg.>.>.@.@$A$A8TXVZ^^i^hiiii I>*188G4D4D4F4F+G+GHHHN 	%%% 	cHY	', 7 74:eCTCTbWabbbbgu/00 	837G0r   GT.Optional[T.Union[ExternalProgram, build.Executable, OverrideProgram]]c
                   |                      ||	          }
|
r|
S |d         dk    r)t          d| j                                        d          S d }t	          j        | j        j                            t          d                              }|t          j
        k    r+| j        j        r| j        j                            |          }|r)|t          j        k    r|                     |||||	          S |                     ||          }
|
|                     |||	          }
|
O|d                             d          r4t          dt$          j        d          }|                                r|nd }
t+          |
t                    r	|r||
_        |
r|                     |
|||	          sd }
|
|r|r|                     |          }
t3          j        dt3          j        |
                                          dt3          j        d	          g|	R   |	                                 |                     |||||	          }
|
S )
Nr   r  Tr  r  python3r6  r7  r   )r"  r   r   r  r   r  r   r?  r@  r   
nofallbackr  find_program_providerforcefallbackfind_program_fallbackr  r  endswithr   python_commandr  r   r1  r9  r.  r	   r   r   r  r   clear)r   r'  rd  r   r   r  r  r1  r2  r  r;  r   r  r  s                 r   r8  zInterpreter.program_lookup  sE    --dJ?? 	N7g"7D,<,N,N,P,PY]^^^^()?)M)MiXcNdNd)e)eff	+++0@0N+'5KKDQQH 	e	X%;;;--hoxYcddd,,[$???..t[*MMG?tAw//	::?"9h.EdSSSD"jjll4ddGg// 	.K 	."-G 	455gv|U_`` 	G?x?H?++D11GHY	'*:*:*<*< = =xRVeZdeeee004RZ\fggGr   r;  ;T.Union[ExternalProgram, build.Executable, OverrideProgram]c           	     8   |r|r ||          }nwt          |t          j                  rH|j        r| j        |j                 j        }n| }t          |t                    s
J d            |j        }n|                    |           }t          j
        ||          \  }}}	|sNdt          j        |          dt          j        d                    d |D                                 g|d d<   dS |                    dt          j        |                     dS )	Nr#  r  z	but need:, c                    g | ]}d | d 	S )'r   )r   r  s     r   r>  z5Interpreter.check_program_version.<locals>.<listcomp>  s     6S6S6SAx1xxx6S6S6Sr   r   FT)r   r   r  r   r  held_objectr  r   get_versionr   r  r	   r   r   r  insert)
r   r;  r  r2  r  r   interpis_found	not_foundrp  s
             r   r9  z!Interpreter.check_program_version  s0     	< 
4&,w//GU%566 4% "!-g.@AMFF!F!&+66BB
BBB 0!--d33%-%B7F%S%S"Hi ")4+;G+D+Dk"&)DII6S6S6S6S6S,T,T"U"U"W
2A2ua!1'!:!:;;;tr   r   1T.Dict[OptionKey, options.ElementaryOptionValues]c           
     
   t          j        dt          j        |          dt          j        d                    |                               ||pi g g d d}|                     ||           |                     ||          S )NzFallback to subprojectzwhich provides programr   )r   r   r   r  r
   )r	   r   r   r  r  r"  )r   r   r'  r   r   r  	sp_kwargss          r   rC  z!Interpreter.find_program_fallback  s     	)49X+>+>@X388D>>**	, 	, 	, !.4"+
 +
	 	8Y///**4<<<r   rR  rA   )r  min_varargsre  dirs0.52.0version_argument1.5.0rL  &T.Tuple[T.List[mesonlib.FileOrString]]'kwtypes.FindProgram'?T.Union['build.Executable', ExternalProgram, 'OverrideProgram']c           
        t          || j                  \  }}}|r||s
J d            t          j        dt          j        d                    |d                             dt          j        |          d           |                     |d                   S t          |          }|d         }|                     |d         |d         ||d	|d
         |d         |          S )Nr#  r6  r   r   r  r  r   r   Fr   rX  )r   r   r  r  r1  r  )	rI   r   r	   r   r   r  r.  rJ   r<  )	r   r  r'  r~   r  r   r  r  r   s	            r   r  zInterpreter.func_find_program  s     '=VT_&U&U#(G 	2&&J&&&HY	#((47*;*; < <>PRVR[\cRdRdfpqqq((a111)&11 !23%%d1gvh/?Q`ks-26);LZ`asZt2= & ? ? 	?r   rM  r   r  r   r   r   )r  r   r   rN  0.40.0r   )allow_unknownr!   c                   d |d         D             }t          |          dk    r(t          dd                              | j                   |                    d          }|$t          |t                    st          d          |                    d          }|                    d	          }t          | |||          }|	                    |           |                    d
d          }	t          |	t                    st          d          	 |                    |          }
n'# t          $ r |	r|                     |	g            w xY wt          |
t                    s
J d            |
                                s|	r|                     |	g           d|v r~|d         }t          |t                    st          d          |
                                }||k    r8t#          j        d|d          d| d|            |
                    |          }
|
j        0|
j        \  }}t          j        d|
j        d|| j        ||           |
j        D ]}|                    | j        |           |
S )Nc                    g | ]}||S r   r   )r   ns     r   r>  z/Interpreter.func_dependency.<locals>.<listcomp>  s    )))qq))))r   r   rA   z"dependency with more than one name0.60.0r   z)"allow_fallback" argument must be booleanr   r   r  r   z'The not_found_message must be a string.r#  r   z)The `include_type` kwarg must be a stringzCurrent include type of z is z. Converting to requested zdep z custom lookup)r   r4   user   rB  r   r   r/   rE   r`  r   ra  r  r  r!   r  get_include_typer	   rK  generate_system_dependencyfeature_sincer   r  featurechecks)r   r  r'  r~   namesr   r   r   rg  r  dr  r  r   	extra_msgr2  s                   r   r  zInterpreter.func_dependency  s    *)DG)))u::>>;XFFJJ4?[[[$455%j.N.N%"#NOOO::j)) **%677&tUNOTT
!!!"JJ':B??+S11 	N"#LMMM			&!!AA 	 	 	  7!!#4"5666	 !Z((44*444wwyy 	3. 	301222V##N+Ffc** T&'RSSS''))F
md1gmm6mmekmmnnn0088?&!"GY!"A"A"A"A7DO]fhlmmm 	) 	)AEE$/4((((s   D+ +$Ec                    t                      S r/  )r2   r  s       r   r  zInterpreter.func_disabler"  s     zzr   kwtypes.Executablekwtypes._BuildTargetc                R    |                                 }t          D ]
}||j        = |S r/  )r/  rS   r  )r   r~   	exe_kwargs      r   _strip_exe_specific_kwargsz&Interpreter._strip_exe_specific_kwargs(  s0    2 	' 	'Iy~&&r   rP  r_   T.Tuple[str, SourcesVarargsType]build.Executablec                P   |d         }| j         j        |         }|                                rW|                    d          dk    r>|                     |||                     |          t          j                  }d|_        |S |                     |||t          j	                  S )Nr   android_exe_typeapplicationT)
r   r2  
is_androidrB  rG  rq  r   r  shared_library_onlyr  )r   r  r'  r~   rd  r   holders          r   r  zInterpreter.func_executable.  s     X&%k2<<>> 	fjj);<<MM&&tT43R3RSY3Z3Z\a\oppF)-F&M  tVU5EFFFr   rm  kwtypes.StaticLibrarybuild.StaticLibraryc                F    |                      |||t          j                  S r/  )rG  r   r  r  s       r   r  zInterpreter.func_static_lib<  s!       tVU5HIIIr   rk  kwtypes.SharedLibrarybuild.SharedLibraryc                X    |                      |||t          j                  }d|_        |S NT)rG  r   r  rx  )r   r  r'  r~   ry  s        r   r  zInterpreter.func_shared_libD  s-     ""4vu7JKK%)"r   rF  kwtypes.Librarybuild.BothLibrariesc                0    |                      |||          S r/  )build_both_librariesr  s       r   r  zInterpreter.func_both_libN  s     ((tV<<<r   rl  z0.37.0kwtypes.SharedModulebuild.SharedModulec                F    |                      |||t          j                  S r/  )rG  r   r  r  s       r   r  zInterpreter.func_shared_moduleW  s!       tVU5GHHHr   rb  c                0    |                      |||          S r/  )build_libraryr  s       r   r  zInterpreter.func_library`  s     !!$f555r   r`  GT.Tuple[str, T.List[T.Union[str, mesonlib.File, build.GeneratedTypes]]]kwtypes.Jar	build.Jarc                F    |                      |||t          j                  S r/  )rG  r   r  r  s       r   r  zInterpreter.func_jari  s        tVUY???r   rG  r  override_optionskwtypes.BuildTargetwT.Union[build.Executable, build.StaticLibrary, build.SharedLibrary, build.SharedModule, build.BothLibraries, build.Jar]c                
   |d         }|dk    r"|                      |||t          j                  S |dk    r"|                      |||t          j                  S |dk    r"|                      |||t          j                  S |dk    r"|                      |||t          j                  S |dk    r|                     |||          S |dk    r|                     |||          S |                      |||t          j                  S )Nr   rP  rk  rl  rm  rF  rb  )	rG  r   r  r  r  r  r  r  r  )r   r  r'  r~   r   s        r   r  zInterpreter.func_build_targetq  s    ]+,&&$$T49IJJJ,,,$$T49LMMMO++$$T49KLLL,,,$$T49LMMM,,,,,T4@@@I%%%%dD&999  tVUY???r   rq  r   commandreplace_stringz	@VCS_TAG@z1.7.0T.List['TYPE_var']'kwtypes.VcsTag'build.CustomTargetc                   |d         t          j        dd| j        |           |d         p| j        }|d         }d}|d         }t          j                            t          j                            | j        	                                | j
                            }|rt          |d         t          t          j        f          rtt          |d         t          j                  rt          j        d	d
| j        |           |                     |d         d          }	|	                                r|	|d<   nxt          j        dd| j        |           nZt          j        |          }
|
rAt%          j        d                    |
j        |
j                             |
j        }|
j        }ndg}|                     t5          |d                   dk    |d         d           | j                                        dddd||||gz   |z   }|d         }|                     |d                   }|d         g n|d         g}|d         g n|d         g}|r|st;          d          t=          j        |d         d         | j
        | j        | j        ||                      |d                   |d         dd||||          }| !                    |j        |           |S ) Nr   zOptional fallback in vcs_tag0.41.0rT  r  z(.*)r  r   z'vcs_tag with file as the first argumentr  Fr  zGvcs_tag with custom_tgt, external_program, or exe as the first argumentr  zFound {} repository at {}r   inputrA   outputrq  z
--internal	vcstaggerz@INPUT0@z	@OUTPUT0@installinstall_modeinstall_dirinstall_tagzKvcs_tag: "install_dir" keyword argument must be set when "install" is true.T)build_by_defaultbuild_always_staler  r  r  r  )"r4   r   r   r   r  r7  r8  r  r   r  r
  r   r   r   r   r<  r  
detect_vcsr	   r   r   r  wc_dirget_rev	rev_regex_validate_custom_target_outputsr   r  _warn_kwarg_install_mode_stickyr/   r   r  r  r  )r   r  r'  r~   r   r  regex_selectorvcs_cmdr  maincmdvcsr  r  r  r  r  tgs                    r   r  zInterpreter.func_vcs_tag  s(   ( *%!"@(DOfjkkkk*%=)= 01#W%%bgll43C3R3R3T3TVZVa&b&bcc
 	 '!*sHM&:;; [gaj(-88 )*SU]_c_ny}~~~~00e0LL==?? )!(GAJ%&oqy{  |K  VZ  [  [  [  [  [%j11C  4;;CHcjQQRRR+!$% 	,,S-A-AA-EvhGWYbccc0022  '' #;;F><RSSBHBWB_BBflmzf{e|5;M5J5RrrY_`mYnXo 	r; 	r"#pqqq8QKO((998!##%#
 
 
 	$$$	r   rn  r   
T.NoReturnc                    t                      r/  )r1   r  s       r   r  zInterpreter.func_subdir_done  s      !!!r   has_multi_inoutputsT.Iterable[str]c                    ddg}ddl m} |D ]K} |||g          }|rd|v sd|v rt          | d          |rt          j        | dd	| j                   Ld
S )zChecks for additional invalid values in a custom_target output.

        This cannot be done with typed_kwargs because it requires the number of
        inputs.
        z@PLAINNAME[0-9]+@z@BASENAME[0-9]+@r   )iter_regexin_iter@PLAINNAME@
@BASENAME@zt: output cannot contain "@PLAINNAME@" or "@BASENAME@" when there is more than one input (we can't know which to use)z
 in outputrY  N)utils.universalr  r/   r4   r   r   )r   r  r  r  inregexr  outr  s           r   r  z+Interpreter._validate_custom_target_outputs  s     !45GH777777 	% 	%C%%gu55E %#!5!59L9L&$ (i (i (i j j j %%((('O% % %	% 	%r   rJ  feedconsolez0.48.0'kwtypes.CustomTarget'c                ~   |d         r1d|d         v s
d|d         v rt          j        dd| j        |           |                     |d                   }|d         }|d	         }|d
         |d	         t	          d          ||d         rd}n|d
         ||d
         }|d         }|d}|d}|d         }|t          j        dd| j        |           d}|                     |d         d          }|d         }	|	r:t          |	d         t                    r|                     |	d         g          |	d<   t          |          dk    r|d         rt          d          t          |d                   dk    r|d         rt          d          |d         r|d         rt          d          |	D ]b}
|d         r(t          |
t                    rd|
v rt          d          |d         r(t          |
t                    rd |
v rt          d!          c|d         r|d"         st          d#          t          |d"                   dk    rt          j        d$d%| j        |           t          |d&                   ddt          |d                   hvr<t          d't          |d&                    d(t          |d                    d)          |d         D ]}|                     |           |                     t          |          dk    |d         d*           t          j        || j        | j        | j        |	||d         f|||d         |d         |d+         |d         |d,         |d-         |d         |d         |d"         ||d&         | j        d.}|                     |j        |           |S )/Ndepfiler  r  z&substitutions in custom_target depfiler  rT  r  r  r  build_alwayszLCustomTarget: "build_always" and "build_always_stale" are mutually exclusiver  TFr   z%custom_target() with no name argumentrc  r   r  )strictr  rA   r  zKcustom_target: "feed" keyword argument can only be used with a single inputr  r  zOcustom_target: "capture" keyword argument can only be used with a single outputr  zOcustom_target: "capture" and "console" keyword arguments are mutually exclusive@OUTPUT@zHcustom_target: "capture" keyword argument cannot be used with "@OUTPUT@"z@INPUT@zDcustom_target: "feed" keyword argument cannot be used with "@INPUT@"r  zQcustom_target: "install_dir" keyword argument must be set when "install" is true.z&multiple install_dir for custom_targetr^  r  zcustom_target: install_tag argument must have 0 or 1 outputs, or the same number of elements as the output keyword argument. (there are z install_tags, and z	 outputs)rJ  depend_filesdependsr  )r  r  r  r  r  r  extra_dependsr  r  r  r  r  r  r  )r4   r   r   r  r.   r  r   r   r<  r   r/   validate_forbidden_targetsr  r   r  r
  r   r  r  r  )r   r  r'  r~   r  r  r  r  inputsr  r  tr  s                r   r  zInterpreter.func_custom_target  s   . ) 	v,&2C"C"C}X^_hXiGiGi!"JHVZVeptuuuu;;F><RSS ""45#$89.!-&9M2N2Z&'uvvv#y(9##N#/'#).#9 !'(:!;
 #$%!&Aw<
 !"I8UYUdosttttD--fWoe-LL# 	>z'!*c22 	>//==GAJv;;??vf~?"#pqqqvh  1$$	):$"#tuuu) 	v	!2 	v"#tuuu 	o 	oAi  sZ3%7%7 sJ!OO&'qrrrf~ o*Q"4"4 oa&'mnnn) 	xVM%: 	x"#vwwwvm$%%))!"JHVZVeptuuuuvm$%%aCx8H4I4I-JJJ" $K14VM5J1K1K$K $K +.fX.>*?*?$K $K $K L L L
 ! 	/ 	/A++A....,,S[[1_fX>NP_```KO8"  2-9%9%/9% +u9%}-%}-L+" " ", 	$$$	r   rh  'kwtypes.RunTarget'build.RunTargetc           
        |d                                          }t          |          D ]B}t          |t                    r+|                                st          d|j                  Ct          |d         t                    r|                     |d         g          |d<   |d         }t          j
        |||d         | j        | j        | j        |d                   }|                     ||           |S )Nr  z%Tried to use non-existing executable r   r  r  )r/  r   r   r   r  r.   r  r   r<  r   r  r
  r   r   r  )r   r  r'  r~   all_argsr   r  r  s           r   r  zInterpreter.func_run_targetg  s     )$))++"" 	_ 	_A!_-- _aggii _*+]STSY+]+]^^^hqk3'' 	@00(1+??HQKAw_T8VI->T_^b^n#E], ,b!!!	r   rC  @T.Tuple[str, T.List[T.Union[build.Target, build.BothLibraries]]]build.AliasTargetc                   |\  }}t          d |D                       rt          j        dd| j                   g }|D ]f}t	          |t
          j                  r5|                    |j                   |                    |j	                   Q|                    |           gt          j
        ||| j        | j        | j                  }|                     ||           |S )Nc              3  J   K   | ]}t          |t          j                  V  d S r/  )r   r   r  r   rj  s     r   r   z0Interpreter.func_alias_target.<locals>.<genexpr>  s.      <<!z!U_--<<<<<<r   z(alias_target that depends on run_targetsrc  )anyr4   r   r   r   r   r  r   sharedr   r  r
  r   r  )	r   r  r'  r~   r  r  	real_depsrj  r  s	            r   r  zInterpreter.func_alias_target}  s    
 
d<<t<<<<< 	i!"LhX\Xghhh*,	 	$ 	$A!U011 $  ***  ****  ####tYT_dN^__b!!!	r   rS  r  )allow_empty)r   r   r  z0.43.03T.Tuple[T.Union[build.Executable, ExternalProgram]]'kwtypes.FuncGenerator'build.Generatorc                    |d         D ]7}d|vrd|vrt          d          t          |          rt          d          8t          |d                   dk    r|d         D ]}d|v rt          d          t          j        |d	         fi |S )
Nr  r  r  zAEvery element of "output" must contain @BASENAME@ or @PLAINNAME@.z0"output" must not contain a directory separator.rA   r  z:Tried to use @OUTPUT@ in a rule with more than one output.r   )r/   r   r   r   r  )r   r  r'  r~   ruleos         r   r  zInterpreter.func_generator  s     8$ 	[ 	[D4''M,E,E&'jkkkD!! [&'YZZZ[vh  1$$H% i i??*+ghhh # tAw11&111r   rE  RT.Tuple[str, T.Union[build.Executable, build.Jar, ExternalProgram, mesonlib.File]]'kwtypes.FuncBenchmark'c                6    |                      |||d           d S NFadd_testr  s       r   r  zInterpreter.func_benchmark  s"    
 	dD&%00000r   ro  is_parallelT.Tuple[str, T.Union[build.Executable, build.Jar, ExternalProgram, mesonlib.File, build.CustomTarget, build.CustomTargetIndex]]'kwtypes.FuncTest'c                6    |                      |||d           d S r  r  r  s       r   r  zInterpreter.func_test  s"    
 	dD&$/////r   OT.Union[EnvironmentVariables, T.Dict[str, 'TYPE_var'], T.List['TYPE_var'], str]r   c                    |                     d          }|t                      S t          j        |          }|rt	          d|           t          j        |          S )Nr  z"env": )rB  r   r`   r~  r/   r  )r   r~   envlistr  s       r   unpack_env_kwargzInterpreter.unpack_env_kwarg  sa    **U##?')))w'' 	4"?S??333(((r   'kwtypes.BaseTest'klassT.Type[TestClass]r   c                   |d         }d|v r0t          j        d| d|           |                    dd          }|d         }t          |t                    r$|                                st          d          nt          |t          j                  r| 	                    |g          }nt          |t          j                  r*|                    d	g                               |           nHt          |t          j                  r.|                    d	g                               |j                   |                     |          }|d
         dk    rt#          j        dd| j        |           |                                 r| j        n| j
        j        }g }	|d         D ]I}
|
rd|
z   }
|	                    |                    dd                              dd          |
z              J ||||	||d	         |                    dd          |d         ||d         |d
         |d         |d         |d         |d                   S )Nr   r   z!":" is not allowed in test name "z ", it has been replaced with "_"rT  rp  rA   z3Tried to use not-found external program as test exer  timeoutztest() timeout <= 0r   suiter   r  Fr'  should_failworkdirprotocolpriorityverbose)r	   rv  rw  r   r   r  r/   r   r   r<  r   r  
setdefaultr   r  r8  r  r4   r   r   r  r   rB  )r   r  r'  r~   r  r  r  r  prjr  rK  s              r   	make_testzInterpreter.make_test  sr    Aw$;;gggg&*, , , ,<<S))D1gc?++ 	@99;; ^&'\]]]^X]++ 	@((#//CCU/00 	@i,,33C8888U455 	@i,,33CJ???##F++)!!!"74?]abbbb!%!3!3!5!5Rdoo4:;R 	F 	FA !GLLS#..66sC@@1DEEEEuTI&ZZu55F^M*I&I&J'J'I&( ( 	(r   r   is_base_testc                n   t          |d         t          j        t          j        f          rt	          j        dd| j                   t          d |d         D                       rt	          j        dd| j                   |                     |||          }|rN| j        j	        
                    |           t          j        dt          j        |j        d	                     d S | j        j        
                    |           t          j        d
t          j        |j        d	                     d S )NrA   z!test with CustomTarget as commandr  c              3  @   K   | ]}t          |t                    V  d S r/  )r   r   r   r   s     r   r   z'Interpreter.add_test.<locals>.<genexpr>  s,      FF!z!_--FFFFFFr   r'  z"test with external_program in argsz1.6.0zAdding testTzAdding benchmark)r   r   r  r  r4   r   r   r  r  r  r   r	   rK  r   r  
benchmarks)r   r  r'  r~   r  r  s         r   r  zInterpreter.add_test  s    d1g 2E4KLMM 	a!"EwPTP_```FFvf~FFFFF 	b!"FQUQ`aaaNN4v.. 	DJ##A&&&J}di&=&=>>>>>J!((+++J)49QVT+B+BCCCCCr   rZ  (T.Tuple[T.List['mesonlib.FileOrString']]'kwtypes.FuncInstallHeaders'build.Headersc           
     6   |                      |d                   }|                     |d                   }|d         }|K|d         t          d          t          j                            |          rt          j        d           nd}t          j	        t                    }g }|d         rE|D ]A}	t          j                            |	j                  }
||
                             |	           Bn|d                             |           |D ]}t          j        ||         t          j                            ||          |d         || j        |d	         
          }|                    |           | j        j                            |           |S )Nr  r   r
  r  zXinstall_headers: cannot specify both "install_dir" and "subdir". Use only "install_dir".zTSubdir keyword must not be an absolute path. This will be a hard error in meson 2.0.r   preserve_pathfollow_symlinks)r  )r  r  r.   r  r7  r  r	   rv  r   r   r   dirnamer  r   extendr   r  r  r   headers)r   r  r'  r~   r  source_filesr\  rV  ret_headersfiler  childdirhs                r   r  z Interpreter.func_install_headers  s    ;;F><RSS33DG<<)%m$0*  ,F  G  G  Gw}}^,, y !wxxxN&t,,/" 	*$ + +'//$*55W$$T****+ HOOL))) 	) 	)Hd8nbgll>8.T.TV\]jVk*DO.45F.GI I IA q!!!J%%a((((r   r[  localer   'kwtypes.FuncInstallMan'	build.Manc                   |                      |d                   }|                     |d                   }|D ]d}	 t          |                    dd          d                   }n# t          t
          f$ r d}Y nw xY wd|cxk    rdk    sn t          d          et          j        ||d         || j	        |d	                   }| j        j
                            |           |S )
Nr  r   r  rA   rQ  	   z?Man file must have a file extension of a number between 1 and 9r  r
  )r  r  r   rsplit
IndexError
ValueErrorr/   r   r  r   manr   )	r   r  r'  r~   r  r  rK  numr   s	            r   r  zInterpreter.func_install_man(	  s    ;;F><RSS ..tAw77 	j 	jA!((3**2.//
+   ====q====&'hiii ! Igvm4lovh'79 9
a   s   )A&&A<;A<rY  rc  r  c                    t          j        |d         |d         | j        |d                   }| j         j                            |           |S )Nr   r  r  )r   r  r   emptydirr   )r   r  r'  r~   rj  s        r   r  z!Interpreter.func_install_emptydirD	  sH     N47F>$:DOVTaMbcc
""1%%%r   r]  r  symlink_namepointing_tor  build.SymlinkDatac                    |d         }|d         }t          j        |||d         | j        |d                   }| j         j                            |           |S )Nr   r  r  r  )r   r  r   r  r   )r   r  r'  r~   r  r8  r   s          r   r  z Interpreter.func_install_symlinkP	  s`     Aw&fdF=,A"ovm/DF F
""1%%%r   rj  0T.Tuple[object, T.Optional[T.Dict[str, object]]]build.StructuredSourcesc                   t           t          j        t          j        t          j        t          j        t          j        f}t          j        t                    }t          j
        |d                   D ]}t          ||          s t          dt          |           d          t          |t                     r0t          j                            | j        j        | j        |          }|d                             |           |d         rd|d         v rt          d          |d                                         D ]\  }}t          j
        |          D ]}t          ||          s t          dt          |           d          t          |t                     r0t          j                            | j        j        | j        |          }||                             |           t          j        |          S )Nr   zstructured_sources: type "z" is not validr   rA   zKstructured_sources: keys to dictionary argument may not be an empty string.)r   r   r   r   r  r  r  r   r   r   r   r   r/   typefrom_source_filer   r  r
  r   r   r  )	r   r  r'  r~   valid_typesr  argr   r   s	            r   r  z#Interpreter.func_structured_sourcesb	  s    HM5+>@RTYTkmr  nA  BWbWnosWtWt#DG,, 	$ 	$Cc;// _&']DII']']']^^^#s## dm44T5E5PRVR]_bccBKs####7 		+T!W}}&'tuuuQ + +1#+A.. + +C%c;77 g./eDQTII/e/e/efff!#s++ l&m<<T=M=XZ^ZegjkkAJ%%c****+ &w///r   if_foundc                <    t          d | D                       sdnd S )Nc              3  6   K   | ]}t          |d           V  dS )r  N)r@  r  s     r   r   z'Interpreter.<lambda>.<locals>.<genexpr>	  s0      OoOohiPWXY[bPcPcOoOoOoOoOoOor   z"Objects must have a found() method)all)r  s    r   r}  zInterpreter.<lambda>	  s*    COoOomnOoOoOoLoLo y D Duy r   )r~  rk  r  r   'kwtypes.Subdir'c                   t          j        |           d|d         v rt          d          | j        dk    r |d         | j        k    rt          d          | j        dk    r*|d                             d          rt          d          |d         dk    rt          d          t          j                            |d                   rt          d	          |d
         D ]}|	                                s d S | 
                    | j                                        |d                   \  }}|st          d| d          t          j        t          j                            | j        j        |          d           |                     | j                                        |          s=t          j                            |t          j                  }t%          d|d          d S )Nr  r   zSubdir contains ..r   zIMust not go into subprojects dir with subdir(), use subproject() instead.meson-zJThe "meson-" prefix is reserved and cannot be used for top-level subdir().zJThe argument given to subdir() is the empty string ''. This is prohibited.z(Subdir argument must be a relative path.r!  zTried to enter directory "z"", which has already been visited.Tr  zNonexistent build file 'rK  )r   check_direntry_issuesr/   r
  r  r;  r  r7  r  r  _resolve_subdirr   r  r  r  r  _evaluate_subdirbuild_filenamer.   )r   r  r'  r~   r   r
  is_newbuildfilenames           r   r  zInterpreter.func_subdir	  s    	&t,,,47??"#7888;"aD,?!?!?"#nooo;"a!3!3H!=!="#oppp7b=="#oppp7==a!! 	O"#MNNN
# 	 	A7799  --d.>.M.M.O.OQUVWQXYY 	l"#j#j#j#jkkk
BGLL!1!;VDDtTTTT$$T%5%D%D%F%FOO 	VGLL1KLLM&'T-'T'T'TUUU	V 	Vr   moder   c                   |j         dk    rx|j         t          j        z  rdt          j        d| j                   t          j        |j         t          j        z
            dd          }t          ||j        |j	                  S |S )Nr   zfinstall_mode with the sticky bit on a file does not do anything and will be ignored since Meson 0.64.0rT  rA   )
permsr?  S_ISVTXr	   rv  r_  filemoder   ownergroup)r   r.  r0  s      r   r  z+Interpreter._warn_kwarg_install_mode_sticky	  s    :>>dj4<7> =GKGXZ Z Z ZM$*t|";<<QRR@EE4:tz:::Kr   rX  r  renamer   'kwtypes.FuncInstallData'
build.Datac           
     2   |                      |d         |d         z             }|d         pd }|rPt          |          t          |          k    r0t          dt          |           dt          |           d          |d         }|s| j        }t	          j        t          j                            | j	        
                                |          t          j                            d|                    }|                                 rt          j        d	d
| j        d|           |d         rt          j        dd
| j        d|           |                     |d                   }|                     |||||d         |d         |d                   S )Nr   r  r5  z_"rename" and "sources" argument lists must be the same length if "rename" is given. Rename has z elements and sources has r  r  z	{datadir}z9install_data() without install_dir inside of a subprojectrL  zSThis was broken and would install to the project name of the parent project insteadr   z9install_data() with preserve_path and without install_dirzFThis was broken and would not add the project name to the install pathr  r  r  )r   r  )r  r   r/   r  r  r  r  r7  r  r   get_datadirr  r4   r   r   r  install_data_impl)	r   r  r'  r~   r  r5  r  r
  r  s	            r   r  zInterpreter.func_install_data	  s    ..tAw	9J/JKK!)T 	Z6{{c'll**&Y"%f++Y YILWY Y YZ Z Z ]+ 
	,,F,RW\\$:J:V:V:X:XZ`-a-acecjcocop{  ~D  dE  dE  F  FK!!## ,%&acjlpl{&{&*, , , o& ,%&acjlpl{&n&*, , , ;;F><RSS%%g{L&RXYfRg4:?4K6<=N6O & Q Q 	Qr   r  taginstall_data_typer   r  T.Optional[bool]c	                   t          |t          j                  r|j        n|}	t	          j        t                    }
|rE|D ]A}t          j        	                    |j
                  }|
|                             |           Bn|
d                             |           g }|
                                D ]w\  }}t          j        |t          j                            ||          t          j                            |	|          || j        ||||	  	        }|                    |           x| j        j                            |           |S Nr   )r   r  r  r^  r   r   r   r  r7  r  r  r   r  r   r   r  r  r   r  )r   r  r  r  r5  r;  r<  r   r  install_dir_namerV  r  r  ret_datar  rQ  rj  s                    r   r:  zInterpreter.install_data_impl	  s7    3=[%J\2]2]n;..cn&t,, 	% + +'//$*55W$$T****+ HOOG$$$#zz|| 	 	OHe
5"',,{H"E"Erw||TdfnGoGo'&#GX*, ,A OOA
x(((r   r\  strip_directoryexclude_filesz0.42.0c                <    t          d | D                       rdnd S )Nc              3  T   K   | ]#}t           j                            |          V  $d S r/  r  r7  r  r  s     r   r   z'Interpreter.<lambda>.<locals>.<genexpr>	  2      A^A^WX"'--PQBRBRA^A^A^A^A^A^r   cannot be absoluter  r|  s    r   r}  zInterpreter.<lambda>	  *    cA^A^\]A^A^A^>^>^&h&:&:dh r   )r  r   rk  r~  exclude_directoriesc                <    t          d | D                       rdnd S )Nc              3  T   K   | ]#}t           j                            |          V  $d S r/  rF  r  s     r   r   z'Interpreter.<lambda>.<locals>.<genexpr>	  rG  r   rH  rI  r|  s    r   r}  zInterpreter.<lambda>	  rJ  r   'kwtypes.FuncInstallSubdir'build.InstallDirc                   t          |d                   t          |d                   f}t          j                            | j        j        | j        |d                   }t          j                            |          r!t          t          j	        |                    s:t          j        dd| j        |           t          j        dd| j        d|           |                     |d	                   }|d
         }t          |t           j                  r|j        }t'          j        | j        |d         |d
         ||||d         | j        |d         |d         
  
        }| j        j                            |           |S )NrC  rK  r   z#install_subdir with empty directoryr  rT  rc  zAIt worked by accident and is buggy. Use install_emptydir instead.r  r  rB  r  r  )r  r  )r  r  r7  r  r   r  r
  r  r  listdirr4   r   r   r5   r  r   r  r  r^  r   r  r  r   )	r   r  r'  r~   excluderH  r  	idir_nameidirs	            r   r  zInterpreter.func_install_subdir	  sy   " vo.//V<Q5R1S1STd.94;QPPw}}V$$ 	tC
60B0B,C,C 	t!"GSWSbmqrrrr()NPXZ^Zi)lnrt t t;;F><RSS=)	i!344 	*!)IKG=!$%O}-"#45
7 
7 
7 	
&&t,,,r   rI  z0.47.0,r  )r   configurationr/  r(  r&  r   r  >   cmake@r  r  )r  rk  r~  r  r  c                    | du rdnd S )NTzmust be `false` if booleanr   r|  s    r   r}  zInterpreter.<lambda>?
  s    a4ii&B&BUY r   output_formatr  json>   r  rY  r  )r  rk  r  r~  
macro_namekwtypes.ConfigureFilec                   t          fddD                       }t          |          }|dk    rt          d          |dk    rt           dj        |           |dk    rt           dj        |           d	         rd
         st	          d          |                     d                   }d         }d         }d         }	|                     d                   }
g }|
D ]}}t          |t          j	                  rS|
                    |                    | j        j        | j        j                             |                     |           ot          d          d         }|rQt          j        |d           }t          j        |g|          }|d         }|	rt          j        |	g|          d         }	t$          j                            | j        |          }|| j        v rt$          j                            | j        d          }| d| j        j         }d                    || j        |                   }t3          j        dt3          j        |d          d|d|           n| j        j        | j        |<   t$          j                            t$          j                            | j        |                    \  }}t$          j                            | j        j        ||          }d         Hd         }t          |t:                    rt=          j        dd| j         |           |!                                D ]=\  }}t          |tD          tF          tH          f          st	          d|d|d           >tK          j&        |          }t3          j'        d!t3          j        |          d"           t          |
          d#k    rt          d$          |
r3t%          j(        t$          j                            | j        j        | j                  d%           d&         }t          j)        |d         ||||| j                   \  }}|rOd'                    d( t          |          D                       }t3          j        d)| d*|
d          d+|           |rmt$          j        *                    |d                   }t=          j+        | j                   }t=          j,        |d,          rt3          j        d-|d.|           nd/         } t          j-        ||||            d|_.        nd
         #t          |
          d#k    rt=          j        d0d1| j         |           t          j        ||g          }|	r<t$          j                            | j        /                                |	          }	|	|d2<   t          j        d
         |          }!t3          j'        d!t3          j        |          d3           |!^}"}| 0                    |"|fddtc                      d4d          }#d	         r|d5z   }$d&         }te          |$d6|7          5 }|3                    |#j4                   d d d            n# 1 swxY w Y   |rtk          j6        |d         |$           t          j7        ||$           |	rt3          j'        d8t3          j        |	                     te          |	d97          5 }tq          |9                                          }%|%:                    |          }&|&D ]}'|                     |'           	 d d d            n# 1 swxY w Y   nd:         rt          |          d#k    rt          d;          t%          j(        t$          j                            | j        j        | j                  d%           tk          j;        |d         |           d<         }(|(d=u r d>}(ty          j        d?d@| j         dA|           dB         dB         n|(d>k    })|)r|(st          dC          |(}*t          |*tz          j>                  r|*j?        }*t          j	        @                    ||          }+dD         },| j%        jA        
                    tK          jB        |+g|(|*|| j         |,dEF                     t          j	        @                    | j        |          S )GNc              3  0   K   | ]}|         d v|V  dS )r  Nr   )r   r  r~   s     r   r   z2Interpreter.func_configure_file.<locals>.<genexpr>G
  s=       < <q"1I]:: ::::< <r   )rU  r  r/  r   zbMust specify an action with one of these keyword arguments: 'configuration', 'command', or 'copy'.r   zXMust not specify both {!r} and {!r} keyword arguments since they are mutually exclusive.   z]Must specify one of {!r}, {!r}, and {!r} keyword arguments since they are mutually exclusive.r  r  z=configure_file: "capture" keyword requires "command" keyword.r  r   rX  r  r  z*Inputs can only be strings or file objectsr  r$  r   z{}:{}zOutput fileTzfor configure_file() atz%overwrites configure_file() output atrU  z'configure_file.configuration dictionaryre  rT  rf  rg  rs  Configuringzusing configurationrA   z6At most one input file can given in configuration moder  r(  rI  c              3  4   K   | ]}t          |          V  d S r/  )repr)r   r   s     r   r   z2Interpreter.func_configure_file.<locals>.<genexpr>
  s(      (T(TQa(T(T(T(T(T(Tr   zThe variable(s) z in the input file 'z2' are not present in the given configuration data.r  zVGot an empty configuration_data() object and found no substitutions in the input file z_. If you want to copy a file to the build dir, use the 'copy:' keyword argument added in 0.47.0rZ  z#multiple inputs in configure_file()rW  z	@DEPFILE@zwith command)r  r  r  ~r%  r'  zReading depfile:r&  r/  z1Exactly one input file must be given in copy moder  Fr   z!configure_file install_dir: falser  z Use the `install:` kwarg insteadr  zJ"install_dir" must be specified when "install" in a configure_file is truer  	configure)r  	data_type)Cr]  r   r.   r   r/   r  r  r   r   r   r   r  r   r  r  rL  get_filenames_templates_dictsubstitute_valuesr  r7  r  r
  r#  r_  linenor	   rr  r   r  r   r4   r   r   r   r   r   r   r   r  r   r  do_conf_filebasenamer  r  dump_conf_headerusedget_scratch_dirr  r   r,  
writelinesr  r   copymodereplace_if_differentr"   	readlinesget_all_dependenciescopy2r5   r  r  r^  from_built_filer  r  )-r   r  r'  r~   actionsnum_actionsr  fmtrX  r  r  
inputs_absr2  r  r   r  ofile_rpathmesonbuildfilecurrent_call
first_call
ofile_pathofile_fname	ofile_absconfr   r   file_encodingmissing_variablesconfdata_uselessvar_listifbaser  rZ  _cmdr  resdst_tmprg  r  rh  rT  r  rS  cfiler  s-      `                                         r   r  zInterpreter.func_configure_file 
  sd
   N  < < < <$H < < < < <'ll!& (C D D D A& (D (==CW(N O O O A& (D (==CW(N O O O ) 	dVI%6 	d"#bccc;;F><RSSX/# --fWo>>
 	Y 	YA!X]++ Y!!!//$2B2M262B2L#N #N O O O''*****+WXXX ! 	K::tLLF0&6BBGQZF K"4gYGGJgll4;77$555W\\$+}EEN,IIt/@/GIIL 8ST_8`aaJL	+t(D(DF_am  pW  Yc  d  d  d  d7;7H7OD'4$&GMM"',,t{F2S2S$T$T![GLL!1!;ZUU	 /"./*D$%% 5%&OQY[_[juyzzzz JJLL D DDAq%a#sD)9:: D. CST  C  C|}  C  C  CD D DD .t44H]DIf$5$57LMMM6{{Q*+cddd VBGLL)9)CT[QQ\`aaaa &z 2)*Q-D*-}doO O 4!#3 % S#yy(T(T&AR:S:S(T(T(TTTHLC8 C CPQ C C CMQS S S S $ PW--jm<<F#6tGGB!/H== P &@HN&@ &@ &@ KOP P P P
 $L1
))T=*UUUDIII*6{{Q%&KXW[Wfquvvvv ::	{SSF .',,t'7'G'G'I'I7SS&-{#-fY.?HHDH]DIf$5$5~FFFJC$''d484PdPfPf(g(g(,. .C i  B#c/ &z 2'3??? -1LL,,,- - - - - - - - - - - - - - - <OJqM7;;;-iAAA 5+TYw-?-?@@@'G444 5 //B22;??D# 5 5//444455 5 5 5 5 5 5 5 5 5 5 5 5 5 5 F^ 	3:!##*+^___KT%5%?MMX\]]]]LA	222
 m$5==D()Lh)-:\gkm m m m'-i'8'D&##$RT* 
	_ b*`b b bI)U%788 .%-	M11*kJJE /KJO""5:ugtYVZVe:EQ\$^ $^ $^ _ _ _},,T[&AAAs%   0ZZZA],,]03]0rW  r  T.List[build.IncludeDirs]c           	     \   t          ||          }|dk    rC|D ]@}t          |t                    r)t          j        dd| j        d|d| j                    nAg }|D ]L}t          |t          j                  r|	                    |           3t          |t                    r|dk    rt          j                            |                              | j                                                  r}t!          j        dd	| j        d
| j                   t          j                            |t          j                            | j                                        | j                            }|	                    |                     |g                     ?t+          d          |S )NrW  z(include_directories kwarg of type stringr  zUse include_directories(z	) insteadrT  r  z5Building absolute path to source dir is not supportedz0.45zUse a relative path instead.zRInclude directory objects can only be created from strings or include directories.)r   r   r   r4   r   r   r_  r   r  r   r  r7  r8  r;  r   r  r5   relpathr  r
  build_incdir_objectr.   )r   r~   r  prospectivesr   r  r  s          r   r  zInterpreter.extract_incdirs
  s   &vs33'''!  a%% )*TV^`d`o*SQ*S*S*S^b^oq q q qE
 -/ 	A 	AA!U.// Aa    As## 	A/))bg.>.>q.A.A.L.LTM]MlMlMnMn.o.o)%01h171O:>:KM M M M 27<<8H8W8W8Y8Y[_[f+g+ghhAd66s;;<<<<*+  A  A  Ar   	is_system 'kwtypes.FuncIncludeDirectories'build.IncludeDirsc                F    |                      |d         |d                   S )Nr   r  )r  r  s       r   r  z$Interpreter.func_include_directories
  s#     ''Q1DEEEr   incdir_stringsc           	        t          |t                    st          d          | j                                        }| j                                        }t          j                            || j	                  }t          j                            || j	                  }|D ]L}t          t          |          t          |                    r!t          t          j        d                    	 |                     | j	        |           nP# t          $ rC t!          j        d| j                   t'          t          j        d|d                     Y nw xY wt          j                            ||          }t          j                            ||          }	t          j                            |          s2t          j                            |	          st          d| d          Nt+          j        | j	        ||          }
|
S )	NzIs_system must be boolean.a                      Tried to form an absolute path to a dir in the source tree.
                    You should not do that but use relative paths instead, for
                    directories that are part of your project.

                    To get include path to any directory relative to the current dir do

                    incdir = include_directories(dirname)

                    After this incdir will contain both the current source dir as well as the
                    corresponding build dir. It can then be used in any subdirectory and
                    Meson will take care of all the busywork to make paths work.

                    Dirname can even be '.' to mark the current directory. Though you should
                    remember that the current source and build directories are always
                    put in the include directories by default so you only need to do
                    include_directories('.') if you intend to use the result in a
                    different subdirectory.

                    Note that this error message can also be triggered by
                    external dependencies being installed within your source
                    tree - it's not recommended to do this.
                    z&include_directories sandbox violation!rT  zF                        The project is trying to access the directory aG   which belongs to a different
                        subproject. This is a problem as it hardcodes the relative paths of these two projects.
                        This makes it impossible to compile the project in any other directory layout and also
                        prevents the subproject from changing its own directory layout.

                        Instead of poking directly at the internals the subproject should be executed and
                        it should set a variable that the caller can then use. Something like:

                        # In subproject
                        some_dep = declare_dependency(include_directories: include_directories('include'))

                        # In subproject wrap file
                        [provide]
                        some = some_dep

                        # In parent project
                        some_dep = dependency('some')
                        executable(..., dependencies: [some_dep])

                        This warning will become a hard error in a future Meson release.
                        zInclude dir rR  )r   r   r/   r   r  r<  r  r7  r  r
  r   r{   textwrapdedentvalidate_within_subprojectr.   r	   rr  r_  r  r  r   r  )r   r  r  src_root
build_rootabsbase_srcabsbase_buildr  
absdir_srcabsdir_buildr   s              r   r  zInterpreter.build_incdir_object
  s   )T** 	A"#?@@@#2244%3355
gll8T[99Z== 7	K 7	KAtAwwX77 2&x 8 ( (   033DKCCCC+   L!ITXTeffff(/ +GH+ + +       0 k155J7<<q99L7==,, KRW]]<5P5P K&'Ia'I'I'IJJJdk>9EEs   2DA
EErB  exe_wrappergdbtimeout_multiplierexclude_suites
is_default'kwtypes.AddTestSetup'c                   |d         }t          j        d|          t          d          d|vr| j        r| j        n| j        j         d| }g }|d         D ]g}t          |t                    r|                    |           -|	                                st          d          ||
                                z  }h|d         }|dk    r(t          dd	                              | j                   |d
         r4| j        j        t          | j        j        d          || j        _        t	          j        ||d         ||d         |d                   | j        j        |<   d S )Nr   z0([_a-zA-Z][_0-9a-zA-Z]*:)?[_a-zA-Z][_0-9a-zA-Z]*z4Setup name may only contain alphanumeric characters.r   r  z"Tried to use non-found executable.r  z(add_test_setup() timeout_multiplier <= 0r   r  zC is already set as default. is_default can be set to true only oncer  r  r  )r  	fullmatchr.   r   r   r   r   r   r   r  r  r4   rd  test_setup_default_name	TestSetuptest_setups)r   r  r'  r~   
setup_namer  r   r  s           r   r~  zInterpreter.func_add_test_setupA  s    !W
<JJWW_&']^^^j  04\T__TZE\ll`jllJ#%& 	/ 	/A!S!! /""1%%%%wwyy U./STTTq}}.#$89""A8LLPPQUQ`aaa, 	<z1=*dj.P ,U ,U ,U V V V1;DJ.-2_[&QV-Ykmstymz=CDT=U.W .W
z***r   r<  'kwtypes.FuncAddProjectArgs'c                n    |                      || j        j        |d                  |d         |           d S Nr   r   )_add_global_argumentsr   global_argsr  s       r   rx  z%Interpreter.func_add_global_argumentsg  s;     	""4)?x@P)QSWXYSZ\bcccccr   r=  c                n    |                      || j        j        |d                  |d         |           d S r  )r  r   global_link_argsr  s       r   ry  z*Interpreter.func_add_global_link_argumentsl  s;     	""4)DVHEU)VX\]^X_aghhhhhr   r?  c                n    |                      || j        j        |d                  |d         |           d S r  )_add_project_argumentsr   projects_argsr  s       r   r{  z&Interpreter.func_add_project_argumentsq  s;     	##D$**B6(CS*TVZ[\V]_efffffr   rA  c                n    |                      || j        j        |d                  |d         |           d S r  )r  r   projects_link_argsr  s       r   r}  z+Interpreter.func_add_project_link_argumentsv  s;     	##D$**GxHX*Y[_`a[bdjkkkkkr   r@  (T.Tuple[T.List[dependencies.Dependency]]c           
     8   |d         }|d         D ]$}|| j         |         vrt          d| d          %t          j        |d                   D ]H}t	          |                                          }|                                dk    }|                                D ]}	|d         D ]}| j        j         |         |         }
|		                    | j
                                        | j
                                                  D ]+}|                    |
                    ||                     ,|                     || j        j        |         ||           |                     || j        j        |         |                                |           Jd S )Nr   r   zFadd_project_dependencies() called before add_language() for language "rs  r   system)r   r0   r   get_leaf_external_dependenciesr   get_compile_argsre  get_include_dirsr   to_string_listr   r  r<  r  get_include_argsr  r   r  r  get_link_args)r   r  r'  r~   rd  r  rj  r  system_incdirr   r  rT  s               r   r|  z)Interpreter.func_add_project_dependencies{  s    X&:& 	t 	tD4>+666!"rko"r"r"rsss 7 <T!WEE 
	u 
	uA 2 2 4 455L..00H<M'')) X X":. X XD=2;?ED ! 0 01A1P1P1R1RTXTdTrTrTtTt u u X X$++D,A,A$,V,VWWWWXX
 ''dj.F{.SUacijjj''dj.KK.XZ[ZiZiZkZkmstttt
	u 
	ur   c                H   d}d}|D ]}||v r t          j        d| d| j                   '||v r t          j        d| d| j                   K|dk    r t          j        d| d| j                   q|d	k    r t          j        d
| d| j                   |dv s|                    d          r t          j        d| d| j                   |                    d          s|                    d          rt          j        d| d| j                   d S )N)z/W1z/W2z/W3z/W4z/Wallz-Wallz-Wextra)z-O0z-O2z-O3z-Osz-Ozz/O1z/O2z/OszCConsider using the built-in warning_level option instead of using "rl  rT  zAConsider using the built-in optimization level instead of using "z-Werrorz<Consider using the built-in werror option instead of using "z-gz;Consider using the built-in debug option instead of using ">   
-fsanitize
/fsanitize)z-fsanitize=z/fsanitize=zDConsider using the built-in option for sanitizers instead of using "z-std=z/std:zSConsider using the built-in option for language standard version instead of using ")r	   rr  r_  r;  )r   r'  warnargsr  r   s        r   _warn_about_builtin_argsz$Interpreter._warn_about_builtin_args  s   
 MJ 	9 	9Chjcfjjj&*&79 9 9 9 9hadhhh&*&79 9 9 9 9	!!c\_ccc&*&79 9 9 9 9b[^bbb&*&79 9 9 9 9 444Ge8f8f4kdgkkk&*&79 9 9 9 9(( 9CNN7,C,C 9zsvzzz&*&79 9 9 9%	9 	9r   argsdictT.Dict[str, T.List[str]]c                    |                                  rd|j        j         d}t          |          | j        p| j        }|                     |||||           d S )Nz
Function 'a  ' cannot be used in subprojects because there is no way to make that reliable.
Please only call this if is_subproject() returns false. Alternatively, define a variable that
contains your language-specific arguments and add it to the appropriate *_args kwarg in each target.)r  r  r   r0   r   r!  _add_arguments)r   r  r  r'  r~   r  frozens          r   r  z!Interpreter._add_global_arguments  su     	#$ 4 $ $ $C c""")DT-DD(FD&AAAAAr   %T.Dict[str, T.Dict[str, T.List[str]]]c                ~    | j         |vr
i || j         <   |                     ||| j                  | j        ||           d S r/  )r   r  r   )r   r  r  r'  r~   s        r   r  z"Interpreter._add_project_arguments  sW    ?(**(*HT_%D(4?"; 4dF	D 	D 	D 	D 	Dr   args_frozenc                    |rd|j         j         d}t          |          |                     |           |d         D ]}|                    |g           |z   ||<   d S )NzTried to use 'zr' after a build target has been declared.
This is not permitted. Please declare all arguments before your targets.r   )r  r   r0   r  rB  )r   r  r  r  r'  r~   r  r  s           r   r  zInterpreter._add_arguments  s     	#]DN$8 ] ] ]Cc"""%%d+++:& 	; 	;D%\\$33d:HTNN	; 	;r   r   HT.Tuple[T.Union[None, str, T.List['TYPE_var'], T.Dict[str, 'TYPE_var']]]c                   |d         }|t          j        dd| j        |           t          j        |          }|rt          d|           t          |t                    rHt          d |	                                D                       rt          j        dd| j        |           t          ||d	         |d
                   S t                      S )Nr   z environment positional argumentsrW  rT  z"environment": c              3  D   K   | ]}t          |t                    |V  d S r/  r{  r  s     r   r   z/Interpreter.func_environment.<locals>.<genexpr>  s3      -^-^A*UVX\J]J]-^a-^-^-^-^-^-^r   z"List of string in dictionary valuer  r   	separator)r4   r   r   r`   r~  r/   r   r   r  r   ry   r   )r   r  r'  r~   initr  s         r   r  zInterpreter.func_environment  s    
 Aw!"DhPTP_jnoooo"4((C @&'>'>'>???$%% v#-^-^-^-^-^*^*^ v%&JHVZVeptuuuu,T6(3CVKEXYYY#%%%r   ra  c                   |d         }t          j        j        dg|dd          R                      dd          }t          j        j        |                     dd          }t	          |d         t
          j                  rd|vrt          j        |          S t	          |d         t
          j                  r@t           j                            |d         j        |          }t          j        ||          S |S )Nr   r   rA   \/r  )	r  r7  r  rw  r   r  r  r  r^  )r   r  r'  r~   partsotherretr  s           r   r  zInterpreter.func_join_paths  s     QR,%),,,44T3??glE"**455eAh >?? 	DPUDUDU1#666a%"455 	7<<a 0%88D%c4000Jr   c           
        t                                                       t          j        dt          j        t          t          | j        j                                                 t          j
        | j                   t          j
        | j                   t          j
        | j                   |                                 s*|                                  |                                  d S d S )NzBuild targets in project:)r  r1  r	   r   r   r   r   r   targetsr4   reportr   r5   r6   r  print_extra_warningsr  )r   r)  s    r   r1  zInterpreter.run  s    ,diC
@R<S<S8T8T.U.UVVV$/*** 111T_---!!## 	"%%'''!!!!!	" 	"r   c                    | j         j        j                                        D ]1}|                                dk    r|                                   d S 2d S )Nclang)r   r   r7  r   get_idcheck_clang_asan_lundef)r   r  s     r   r  z Interpreter.print_extra_warnings  s`    (-4466 	 	AxxzzW$$,,... %	 	r   c                   t          d          | j        j        vrd S t          d          | j        j        vrd S | j        j                            d          rq| j        j                            d          rT| j        j                            d          }t	          j        t          j        d| d          | j                   d S d S d S )Nb_lundefrS  z"                    Trying to use z sanitizer on Clang with b_lundef.
                    This will probably not work.
                    Try setting b_lundef to false instead.rT  )	r   r   r?  	get_valuer	   rr  r  r  r_  )r   r   s     r   r  z#Interpreter.check_clang_asan_lundef  s    Z  (>>>F\""$-*@@@FM",,Z88 	,&00>>	,M*44\BBEL *>#(*> *> *> ? ? *	, , , , , ,	, 	, 	, 	,r   c                     j         j         j         j        t          |t          j                  r$d
 fd}t          |          } ||          rd S d fd	}t          j        	                    ||          }| j
        v rd S t          j                            t          j        	                    |                    } ||            j
                            |           d S )Nfpathr{   r   r   c           
     R   t                      }j        j        D ]B}|j        D ]8}|                    t          |                                                   9Cfdj        j        D             }| |v rdS |D ]'}t          |           	                    |          r dS (dS )Nc                T    g | ]$}t          t          |j                            %S r   )r   r{   source_subdir)r   rK  rH  s     r   r>  z]Interpreter.validate_within_subproject.<locals>.validate_installable_file.<locals>.<listcomp>  s-    "g"g"g!3tFAO'D'D#E#E"g"g"gr   TF)
r  r   r  r  rG  r{   r  r  r   r;  )r  installablefilesrj  rK  installabledirsrI  r   rH  s        r   validate_installable_filezIInterpreter.validate_within_subproject.<locals>.validate_installable_file  s    03  V VAY V V(,,T!//&(2S2S-T-TUUUUV"g"g"g"gtzOf"g"g"g,,,4( $ $A5zz,,Q// $#tt$ur   normr   r   c                f   t           j                            |           rd}nd}t          j        j        v rt          |           rd S t          |           sd S t           j                            j                  }t          ||           s5t           j        	                    |           }t          d| d| d          t           j                            |j                  }t          ||           r5t           j        	                    |           }t          d| d| d          d S )N	directoryr  z!Sandbox violation: Tried to grab r   z outside current (sub)project.z from a nested subproject.)r  r7  r  r   r   r  r   r  r  ri  r.   r  )r  	inputtyper  r  r  rI  r   rH  s        r   do_validate_within_subprojectzMInterpreter.validate_within_subproject.<locals>.do_validate_within_subproject*  sA   w}}T"" #'		"	(HDL\\\aopxz~aa\!&$// 
 7<<0@AAL!,55 Aw''--*+y++[_+++  A  A  AW\\,8KLLNnd33 }w''--*+{y+{+{[_+{+{+{|||} }r   )r  r{   r   r   )r  r   r   r   )r   r  r  r   r  r  r{   r  r7  r  r  r  rG  )r   r
  r  r  r  r  rI  rH  s   `     @@r   r  z&Interpreter.validate_within_subproject  s*   !,#-eU;<< 	        ;;D )(.. 	} 	} 	} 	} 	} 	} 	} 	}2 VU++D(((Fwrw||FE::;;%%d+++  '''''r   T.List['mesonlib.FileOrString']r  T.List['mesonlib.File']c                    d S r/  r   r   r  r  s      r   r  z#Interpreter.source_strings_to_filesK  s     BE  BEr   c                    d S r/  r   r  s      r   r  z#Interpreter.source_strings_to_filesN  s     KN  KNr   <T.List[T.Union[mesonlib.FileOrString, build.GeneratedTypes]]4T.List[T.Union[mesonlib.File, build.GeneratedTypes]]c                    d S r/  r   )r   r  s     r   r  z#Interpreter.source_strings_to_filesQ  s     gj  gjr   T.List['SourceInputs']T.List['SourceOutputs']c                    d S r/  r   r  s      r   r  z#Interpreter.source_strings_to_filesT  s    x{x{r   T.List[SourcesVarargsType]c                    d S r/  r   r  s      r   r  z#Interpreter.source_strings_to_filesW  s    ||r   c           
        t          j        |           t          |t                    s|g}g }|D ]}t          |t                    r|                    d          rt          |d          |sa|                    | j        	                                          r5|
                    |           t          j        d|d| j                   |                     | j        |           |
                    t           j                            | j        j        | j        |                     t          |t           j                  r|
                    |           3t          |t&          j        t&          j        t&          j        t&          j        t&          j        t&          j        f          r|
                    |           t5          d|d          |S )a/  Lower inputs to a list of Targets and Files, replacing any strings.

        :param sources: A raw (Meson DSL) list of inputs (targets, files, and
            strings)
        :raises InterpreterException: if any of the inputs are of an invalid type
        :return: A list of Targets and Files
        r   z. ends with a space. This is probably an error.zSource item zp cannot be converted to File object, because it is a generated file. This will become a hard error in meson 2.0.rT  zSource item is z& instead of string or File-type object)r   r(  r   r   r   rD  r   r;  r   r<  r   r	   rr  r_  r  r
  r   r  r  r   r  r  r  r  r  r  r.   )r   r  r  resultsrK  s        r   r  z#Interpreter.source_strings_to_filesZ  s    	&w///'4(( 	 iG+- 	I 	IA!S!! I::c?? a(A)_)_)_``` p!,,t/?/M/M/O/O"P"P pNN1%%%L "O "O "O "OY]Yjl l l l l 33DKCCCNN8=#A#A$BRB]_c_jlm#n#nooooAx}-- Iq!!!!A 3U5F % 79K % 68O Q R R I q!!!!* ,HQ ,H ,H ,H I I Ir   c                    |                      d          rt          d          |                      d          rd| vrt          d          | t          j        v rt          d|  d          d S )Nzmeson-internal__zcTarget names starting with 'meson-internal__' are reserved for Meson's internal use. Please rename.r'  r  zvTarget names starting with 'meson-' and without a file extension are reserved for Meson's internal use. Please rename.zTarget name 'z6' is reserved for Meson's internal use. Please rename.)r;  r/   r   FORBIDDEN_TARGET_NAMES)r  s    r   r  z&Interpreter.validate_forbidden_targets|  s    ??-.. 	O" $N O O O??8$$ 	\D" $[ \ \ \8222" $B4 $B $B $B C C C 32r   tobjbuild.Targetc           	        | j         j        dk    rt          d          |dk    rt          d          |                                dk    rt          d          t	          |          rt
          j                            | j        t
          j        	                    |          d                   }t
          j        
                    t
          j                            | j        |                    r(t          t          j        d| d| d	                    |                     |           |                                }|                                }||f}|| j        j        v rt)          d
| d          t+          |t$          j                  r9|| j        j        v r+t1          j        d|j         dd| j        | j                   t+          |t$          j                  rJ|                     |j        d|j                   |                                  | !                    |           || j        j        |<   t+          |t$          j                  r | j        j        "                    |g           || j#        j$        vrAtK          tM          j'                              (                                | j#        j$        |<   d S d S )NrT  zOInstall-only backend cannot generate target rules, try using `--backend=ninja`.r   zTarget name must not be empty.z0Target name must not consist only of whitespace.r   z                    Target "z," has a path segment pointing to directory "z". This is an error.
                    To define a target that builds in that directory you must define it
                    in the meson.build file in that directory.
            zTried to create target "z,", but a target of that name already exists.z*multiple executables with the same name, "z/", but different suffixes in the same directoryrL  rT  T))r  r  r.   stripr   r  r7  r  r
  r  existssource_rootr/   r  r  r  r  
get_subdirr   r  r0   r   r  targetnamesr4   r   r   r_  r  r>  missing_languagesrd  process_compilers_lateadd_stdlib_infor  r   target_guidsr   uuiduuid4upper)r   r  r  pathsegidnamer
  namedirs          r   r  zInterpreter.add_target  s   <&&&'xyyy2::&'GHHH::<<2&'YZZZ 	gll4;d0C0CA0FGGGw~~bgll4+;WEEFF &x 8!8 8OV8 8 8 ( (   
 	''--- "".TZ'''kkkkllldE,-- 	X'TZ=S2S2S!  #Jty  #J  #J  #J")4?TEVX X X X dE-.. 	't5tT=MNNN'')))  &&&%)
6"dE,-- 	5J"))7)44433314TZ\\1B1B1H1H1J1JDM&v... 43r   c                v   |                      |||t          j                  }|                      |||t          j                  }| j        j                            t          d                    }|dk    r4| j        j                            t          d                    }|dk    rd}| j        j	        dk    rd}nL|
                                rd}n5t          d |                                D                       rd}n|j        }|ro|j                            t          j        ||j        |j        g                      g |_        g |_        d	 |j                                        D             |_        |                    |           |                    |           t          j        |||          S )
Ndefault_both_librariesautodefault_librarybothr  xcodeFc              3  J   K   | ]\  }}|                     d           o|V  dS ))static_argsshared_argsN)rD  r  s      r   r   z3Interpreter.build_both_libraries.<locals>.<genexpr>  s8      ]]da:;;A]]]]]]r   c                6    i | ]\  }}|t           j        v ||S r   )r   clink_langsr  s      r   rq  z4Interpreter.build_both_libraries.<locals>.<dictcomp>  s-    #p#p#pTQUVZcZoUoUoAqUoUoUor   )rG  r   r  r  r   r?  r@  r   r  r  	uses_rustr  r   picr  r   r  r  	generatedr   
set_static
set_sharedr  )r   r  r'  r~   
shared_lib
static_libpreferred_libraryreuse_object_filess           r   r  z Interpreter.build_both_libraries  s   &&tT65;NOO
&&tT65;NOO
 M2@@KcAdAdee&& $ 6 D DYO`EaEa b b F**$,!<'' "'!!## 	0 "']]fllnn]]]]] 	0!&!+ 
	q
 %%e&<ZI[]g]qsu&v&vwww!#J#%J  $q#pZ5I5O5O5Q5Q#p#p#pJ  	j)))j)))":z;LMMMr   c                   | j         j                            t          d| j                            }t          |t                    s
J d            |dk    r5|                     ||t          j	        d|          t          j                  S |dk    r5|                     ||t          j	        d|          t          j                  S |dk    r|                     |||          S t          d	| d
          )Nr  r   r#  r  r}  r   rz  r  zUnknown default_library value: r  )r   r?  r@  r   r   r   r   rG  Tcastr   r  r  r  r.   )r   r  r'  r~   r  s        r   r  zInterpreter.build_library  s    -0>>yIZgkgv?w?w?wxx/3//;;;;;h&&$$T48OQW1X1XZ_Zmnnn(($$T48OQW1X1XZ_Zmnnn&&,,T4@@@&'['['['[\\\r   raw+T.Tuple[T.List[mesonlib.File], T.List[str]]c                |   g }g }t          j        | j                                        | j                                                  }|D ]o}t          |t           j                  r>|                    |           |                    |                    |                     Z|                    |           p||fS )a(  Convert raw target arguments from File | str to File.

        This removes files from the command line and replaces them with string
        values, but adds the files to depends list

        :param raw: the raw arguments
        :return: A tuple of file dependencies and raw arguments
        )	r   r  r   r  r<  r   r   r   rel_to_builddir)r   r+  r  r'  build_to_sourcer  s         r   __convert_file_argszInterpreter.__convert_file_args  s     /1"*4+;+J+J+L+L+/+;+I+I+K+KM M  	 	A!X]++ ##A&&&A--o>>????AT!!r   *T.Dict[str, T.List[mesonlib.FileOrString]]c                   |                     dg           }t          j        t                    }t          j        D ]=}|                     || d                   \  }}|||<   |                    |           >||d<   dS )aJ  Convert split language args into a combined dictionary.

        The Meson DSL takes arguments in the form `<lang>_args : args`, but in the
        build layer we store these in a single dictionary as `{<lang>: args}`.
        This function extracts the arguments from the DSL format and prepares
        them for the IR.
        r  _argslanguage_argsN)r  r   r   r   r   all_languages_Interpreter__convert_file_argsr  )r   r~   rj  new_argsr   r  r'  s          r   __process_language_argsz#Interpreter.__process_language_args  s     nb114?4KD4Q4Q( 	 	A11&A2EFFJD$HQKHHTNNNN"*r   targetclassT.Type[build.Executable]c                    d S r/  r   r   r  r'  r~   r9  s        r   rG  zInterpreter.build_target  s    mpmpr   T.Type[build.StaticLibrary]c                    d S r/  r   r<  s        r   rG  zInterpreter.build_target      vyvyr   T.Type[build.SharedLibrary]c                    d S r/  r   r<  s        r   rG  zInterpreter.build_target  r?  r   T.Type[build.SharedModule]c                    d S r/  r   r<  s        r   rG  zInterpreter.build_target  s    svsvr   T.Type[build.Jar]c                    d S r/  r   r<  s        r   rG  zInterpreter.build_target#  s    X[X[r   lT.Union[kwtypes.Executable, kwtypes.StaticLibrary, kwtypes.SharedLibrary, kwtypes.SharedModule, kwtypes.Jar]jT.Type[T.Union[build.Executable, build.StaticLibrary, build.SharedModule, build.SharedLibrary, build.Jar]]bT.Union[build.Executable, build.StaticLibrary, build.SharedModule, build.SharedLibrary, build.Jar]c                n   |\  }}|d         }|                     d          dk    rt          j        }||d         z   }t          d |D                       rt	          j        dd| j        d|           t          d	 |D                       rt	          j        d
d| j        d|           d |D             }t          |d         t                    st	          j        dd| j        d|           | 	                    |          }|d         }t          |d          |d<   | 	                    |d                   |d<   |                     t          j                            | j        | j                  |           t"          j        t"          j        t"          j        t"          j        t"          j        hvr1t/          j        dt3                               t5          d          |                     |           t"          j        u rt8          j        dhz
  D ]m}	|                     |                     |	 dg                     \  }
}|d         |	                             |           |d                             |
           nnt"          j        u r~t8          j        dhz
  D ]m}	|                     |                     |	 dg                     \  }
}|d         |	                             |           |d                             |
           nt"          j        ur/|                      |           | !                    |d          |d<   fd|"                                D             }g }t#          j#                    }|D ]7}t          |t"          j#                  r||z   }"|$                    |           8|sd }n|j%        &                                D ]}tO                      }|D ]}t          |t2                    r!t          j        (                    |          g}n7t          |tR          j*                  r	|j+        g}n|,                                }|-                    |          }|r9t]          j/        dd                    ta          |                     |          |1                    |           Ռ| !                    |          |d <   t"          j        u rte          j3        d!|          }|d"         +|d#         t]          j/        d$|          |d"         rd%|d#<   |d#         d&|d#<   |d'         r.|d(         d)u rti          j        d*d| j        d+|,           d-|d(<   n&|d(         r|d'         d)u rt]          d.          d-|d'<   |d(         d)|d(<   |d'         d)|d'<    || j        | j        ||||| j5        | j        |         |
  
        }|r/|6                                rto          j        d/d0| j                   | 8                    ||           d-| _9        |S )1Nr   rust_crate_typez
proc-macror  c              3  J   K   | ]}t          |t          j                  V  d S r/  )r   r   r  r   rK  s     r   r   z+Interpreter.build_target.<locals>.<genexpr>3  s/      AAAz!U.//AAAAAAr   z4passing references to built targets as a source filer  zpConsider using `link_with` or `link_whole` if you meant to link, or dropping them as otherwise they are ignored.c              3  J   K   | ]}t          |t          j                  V  d S r/  )r   r   r  rL  s     r   r   z+Interpreter.build_target.<locals>.<genexpr>7  s/      FFz!U344FFFFFFr   zpassing object files as sourceszUPass these to the `objects` keyword instead, they are ignored when passed as sources.c                ^    g | ]*}t          |t          j        t          j        f          (|+S r   )r   r   r  r  rL  s     r   r>  z,Interpreter.build_target.<locals>.<listcomp>=  sH     V V V$Q):E<R(STTV1 V V Vr   r  z$install kwarg with non-boolean valuerL  zjThis was never intended to work, and is essentially the same as using `install: true` regardless of value.r  r   r  zUnknown target type:zUnreachable coder   r   r4  r  r   r  c                6    i | ]\  }}|j         d hz  v ||S )r4  )known_kwargs)r   r   r   r9  s      r   rq  z,Interpreter.build_target.<locals>.<dictcomp>_  s5    ggg41aQ+:RVeUf:f5f5f!Q5f5f5fr   z+Conflicting sources in structured sources: rI  r  rW  rm  gui_appwin_subsystemzZExecutable got both "gui_app", and "win_subsystem" arguments, which are mutually exclusivewindowsr  implibexport_dynamicFz,implib overrides explicit export_dynamic offzCDo not set ths if want export_dynamic disabled if implib is enabledrT  TzM"implib" keyword" must not be false if "export_dynamic" is set and not false.zobjects in Rust targetsz1.8.0):rB  r   rY  r  r6   r   r   r   r   r  r   check_sources_existr  r7  r  r  r
  r   r  r  r  r  r  r	   rK  r   r  #_Interpreter__process_language_argsr   r5  r6  r  check_for_jar_sourcesr  r   r  r   r  r   r  ri  r   r   r  get_outputsintersectionr/   r  r]  r  r)  r*  r5   r   r  r4   r  r   )r   r  r'  r~   r9  r  r  rd  objsr  r  srcsstructrK  r   r  r2  r  	conflictsr8  s       `               r   rG  zInterpreter.build_target'  s    gX&::'((L88 (-KF9--AAAAAAA 	+$%[]dfjfu &X%)+ + + FFgFFFFF 	+$%FQUQ`%|%)+ + +
V Vg V V V &+T22 	+$%KWVZVe &R%)+ + + ..w77i !0!H!H~ $ < <VM=R S S}  d.>!L!LgVVVu/1DeFXZ_ZmotoxyyyJ-s;/?/?@@@1222$$V,,,%---!/6(: 4 4!55fjjDAVAVAVXZ6[6[\\
d'-44T:::~&--d33334 E///!/6(: 4 4!55fjjDAVAVAVXZ6[6[\\
d'-44T:::~&--d3333ei''&&w<<<&*&:&:6?&S&SF?# hggg6<<>>ggg')6;6M6O6O 	 	A!U455 !A 	&FF
 ^**,, & &&)ee & &A!!S)) ,W--a001#Ax}55 ,WIMMOO ' 4 4Q 7 7I  '.8h$))TZ[dTeTeJfJfhh!%' ' ' ' NN1%%%%& )-(<(<V(D(D$%%***V0&99Fi ,/*6*4t!# # # # )$ 8.7F?+o&.*3'h 	(*+u44%01_ahjnjy1v:>@ @ @ @ ,0'((() ((#u,,*+z{{{#'x &'/+0'(h'#(x T4;dTZ\`!-t~k/JFT T 	WF$$&& 	W!";WdoVVVf%%%#' r   c                    |j                                         D ]D}| j        j        |j                                     |d           }|r|                    |           Ed S r/  )r   r[  r   rb  rd  rB  add_deps)r   r8  r   rh  s       r   r  zInterpreter.add_stdlib_info  sg    !&&(( 	% 	%A*$V%78<<QEEC %$$$	% 	%r   c                    |D ]j}t          |t                    st          j                            ||          }t          j                            |          st          d| d          kd S )Nz&Tried to add non-existing source file r  )r   r   r  r7  r  r:  r.   )r   r
  r  rK  r  s        r   rV  zInterpreter.check_sources_exist  s     	Z 	ZAa%% GLL++E7>>%(( Z*+XTU+X+X+XYYYZ		Z 	Zr   c           
     X   |D ]}t          |t          t          j        f          rAt	          j        |          r-t          d|j         d| dt          j	        j         d          t          |t          j
                  r(|                     |                                |           d S )NzBuild target of type "z" cannot build java source: "z". Use "z
" instead.)r   r   r   r   r   is_javar/   typenamer   r  r  rX  as_list)r   r  r9  rK  s       r   rX  z!Interpreter.check_for_jar_sources  s     	E 	EA!c8=122 Ey7H7K7K E&  (]@T  (]  (]st  (]  (]  D  H  Q  (]  (]  (]  ^  ^  ^Au677 E**199;;DDD		E 	Er   buildtargetmesonlib.HoldableObjectc                D    | j         |j         k    rt          d          d S )Nz5Tried to extract objects from a different subproject.)r   r.   )r   rf  s     r   validate_extractionzInterpreter.validate_extraction  s)    ?k444&'^___ 54r   c                    | j         dk    S r?  r(  r,  s    r   r  zInterpreter.is_subproject  s    "$$r   ri  T.Tuple[str, object]c                    |\  }}t           j                            |          t          d|z             |                     ||d           d S )NzInvalid variable name: T)	holderify)r   IDENT_REr  r0   ri  )r   r  r'  r~   varnamer   s         r   r  zInterpreter.func_set_variable  sY    
 %%g..67'ABBB'5D99999r   rU  3T.Tuple[T.Union[str, Disabler], T.Optional[object]]
'TYPE_var'c                    |\  }}t          |t                    r|S 	 | j        |         S # t          $ r ||                     |          cY S Y nw xY wt          d| d          )NzTried to get unknown variable "rl  )r   r2   rP  r^  
_holderifyr.   )r   r  r'  r~   ro  r   s         r   r  zInterpreter.func_get_variable  s     !gx(( 	N	1>'** 	1 	1 	1#x00000 $#	1 ##PW#P#P#PQQQs   + !AAr_  c                     |d         | j         v S r   rO  r  s       r   r  zInterpreter.func_is_variable  s     Aw$.((r   rp  c                j    |d         }	 | j         |= d S # t          $ r t          d| d          w xY w)Nr   z!Tried to unset unknown variable "rl  )rP  r^  r.   )r   r  r'  r~   ro  s        r   r  zInterpreter.func_unset_variable  s\     q'	Xw''' 	X 	X 	X&'V7'V'V'VWWW	Xs    2c                    |                      dd          }t          |t                    st          d          |rt          j        nt          j        S )Nr   Fz'Argument to "native" must be a boolean.)rB  r   r   r/   r   rY  rW  )r~   r   s     r   r  z%Interpreter.machine_from_native_kwarg  sM    He,,&$'' 	N"#LMMM&,D}""-2DDr   r^  T.Tuple[object]c                8    t          |d         t                    S r   )r   r2   r  s       r   r  zInterpreter.func_is_disabler  s     $q'8,,,r   rf  .T.Tuple[int, T.Optional[int], T.Optional[int]]P_OBJ.RangeHolderc                    |\  }}}||}d}|d}|dk     rt          d          ||k     rt          d          |dk     rt          d          t          j        |||| j                  S )Nr   rA   zstart cannot be negativezstop cannot be less than startzstep must be >=1r(  )r.   r  RangeHolderr   )r   r  r'  r~   startstopsteps          r   r  zInterpreter.func_range  s     !tT <DE<D199&'ABBB%<<&'GHHH!88&'9::: dtOOOOr   )Nr   r   r  NNNN)r  r  r  r	  r   r   r
  r   r  r   r  r  r  r  r  r  r  r  r   r   )r   r*  )r   r   )r  r  r  r  r   r   )r  r	  r   r   )r  r   r  r  r   r   )r   r-  )r2  r3  r   r   )r   rM  )r  r  r'  rl  r~   rm  r   rn  )r  r  r'  r  r~   r  r   r  )r  r  r'  r  r~   r  r   r  )r  r  r'  r  r~   r  r   r   )r  r  r'  r  r~   r  r   rH   )F)r'  r  r~   r  r  r   r   rH   )r  r  r'  rl  r~   r  r   rF   )NN)r  r   r  r   rt  r  r   rF   )
r  r   r~   r  r  r  r  r  r   rF   )NNN)r  r   r
  r   r   r  r~   r  r  r  r0  r   r  r  r   rF   )
r  r   r
  r   r   r  r~   r  r   rF   )r  r  r'  rl  r~   r   r   rN  )r  r  r'  rb  r~   r  r   rc  )r  r  r'  r  r~   r  r   r   )r  r  r'  r  r~   r  r   r   )r'  r  r  r   r   r  )r  r  )r  r  r'  r  r~   r  r   r   )r   r   r~   r  r   r   )r  r  r'  rl  r~   r   r   r9   )r'  r  r   r   rd  r   r   r   )rd  r   r   r   )rd  r   r  r  r   r  )r'  r  r  r   r  r  r   r  )r  r  r  r  r   r  )r  r  r   r   )r  r   r  r&  r   r   )r'  r  r   r   )r'  r  rd  r   r   r/  r   r   r  r   r  r0  r  r   r1  r   r2  r3  r   r4  )r'  r  rd  r   r   r/  r   r   r  r   r  r0  r1  r   r2  r3  r  r  r   r=  )
r;  rG  r  r0  r2  r3  r  r  r   r   )r   r   r'  r  r   rR  r   r   r  r  r   r=  )r  r  r'  rZ  r~   r[  r   r\  )r  r  r'  r  r   r!   )r~   rm  r   rn  )r  r  r'  rr  r~   rm  r   rs  )r  r  r'  rr  r~   rz  r   r{  )r  r  r'  rr  r~   r}  r   r~  )r  r  r'  rr  r~   r  r   r  )r  r  r'  rr  r~   r  r   r  )r  r  r'  rr  r~   r  r   rs  )r  r  r'  r  r~   r  r   r  )r  r  r'  rr  r~   r  r   r  )r  r  r'  r  r~   r  r   r  )r  r  r'  r   r~   r   r   r  )r  r   r  r  r  r   r   r   )r  r  r'  rl  r~   r  r   r  )r  r  r'  rl  r~   r  r   r  )r  r  r'  r  r~   r   r   r  )r  r  r'  r  r~   r  r   r  )r  r  r'  r  r~   r  r   r   )r  r  r'  r  r~   r  r   r   )r~   r  r   r   )
r  r  r'  r  r~   r  r  r  r   r   )r  r  r'  r  r~   r   r  r   )r  r  r'  r  r~   r  r   r  )r  r  r'  r  r~   r  r   r  )r  r  r'  rl  r   r   )r  r  r'  r  r   r  )r  r  r'  r  r~   r  r   r  )r  r  r'  rl  r~   r%  r   r   )r.  r   r   r   )r  r  r'  r  r~   r6  r   r7  )NFN)r  r  r  r   r  r   r5  r   r;  r   r<  r   r   r   r  r=  r   r7  )r  r  r'  rl  r~   rN  r   rO  )r  r  r'  r  r~   r[  )rW  )r  r   r   r  )r  r  r'  r  r~   r  r   r  )r  r  r  r   r   r  )r  r  r'  rl  r~   r  r   r   )r  r  r'  r  r~   r  r   r   )r  r  r'  r  r~   r  r   r   )r'  r  r   r   )
r  r  r  r  r'  r  r~   r  r   r   )
r  r  r  r  r'  r  r~   r  r   r   )r  r  r  r  r  r   r'  r  r~   r  r   r   )r  r  r'  r  r~   r  r   r   )r  r  r'  r  r~   r  r   r   )T)r  r  r  r   r   r  )r  r  r  r   r   r  )r  r  r   r  )r  r  r  r   r   r  )r  r  r  r   r   r  )r  r   r   r   )r  r   r  r  r   r   )r  r  r'  rr  r~   r  )r+  r  r   r,  )r~   r1  r   r   )
r  r  r'  rr  r~   rm  r9  r:  r   rs  )
r  r  r'  rr  r~   rz  r9  r=  r   r{  )
r  r  r'  rr  r~   r}  r9  r@  r   r~  )
r  r  r'  rr  r~   r  r9  rB  r   r  )
r  r  r'  rr  r~   r  r9  rD  r   r  )
r  r  r'  rr  r~   rF  r9  rG  r   rH  )rf  rg  r   r   )r   r   )r  r  r'  rk  r~   r  r   r   )r  r  r'  rp  r~   r  r   rq  )r  r  r'  rl  r~   r  r   r   )r  r  r'  rl  r~   r  r   r   )r~   r   r   r   )r  r  r'  rw  r~   r  r   r   )r'  ry  r~   r   r   rz  )r   r   r   r   r-  r(  r%  r&  r  r  r!  r,  r1  rL  rQ  ri  r'   r   r&   ro   evolver^   r3   r  r)   r  r(   r%   r#   r   rc   r_   rZ   rh   ri   rr   r   r   ru   rw   r   r  r  r   r  r  r  r   r   r  r`   r  r  r  rY   r  r  r  r  r  r  r  r   r  ry  r   r  rz  r  r+   r  r  r4   objectr  r  r  r  r  r  r  rx   r  r>  r  r  r  r  r"  r%  r+  r.  r   rW  r<  r8  r9  rC  rm   r  r7   r*   permitted_dependency_kwargsr  r  rq  known_exe_kwargsrs   rT   r  known_stlib_kwargsrt   r  known_shlib_kwargsrp   r  known_library_kwargsrV   r,   r  known_shmod_kwargsrq   r  r  known_jar_kwargsr  r  r  r  rU   r  known_build_target_kwargsrL   r  rQ   rW   rd   re   rk   rf   r  r  r  rM   rN   rO   rP   rR   rj   r[   r\   r]   r  r  Targetr  r  r  r  rv   r  r  r  rG   r  r  rn   rg   r  r  r  r  r  r  r  r  r:  r  r   r  rX   r  r  r  r  r~  rl   rx  ry  r{  r}  r   r!   r|  r  r  r  r  ra   rb   r  r  r1  r  r  r  r)  overloadr  staticmethodr  r  r  r  r6  rW  rG  r  rV  rX  ri  r  r  r2   r-   r  r  r  r  r  r  r  r  s   @r   r  r    s(       
 04"$ &3NR9=LPNR+" +" +" +" +" +" +"Z= = = =L L L L$@H @H @H @HD? ? ? ?B	 	 	 	^ ^ ^ ^<> > > >
> > > >$ $ $ $!( !( !( !(F   9 9 9 9* ^Hc""\****** 
 I I I   #"IV ^GS)))5 5 5 X *)5 \	."3"3D#">">VXYYY""xHHH##(333	+00s;;TSUVVV8,,,	-!2!24(-9M!N!NX\fhpwxxx($9IJJJ	)c8_--	)..tU5KLLVZdfnuvvv  " " "!  Y""H ^HdSE222D D D X 32DG G G ^		?I,>sS!?I4FWZ[] ] ] \	'D(+8<<<	)T4x@@@H%%%	 3 3 3 	] ]3 .3	IQ IQ IQ IQ IQV@ @ @ ^L#&&\X...	)..tS992tTTT	 / / /  '&/ W[?C     swgkX X X X Xz GKHLY]:+ :+ :+ :+ :+x   66 6 6 6  ^L#&&2 2 2 X '&2h ^(4&999	7 	7 	7 X :9	7+ + + +@ ^IsC000\	/C?33	(-400BB	
 	
 	
 		)//c::HEt]abbb	/#4#4T3#?#?UYahiii	"C??? w! w! w!  10 w!r \/99Xh7Gx#X#X#XZeff^OS111   21 gf.? ? ? ? $ $ $ X $/ / / Z	8$$^IT{VH===\	)S"---	)T5111	*sHoX>>>	 
= 
= 
=  >= %$ 
=U U U U-  -  -  - ^ Z	8$$/ / X %$ / Q Q X Q Z""( ( X #" ( 5 5 Y X5 ^NC((\	%i;K;KYX\L];^;^___ J J J	  )(
J6      ; ; ; ;z      :
 
 
 
7 7 7 7
M M M M    8E7Iko+/>@AE9;IM    @* * * *X   0= = = =  ^NS(-,@aPPP\***	&++D#66DX`aaa	)..tS992t[cddd	$c2WEEEW---	 	 ? ? ? 	 	 QP?  lH/F.GHHlH/?.@AAlH|n==lH~.>??lH.f.f.fgglHzl;;lHxj99_011^L#1===\, 6 6X F F FVZ[[[& & & \[ >= 21  :9 <; hg @? >= BA IH&P Z
H%%  Y X &%    _U+,,^L#???\,DDDDtDD	G 	G 	G ED @? -,	G _U-..^$c?CCC\"H^HHH4HHJ J J IH DC /.J
 _U-..^$c?CCC\"H^HHH4HH   IH DC /. _)**^$c?CCC\"E[EEEEE!= = = "! FE DC +*=
 Z**_U-..^OS/BBB\/GNGGG$GGI I I HG CB /. +*I
 _)**^IsO<<<\)>k>>>>>!6 6 6 "! ?> =< +*6
 _U+,,^E3hmU=OQVQhjoj}  @E  @V  X]  Xi  )j  k  k  k\%6'66666@ @ @ 76 k  k -,@
 nh?Q0RSS_.//^NCAAA\.H#3HHH4HH@ @ @ IH BA 0/ TS@* \D)))	dS%*;U=OQVQhjy  |D  |I  %J  K  K		
 	
 	
 		*sHo..	"C===
(((G,,,G,,,W---! $> > >%  Y&>@ Zx((" " " X Y )("% % % %$ ^OcU333\H%%%X...	&$X>>>	)T5111	)T5AAA% ([ [ [)  43*[z ^L#&&\H%%%	     '& Z))^NC%,@S1Tbcddd   X ed *)  ^K%"2O!DEE\	+00sNNNY]gklll	(--dCUKKKVZdhiii	)T5AAA 2 2 2  FE2 ^Ku'7OU]Ubdidvx}  yP  'Q  R  R\+))))1 1 1 *) R  R1
 ^FC%"2EIPXP]_d_qsx  tK  "L  M  M\&R8RYY}dD%Q%Q%QRRR0 0 0 SR M  M0
) ) ) ) .2.( .( .( .( .(`D D D D  ^%X]/CDDD\	(S(O,,X...     ED@ ^MC+?@@@\	(S(O8<<<X...	     A@* Z"H--\	-#xAAA 
    .- Z!8,,^NC((\	-t444	-t444	     )( -, Z$h//^(&4&AAA0 0 0  X BA 0/02 ^Hc""\	dF++yy	
 	
 	

 
V V V
 
 #"V>    ^NS(-,@AAA\	)..tc8=5IJJTXbdeee	(--dC88"dZbcccX...H---h///	 	Q Q Q	 	 BAQ@ @D05>B    2 ^$c**\	-t444	#T5999	/#4#4T3#?#?d(hh	j 	j 	j 		'):):4)E)Ed(hh	j 	j 	j 	X...H---     +*: \
)))Y///H---	)T5AAA	te&6I[]e]jlo%p  D  E  E  E  GO  P	
 	
 	

 		tc3%5668OQYZ	
 	
 		D%x	
 	
 	
 		*c7(CCC	(C,,-I-I-IJJ	L 	L 	L	dX]C$899		
 	
 	
 		)dH-X>>>	-#tbYY	[ 	[ 	[	/38SY[bRc,,-B-B-BCC	E 	E 	E	,hWMMME# #HXB XB XBI# # YJXBt    2 ^)3777\';e)T)T)TUUF F F VU 87FA A A A AF ^$c**\	-!2!24#9O!P!PZ^hjkkk	%u---	&Q777	"$5$5dC$@$@$XZbjkkk	,e8DDD W W W  +*W8 ^*C888\()[AAd d d BA 98d ^/===\()[AAi i i BA >=i ^+S999\)9kBBg g g CB :9g ^0#>>>\()[AAl l l BA ?>l Z*H55^.8OPPP\,iEEu u u FE QP 65u$9 9 9 98B B B BD D D D
; 
; 
; 
; ^MS$,=+>???\-0G0@0Gh0W0W0WXX& & & YX @? & ^L#1===
 
 
 X >=
" " " " " "   , , , ,06( 6( 6(p Z E  E  E  E Z EZ N  N  N  N Z NZ j  j  j Z jZ{{{{ Z{Z Z         D 	C 	C 	C \	C'K 'K 'K 'KR Z (+++N +N +N ,++NZ
] 
] 
] 
]" " " ".+ + + +" Zq q q Zq Zz z z Zz Zz z z Zz Zw w w Zw Z\ \ \ Z\} } } }~% % %Z Z ZE E E` ` ` `% % % % ^NC00!: : : "!  X 10: ^NS(OfXFFFR R R _  X GFR ^M3'') ) ) X (') Z (++^$c**X X X X +* ,+X E E E \E Zx((^M6**- - - X +* )(- Z""^GS3*555P P P 65 #" XP P P P Pr   r  )r   r   r   r   )
__future__r   r  r  r|  r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   programsr   r    r!   r  r"   interpreterbaser#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r   r;   r<   r=   r>   r?   optinterpreterr@   rB   r9  rC   r  	mesonmainrD   dependencyfallbacksrE   rF   rG   rH   rI   rJ   rK   type_checkingrL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r  pathlibr{   enumr|   r  r   r  r  r?  r   typingr)  r  rx  r/  TYPE_CHECKINGtyping_extensionsr}   r~   kwtypesbackend.backendsr   interpreterbase.baseobjectsr   r   r   r   r   Unionr   r  r  r  r  r  r  r   SourceInputsr  SourceOutputsFileOrStringGeneratedTypesBuildTargetSourceCallabler  ProgramVersionFuncTypeVarr   r   r   r  r  r5  r  r  r  r  r   r  r  r  r   r   r   <module>r     s*	  
 # " " " " "                                                                   ! ! ! ! ! ! ! !      T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T        B B B B B B B B % % % % % %       i i i i i i i i i i i i i i D  D  D  D  D  D  D  D  D  D  D  D  D  D  D  D d d d d d d d d d d d d : : : : : : : : \ \ \ \ \ \ \ \ \ \ \ \ @ @ @ @ @ @ @ @ 4 4 4 4 4 4 u u u u u u u u u u u u u u * * * * * * ' ' ' ' ' ' % % % % % %             : : : : : :               / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /` " ! ! ! ! !             				   				               ? 3))))))######******VVVVVVVVVV******111111 78=%*=u?PRWRe 2E4FH[ 137 8L GHM5+>!-u/FHZ!2E4GI`a bM  5u7KUMd deQW_e>NP_-_%`$acf$fg	+T222I   D? D? D? D? D? D? D? D?N 
	DD!8F8!CDDDE ED!8F8!CDDDE  		 O ( ( ( ( ( ( ( (   , F E4P E4P E4P E4P E4P/> E4P E4P E4P E4P E4Pr   