
    e             
         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 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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+m,Z,m-Z- ddl"m.Z.m/Z/m0Z0m1Z1 ddl"m2Z2m3Z3 ddl"m4Z4m5Z5m6Z6m7Z7 ddl"m8Z8m9Z9 ddl"m:Z: ddl;m<Z<m=Z=m>Z>m?Z?m@Z@ ddl	mAZA ddlmBZC ddlmDZE ddlFmGZG ddlHmIZI dd lBmJZJmKZKmLZLmMZMmNZNmOZO dd!lPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z} dd"lm~Z 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%lZej                  rjd d%lZdd&lmZ dd'lmZ dd(lmZmZmZ dd)lmZ dd*lPmZ ej6                  ej8                  ej:                  ej<                  ej>                  ej@                  ejB                  ej:                  ejD                  ef	   Zej6                  ej8                  ej:                  ej<                  ej@                  ejB                  ejD                  ej:                  ejJ                  f   Zej6                  ejN                  ejP                  ejJ                  f   ZejT                  ej6                  eejV                  ef   gef   Zd8d+Z G d, d-      Zej^                  ej`                  z  e
jb                  d.hz
  D  ch c]  } |  d/	 c} z  e
jb                  d.hz
  D  ch c]  } |  d0	 c} z  Zeejf                  z  ejh                  z  d1hz  Z G d2 d3e      Zh d4Zd5Z G d6 d7e$e      Zy%c c} w c c} w )9    )annotations   )mparser)environment)coredata)dependencies)mlog)build)optinterpreter)	compilers)	envconfig)wrapWrapMode)mesonlib)EnvironmentVariablesExecutableSerialisationMesonBugExceptionMesonExceptionHoldableObjectFileModeMachineChoice	OptionKeylistifyextract_as_listhas_path_seppath_is_in_root
PerMachine)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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)EnumN)kwargs)Backend)InterpreterObjectTYPE_varTYPE_kwargs)OverrideProgram)SourcesVarargsTypec                ~    t        | t              r-t        |       dk7  ryt        | d   t        j                        syy )Nr@   z,when passed as array must have a length of 1r   z(when passed as array must contain a File)
isinstancelistlenr   File)values    D/usr/lib/python3/dist-packages/mesonbuild/interpreter/interpreter.py_project_version_validatorr      s2    %u:?AE!Hhmm4=    c                  4    e Zd ZddZ	 	 	 	 	 	 ddZd Zd Zy)Summaryc                j    || _         || _        t        j                  t              | _        d| _        y Nr   )project_nameproject_versioncollectionsdefaultdictdictsectionsmax_key_len)selfr   r   s      r   __init__zSummary.__init__   s,    (.#//5r   c                L   |j                         D ]  \  }}|| j                  |   v rt        d|d|      g }t        |      D ]  }	t	        |	t
              rT|r<|j                  |	rt        j                  d      nt        j                  d             R|j                  |	rdnd       ht	        |	t        t        f      r|j                  t        |	             t	        |	t        t        f      r7t        j                  dd|       |j                  |	j!                                t	        |	t"              r=t        j                  d	d
|       |j                  t        j                  d             3t	        |	t$        j&                        r8t        j                  dd|       |j                  |	j)                                d}
t        |
j+                  ||             ||f| j                  |   |<   t-        | j.                  t1        |            | _         y )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   boolappendr	   greenredstrintr   r    r3   
single_usesummary_valuer1   r   
UserOptionprintable_valueformatmaxr   r   )r   sectionvaluesbool_ynlist_sep
subprojectkvformatted_valuesims              r   add_sectionzSummary.add_section   s   LLN 	=DAqDMM'***-=g[HZ[\Z_+`aa!QZ Ea&(//Q

50ADHHUYN[(//!IC:.$++CF3OZ#@A))*UW_akl$++AOO,=>8,))*?:V$++DHHTN;8#6#67))*ExQ[\$++A,=,=,?@ OA.qxx/CDD'E( *:8(DDMM'"1%"4#3#3SV<D3	=r   c                h   t        j                  | j                  t        j                  | j                               | j
                  j                         D ]  \  }}t        j                  d       |r)t        j                  dt        j                  |             |j                         D ]k  \  }}|\  }}| j                  t        |      z
  }|rdnd}t        j                  d|d|z  z   dz   |       | j                  dz   }| j                  |||       m  t        j                  d       y )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$4$4T5I5I$JK#}}224 
	5OGVHHRLdii01 518**SV3cB!cGm"3c"9sC))A-8V45	
	5 	r   c                   dd|z  z   }|t        j                  ||dd y t        j                         j                  }g }|}|j                         |z   }|D ]S  }t        |      t        |      z   }	|r"||	z   |kD  rt        j                  |||d |}g }|j                  |       ||	z  }U t        j                  ||dd y )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<'	HHcyEB**,44OO%	1	 	AFS]*E5(72$H)<!KKNH	 	$H>r   N)r   r   r   r   )r   r   r   T.Dict[str, T.Any]r   r   r   T.Optional[str]r   r   returnNone)__name__
__module____qualname__r   r   r   r    r   r   r   r      s.    =-=;>=CG=:?r   r   java_shared_args_static_argstarget_typec                      e Zd ZdZdZy)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.
    r@   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 future releases of meson.
         See also: https://github.com/mesonbuild/meson/issues/9300c                  &    e Zd Z	 	 	 	 	 	 	 	 	 	 dL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dM fdZdNd	ZdOd
ZdOdZdOdZdPdZdQdZ	dRdZ
dOdZdSdZdTdZdUdZdOdZ ede       ed ej(                  d       ej(                  d            e	 	 	 	 dVd                     Z ede      edWd              Ze ed ed eee      dg        ej(                  d d!"       ej(                  d!       ed# eee      dg       e ee! e"j(                  d$      e# ed% eee$jJ                  ef      dg d&'       e&j(                  d(ed)i*       ed+ee'f       ed, eee(jR                        dg d-'            	 	 	 	 dXd.              Z* ed/e+eg0      e	 	 	 	 dYd1              Z,d2 Z- ed3e(j\                  e/e0jb                  e$jJ                  efe(j\                  e/e0jb                  e$jJ                  ef       ed3 ed4e+e'fd5       ed6e+dd57       e2j(                  d8            	 	 	 	 	 	 dZd9              Z3	 d[	 	 	 	 	 	 	 d\d:Z4d; Z5 ede       ede e6j(                  d<       ed+ eee      g d=            d]d>              Z7	 	 d^	 	 	 d_d?Z8d`dad@Z9	 	 	 db	 	 	 	 	 	 	 	 	 	 	 dcdAZ:	 	 	 	 	 	 dddBZ;	 	 	 	 	 	 dddCZ<dedDZ= edEe      e	 	 	 	 dfdF              Z> edGe?g0      e	 	 	 	 dgdH              Z@dOdIZA edJee       edJe6 edKee'f       ed+ee$jJ                  e'efdLeBdM N       edO eee      e'fdd=       edP eee      g dd-Q       ededR            dhdS              ZC edT edUe+e'fd(      e       edTe      didV              ZDdjdWZEeFedkdX              ZGdY ZHeF eIdZd[       edZee?feJg0       edZ ed\edR       ed]e+dR       ed^ee'fd(            	 	 	 	 dld_                            ZKdmd`ZLdOdaZMeF eIdbdc      edd                      ZNeFede               ZOeF eIdfdg      edh                      ZPeedi               ZQ edje       edj edkedl eRdldmh      n            dndo              ZSdodpZTdpdqZUdodrZV	 	 dqdsZW	 	 	 	 drdtZX	 	 	 	 dsduZYdtdvZZdudwZ[dvdxZ\e]j                  ddddddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dwdyZ_	 	 	 	 	 	 	 	 	 	 	 	 	 	 dxdzZ`	 	 	 	 	 	 	 	 dyd{Za	 	 	 	 	 	 	 	 dzd}Zb ed~ee$jJ                  fd       ed~ ej(                  d      ece ed eee      g dd[Q       ed+ eee      g ddQ       e6j(                  d            e	 	 	 	 d{d                     Zd eedddg       eedd)dg       eedd(dg       eedddg       eedd8g d       eedddg       eedddg      e efeg       eded       ed e6j(                  d<      d      d|d                                                                             Zh eIddc      eed                      Zi efe(j                         edeek       edgelddi	 	 	 	 	 	 d}d                     Zm efe(j                         edeek       edgeoddi	 	 	 	 	 	 d~d                     Zp efe(j                         edeek       edgerddi	 	 	 	 	 	 dd                     Zs efet       edeek       edgeuddi	 	 	 	 	 	 dd                     Zv eIdd       efe(j                         edeek       edgexddi	 	 	 	 	 	 dd                            Zy efet       edeek       edgeuddi	 	 	 	 	 	 dd                     Zz efe(j                         edeee$jJ                  e(j                  e(j                  e(j                  e(jR                  e(j                  f       edgeddi	 	 	 	 	 	 dd                     Z eeddddg       efe       edeek       edgeddi	 	 	 	 	 	 dd                            Ze ed ej(                  d      e ed eeee(j                  e(j                  e(j                  e/e$jJ                  f      dg        ed|ee'f       ededR            dd              Z eIdd$      eedd                     Zedd       Z edeg0       edeeeeeeeeeee e2j(                  d      e ej(                  d5       ede+dd7       ed6e+dR       ede+dd7            	 	 	 	 dd              Z ede       edee e2j(                  d            	 	 	 	 dd              Z eIdd       edee(j0                  d      e	 	 	 	 dd                     Z ede(j\                  e/f       ed ed eeed      dd       ed eeed      dd      ee ed6e+dd7            	 	 	 	 	 	 dd              Z edee(j\                  e(j6                  e/e$jJ                  f       edge 	 	 	 	 	 	 dd              Z edee(j\                  e(j6                  e/e$jJ                  f       edge ede+dR       	 	 	 	 	 	 ddĄ              ZddńZ	 	 	 	 	 	 ddƄZ	 	 	 	 	 	 ddǄZ edee$jJ                  f       ede edee'f       ej(                  d5      ee      	 	 	 	 	 	 ddɄ              Z edee$jJ                  f       ed edee'fd̬       ej(                  d5      e      	 	 	 	 	 	 dd̈́              Z eIddϫ       ede edee'fd!            ddф              Z eIddӫ       ede       ed eded       eded      e      	 	 	 	 ddׄ                     Z eIdd!       edeJe?g0      eeF	 	 	 	 	 	 	 	 ddل                            Z ede       ed ed eeeJ      dۄ dcg dܫ            dd݄              ZddބZ edee$jJ                  f       ed ed eeee$jJ                  f      dg        ed eee      g dd$Q       ej(                  d<       ej(                  dϬ      e ej(                  d      e      	 	 	 	 	 	 dd              Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ ede       ed eded       ede+dR       ed eee      g ddd        ed eee      g ddd        ej(                  d<       ej(                  dϬ      e      	 	 	 	 dd              Ze ed ej(                  d       ej(                  d       ej(                  dϬ       ed6e+dd7       ed eee(j\                  e/e0jb                  e$jJ                  efd      e'fd       ed ee?eee+f      e(jb                  e'f       ede+dd5dd       ededd57       ededd$ eRh d             ed eee$jJ                  ef      dg        ede+e'fd8       edee+fdd n      e eded d5ddi eRh d             edee'fdd7            	 	 dd              ZdddZ ede       ed ede+dR            	 	 	 	 dd	              Zd[dd
Z ede       ed ed eeee/f      dg        ede+dR       ededR       ed eee      dg d'       ede+dd7      e2      dd              Z ede       edece      dd              Z ede       edece      dd              Z ede       edece      dd              Z ede       edece      dd              Z eIddg       edej|                         edece      dd                     ZddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZeF ed eee?fg0       ed e ej(                  d!            	 	 	 	 dd!                     Z ed"ed      edd#              ZǐdO fd$ZȐdOd%ZɐdOd&Zʐd' Ze̐j                  ddd(       Ze̐j                  d[dd)       Ze̐j                  dd*       Ze̐j                  ddd+       Ze̐j                  ddd,       Zΐddd-Zedd.       Zϐdd/Z eIdd$      dd0       Zѐdd1ZҐdd2ZӐdd3Ze̐j                  	 	 	 	 	 	 dd4       Ze̐j                  	 	 	 	 	 	 dd5       Ze̐j                  	 	 	 	 	 	 dd6       Ze̐j                  	 	 	 	 	 	 dd7       Ze̐j                  	 	 	 	 	 	 dd8       Z	 	 	 	 	 	 dd9ZՐdd:Z֐d; Zאd< Zؐdd=Zِdd>Z ed?eeJ      eeFeېdd@                            Z edAeefeJg0      eeFe	 	 	 	 ddB                            Z edCe      eddD              Z eIdEdϫ       edEe      eddF                     ZeddG       Z eIdHd       edHeJ      edÐdI                     Ze eIdJd̫       edJeeeg0      dĐdK                     Z xZS (  InterpreterNr   subprojectsFr   subdirsubproject_dirc                   t         |   |j                  j                         ||       d| _        || _        | j
                  j                  | _        | j                  j                         | _        || _        i | _	        i | _
        |j                  t        j                  j                        d   | _        || _        |
xs
 t#               | _        |s#|!| j'                          | j)                          n||| _        | j)                          | j,                  j/                  dt1        | j
                  |       i       g | _        t#               | _        d| _        d| _        i | _        g | _        i | _        |r|jA                         | _!        ni | _!        i | _"        | jG                          | jI                          || _%        tM        i i       | _'        tQ        jR                         | _*        t        j                  jW                  | jX                  t        jZ                        }|	s| jT                  j]                  |       |s| j_                          | ja                          y )Nr   mesonF)1superr   r   get_source_diractive_projectnamer
   get_coredatar   backendsummaryr   splitospathr   subproject_directory_namer   setrelaxationsload_root_meson_filesanity_check_astastbuiltinupdaterC   
generatorsprocessed_buildfilesproject_args_frozenglobal_args_frozenr   subproject_stackconfigure_file_outputscopydefault_project_optionsproject_default_optionsbuild_func_dictbuild_holder_mapuser_defined_optionsr   r   r   
OrderedSetbuild_def_filesjoinr   build_filenameaddparse_project_redetect_machines)r   _buildr  r   r   r   r  mockr  is_translatedr	  r  r  	__class__s                r   r   zInterpreter.__init__  s    	++::<fjQ"$
::11((557/18: *0bggkk)B2)F&,&/#%%%'!!#_DH!!#Wi

D&ABC3503!#( "':<-/8:#"+B+G+G+ID(+-D(?A$$8!HRSUWYHZ :B9L9L9Ndkk;3M3MN  $$^4 !r   c                    t        d      )NzThis class is unpicklable)r   r   s    r   __getnewargs_ex__zInterpreter.__getnewargs_ex__N  s     ;<<r   c                (   | j                   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                  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<   y )Nbuild_machinehost_machinetarget_machine)r
   r   machinesmiss_defaultingdetect_machine_infor   r   default_missingcpuhosttargetOBJMachineHolderr  )r   r-  s     r   r!  zInterpreter._redetect_machinesQ  sz    ::))22BBD$889P9P9V9VW*2*B*B*D

'zz%%..4488DDDzz%%..3377CCCzz%%..5599EEE djj44==CCTJ 	_% djj44==BBDI 	^$ djj44==DDdK 	%&r   c                   | j                   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| j0                  d| j2                  d| j4                  d| j6                  d| j8                  d| j:                  d| j<                  d| j>                  d| j@                  d | jB                  d!| jD                  d"| jF                  i d#| jH                  d$| jJ                  d%| jL                  d&| jN                  d'| jP                  d(| jR                  d)| jT                  d*| jV                  d+| jX                  d,| jZ                  d-| j\                  d.| j^                  d/| j`                  d0| jb                  d1| jd                  d2| jf                  d3| jh                  | jj                  | jl                  | jn                  | jp                  | jr                  | jt                  | jv                  | jx                  d4       d5tz        j|                  v r'| j                   j                  d6| j~                  i       d7tz        j|                  v r(| j                   j                  d8| j                  i       y y )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_warningr  environfunc_exceptionfunc_expect_errorr'  s    r   r  zInterpreter.build_func_dictc  sn   

 ;143Q3Q ;68[8[;*D,C,C; 3D4S4S; 6t7Y7Y	;
 89]9]; ,T-E-E; *4+A+A; $T%5%5; '(;(;; ,T-?-?; *4+A+A; 01M1M; ,T-E-E; +D,C,C; #DOO;  01M1M!;" ()=)=#;$ &t'9'9%;& )$*?*?';( #DOO);* ()=)=+;, #DOO-;. *4+A+A/;0 '(;(;1;2 ()=)=3;4 *4+A+A5;6 $T%5%57;8 1$2O2O9;: *4+A+A;;< .t/I/I=;> -d.G.G?;@ )$*?*?A;B ,T-E-EC;D -d.G.GE;F )$*?*?G;H )$*?*?I;J !$--K;L ()=)=M;N %d&7&7O;P %d&7&7Q;R $T%5%5S;T %d&7&7U;V #DOOW;X )$*?*?Y;Z ()=)=[;\ *4+A+A];^ 01M1M_;` $T%5%5a;b ,T-A-Ac;d +D,C,Ce;f .2-A-A*.*?*?)-)=)=&*&7&7#'>>-1-E-E&*&7&7&*&7&7u; ;	x 

*JJ{D,?,?@A+rzz9JJ~t/E/EFG :r   c                	   | j                   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.        j0                  t*        j2                  t.        j4                  t*        j6                  t.        j8                  t*        j:                  t.        j<                  t*        j>                  t.        j@                  t*        jB                  t.        jD                  t*        jF                  t.        jH                  t*        jJ                  t.        jL                  t*        jN                  i t.        jP                  t*        jR                  t.        jT                  t*        jV                  t.        jX                  t*        jZ                  t.        j\                  t*        j^                  t.        j`                  t*        jb                  t.        jd                  t*        jf                  t.        jh                  t*        jj                  t.        jl                  t*        jn                  t.        jp                  t*        jr                  t.        jt                  t*        jv                  t.        jx                  t*        jz                  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       	 | j                  j                  t        j                  t*        j                  t        t*        j                  t        j                  t        j                  t        t*        j                  t        t*        j                  i       y)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   r4  
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   MachineInfor5  ConfigurationDataConfigurationDataHolderbound_holder_mapr    DependencyHolderr   ExternalProgramHolderCompilerCompilerHolderr;   ModuleObjectHolderr<   MutableModuleObjectHolderr'  s    r   r  zInterpreter.build_holder_map  s    	 ( 
%##( 
 %""( 
 $$	( 

 %%%( 
 ##( 
 $$e&D&D( 
 **E,P,P( 
  8 8( 
 MM3>>( 
 !8!8( 
 !8!8( 
 !8!8( 
   6 6!( 
" c22#( 
$ IIs}}%( 
&  6 6'( 
( ##S%@%@)( 
* OOS00+( 
, !8!8-( 
. ""C$>$>/( 
0 OOS001( 
2 s443( 
4 MM3,,5( 
6 IIs}}7( 
8 NNC..9( 
: JJ;( 
< s44=( 
> c22?( 
@ s44A( 
B ))3+I+IC( 
D ##S%@%@E( 
F !?!?G( 
H ((#*C*CI( 
J &&(?(?K( 
L !!3#4#4##S%@%@O( 
 (	T	 	$$##S%9%9S66 : :#00!>!>&
 	r   c                >    | j                   j                  ||i       y)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   	held_typeholder_types      r   append_holder_mapzInterpreter.append_holder_map  s      	{ 
 	r   c                   t        |      }|D ]h  }t        |t              rt        d      t        |t        j
                  t        j                  t        j                  f      r| j                  |j                  |       ut        |t              r| j                  |       t        |t              r7| j                  |_        | j                  j                  j                  |       t        |t        j                         r'| j                  j"                  j                  |       t        |t        j$                        r'| j                  j&                  j                  |       `t        |t(        j*                        r | j                  |j,                  d          t        |t        j.                        r'| j                  j0                  j                  |       t        |t2              r'| j                  j4                  j                  |       t        |t6        t8        t:        t<        t        t        j>                  t@        t        jB                  f      r\t        d|d       y )Nz%Modules must not return ObjectHoldersr   z(Module returned a value of unknown type .)"r   r   r7   r-   r
   BuildTargetr  r  
add_targetnamer   process_new_valuesr   r   install_scriptsr   r  datar  symlinksr   InternalDependencysourcesr  install_dirsrF   testsr   r   r   r1   r  r   r  )r   invaluesr   s      r   r  zInterpreter.process_new_values  s   8$ 	^A!\**+RSS!e//1C1CU__UV*At$''*A67#

**11!4Auzz*

&&q)Au001

##**1-A|>>? ''		!5Au//0

''..q1At$

  ''*AS$,H[H[ /1H1H J K*-UVWUZZ[+\]]5	^r   c                    t        j                  t        j                  |      s+t	        j
                  dt        j                   d| |      |t         j                  | j                  <   y )NzMeson version is z but project requires node)	r   version_comparer   stable_versionr-   	from_noder   project_meson_versionsr   )r   pvlocations      r   handle_meson_versionz Interpreter.handle_meson_version  sb    ''(?(?D&003DXEUEUDVVlmolp1q  yA  B  B;=''8r   c                   | j                   j                  sy | j                   j                  d   }t        |t        j                        sy |j
                  j                  j                         D ]m  \  }}t        |t        j                        sJ d       |j                  dk(  s7t        |t        j                        sR| j                  |j                  |       o y )Nr   for mypymeson_version)r  linesr   r   FunctionNodeargsr{   r   IdNoder   BaseStringNoder  )r   r`  kwvals       r   handle_meson_version_from_astz)Interpreter.handle_meson_version_from_ast  s    xx~~((..#'7#7#78||**002 	>GBb'..1=:=1xx?*c7#9#9:--cii=	>r   c                    | j                   S N)r  r'  s    r   get_build_def_fileszInterpreter.get_build_def_files"  s    ###r   c                   t        |t        j                        r;|j                  ry t        j
                  j                  |j                               }nt        j
                  j                  |      r|j                  d      st        | j                  j                               }t        | j                  j                               }	 t        |      j                         }||j0                  v ry ||j0                  v r|j3                  |      }t5        |      }ny || j6                  vr| j6                  j9                  |       y y # t        $ r t        |      }|j!                         }t#        |d      re|j$                  t         j&                  z  dk7  rE|j(                  t         j*                  k(  r(|j,                  j                         |j.                  z  }n Y w xY w)Nz/dev/st_file_attributesr   )r   r   r   is_builtr  r  normpathrelative_nameisfile
startswithry   r   r   get_build_dirresolveOSErrorstathasattrr'  FILE_ATTRIBUTE_REPARSE_POINTst_reparse_tagIO_REPARSE_TAG_APPEXECLINKparentr  parentsrelative_tor   r  r  )r   fsrcdirbuilddirf_ss         r   add_build_def_filezInterpreter.add_build_def_file%  sz   
 a'zz  !23AWW^^Aq||G'<$**99;<FD,,::<=H!W__& 2::%#^^F+BAD(((  $$Q' )%  
!WGGIA34,,t/P/PPTUU((D,K,KK **,rww6B 
s   E BG%$G%c                    | j                   S r$  	variablesr'  s    r   get_variableszInterpreter.get_variablesH  s    ~~r   c                   t         j                  g}| j                  j                         r|j	                  t         j
                         |D ]  }| j                  j                  j                  |   }| j                  j                  |   j                         D ]  }	 t        j                  |j                  |            }t        |      dk(  r-t!        j"                  dd| j$                  | j&                         d|t         j
                  u i}|dz   }t)        | |g      }|j+                  |       |j-                  |d      }	|	| j                  j.                  |   |<     y # t        $ r Y w xY w)	Nr@   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   r3   r   r   current_noderD   set_fallbacklookupstdlibs)
r   machine_choicesfor_machinepropsldir{   r  dfdeps
             r   check_stdlibszInterpreter.check_stdlibsK  sP   (--.=='')""=#6#67* 	9KJJ**55kBE]],,[9>>@ 9!//0@0@0CDB r7a<))*H(TXTcTcnrnn  A"K=3F3F$F 9}.tdV<#iiti<58

"";/29	9
   s   $E**	E65E6rQ  0.59.0)sincec           
        |d   }t        || j                        \  }}}|rt        |      S d}|j                  d      rT|j                  d      r/t	        j
                  d| d|j                  ddd	       d
|       |t        d      d	z   d  }	d}n|}	|	| j                  v r| j                  |	   S 	 t        j                  d|	       }
|
j                  |       }t        |t        t        f      sJ | j                  j                  j!                  |	       |j&                  j(                  rNt+        j,                  d|j&                  j.                   |j&                  j(                  | j                  |       |j&                  j0                  rNt3        j,                  d|j&                  j.                   |j&                  j0                  | j                  |       |rO|j&                  j4                  s9|j&                  j6                  #t%        d|j&                  j.                   d      |j&                  j6                  |rQt3        j,                  d|j&                  j.                   d|j&                  j6                  | j                  d|       nt+        j,                  d|j&                  j.                   d|j&                  j6                  | j                  d|j&                  j6                   d
|       n|j&                  j4                  ry|sG|r9t%        d|j&                  j.                   d|j&                  j.                         t        |	      }n0t	        j8                  d|j&                  j.                   d|d       || j                  |	<   |S # t"        $ r  |rt%        d| d      t        |	      }Y w xY w)Nr   F)z	unstable-	unstable_r^  zImporting unstable modules as "z" instead of "_-r@   "rD  unstableTzmesonbuild.modules.zModule "z" does not existz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)rH   r   r>   r,  r	   deprecationreplacer   r   	importlibimport_module
initializer   r:   r=   r
   r   ImportErrorr.   INFOaddedr3   r   r  
deprecatedr4   rb  
stabilizedrm  )r   r  r  r{   modnamedisabledr   r_  expect_unstablereal_modnamemodule
ext_modules               r   r  zInterpreter.func_import`  s    q' 6vt O(A*733 89!!+.  #B7)>ZaZiZijmortuZvYwwx!y*.0"3z?Q#6#78L"O"L4<<'<<--		4,,/B<.-QRF  **40Jj?<N*OPPPJJ%%l3??  !!GJOO,@,@+A"BJOODYDY[_[j[juyz??%%((7:??3G3G2H)I:??KeKegkgvgv  BF  G:??#;#;
@Z@Z@b"WZ__-A-A,BBv#wxx??%%1!,,joo2233GHOO..B!	# %%joo2233DEOO..{  }G  }L  }L  }W  }W  |X  XY  Z!	#
 __%%"*Xjoo6J6J5K  LH  IS  IX  IX  I]  I]  H^  ,_  `  `4\B
wz';';&<  =P  Q  \`  hm  n%/\"I  	?&':J'KLL0>J	?s   4N% %%OOrL  )varargsc                *    | j                  |d         S r   )source_strings_to_filesr   r  r  r{   s       r   r  zInterpreter.func_files  s     ++DG44r   rG  compile_argsT)r   defaultd_import_dirs0.62.0)r  r\  	link_argsz0.46.0extra_filesz1.2.0)r   ry  r\  0.54.0rC  )r\  since_valuesr   objects1.1.0c                b   |d   }| j                  |      }|d   }|d   }|d   }| j                  |d         }	| j                  |d         }
|d   }|d   }|d	   }|d
   }|| j                  }|d   }| j                  |d      }t        | j                  j
                        }|j                         D ]  \  }}	 t        |      }| j                         s|| j                  z  |j                  v r>|j                         sO|j                         s`|| j                  z  |gt        t        t        j                  j!                  |            j                        z   v st#        j$                  |      ||<    t)        j*                  |||||||	|
|||||      }|S # t&        $ r Y w xY w)Nr   	link_with
link_wholer  r
  r}  rx  r|  r@  r   d_module_versionsrz  )extract_incdirsrv  r   ry   r   
source_dirr   is_subprojectr   r6  is_absoluteis_dirroot_subdirr   r  r  abspathr  r  
ValueErrorr   r	  )r   r  r  r{   depsincslibs
libs_wholer  r
  r}  rx  r|  r@  r   r  rz  r9  r   r   prY  s                         r   r  z#Interpreter.func_declare_dependency  s   & n%##F+k"L)
#..vi/@A226-3HIn-;'	;'	#?**G"#67,,V_Ed&&112OO% 		EDAqEG ))+9L9L0LPQPYPY0Y==?qxxzft?O?O6OTUSVY]^bcecjcjcrcrstcu^v^~^~YS6#(#A#A!#DIaL		E --gt\.7z7T_.2I?PR_.57 
  s   =F""	F.-F.r?  )optargsc                    |\  }}|#t        j                  dd| j                  |       |sQ|Addlm}  |       }|j
                  j                  d   j                  |       |j                  }t        d|z         y )Nz(assert function without message argument0.53.0rD  r   )
AstPrinterr   zAssert failed: )
r3   r   r   r  r  r  	argumentsacceptresultr-   )r   r  r  r{   r   r^  r  printers           r   r{  zInterpreter.func_assert  s}     w?!!"LhX\XgXgrvw,$,		##A&--g6!..&'87'BCC r   c                    |)|t        |      k7  rt        d| dt        |       d      t        ||      D ]  \  }}|	t        ||      rt        d       y )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  sm    3t9$&8*<LSQUYKWX'YZZ!$	2 	GNFF!!&&1*+EFF	Gr   rb  check0.47.0capture)ry  r\  0.50.0c                &    | j                  ||      S r$  )run_command_implrw  s       r   r  zInterpreter.func_run_command  s     $$T622r   c                   |\  }}|d   }|d   }| j                   j                         }| j                   j                         }	|d   }
|
t        j                  t
        d       d}
d}g }t        |t        j                        r{| j                  j                  j                         D ]  \  }}||k(  s|} n t        d|j                         d	      t        |j                  ||j                                     t        |t              r.|j                         st        d
|j!                         d      t        |t"        j$                        rI|j'                         }|d   }t        |d      }|j                         st        d|d      |}|dd  }nt        |t(        j*                        r|j-                  ||	      }t.        j0                  j3                  || j4                        }t        |d|      }|j                         st        d|d      |}|D ]c  }t        |t6              r|j9                  |       &t        |t(        j*                        r"|j9                  |j-                  ||	             bt        |t              r |j9                  |j;                                t        |t"        j$                        rt=        j>                  dd| j@                  | jB                         t        |jD                  d   d      }|j                         st        d|d      |j9                  |j;                                3t        |j                  |jF                  |j                                      | jI                  |j;                                |D ]a  }t.        j0                  jK                  |      s/t.        j0                  j3                  |r|	n|| j4                  |      }| jI                  |       c tM        |||||	| j4                  | j                   jO                         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 executabler   silentr@   )r  
search_dirzProgram or command z7Compiler object as a variadic argument to `run_command`0.61.0rD  
introspect)in_builddirr  r  )(r   r   r-  r	   rm  implicit_check_false_warningr   r
   r  find_overridesr   r-   descriptionr   r   foundget_namer   r  get_exelistr   r   absolute_pathr  r  r  r   r   r   get_pathr3   r   r   rO  exelistr  r=  isabsrG   get_build_command)r   r  r{   r  cmdcargsr  r  r9  r:  r  overridden_msgexpanded_argsr  exeprognamer  progr  as                       r   r  zInterpreter.run_command_impl	  s   
 
U#Um!!002##113w=LL5DAE* &(c5++,!ZZ66<<> X	c#:#HX
 +Xcoo6G5J  KV  ,W  X  X&~'<'<XsGX'YZZc?+99;*Xclln5GGc+deeY//0oo'G!*C"3t4D::<*XcW<X+YZZC#ABKM#x}}-''9fdkk:J"3t
KD::<*-@Gc+deeC 	]A!S!$$Q'Ax}}-$$Q__VX%FGA/$$QZZ\2Ay112%%&_aikokzkz  FJ  FW  FW  X&qyy|DAzz|.#@\/]^^$$T]]_5*>+@+@IZ+[\\	]$ 	/ 	'A77==#GGLL[fdkkSTU##A&	'
 #}c68T[[**<<>,O&1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_optionU  s    "#~r   z0.38.0)ry  r   c                N    |d   |d   |d   d g d}| j                  |d   |      S )Nr   r   r   )r   r   r   optionscmake_optionsr   )do_subproject)r   r  r  r{   r   s        r   r  zInterpreter.func_subprojectX  sC     z*%&78i($
 !!$q'2..r   c                    t        t               t        j                  j	                  | j
                  |      ||      }|| j                  |<   |S )N)disabled_featurero  )rE   rJ   r  r  r  r   r   )r   	subp_namer  ro  subs        r   disabled_subprojectzInterpreter.disabled_subprojecti  sE    8:BGGLLI\I\^g<h0@IW&)#
r   c           	     &	   t        || j                        \  }}}|rSt        j                  dt        j                  |      ddt        j                  |      d       | j                  ||      S |d   j                         D ci c]  \  }}|j                  |      | }	}}|dk(  rt        d	      |d
   dk(  rt        d      d|v rt        d      t        j                  j                  |      rt        d      t        |      r!t        j                  d| j                         || j                  v r0| j                  |gz   }
dj!                  |
      }t#        d| d      || j$                  v r| j$                  |   }|r)|j'                         st        d|j(                   d      |d   rQ| j*                  j$                  |   }|d   }|dk(  st-        j.                  ||      d
   st        d| d| d| d      |S | j0                  j2                  }	 |j5                  ||      \  }}t        j<                  t        j                  j!                  | j*                  j0                  j?                         |      d !       d | _         dj!                  | j                  |gz         }d"t        j                  |      g}|d#k7  r|d$t        j                  |      gz  }t        j                  g |d%d&d'i | jB                  | jD                  | jF                  d(}	  ||   |||	|      S c c}}w # t6        j8                  $ ru}|slt        j                  |       t        j                  dt        j                  |      dt        j:                  d      d       | j                  ||      cY d }~S |d }~ww xY w# t"        $ r  tH        $ r}|st        jJ                  |      5  t        jL                  |t        jN                  d)      *       d d d        n# 1 sw Y   nxY wt        j                  d+t        j                  |      dt        j:                  d      d       | j                  ||      cY d }~S |d }~ww xY w),N
Subprojectr   skipped: featurero  )r  r   r   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.rD   => z"Recursive include of subprojects: zSubproject "z" required but not found.r   	undefinedSubproject  version is  but 
 required.zis buildable:r   z(disabling))ro  Texist_okz
Executing subprojectr   r   r   nestedF)r   cmakecargoz
Exception:)prefixz
Subproject)(rH   r   r	   r   r   r  r   evolver-   r  r  r  r   rm  rO  r  r  r/   r   r  r   r
   r   version_compare_manyr   wrap_resolverr.  r   WrapExceptionr   makedirsr-  r  _do_subproject_meson_do_subproject_cmake_do_subproject_cargo	Exceptionr  ro  yellow)r   r  r{   force_methodro  r   featurer   r   r   	fullstackincpathr   r  r  rr   r   estackr   methods_maps                         r   r  zInterpreter.do_subprojectp  s)   &<VT__&U#(GHH\499Y#7>PRVR[R[\cRdfpq++I+PPIOPaIbIhIhIjkA188y891<kk?&'KLLQ<3&'VWW9&'^__77==#&'VWW	"LLe"&"3"35-----;Ikk),G B7)1MNN((()))4J
 0 0 2*\*:K:K9LLe+fggi ZZ++I6	*$H,I,I"f,UVW,X.YK|TVSWW\]c\ddn/opp**	YYy,?NFF 	BGGLL!7!7!E!E!GP[_`"&..)<=%tyy'78W(DIIf-..A(!(T(%( ......D
	&;v&y&/6RRm l> !! 			)(<otxxX\~_lm//	Q/GGG	2  	 	[[+ H NN1T[[-FGH H H 6):OTXXVZ^]jk//	Q/GGG	sh   L8#L> *O	 >OA(O9O?OO	RR2+P&	R&P/	+ARR	RRc                P   t        j                  |      5  |rddlm}m}	  |	d      }
|j                   |              |j                  |
       |
j                          t        j                  j                  | j                  j                  j                         |d      }t        |dd      5 }|j                  |
j                         d d d        t        j                   d	|       t        j"                  |       | j                  j%                         }t'        || j(                  ||| j*                  |||d u|| j,                  

      }| j.                  |_        | j0                  |_        | j2                  |_        | j4                  |_        | j6                  |_        | j8                  |gz   |_        | j:                  }t        j<                         5  |j?                          t        j@                         }d d d        t        j                   dt        jB                  |      d       d d d        t        j                           |d   rDjD                  }|d   }|dk(  stG        jH                  ||      d   stK        d| d| d| d      | _        | j.                  jM                  j.                         tO        ||| j8                        | j.                  |<   |r| jP                  jM                  |       | jP                  jM                  |jP                         | j                  jS                  |j                         |jD                  | j                  j.                  |<   | j.                  |   S # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   lxY w)Nr   )AstIndentationGeneratorr  T)update_ast_line_nosmeson.buildwutf-8encodingzGenerated Meson AST:)r  r$  r	  r  r  z	finished.r   r  r   r  r  r  r  )warnings	callstack)*r	   r  r  r  r  r  post_processr  r  r  r
   r   r-  openwriter  r   cmd_ci_includer  r   r  r   r  r   r   r  r  r  r  r   nested_warningsrunget_warning_countr   r   r   r  r-   r  rE   r  merge)r   r  r   r   r{   r  r  r	  r  r  r  meson_filenamer8  	new_buildsubicurrent_activesubi_warningsr  r  s                      r   r  z Interpreter._do_subproject_meson  s    [[# !	FE$>

245

7#$$&!#djj.D.D.R.R.TV\^k!l.#@ ,AGGGNN+,/@##N3

)Iy$,,	64K^K^.CSW+6484M4MOD  $//D<<DL"ooDO$($9$9D!<<DL$($9$9YK$GD!!44N%%' 9
 $ 6 6 89 HH\499Y#7EC!	FF 	
)%%BI&F[ (E(Eb&(QRS(T*[<PRtSXY_X``j+kll"0 0 01&6tVmAEAVAV'X#   ''8##D$8$89

$,0,@,@

y)	**Y, ,*9 9=!	F !	Fs=   BN2NDN%N?2NN	NN	NN%c                   ddl m} t        j                  |      5  | j                  j
                  t        d         j                  }ddlm	} |j                  d      xs  |       }|j                  dg       |j                  z   }	 |t        |      t        |      | j                  j                  | j                        }
|
j!                  |	       |
j#                          |
j%                  |j&                        }| j)                  ||||||
j*                  D cg c]  }t-        |       c}t.        j0                  h      }|
|_        d d d        |S c c}w # 1 sw Y   S xY w)Nr   )CMakeInterpreterr  )CMakeSubprojectOptionsr  r  )r	  )r  r  r	   r  r   r  r   r   modules.cmaker  getr  ry   r
   r   r  
initialiseanalysepretend_to_be_mesontarget_optionsr  bs_filesr   r   r   cm_interpreter)r   r  r   r   r{   r  r  r  r  r  cm_intr  r8  r  s                 r   r  z Interpreter._do_subproject_cmake  s2    	-[[# 	+]]**9X+>?EEF>jj+G/E/GG"JJ;g>S>SSM%d6lDL$**BXBXZ^ZfZfgFm,NN ,,W-C-CDC..vC%+__5SV51QQ!	 / F %+F!)	+*  6	+* s   DEE/EEE'c                b   ddl m} t        j                  dd| j                  | j
                         t        j                  |      5  |j                  ||| j                        }| j                  |||||t        j                  j                  |d      g      cd d d        S # 1 sw Y   y xY w)Nr   )r  zCargo subproject1.3.0rD  z
Cargo.toml)r   r  r3   r   r   rO  r	   r  	interpretr   r  r  r  r  )r   r  r   r   r{   r  r  s          r   r  z Interpreter._do_subproject_cargo  s     	0'4??UYUfUfg[[# 	6//)VT5E5EFC,,6?FCfl346	6 	6 	6s   	AB%%B.c                6   t        j                  |      j                  | j                        }|j	                         s| j
                  j                  t        j                  fD ]g  }|j                  |      }||j                  r|j                  |j                               }|Dt        |t
        j                        sJ d       |c S  	 | j
                  j                  |   }|j                  r|j                  r|j                         | j
                  j                  v r| j
                  j                  |j                            }t        |      t        |      u r|}|S |j                  j                   dd  d d j#                         }|j                  j                   dd  d d j#                         }t%        j&                  dj)                  ||| j                  |      | j*                         |S # t,        $ r Y nw xY wt/        d|d      )	Nr  r     izOption {0!r} of type {1!r} in subproject {2!r} cannot yield to parent option of type {3!r}, ignoring parent value. Use -D{2}:{0}=value to set the value for this option manually.rD  zTried to access unknown option r  )r   from_stringr  r   
is_projectr   r  r   base_optionsr  yieldingas_rootr   r   typer%  r   lowerr	   rm  r   rO  rN  r-   )	r   optnamekeyoptsr   optpoptopt_type	popt_types	            r   get_option_internalzInterpreter.get_option_internal  s   ##G,33t3O~~..	0F0FG HHSM9

/A=%a)<)<=IzI=H	--'',C||3;;=DMMDYDY3Y}},,S[[];9T
*C J  #}}55ab9#2>DDFH $ 7 7 ;CR @ F F HI LL "% &,VGXtPY%Z*.*;*;	=
 J 		 #%DWKq#QRRs   BG= *BG= =	H	H	rO  c                   |d   }d|v rt        d      t        j                  |j                  dd      d         t        d|      | j	                  |      }t        |t        j                        r	||_        |S t        |t        j                        rJt        |j                  t              r$t        j                  |j                  d	| d
      S |j                  S |S )Nr   r   zuHaving a colon in option name is forbidden, projects are not allowed to directly access options of other subprojects.r  r@   )maxsplitr   zInvalid option name {})r-   r?   searchr  r)  r   r   r  r  r   r   r   r  r  )r   r  r  r{   r"  r%  s         r   r  zInterpreter.func_get_optionA  s     q''>& (G H H cA >r BCO&)=g['IJJ&&w/c8556CHJX001#))S)))#))r'"5EFF99
r   rC  c                
   |d   }|ht        j                  dd| j                  |       |j                         D ]2  \  }}t	        |t
        t        t        f      r"t        d|d|d       t        j                  |      S )Nr   zconfiguration_data dictionary0.49.0rD  4"configuration_data": initial value dictionary key "$"" must be "str | int | bool", not "ra  )r3   r   r   r   r   r   r   r   r.   r
   r  )r   r  r  r{   initial_valuesr   r   s          r   r  z#Interpreter.func_configuration_dataX  s     a%!!"A8T__gkl&,,. @1!!c3%56*NqeSwxyw||}~@ @@ &&~66r   c                   | j                   y ddl m} t        d      | j                  j                  j                         v rG| j                  j                  t        d            }|j                  || j                  |       | _         nF| j                  j                  t        d            }|j                  || j                  |       | _         | j                   t        d| d      || j                   j                  k7  r| j                   j                  j                  d      r=t        j                  dt        j                   | j                   j                               | j"                  j$                  s%t'        d	| d
| j                   j                         | j                  j)                  t        d      | j                   j                  d       | j"                  j$                  r| j                  j+                  |       | j"                  j,                  j/                         D ci c]  \  }}|j1                         s|| }}}| j                  j3                  |       y c c}}w )Nr   )backends	genvsliter  zUnknown backend "".vsz$Auto detected Visual Studio backend:zBackend changed from z to T)first_invocation)r  r5  r   r  cmd_line_optionsrK  r   rO  get_genvslite_backendr
   get_backend_from_namer-   r  r,  r	   r   r   r   r9  r   
set_optioninit_backend_optionsr  r   
is_backendset_options)r   r5  backend_namer   r   r  s         r   set_backendzInterpreter.set_backende  s   <<#&[!T%>%>%O%O%T%T%VV  ==33Ik4JKL#99,

TXYDL==33Ii4HIL#99,

TXYDL<<&):<.'KLL4<<,,,||  ++D1?4<<K\K\A]^##44'*?~TRVR^R^RcRcQd(effMM$$Yy%94<<;L;L_c$d ,,MM..|<$($4$4$<$<$B$B$DWDAq1a4WW!!'* Xs   4I1I1r`  r  r  c                0    t        | t              r| d   S | S r   r   r   xs    r   <lambda>zInterpreter.<lambda>  s    
1d(;!  r   )ry  	validator	convertorlicenselicense_files)ry  r   r\  )ry  c                >   |\  }}d|v rt        d|d      |d   r| j                  |d   |       t        j                  j	                  | j
                  | j                  d      }t        j                  j	                  | j
                  | j                  d      }t        j                  j                  |      rt        j                  j                  |      rAt        j                  j                  ||      rt        j                  d       n0t        d      t        j                  d	d
| j                  d       n|}t        j                  j                  |      rft        j                   | j                        }|j#                  |       | j$                  j'                  |j(                         | j+                  |       | j                  rG|d   j-                         D 	
ci c]"  \  }	}
|	j/                  | j                        |
$ c}
}	| _        n
|d   | _        | j2                  j4                  s1| j                  dk7  r| j                  | j$                  j6                  vr| j0                  j9                         }|j;                  | j<                         | j$                  j?                  | j                         | j$                  j6                  jA                  | j                         ni }| j$                  jC                  || j                  | j2                         | jE                         s|| jF                  _$        || _%        |d   }tM        |tN        jP                        rt        j                  dd| j                  |       | j+                  |       |jS                  | j2                  jT                  | j2                  jV                        }	 tY        |      j[                  d      j]                  d      }tc        |      dk(  r|d   dk(  r|dd }tc        |      dk7  rta        d      |d   | _2        n|| _2        | jF                  jd                  | jd                  | jF                  _2        |d   dg}|d   rt        d      |d   }g }| jg                  |d         D ]O  }|jS                  | j2                  jT                  | j2                  jV                        }|ji                  ||f       Q tG        jj                  | jd                  ||| j                        | jF                  jl                  |<   | j                  | jF                  jn                  v rtq        d      |d    }tM        |tr              sta        d!      t        j                  ju                  |      rta        d"      |jw                  d#      rta        d$      d%|v rta        d&      | jE                         s|| _<        | jx                  | jF                  _<        | j$                  j{                  t}        d'            }| jE                         r|t~        j                  k7  rt        j                  j	                  | j                  |      }t        j                  | j2                  j                         || j                  |      }| jE                         r&| j2                  j                  j                  |       n|| j2                  _D        || jF                  jn                  | j                  <   t        j                  d(t        j                  |             t        j                  d)t        j                  | jd                               | jE                         sr| j$                  j{                  t}        d*            }| j$                  j{                  t}        d+            }|xs |jw                  d,      }tO        j                  |       | j                  |d-t        j                         | j                  |d.t        j                         | j                          | jE                         s| j                          y y c c}
}	w # t^        $ r ta        d      w xY w)/Nr   zProject name z must not contain ':'r  zmeson.optionszmeson_options.txtz`Not warning about meson.options with version minimum < 1.1 because meson_options.txt also existszJmeson.options and meson_options.txt both exist, but are not the same file.zmeson.options filez1.1zUse meson_options.txt insteadr   r  r   r   zversion from filer   rD  r  r  r   zVersion file not found.r   r@   r   z3Version file must contain exactly one line of text.rJ  unknownrK  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:r  vsenvr8  TF)Or.   r  r  r  r  source_rootr   existssamefiler	   rF  r   r3   r   r   r   OptionInterpreterprocessr   update_project_optionsr  r=  r   r  r  r   r9  initialized_subprojectsr  r  r  init_builtinsr  set_default_optionsr  r
   r   r   r   r   r   r  r  	build_dirry   	read_textr  FileNotFoundErrorr-   r   r   rv  r   DepManifestdep_manifestprojectsr/   r   r  r,  r   rO  r   r   	nopromoter   Resolverr   r  merge_wrapsr   r   setup_vsenvr9  r   rG  rI  rB  rZ  )r   r  r  r{   	proj_name
proj_langsoption_fileold_option_fileoir   r   r   r   ifnamever_dataproj_licenseproj_license_filesr   	spdirnamerN  r   r  r  rO  force_vsenvs                            r   r  zInterpreter.func_project  s   " !%	:)"]9-?T#UVV /"%%f_&=tD
 ggll4#3#3T[[/R'',,t'7'7FYZ77>>+&ww~~o.77##KAJJ   B  C()uvv%%&:E4??Tst)K77>>+&11$//BBJJ{#MM00<##K0??8>?P8Q8W8W8Y,[041 -.HHH,PRS,S ,[D( ,22C+DD( ,,B1F4??bfbobo  cH  cH  LH"::??AO""4#?#?@MM''8MM1155dooF O))/4??DL\L\]!!#&/DJJ#"+#gx}}-!!"5x[_`##G,**4+;+;+F+F+/+;+;+E+EGFF<1171CII$O 8}!hqkR&7#Aa=8}!*+`aa#+A;D #*D ::%%-)-)=)=DJJ&)$%;Lo&&'mnn!),L--f_.EF 	3A__T%5%5%@%@%)%5%5%?%?AF%%vqk2	3 .3->->t?S?SUa?QSWSbSb.d

	*??djj1119:: +,	)S)&'HII77==#&'UVV$&'UVV9&'XYY!!#"+D$($7$7

! MM,,Y{-CD	!!#yH4F4F'FWW\\$++y9Fd..==?ZcdA!!#  ..::1=12  ./8

DOO,$))I"67#TYYt/C/C%DE!!#
 mm..y/CDGMM,,Yw-?@E;7#5#5d#;K  -:t]-?-?@:um.A.AB!!#  $U,[D % F*+DEEFs   ('b*b br9  r   c           	     |   |d   }t        || j                        \  }}}|d   }|r`t        |t        j                        D ]A  }	t        j                  dt        j                  |	      dt        j                  |      d       C y|"| j                  ||| j                  |            S t        j                  | j                        }
t        j                  |
d      rt        j                  d	|
       | j                  |dt        j                        }|| j                  ||t        j                         z  }|S )Nr   r   r#  Compiler for languager  ro  Fr~  zXadd_languages is missing native:, assuming languages are wanted for both host and build.rD  )rH   r   sortedr   
sort_clinkr	   r   r   r9  machine_from_native_kwargr3   get_target_versioncheck_versionrm  r   rI  rG  )r   r  r  r{   langsro  r   r  r   langtvsuccesss               r   ru  zInterpreter.func_add_languages#  s    Q&<VT__&U#(G!u)*>*>? w0$))D/CUW[W`W`ahWikuvw%%eXt7U7UV\7]^^ ..t?B''H5w&*, ((}7J7JKGt))%=;M;MNNGNr   c                    	 |D cg c]  }t        || j                         c}S c c}w # t        $ r}t        | dt        |             d }~ww xY w)Nz(): )r9   r   r.   r   )r   r  	func_namer   r  s        r   _stringify_user_argumentsz%Interpreter._stringify_user_arguments;  sQ    	?HLM1*1doo>MMM 	?"i[SVH#=>>	?s    + &+ + 	AAAc                    t        |      dkD  r#t        j                  dd| j                  |       | j	                  |d      }| j                  |       y )Nr@   z#message with more than one argumentr~  rD  r^  )r   r3   r   r   r|  message_implr   r  r  r{   args_strs        r   r  zInterpreter.func_messageA  sL     t9q=!!"GSWSbSbmqr11$	B(#r   c                V    t        j                  t        j                  d      g|  y )NzMessage:)r	   r   r   )r   r  s     r   r~  zInterpreter.message_implI  s    :&..r   r  r  r   r   r   c                    |d   $t        |d   t              st        d      |d   }n(t        |d   t              st        d      |d   |d   i}| j	                  |d   ||       y )Nr@   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_summaryL  ss     7?d1gt,*+WXX!WFd1gs+*+STT1gtAw'F&+VV<r   c                   | j                   | j                  vr7t        | j                  | j                        | j                  | j                   <   | j                  | j                      j                  |||d   |d   | j                          y )Nr   r   )r   r  r   r   r   r   )r   r   r   r{   s       r   r  zInterpreter.summary_impla  sl    ??$,,.,3D4K4KTMaMa,bDLL)T__%11VVI.z0BDOO	Ur   c           	     :   t        j                         }t        | j                  j	                               D ]  \  }}|j                         g}|j                  r|d|j                  dgz  }nH|j                  r|t        |j                        gz  }n"|j                  dkD  r||j                   dgz  }|j                  r%dj                  |j                        }|d| dgz  }|||<    |r| j                  d|d	d
d       | j                  rt        j                         }| j                  j                  r| j                  j                  |d<   | j                  j                  r| j                  j                  |d<   t        | j                  j                   j	                               }|j#                  |D 	ci c]  \  }}	t        |      |	 c}	}       |r| j                  d|dd d       t%        j&                  d       | j(                  j+                  dd       }
t        | j(                  j	                               D ]3  \  }}| j                  |   j                         s$|j-                          5 |
r|
j-                          y y c c}	}w )NzFeature z	 disabledr   z	 warningsr  z(from )SubprojectsTr   )r   r   zCross fileszNative fileszUser defined optionsFr   )r   OrderedDictrq  r   r   r  r  ro  r   r  r  r  r  r  
cross_filenative_filer:  r  r	   r   r  popr   )r   all_subprojectsr  subpr   r  r   sorted_optionsr   r   main_summaryr  r  s                r   _print_summaryzInterpreter._print_summaryg  sJ   %113 !1!1!7!7!9: 	*JD$ZZ\NE$$HT%:%:$=YGHH#dnn-.."T]]O9566~~DNN3F5'+,,$)OD!	* m_*.+.!"
 $$ ,,.F((33(,(A(A(L(L}%((44)-)B)B)N)N~&#D$=$=$N$N$T$T$VWNMM@A3q619@A!!"8&eaeBfg||''D1"(););)="> 	Iw	*002	   As   J
rm  z0.44.0c                    t        |      dkD  r#t        j                  dd| j                  |       | j	                  |d      }t        j                  |d|i y )Nr@   z#warning with more than one argumentr~  rD  rm  r  )r   r3   r   r   r|  r	   rm  r  s        r   r  zInterpreter.func_warning  sO     t9q=!!"GSWSbSbmqr11$	Bh..r   c                    t        |      dkD  r#t        j                  dd| j                  |       | j	                  |d      }t        ddj                  |      z         )Nr@   z!error with more than one argumentr   rD  rJ  zProblem encountered: r   )r   r3   r   r   r|  r-   r  r  s        r   r  zInterpreter.func_error  sX     t9q=!!"ExQUQ`Q`kop11$@"#:SXXh=O#OPPr   rF  0.63.0c                T    | j                  |d      }t        j                  dg|  y )NrF  zDebug:)r|  r	   rF  r  s        r   r  zInterpreter.func_debug  s'     11$@

8'h'r   c                    t        d      )Nzunit test traceback :))RuntimeErrorrw  s       r   r  zInterpreter.func_exception  s     344r   rq  howliteralre)ry  rH  c                T     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>.ExpectErrorObjectc                @    t         |   |       || _        || _        y r$  )r   r   msgr  )r   r  r  r   r%  s       r   r   zAInterpreter.func_expect_error.<locals>.ExpectErrorObject.__init__  s     ,r   c                :   |t        d      t        |t        j                        rtt	        |      }| j
                  dk(  r| j                  |k7  s/| j
                  dk(  r;t        j                  | j                  |      st        d| j                  d|      yy )Nz+Expecting an error but code block succeededr  r  zExpecting error z	 but got T)	r-   r   r   r   r   r  r  r  match)r   exc_typeexc_valexc_tbr  s        r   __exit__zAInterpreter.func_expect_error.<locals>.ExpectErrorObject.__exit__  s    ?./\]]gx'>'>?g,CI-$((c/D($((C1H25Edhh\QZ[^Za3bcc @r   )r  r   r  r   r   r   r   r   )r   r   r   r   r  __classcell__r%  s   @r   ExpectErrorObjectr    s    
 r   r  r   r  )r8   r   )r   r  r  r{   r  s        r   r  zInterpreter.func_expect_error  s,    	  4 	  !a&-IIr   c                    | j                  |||      }| j                  j                         s| j                  j                          | j	                          |S r$  )add_languages_forr   rH  $copy_build_options_from_regular_onesr!  )r   r  r   rT  ry  s        r   r9  zInterpreter.add_languages  sG    ((xE}}++-MM>>@!r   c                   | j                   j                  j                  j                  dd      }t	        |t
              st        d      |t        j                  k7  r|sy| j                   j                         s|sy|S )Nskip_sanity_checkFz+Option skip_sanity_check must be a boolean.)
r   rJ  r2  r  r   r   r-   r   rG  rH  )r   rT  shoulds      r   should_skip_sanity_checkz$Interpreter.should_skip_sanity_check  sl    !!,,11556I5Q&$'&'TUU-,,,V..0r   c                   |D cg c]  }|j                          }}t        | j                  |   j                               }|j	                  |       d|v rBd|vr>t        j                  dd| j                  | j                         |j                  d       d|v r-t        j                  dd| j                  | j                         d	}t        |t        j                  
      D ]  }|| j                  |   v r|j                         }| j                  j                  |   j                  |      }	|	s_	 | j                  |      }
|
rt!        j"                  dd	       t        j$                  | j&                  |||
      }	|	t)        d| d      	 | j                  ri }|	j1                         D ]O  }t3        j2                  | j                  j4                  |         }|j7                  | j                        }|||<   Q | j                  j9                  |||| j&                         |t:        j<                  k(  s| j&                  j?                         rt         j"                  }nt         j@                  } ||	jC                         d|dt!        j.                  djE                  |	jG                                     |	jI                                |	jJ                  ~ ||	jC                         d|dt!        j.                  djE                  |	jJ                  jG                                     |	jJ                  jL                  |	jJ                  jN                         | jP                  jS                  |	       |	| j                  |   |<    |S c c}w # t*        j,                  $ r5 |s1t!        j"                  dt!        j.                  |      d|d       d}Y  w xY w)NvalaczAdding Vala language without Cr[  rD  nasmzAdding NASM languager   Tro  z8Cross compiler sanity tests disabled via the cross file.r  zTried to use unknown language "r7  rp  zfor thezmachine not found.Fr  zcompiler for thezmachine:r   zlinker for the)*r!  r  r   rK  r  r3   r   r   rO  r   rq  rr  get_lower_case_namer   r  r  r	   r   detect_compiler_forr   r.   r   r   r   get_optionsr  r  r  add_compiler_optionsr   rG  rH  rF  get_display_languager  r  get_version_stringlinkeridr   r
   ensure_static_linker)r   r  r   rT  r  rv  ry  rw  machine_namecompr  r  r   r   
logger_funs                  r   r  zInterpreter.add_languages_for  sG   #'(a	((DNN;/4467T U?s%/!!"BHdoohlhyhyzKKU?!!"8(DOO^b^o^op4Y%9%9: *	5Dt~~k22&::<L==**;7;;DAD(,(E(Ek(R%(![bfg$889I9I4Q\^opD|.1PQUPVVX/YZZ $ ))+ #A		$--"7"7":;ADOO<A!"GAJ# 227D+tO_O_`m000D4D4D4S4S4U!XX
!ZZ
t0024FV`yy$*:*:*<!=>@W@W@Y[{{&44468H,Xb99SXXdkk.E.E.G%HI4;;>>[_[f[f[n[npJJ++D104DNN;'-U*	5X y ):  .. #!8!%4)\!57 #( s   N:ANAO O c                    |D ]m  }t        |t        j                        rt        |t              st	        d      t        j                  | j                  ||      }t        |t              rk|c S  y )Nz Executable name must be a string)	r   r   r   r   r-   r   from_bin_listr   r   )r   rT  	prognamesr  r  s        r   program_from_file_forz!Interpreter.program_from_file_for  sj     		A!X]]+a%*+MNN"001A1A;PQRD d$>?		 r   c                   t         j                  j                  | j                  j	                         | j
                        }|D ]5  }t        |t        j                        r|j                  rCt         j                  j                  | j                  j                         |j
                        }nBt         j                  j                  | j                  j	                         |j
                        }|j                  }g }n#t        |t              r|}|}nt        d|      t        |||d      }|j                         s|j!                  ddj                  |j#                                d       |c S  y )Nz1find_program only accepts strings and files, not T)r  extra_search_dirsr  (r   r  )r  r  r  r   r   r   r   r   r   r(  r-  fnamer   r.   r   r  r   get_command)	r   r  search_dirs
extra_infor  exenamer  r  extprogs	            r   program_from_systemzInterpreter.program_from_system!  s3   
 WW\\$"2"2"A"A"CT[[Q
 	G'8==1##!#d.>.>.L.L.N.5nn">J "$d.>.>.M.M.O.5nn">J!--$&!GS)'
$/!&)Z[bZe'fgg%g*8I-13G }}!!Achhw/B/B/D&E%Fa"HI)	* r   c                    |D ]l  }t        |t              s|| j                  j                  v s-| j                  j                  |   }|j	                  t        j                  d             |c S  y )Nz(overridden))r   r   r
   r  r   r	   blue)r   command_namesr  r  r  s        r   program_from_overridesz"Interpreter.program_from_overrides>  sg     " 	DdC(tzz000jj//5!!$))N";<
	 r   c                ~    |D ]8  }t        |t              s| j                  j                  j	                  |       : y r$  )r   r   r
   searched_programsr  )r   r  r  s      r   store_name_lookupszInterpreter.store_name_lookupsJ  s3    ! 	7D$$

,,006	7r   c                    || j                   j                  v rt        d| d      || j                   j                  v rt        d| d      || j                   j                  |<   y )Nz)Tried to override finding of executable "z" which has already been found.zTried to override executable "z$" which has already been overridden.)r
   r  r-   r  )r   r  r  s      r   add_find_program_overridez%Interpreter.add_find_program_overrideO  sh    4::///&)RSWRXXw'xyy4::,,,&)GvMq'rss*-

!!$'r   c                    t        dj                  |D cg c]N  }t        |t              r|n9|j	                  | j
                  j                  | j
                  j                        P c}            S c c}w )Nr   )r   r  r   r   r  r   r  rY  )r   r  r  s      r   notfound_programzInterpreter.notfound_programV  sg    )#(( Q$Q!//$:J:J:U:UW[WgWgWqWq*rr +  	s   AA3c	           
        t        j                  |      }g }	| j                  ||||||||	      }
|
| j                  |
|||	      s| j	                  |      }
t        |
t              r|
j                         s}|sMt        j                  dt        j                  |
j                               dt        j                  d      g|	  |r*d}t        |j                  |
j                                     |
S | j                  |       |sIt        j                  dt        j                  |
j                         dt        j"                  d      g|	  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  rT  r   r   r  r  r  version_funcr  progobjr   s               r   find_program_implzInterpreter.find_program_impl]  s;    %/1
%%dK(T_agiu  xB  C?$"<"<Wfl\f"g++D1Gg/DIIg.>.>.@$A8TXXVZ^i^hi>*188G4D4D4F+GHHN 	%HHY		',, 74::eCTbWabgu//037G0r   c	                   | j                  ||      }	|	r|	S |d   dk(  r&t        d| j                  j                         d      S d }
| j                  j                  t        d            }|t        j                  k7  r;| j                  j                  r%| j                  j                  j                  |      }
|
r(|t        j                  k(  r| j                  |
||||      S | j                  ||      }	|	| j                  |||      }	|	D|d   j                  d      r0t        dt         j"                  d      }|j%                         r|nd }	|	r| j'                  |	|||      sd }	|	|
r|r| j)                  |      }	t+        j,                  dt+        j.                  |	j1                               dt+        j2                  d	      g|  |j5                          | j                  |
||||      }	|	S )
Nr   r   Tr  rN  python3r  r  r   )r  r   r   r  r   rO  r   r   
nofallbackr  find_program_providerforcefallbackfind_program_fallbackr  r  endswithr   python_commandr  r  r  r	   r   r   r  r   clear)r   r  rT  r   r   r  r  r  r  r  r   rN  r  s                r   r  zInterpreter.program_lookup|  s    --dJ?N7g"7D,<,<,N,N,PY]^^MM,,Y{-CD	+++0@0@0N0N''55KKDQH	X%;%;;--hoxYcdd,,[$??..t[*MG?tAw//	:"9h.E.EdSD"jjldG455gv|U_`G?xH++D1GHHY		'*:*:*< =xRVeZde004RZ\fgGr   c                F   |r|r	 ||      }n|t        |t        j                        rQ|j                  r$| j                  |j                     j
                  }n| }t        |t              sJ |j                  }n|j                  |       }t        j                  ||      \  }}}	|sQdt        j                  |      dt        j                  dj                  |D 
cg c]  }
d|
 d
 c}
            g|d d y|j                  dt        j                  |             yc c}
w )Nr  z	but need:, 'r   FT)r   r
   r  r   r   held_objectr   r   get_versionr   r  r	   r   r   r  insert)r   r  r  r  r  r   interpis_found	not_foundr_  r  s              r   r  z!Interpreter.check_program_version  s    &w/GU%5%56%%!--g.@.@AMMF!F!&+666 00!--d3%-%B%B7F%S"Hi")4+;+;G+Dk"&))DII6SA1#Qx6S,T"U"W
2Aa!1!1'!:; 7Ts   Dr   c           
         t        j                  dt        j                  |      dt        j                  dj                  |                   ||xs i g g d d}| j	                  ||       | j                  ||      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   r  z!Interpreter.find_program_fallback  sw     	)499X+>@X388D>*	, !.4"+
	 	8Y/**4<<r   rM  r@   )rt  min_varargsr0  dirs0.52.0r  c           	     f   t        || j                        \  }}}|ret        j                  dt        j                  dj                  |d               dt        j                  |      d       | j                  |d         S t        |      }|d   }| j                  |d   |d   ||d|d	   |
      S )Nr  r   r   r  ro  r   r   Fr   )r   r   r  r  r  )	rH   r   r	   r   r   r  r  rI   r  )	r   r  r  r{   ro  r   r  r  r   s	            r   r  zInterpreter.func_find_program  s     '=VT__&U#(GHHY		#((47*; <>PRVR[R[\cRdfpq((a11)&1 !23%%d1gvh/?Q`ks-26);L2= & ? 	?r   rH  r   r   r   r   r   )r   r   r   rI  0.40.0r   )allow_unknownc                t   |d   D cg c]  }|s|	 }}t        |      dkD  r%t        dd      j                  | j                         |j	                  d      }|t        |t              st        d      |j	                  d      }|j	                  d      }t        | |||      }	|	j                  |       |j	                  d	d
      }
t        |
t              st        d      	 |	j                  |      }t        |t              sJ |j                         s|
r| j                  |
g       d|v rg|d   }t        |t              st        d      |j!                         }||k7  r2t#        j$                  d|d    d| d|        |j'                  |      }|j(                  @|j(                  \  }}t        j*                  d|j,                  d|| j                  ||       |j.                  D ]  }|j                  | j                  |         |S c c}w # t        $ r |
r| j                  |
g        w xY w)Nr   r@   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   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   r3   user   r  r   r   r.   rD   rP  r   rQ  r  r~  r    r  get_include_typer	   rF  generate_system_dependencyfeature_sincer   r  featurechecks)r   r  r  r{   nnamesr   r   r   rX  r   dr  r  r   	extra_msgr8  s                    r   r  zInterpreter.func_dependency  s     !G)qq))u:>;XFJJ4??[$45%j.N"#NOO::j) **%67&tUNOT
!"JJ':B?+S1"#LMM			&!A
 !Z(((wwy.012V#N+Ffc*&'RSS'')F

5d1gYd6(Jdekdlmn008??&!"GY!!D
."A7DOO]fhlm 	)AEE$//4(	)I *  	 !!#4"56	s   HH&H H7c                    t               S r$  )r1   rw  s       r   r  zInterpreter.func_disabler  s     zr   rK  r  c                F    | j                  |||t        j                        S r$  )rB  r
   r  rw  s       r   r  zInterpreter.func_executable   s!       tVU5E5EFFr   rh  c                F    | j                  |||t        j                        S r$  )rB  r
   r  rw  s       r   r  zInterpreter.func_static_lib(  s!       tVU5H5HIIr   rf  c                X    | j                  |||t        j                        }d|_        |S NT)rB  r
   r  shared_library_only)r   r  r  r{   holders        r   r  zInterpreter.func_shared_lib0  s-     ""4vu7J7JK%)"r   rA  c                (    | j                  |||      S r$  )build_both_librariesrw  s       r   r}  zInterpreter.func_both_lib:  s     ((tV<<r   rg  z0.37.0c                F    | j                  |||t        j                        S r$  )rB  r
   r  rw  s       r   r  zInterpreter.func_shared_moduleB  s!       tVU5G5GHHr   r]  c                (    | j                  |||      S r$  )build_libraryrw  s       r   r  zInterpreter.func_libraryK  s     !!$f55r   r[  c                F    | j                  |||t        j                        S r$  )rB  r
   r  rw  s       r   r  zInterpreter.func_jarS  s       tVUYY??r   rB  r  override_optionsc                   |d   }|dk(  r"| j                  |||t        j                        S |dk(  r"| j                  |||t        j                        S |dk(  r"| j                  |||t        j                        S |dk(  r"| j                  |||t        j
                        S |dk(  r| j                  |||      S |dk(  r| j                  |||      S | j                  |||t        j                        S )Nr   rK  rf  rg  rh  rA  r]  )	rB  r
   r  r  r  r  r  r  r  )r   r  r  r{   r   s        r   r~  zInterpreter.func_build_target[  s     ]+,&$$T49I9IJJ,,$$T49L9LMMO+$$T49K9KLL,,$$T49L9LMM,,,,T4@@I%%%dD&99  tVUYY??r   rl  r   commandreplace_stringz	@VCS_TAG@c                   |d   #t        j                  dd| j                  |       |d   xs | j                  }|d   }d}|d   }t        j
                  j                  t        j
                  j                  | j                  j                         | j                              }|rt        |d   t        t        j                  f      rlt        |d   t        j                        r#t        j                  d	d
| j                  |       | j                  |d   d      }	|	j!                         r|	|d<   nt        j                  dd| j                  |       n^t        j"                  |      }
|
rDt%        j&                  dj)                  |
d   |
d                |
d   j+                         }|
d   }ndg}| j-                  t/        |d         dkD  |d   d       | j                  j1                         dddd||||gz   |z   }t3        j4                  |d   d   | j                  | j                  | j                  || j7                  |d         |d   dd	      }| j9                  |j:                  |       |S )Nr   zOptional fallback in vcs_tag0.41.0rD  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  wc_dirget_rev	rev_regexr   inputr@   outputrl  z
--internal	vcstaggerz@INPUT0@z	@OUTPUT0@T)build_by_defaultbuild_always_stale)r3   r   r   r   r  r  r)  r  r   r   r   r   r   r   r   r  r  
detect_vcsr	   r   r   r  _validate_custom_target_outputsr   r  r
   r  rv  r  r  )r   r  r  r{   r   r  regex_selectorvcs_cmdr  maincmdvcsr  tgs                r   r  zInterpreter.func_vcs_tags  se     *%!!"@(DOOfjk*%=)=)= 01#WW%%bggll43C3C3R3R3TVZVaVa&bc
'!*sHMM&:;gaj(--8))*SU]_c_n_ny}~00e0L==?!(GAJ%%&oqy{  |K  |K  VZ  [%%j1C4;;CKXWXi...0!$[!1% 	,,S-AA-EvhGWYbc002  '' 8QKKOO((98!#

 	$	r   ri  c                    t               r$  )r0   rw  s       r   r  zInterpreter.func_subdir_done  s      !!r   c                D    |D ]  }| sd|v sd|v st        | d       y)zChecks for additional invalid values in a custom_target output.

        This cannot be done with typed_kwargs because it requires the number of
        inputs.
        @PLAINNAME@
@BASENAME@zt: output cannot contain "@PLAINNAME@" or "@BASENAME@" when there is more than one input (we can't know which to use)N)r.   )has_multi_inoutputsr  outs       r   r#  z+Interpreter._validate_custom_target_outputs  sE      	jC#!59L&$ 0i (i j j	jr   rE  feedconsolez0.48.0c                
   |d   r1d|d   v sd|d   v r#t        j                  dd| j                  |       | j                  |d         }|d   }|d	   }|d
   |d	   t	        d      ||d   rd}n|d
   ||d
   }|d   }|d}|d}|d   }|%t        j                  dd| j                  |       d}| j                  |d   d      }|d   }	|	r+t        |	d   t              r| j                  |	d   g      |	d<   t        |      dkD  r|d   rt        d      t        |d         dkD  r|d   rt        d      |d   r|d   rt        d      |	D ]L  }
|d   rt        |
t              rd|
v rt        d      |d   s-t        |
t              s>d |
v sCt        d!       |d   r|d"   st        d#      t        |d"         dkD  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 ]  }| j                  |        | j                  t        |      dkD  |d   d*       t        j                  || j                  | j                  | j                   |	||d   f|||d   |d   |d+   |d   |d,   |d-   |d   |d   |d"   ||d&   | j"                  d.}| j%                  |j&                  |       |S )/Ndepfiler,  r+  z&substitutions in custom_target depfiler  rD  install_moder   r!  build_alwayszLCustomTarget: "build_always" and "build_always_stale" are mutually exclusiveinstallTFr   z%custom_target() with no name argumentr  r   r  )strictr  r@   r0  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 outputr1  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@"install_dirzQcustom_target: "install_dir" keyword argument must be set when "install" is true.z&multiple install_dir for custom_targetr  install_tagzcustom_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)rE  depend_filesdependsr  )r!  r   r  r1  r;  r3  extra_dependsr  r0  r6  r9  r4  r:  r  )r3   r   r   _warn_kwarg_install_mode_stickyr-   rv  r   r   r  r   r.   validate_forbidden_targetsr#  r
   r  r   r   r  r  r  )r   r  r  r{   r4  r   r!  r  inputsr  r  tr(  s                r   r  zInterpreter.func_custom_target  s   . ),&2C"C}X^_hXiGi!!"JHVZVeVeptu;;F><RS ""45#$89.!-&9M2N2Z&'uvv#y(9#N#/'#).#9 !'(:!;
 #$%!&Aw<
 !!"I8UYUdUdostD--fWoe-L#z'!*c2//=GAJv;?vf~"#pqqvh 1$	):"#tuu)	!2"#tuu 	oAi Z3%7J!O&'qrrf~*Q"4a&'mnn		o
 )VM%:"#vwwvm$%)!!"JHVZVeVeptuvm$%aCx8H4I-JJ" $114VM5J1K0L M**-fX.>*?)@	$K L L
 ! 	/A++A.	/,,S[1_fX>NP_`KKOO8"  2-9%9%/9% +u9%}-%}-LL+", 	$	r   rc  c           
        |d   j                         }t        |      D ];  }t        |t              s|j	                         r%t        d|j                         t        |d   t              r| j                  |d   g      |d<   |d   }t        j                  |||d   | j                  | j                  | j                  |d         }| j                  ||       |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_target;  s     )$))+" 	_A!_-aggi*-RSTSYSYR\+]^^	_ hqk3'00(1+?HQKAw__T8VI->T__^b^n^n#E],b!	r   r>  c                   |\  }}t        d |D              r!t        j                  dd| j                         t	        j
                  ||| j                  | j                  | j                        }| j                  ||       |S )Nc              3  P   K   | ]  }t        |t        j                           y wr$  )r   r
   r  .0r  s     r   	<genexpr>z0Interpreter.func_alias_target.<locals>.<genexpr>W  s     <!z!U__-<   $&z(alias_target that depends on run_targetsr  )	anyr3   r   r   r
   r  r   r   r  )r   r  r  r{   r  r  r(  s          r   rz  zInterpreter.func_alias_targetQ  sn    
 
d<t<<!!"LhX\XgXghtT4;;IYIYZb!	r   rN  r  )allow_empty)r   r   r  z0.43.0c                (   |d   D ]+  }d|vrd|vrt        d      t        |      s"t        d       t        |d         dkD  r|d   D ]  }d|v st        d       t        j                  |d	   fi |}| j
                  j                  |       |S )
Nr  r,  r+  zAEvery element of "output" must contain @BASENAME@ or @PLAINNAME@.z0"output" must not contain a directory separator.r@   r8  z:Tried to use @OUTPUT@ in a rule with more than one output.r   )r.   r   r   r
   r  r  r   )r   r  r  r{   ruleogens          r   r  zInterpreter.func_generator]  s     8$ 	[D4'M,E&'jkkD!&'YZZ		[
 vh 1$H% i?*+ghhi ood1g00s#
r   r@  c                ,    | j                  |||d       y NFadd_testrw  s       r   r|  zInterpreter.func_benchmarkw  s    
 	dD&%0r   rj  is_parallelc                ,    | j                  |||d       y r
  rR  rw  s       r   r  zInterpreter.func_test~  s    
 	dD&$/r   c                    |j                  d      }|
t               S t        j                  |      }|rt	        d|       t        j
                  |      S )Nr  z"env": )r  r   r^   rH  r.   rI  )r   r{   envlistr  s       r   unpack_env_kwargzInterpreter.unpack_env_kwarg  sS    **U#?'))w'"WSE?33((r   c                   |d   }d|v r-t        j                  d| d|       |j                  dd      }|d   }t        |t              r|j                         s7t        d      t        |t        j                        r| j                  |g      }| j                  |      }|d	   dk  r#t        j                  d
d| j                  |       | j                         r| j                  n| j                  j                   }g }|d   D ]=  }	|	rd|	z   }	|j#                  |j                  dd      j                  dd      |	z          ? t%        |||||d   |j'                  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 "_"rD  r_  r@   z3Tried to use not-found external program as test exetimeoutztest() timeout <= 0r   suiter   r<  rT  Fr  should_failworkdirprotocolpriorityverbose)r	   rd  re  r   r   r  r.   r   r   r  rX  r3   r   r   r  r
   r   r   rF   r  )
r   r  r  r{   r  r  r  prjr[  r<  s
             r   	make_testzInterpreter.make_test  s    Aw$;@Ffg&*,<<S)D1gc?+99;&'\]]X]]+((#/C##F+)!!!"74??]ab!%!3!3!5doo4::;R;R 	FA!GLLS#.66sC@1DE	F
 D9%JJ}e46N=)9%9%:&:&9%' 	'r   c                   | j                  |||      }|rZ| j                  j                  j                  |       t	        j
                  dt	        j                  |j                  d             y | j                  j                  j                  |       t	        j
                  dt	        j                  |j                  d             y )NzAdding testTzAdding benchmark)	rb  r
   r  r   r	   rF  r   r  
benchmarks)r   r  r  r{   is_base_testrA  s         r   rS  zInterpreter.add_test  s     NN4v.JJ##A&JJ}dii&=>JJ!!((+JJ)499QVVT+BCr   rU  c           
        | j                  |d         }| j                  |d         }|d   }|E|d   t        d      t        j                  j                  |      rt        j                  d       nd}t        j                  t              }g }|d   rE|D ]?  }	t        j                  j                  |	j                        }
||
   j                  |	       A n|d   j                  |       |D ]  }t        j                   ||   t        j                  j#                  ||      |d   || j$                  |d	   
      }|j                  |       | j                  j&                  j                  |        |S )Nr4  r   r   r9  zXinstall_headers: cannot specify both "install_dir" and "subdir". Use only "install_dir".z[Subdir keyword must not be an absolute path. This will be a hard error in the next release.r   preserve_pathfollow_symlinks)rh  )r>  rv  r-   r  r  r  r	   rd  r   r   r   dirnamer  r   extendr
   r  r  r   headers)r   r  r  r{   r4  source_filesrW  r  ret_headersfileri  childdirhs                r   r  z Interpreter.func_install_headers  sg    ;;F><RS33DG<)%m$0*  ,F  G  Gww}}^,  !~N&&t,/"$ +''//$**5W$$T*+ HOOL) 	)Hd8nbggll>8.TV\]jVk*DOO.45F.GIA q!JJ%%a(	) r   rV  localer   c                   | j                  |d         }| j                  |d         }|D ]C  }	 t        |j                  dd      d         }d|cxk  rdk  r.t        d       t        d       t        j                  ||d   || j                  |d	         }| j                  j                  j                  |       |S # t        t
        f$ r d}Y w xY w)
Nr4  r   r  r@   r   	   z?Man file must have a file extension of a number between 1 and 9r9  rq  )r>  rv  r   rsplit
IndexErrorr  r.   r
   r  r   manr   )	r   r  r  r{   r4  r
  r<  numr   s	            r   r  zInterpreter.func_install_man  s     ;;F><RS ..tAw7 	jA!((3*2./ =q=&'hii !&'hii	j IIgvm4loovh'79

a  
+ s   CCCrT  r  r:  c                    t        j                  |d   |d   | j                  |d         }| j                   j                  j	                  |       |S )Nr   r4  r:  )r
   r  r   emptydirr   )r   r  r  r{   r  s        r   r  z!Interpreter.func_install_emptydir		  sH     NN47F>$:DOOVTaMbc

""1%r   rX  r  symlink_namepointing_tor9  c                    |d   }|d   }t        j                  |||d   | j                  |d         }| j                   j                  j	                  |       |S )Nr   r{  r9  r:  )r
   r  r   r  r   )r   r  r  r{   r  r3  rV  s          r   r  z Interpreter.func_install_symlink	  s^     Aw&fdF=,A"oovm/DF

""1%r   re  c                   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               r?t        j                  j                  | j                  j                   | j"                  |      }|d   j%                  |        |d   rd|d   v rt        d      |d   j'                         D ]  \  }}t        j                  |      D ]  }t        ||      st        dt        |       d      t        |t               r?t        j                  j                  | j                  j                   | j"                  |      }||   j%                  |         t        j(                  |      S )Nr   zstructured_sources: type "z" is not validr   r@   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.   r   from_source_filer   r  r   r   r   r  )	r   r  r  r{   valid_typesr
  argr   r   s	            r   r  z#Interpreter.func_structured_sources'	  s    HMM5+>+>@R@RTYTkTkmr  nA  nA  BWbWnWnosWt##DG, 	$Cc;/&)CDI;n']^^#s#mm44T5E5E5P5PRVR]R]_bcBKs#	$ 7T!W}&'tuuQ +1#++A. +C%c;7.1KDQTI;Vd/eff!#s+&mm<<T=M=M=X=XZ^ZeZegjkAJ%%c*++ &&w//r   if_foundc                .    t        d | D              sdS d S )Nc              3  4   K   | ]  }t        |d         yw)r  N)r1  )rG  rF  s     r   rH  z'Interpreter.<lambda>.<locals>.<genexpr>J	  s     OohiPWXY[bPcOos   z"Objects must have a found() method)all)r  s    r   rG  zInterpreter.<lambda>J	  s    COomnOoLo D uy r   )rH  r\  ry  r   c                   t        j                  |       d|d   v rt        d      | j                  dk(  r|d   | j                  k(  rt        d      | j                  dk(  r|d   j                  d      rt        d      |d   dk(  rt        d      |d	   D ]  }|j                         r y  | j                  }t        j                  j                  ||d         }t        j                  j                  |      rt        d
      t        j                  j                  | j                  j                         |      }t        j                  j                  |      }t        j                  j                  |d      }	|	| j                  v rt        d| d      | j                  j                  |	       || _        t        j                   t        j                  j                  | j                  j"                  |      d       t        j                  j                  | j                  t        j$                        }
| j&                  j                  |
       t        j                  j                  | j                  j                         |
      }t        j                  j)                  |      s|| _        t+        d|
d      t-        |d      5 }|j/                         }d d d        t1        t2              sJ 	 t5        j6                  ||      j9                         }	 | j?                  |       || _        y # 1 sw Y   ZxY w# t         j:                  $ r}||_        |d }~ww xY w# t@        $ r
 Y || _        y w xY w)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.r  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 'r  r  r  )!r   check_direntry_issuesr.   r   r   r,  r  r  r  r  r  r   r   realpathr  r  r  rY  r  r  r+  r-   r  readr   r   r   Parserparser   rn  evaluate_codeblockr0   )r   r  r  r{   r   prev_subdirr   absdirsymlinkless_dir
build_filebuildfilenameabsnamer8  code	codeblockmes                   r   r  zInterpreter.func_subdirD	  s    	&&t,47?"#788;;"aD,?,?!?"#noo;;"a!3!3H!="#opp7b="#opp
# 	A779	 kkk47377== "#MNNd..==?H''**62WW\\/=A
222"%?xGi#jkk!!%%j1
BGGLL!1!1!;!;VDtTT[[+2L2LM  /'',,t//>>@-Pww~~g&%DK&)A-ARRS'TUU'G, 	668D	$$$$	tW5;;=I	##I. "	 	
 && 	BGH	
 ! 	!	s6   M $M 'M0  M	M-	M((M-0	NNc                H   |j                   dkD  r|j                   t        j                  z  rut        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.0rD  r@   )
permsr0  S_ISVTXr	   rd  rO  filemoder   ownergroup)r   moder  s      r   r>  z+Interpreter._warn_kwarg_install_mode_sticky	  sw    ::>djj4<<7 =GKGXGXZMM$**t||";<QR@EE4::tzz::Kr   rS  r
  renamer   c           
        | j                  |d   |d   z         }|d   xs d }|r;t        |      t        |      k7  r$t        dt        |       dt        |       d      |d   }|s| j                  }t	        j
                  t        j                  j                  | j                  j                         |      t        j                  j                  d|            }| j                         r#t        j                  d	d
| j                  d|       |d   r#t        j                  dd
| j                  d|       | j                  |d         }| j!                  |||||d   |d   |d         S )Nr   r
  r  z_"rename" and "sources" argument lists must be the same length if "rename" is given. Rename has z elements and sources has r  r9  z	{datadir}z9install_data() without install_dir inside of a subprojectr  zSThis was broken and would install to the project name of the parent project insteadrg  z9install_data() with preserve_path and without install_dirzFThis was broken and would not add the project name to the install pathr4  r:  rh  )rg  rh  )rv  r   r.   r   r  r  r  r  r  r   get_datadirr  r3   r   r   r>  install_data_impl)	r   r  r  r{   r
  r  r9  r   r4  s	            r   r  zInterpreter.func_install_data	  s    ..tAw	9J/JK!)T6{c'l*&""%f+.HWVWYZ Z ]+,,F,,RWW\\$:J:J:V:V:XZ`-acecjcjcocop{  ~D  dE  FK!!#%%&acjlpl{l{&{&*, o&%%&acjlpl{l{&n&*, ;;F><RS%%g{L&RXYfRg4:?4K6<=N6O & Q 	Qr   c	                   t        |t        j                        r|j                  n|}	t	        j
                  t              }
|rE|D ]?  }t        j                  j                  |j                        }|
|   j                  |       A n|
d   j                  |       g }|
j                         D ]y  \  }}t        j                  |t        j                  j!                  ||      t        j                  j!                  |	|      || j"                  ||||	      }|j                  |       { | j                  j$                  j                  |       |S Nr   )r   r  r  r"  r   r   r   r  r  ri  r  r   rj  r   r
   r  r  r   r  )r   r
  r9  r4  r  taginstall_data_typerg  rh  install_dir_namer  rn  ri  ret_dataro  rL  r  s                    r   r  zInterpreter.install_data_impl	  s    3=[%J\J\2];..cn&&t, +''//$**5W$$T*+ HOOG$#zz| 	OHe

5"'',,{H"Erww||TdfnGo'&#GX*,A OOA		 	

x(r   rW  strip_directoryexclude_filesz0.42.0c                .    t        d | D              rdS d S )Nc              3  Z   K   | ]#  }t         j                  j                  |       % y wr$  r  r  r  rF  s     r   rH  z'Interpreter.<lambda>.<locals>.<genexpr>	       A^WX"''--PQBRA^   )+cannot be absoluterJ  rE  s    r   rG  zInterpreter.<lambda>	      cA^\]A^>^&: dh r   )ry  r   r\  rH  exclude_directoriesc                .    t        d | D              rdS d S )Nc              3  Z   K   | ]#  }t         j                  j                  |       % y wr$  r  rF  s     r   rH  z'Interpreter.<lambda>.<locals>.<genexpr>	  r  r  r  r  rE  s    r   rG  zInterpreter.<lambda>	  r  r   c                   t        |d         t        |d         f}t        j                  j                  | j                  j
                  | j                  |d         }t        j                  j                  |      rt        t        j                  |            sFt        j                  dd| j                  |       t        j                  dd| j                  d|       | j                  |d	         }|d
   }t        |t         j"                        r|j$                  }t'        j(                  | j                  |d   |d
   ||||d   | j                  |d   |d   
      }| j&                  j*                  j-                  |       |S )Nr  r  r   z#install_subdir with empty directoryr  rD  r  zAIt worked by accident and is buggy. Use install_emptydir instead.r4  r9  r  r:  rh  )r:  rh  )r  r  r  r  r   r  r   isdirrJ  listdirr3   r   r   r4   r>  r   r  r  r"  r
   r  r  r   )	r   r  r  r{   excluder9  r4  	idir_nameidirs	            r   r  zInterpreter.func_install_subdir	  sW   " vo./V<Q5R1STd..994;;QPww}}V$C

60B,C!!"GSWSbSbmqr(()NPXZ^ZiZi)lnrt;;F><RS=)	i!3!34!))IKKG=!$%OO}-"#45
7 	

&&t,r   rD  z0.47.0,r  )r   configurationr  zUse fs.copyfile instead)ry  r\  rl  deprecated_messager  r  r   r   >   cmake@r  r   )ry  r\  rH  r  r6  c                    | du rdS d S )NTzmust be `false` if booleanr   rE  s    r   rG  zInterpreter.<lambda>
  s    a4i&B UY r   output_formatr  json>   r  r  r  )ry  r\  r  rH  
macro_namec                   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      | j                  d         }d   }d   }d   }	| j                  d         }
g }|
D ]  }t        |t        j                        r[|j                  |j                  | j                  j                  | j                  j                               | j                  |       xt        d       d   }|rNt        j                   |d       }t        j"                  |g|      }|d   }|	rt        j"                  |	g|      d   }	t$        j&                  j)                  | j*                  |      }|| j,                  v rt$        j&                  j)                  | j*                  d      }| d| j.                   }dj                  || j,                  |         }t1        j2                  dt1        j4                  |d      d|d|       n| j.                  | j,                  |<   t$        j&                  j7                  t$        j&                  j)                  | j*                  |            \  }}t$        j&                  j)                  | j                  j                  ||      }d   9d   }t        |t8              r}t;        j<                  dd| j>                  |       |jA                         D ]2  \  }}t        |tB        tD        tF        f      r"t	        d|d|d        tI        jJ                  |      }t1        jL                  d!t1        j4                  |      d"       t        |
      d#kD  rt        d$      |
r;t%        jN                  t$        j&                  j)                  | j                  j                  | j*                        d%       d&   }t        jP                  |d   ||||| j>                        \  }}|rBd'j)                  d( t        |      D              }t1        j2                  d)| d*|
d    d+|       |rt$        j&                  jS                  |d         }t;        jT                  | j>                        }t;        jV                  |d,      r9t1        j2                  d-|d.|       nd/   } t        jX                  ||||        d|_-        nwd
   t        |
      d#kD  r#t;        j<                  d0d1| j>                  |       t        j                   ||g      }|	r=t$        j&                  j)                  | j                  j]                         |	      }	|	|d2<   t        j"                  d
   |      }!t1        jL                  d!t1        j4                  |      d3       |!^}"}| j_                  |"|fddta               d4d      }#d	   rm|d5z   }$d&   }tc        |$d6|7      5 }|je                  |#jf                         d d d        |rti        jj                  |d   |$       t        jl                  ||$       |	rt1        jL                  d8t1        j4                  |	             tc        |	d97      5 }to        |jq                               }%|%js                  |      }&|&D ]  }'| j                  |'        	 d d d        nd:   rt        |      d#k7  rt        d;      t%        jN                  t$        j&                  j)                  | j                  j                  | j*                        d%       ti        jt                  |d   |       d<   }(|(d=u r&d>}(tw        j<                  d?d@| j>                  dA|       dB   dB   n|(d>k7  })|)r|(st        dC      |(}*t        |*tx        jz                        r|*j|                  }*t        j                  j                  ||      }+dD   },| jH                  j                  j                  tI        j                  |+g|(|*|| j>                  |,dEF             t        j                  j                  | j*                  |      S # 1 sw Y   YxY w# 1 sw Y   %xY w)GNc              3  0   K   | ]  }|   d vr|  yw)rQ  Nr   )rG  rF  r{   s     r   rH  z2Interpreter.func_configure_file.<locals>.<genexpr>!
  s$      <q"1I]:  <s   )r  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.r4  r   r  r3  r  z*Inputs can only be strings or file objectsr  r  r   z{}:{}zOutput fileTzfor configure_file() atz%overwrites configure_file() output atr  z'configure_file.configuration dictionaryr0  rD  r1  r2  ra  Configuringzusing configurationr@   z6At most one input file can given in configuration moder  r  r  c              3  2   K   | ]  }t        |        y wr$  )repr)rG  r   s     r   rH  z2Interpreter.func_configure_file.<locals>.<genexpr>l
  s     (TQa(Ts   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.0r  z#multiple inputs in configure_file()r  z	@DEPFILE@zwith command)r  r  r  ~r  r  zReading depfile:r  r  z1Exactly one input file must be given in copy moder9  Fr   z!configure_file install_dir: falser  z Use the `install:` kwarg insteadr6  zJ"install_dir" must be specified when "install" in a configure_file is truer:  	configure)r:  	data_type)Brq  r   r-   r   r.   r>  rv  r   r   r   r   r  r   r  rY  r=  get_filenames_templates_dictsubstitute_valuesr  r  r  r   r  current_linenor	   rm  r   r  r   r3   r   r   r   r   r   r   r
   r  r   r  do_conf_filebasenamert  ru  dump_conf_headerusedget_scratch_dirr  r   r  
writelinesstdoutr   copymodereplace_if_differentr!   	readlinesget_all_dependenciescopy2r4   r  r  r"  from_built_filer  r  )-r   r  r  r{   actionsnum_actionsr4  fmtr  r3  r@  
inputs_absr8  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ifbaserx  r  _cmdr  resdst_tmprX  r  rY  r  r6  r  cfiler:  s-      `                                         r   r  zInterpreter.func_configure_file	  s=   P  <$H < <'l!& (C D D A& (D (==CVW(N O O A& (D (==CVW(N O O )VI%6"#bcc;;F><RSX/# --fWo>
 	YA!X]]+!!!//$2B2B2M2M262B2B2L2L#N O''**+WXX	Y !:::tLF00&6BGQZF"44gYGJggll4;;7$555WW\\$++}EN,-Qt/B/B.CDL 8S8ST_8`aJLL		+t(DF_am  pW  Yc  d7;7J7JD''4$&GGMM"'',,t{{F2S$T![GGLL!1!1!;!;ZU	 /"./*D$%%%&OQY[_[j[juyz JJL DDAq%a#sD)9:.RSTRWW{|}  |A  AB  CD DD ..t4HH]DIIf$57LM6{Q*+cddBGGLL)9)9)C)CT[[Q\`a &z 2))*Q-D*-}dooO 4!#3 %#yy(T&AR:S(TTHLL*8*4HPQ TC CMQS $WW--jm<F#66tGB!//H= &HHNz R@&@ KOP
 $L1
)))T=*UDII*6{Q%%&KXW[WfWfquv :::	{SF'',,t'7'7'G'G'I7S&-{#--fY.?HDHH]DIIf$5~FJC$''d484PdPf(g(,.C i #c/ &z 2'3? -1LL,-OOJqM7;--iA+TYYw-?@'G4 5 /B22;?D# 5//455 5 F^:!#*+^__KKT%5%5%?%?MX\]LLA	2
 m$5=D(()Lh)-:\gkm'-i'8'D&#$RT**`b bI)U%7%78%--	MM11*kJE /KJJOO""5::ugtYVZVeVe:EQ\$^ _}},,T[[&AAO- -5 5s   >b1Ab>1b;>crR  c           	        t        ||      }|dk(  rK|D ]F  }t        |t              st        j                  dd| j
                  d|d| j                          n g }|D ]j  }t        |t        j                        r|j                  |       /t        |t              r"|j                  | j                  |g             at        d       |S )NrR  z(include_directories kwarg of type stringr  zUse include_directories(z	) insteadrD  zRInclude directory objects can only be created from strings or include directories.)r   r   r   r3   r   r   rO  r
   r  r   build_incdir_objectr-   )r   r{   r#  prospectivesr   r  r  s          r   r  zInterpreter.extract_incdirs
  s    &vs3''! a%))*TV^`d`o`o,DQE*S^b^o^oq	 -/ 	AA!U../a As#d66s;<*+  A  A	A r   	is_systemc                2    | j                  |d   |d         S )Nr   r  )r  rw  s       r   r  z$Interpreter.func_include_directories
  s      ''Q1DEEr   c           	        t        |t              st        d      | j                  j	                         }| j                  j                         }t        j                  j                  || j                        }t        j                  j                  || j                        }|D ]  }t        t        |      t        |            rt        t        j                  d            	 | j                  | j                  |       t        j                  j                  ||      }t        j                  j                  ||      }	t        j                  j)                  |      rt        j                  j)                  |	      rt        d| d       t+        j,                  | j                  ||      }
|
S # t        $ rG t!        j"                  d| j$                         t'        t        j                  d|d             Y w xY w)	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!rD  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 z does not exist.)r   r   r.   r   r   r-  r  r  r  r   r   ry   textwrapdedentvalidate_within_subprojectr-   r	   rm  rO  printr  r
   r  )r   incdir_stringsr  src_root
build_rootabsbase_srcabsbase_buildr  
absdir_srcabsdir_buildr   s              r   r  zInterpreter.build_incdir_object
  s   )T*"#?@@##224%%335
ggll8T[[9Z= 7	KAtAwX7&x 8 (  033DKKC2 k15J77<<q9L77==,RWW]]<5P&aS8H'IJJo7	Kp dkk>9E; , LL!ITXTeTef(// /GGHe L+  s   &F55AHHr=  exe_wrappergdbtimeout_multiplierexclude_suites
is_defaultc                   |d   }t        j                  d|      t        d      d|vr3| j                  r| j                  n| j                  j
                   d| }g }|d   D ]R  }t        |t              r|j                  |       %|j                         st        d      ||j                         z  }T |d   }|dk  r%t        dd	      j                  | j                         |d
   rI| j                  j                  "t        | j                  j                  d      || j                  _        t	        j                  ||d   ||d   |d         | j                  j                  |<   y )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  r3   r  test_setup_default_name	TestSetuptest_setups)r   r  r  r{   
setup_namer   r   r  s           r   ry  zInterpreter.func_add_test_setup  sq    !W
<<JJW_&']^^j 04T__TZZE\E\^^_`j_klJ#%& 	/A!S!""1%wwy./STTq}}.	/ $$89"A8LPPQUQ`Q`a,zz11=*djj.P.P-S TU ,U V V1;DJJ.-2__[&QV-Ykmstymz=CDT=U.W

z*r   r7  c                f    | j                  || j                  j                  |d      |d   |       y Nr   r   )_add_global_argumentsr
   global_argsrw  s       r   rs  z%Interpreter.func_add_global_arguments;  s4     	""4)?)?x@P)QSWXYSZ\bcr   r8  c                f    | j                  || j                  j                  |d      |d   |       y r  )r  r
   global_link_argsrw  s       r   rt  z*Interpreter.func_add_global_link_arguments@  s4     	""4)D)DVHEU)VX\]^X_aghr   r:  c                f    | j                  || j                  j                  |d      |d   |       y r  )_add_project_argumentsr
   projects_argsrw  s       r   rv  z&Interpreter.func_add_project_argumentsE  s4     	##D$***B*B6(CS*TVZ[\V]_efr   r<  c                f    | j                  || j                  j                  |d      |d   |       y r  )r  r
   projects_link_argsrw  s       r   rx  z+Interpreter.func_add_project_link_argumentsJ  s4     	##D$***G*GxHX*Y[_`a[bdjkr   r;  c           
        |d   }|d   D ]"  }|| j                   |   vst        d| d       t        j                  |d         D ]6  }t	        |j                               }|j                         dk(  }|j                         D ]  }	|d   D ]  }| j                  j                   |   |   }
|	j                  | j                  j                         | j                  j                               D ]#  }|j                  |
j                  ||             %   | j                  || j                   j"                  |   ||       | j                  || j                   j$                  |   |j'                         |       9 y )Nr   r   zFadd_project_dependencies() called before add_language() for language "ra  r   system)r   r/   r   get_leaf_external_dependenciesr   get_compile_argsr  get_include_dirsr   to_string_listr   r   r-  rj  get_include_argsr  r
   r  r  get_link_args)r   r  r  r{   rT  rw  r  rx  system_incdirr   r  r  s               r   rw  z)Interpreter.func_add_project_dependenciesO  s    X&:& 	tD4>>+66!$jkojppq"rss	t <<T!WE 
	uA 2 2 45L..0H<M'') X":. XD==22;?ED ! 0 01A1A1P1P1RTXTdTdTrTrTt u X$++D,A,A$,VWXXX ''djj.F.F{.SUacij''djj.K.KK.XZ[ZiZiZkmst
	ur   c                r   d}d}|D ]-  }||v r&t        j                  d| d| j                         .||v r&t        j                  d| d| j                         X|dk(  r&t        j                  d| d| j                         |d	k(  r&t        j                  d
| d| j                         |j                  d      r&t        j                  d| d| j                         |j                  d      s|j                  d      s	t        j                  d| d| j                         0 y )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 "r7  rD  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 "z
-fsanitizezDConsider 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	   rm  rO  r,  )r   r  warnargsr  r  s        r   _warn_about_builtin_argsz$Interpreter._warn_about_builtin_argsd  s6   
 MJ 	9Chbcfbggij&*&7&79`ad`eegh&*&7&79	![\_[``bc&*&7&79Z[^Z__ab&*&7&79-cdgchhjk&*&7&79(CNN7,Crsvrwwyz&*&7&79#	9r   c                    | j                         r%d|j                  j                   d}t        |      | j                  xs | j
                  }| j                  |||||       y )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   r/   r  r  _add_arguments)r   r  argsdictr  r{   r  frozens          r   r  z!Interpreter._add_global_arguments  se     4 45 6$ $C c""))DT-D-DD(FD&Ar   c                    | j                   |vri || j                   <   | j                  ||| j                      | j                  ||       y r$  )r   r#  r  )r   r  r$  r  r{   s        r   r  z"Interpreter._add_project_arguments  sE    ??(*(*HT__%D(4??"; 44dF	Dr   c                    |r%d|j                   j                   d}t        |      | j                  |       |d   D ]  }|j	                  |g       |z   ||<    y )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   r/   r!  r  )r   r  r$  args_frozenr  r{   r  rw  s           r   r#  zInterpreter._add_arguments  sk    #DNN$8$8#9 :] ]Cc""%%d+:& 	;D%\\$3d:HTN	;r   r   c                   |d   }|t        j                  dd| j                  |       t        j                  |      }|rt        d|       t        |t              rCt        d |j                         D              r#t        j                  dd| j                  |       t        ||d	   |d
         S t               S )Nr   z environment positional argumentsr  rD  z"environment": c              3  B   K   | ]  }t        |t              s|  y wr$  rD  )rG  r   s     r   rH  z/Interpreter.func_environment.<locals>.<genexpr>  s     -^A*UVX\J]a-^s   z"List of string in dictionary valuer{  r   	separator)r3   r   r   r^   rH  r.   r   r   rJ  r   rw   r   )r   r  r  r{   initr  s         r   r  zInterpreter.func_environment  s    
 Aw!!"DhPTP_P_jno""4(C&'>??$%#-^-^*^%%&JHVZVeVeptu,T6(3CVKEXYY#%%r   r\  c                   |d   }t        j                  j                  dg|dd   j                  dd      }t        j                  j                  | j                  dd      }t	        |d   t
        j                        rd|vrt        j                  |      S t	        |d   t
        j                        rCt         j                  j                  |d   j                  |      }t        j                  ||      S |S )Nr   r   r@   \/r  )	r  r  r  re  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?ggllE"**45eAh > >?DPUDU11#66a%"4"4577<<a 0 0%8D%%c400Jr   c           
        t         |           t        j                  dt        j                  t        t        | j                  j                                           t        j                  | j                         t        j                  | j                         t        j                  | j                         | j                         s!| j                          | j!                          y y )NzBuild targets in project:)r   r  r	   r   r   r   r   r
   targetsr3   reportr   r4   r5   r  print_extra_warningsr  )r   r%  s    r   r  zInterpreter.run  s    ,diiC

@R@R<S8T.UV$//*  1T__-!!#%%'! $r   c                    | j                   j                  j                  j                         D ]'  }|j	                         dk(  s| j                           y  y )Nclang)r   r   r2  r   get_idcheck_clang_asan_lundef)r   r  s     r   r6  z Interpreter.print_extra_warnings  sG    ((--446 	AxxzW$,,.	r   c                   t        d      | j                  j                  vry t        d      | j                  j                  vry | j                  j                  t        d         j                  r| j                  j                  t        d         j                  dk7  re| j                  j                  t        d         j                  }t	        j
                  t        j                  d| d      | j                         y y y )Nb_lundef
b_sanitizenonez"                    Trying to use z sanitizer on Clang with b_lundef.
                    This will probably not work.
                    Try setting b_lundef to false instead.rD  )	r   r   r  r   r	   rm  r  r  rO  )r   r   s     r   r:  z#Interpreter.check_clang_asan_lundef  s    Z (=(==\"$--*?*??MM!!)J"78>>%%i&=>DDNMM)))L*ABHHELL .##(' *;*> ? **	, O ?r   c           	        	 t         j                  j                        	t         j                  j                        t	        |t
        j                        rd 	fd}t        |      } ||      ry t        t        j                  j                  t        	||                  }t        j                  j                  |      rd}nd}t        j                   j                  v r|j                  v ry 	|j                  vry t        	 j                        }| j                   z  }||k(  ry ||j                  vrt#        d| d|j$                   d      ||k(  s||j                  v rt#        d| d|j$                   d      y )	Nc           
        t               }j                  j                  D ]=  }|j                  D ],  }|j	                  t        |j                                     . ? j                  j                  D cg c]!  }t        t        |j                              # }}| |v ry|D ]  }t        |       j                  |      s y yc c}w )NTF)r  r
   r  r
  r  ry   r  r  r   source_subdirr,  )fpathinstallablefilesr  r<  installabledirsr:  r   r9  s        r   validate_installable_filezIInterpreter.validate_within_subproject.<locals>.validate_installable_file  s    03  VAYY V(,,T!//&(2S-TUVV PTzzOfOf"g!3tFAOO'D#E"g"g,,( $A5z,,Q/#$  #hs   :&C	directoryrn  z!Sandbox violation: Tried to grab r   z outside current (sub)project.z from a nested subproject.)rB  ry   r   r   )ry   r   r  rY  r   r  r  r  r  r  r  r   r   r	  r6  r  r   r-   r  )
r   r   r  rE  norm	inputtypeproject_rootr   r:  r9  s
   `       @@r   r  z&Interpreter.validate_within_subproject  sr   d&&112((223eU;;< ;D ).BGGOOD$?@A77==#II$DDHXHXX]eimiuiu]u%
 FD$4$45%(;(;;<t||+&)J9+UVW[W`W`Vaa  (A  B  BT!^t||%C&)J9+UVW[W`W`Vaa{'|}} &Dr   c                     y r$  r   r   r
  r7  s      r   rv  z#Interpreter.source_strings_to_files  s	     BEr   c                     y r$  r   rK  s      r   rv  z#Interpreter.source_strings_to_files  s	     KNr   c                     y r$  r   )r   r
  s     r   rv  z#Interpreter.source_strings_to_files  s	     gjr   c                     y r$  r   rK  s      r   rv  z#Interpreter.source_strings_to_files  s    x{r   c                     y r$  r   rK  s      r   rv  z#Interpreter.source_strings_to_files  s    |r   c           
        t        j                  |       t        |t              s|g}g }|D ]  }t        |t              r|s`|j                  | j                  j                               r7|j                  |       t        j                  d|d| j                         v| j                  | j                  |       |j                  t         j                  j                  | j                  j                   | j                  |             t        |t         j                        r|j                  |       t        |t"        j$                  t"        j&                  t"        j(                  t"        j*                  t"        j,                  t"        j.                  f      r|j                  |       t1        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
        zSource item zq cannot be converted to File object, because it is a generated file. This will become a hard error in the future.rD  zSource item is z& instead of string or File-type object)r   r  r   r   r   r,  r   r-  r   r	   rm  rO  r  r   r   r~  r  r
   r  r  r  r  r  r  r-   )r   r
  r7  resultsr<  s        r   rv  z#Interpreter.source_strings_to_files!  sq    	&&w/'4(iG+- 	IA!S!!,,t/?/?/M/M/O"PNN1%LL<u 5P "PZ^ZkZkm 33DKKCNN8==#A#A$BRBRB]B]_c_j_jlm#noAx}}-q!A 3 3U5F5F % 7 79K9K % 6 68O8O Q R q!*_QE BH ,H I I!	I$ r   c                    | j                  d      rt        d      | j                  d      rd| vrt        d      | t        j                  v rt        d|  d      y )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_targetsA  s    ??-." $N O O??8$D" $[ \ \8222"]4& 9B $B C C 3r   c           	        | j                   j                  dk(  rt        d      |dk(  rt        d      |j                         dk(  rt        d      t	        |      rt
        j                  j                  | j                  t
        j                  j                  |      d         }t
        j                  j                  t
        j                  j                  | j                  |            r%t        t        j                  d| d| d	            | j                  |       |j!                         }|j#                         }||f}|| j$                  j&                  v rt)        d
| d      t+        |t$        j,                        rS|| j$                  j.                  v r;t1        j2                  d|j                   dd| j4                  | j6                         t+        |t$        j8                        rH| j;                  |j<                  d|j>                         |jA                          | jC                  |       || j$                  j&                  |<   t+        |t$        j,                        r&| j$                  j.                  jE                  |g       || jF                  jH                  vrCtK        tM        jN                               jQ                         | jF                  jH                  |<   y y )Nr>  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 directoryr  rD  T))r  r  r-   stripr   r  r  r  r   r  rQ  rP  r.   r  r  r?  r9  
get_subdirr
   r4  r/   r   r  targetnamesr3   r   r   rO  r  r9  missing_languagesrT  process_compilers_lateadd_stdlib_infor  r   target_guidsr   uuiduuid4upper)r   r  tobjpathsegidnamer   namedirs          r   r  zInterpreter.add_targetM  sR   <<&&'xyy2:&'GHH::<2&'YZZggll4;;d0CA0FGGww~~bggll4+;+;WEF&x <!F"Nwi X8 (  
 	''- ".TZZ''' 8>jklldE,,-'TZZ=S=S2S!!$Ntyyk  ZI  #J")4??TEVEVX dE--.t55tT=M=MN'')  &%)

6"dE,,-JJ""))7)433314TZZ\1B1H1H1JDMM&&v. 4r   c                   | j                  |||t        j                        }| j                  |||t        j                        }| j                  j
                  dk(  rd}nB|j                         rd}n/t        d |j                         D              rd}n|j                  }|r|j                  j                  t        j                  ||j                  |j                  g              g |_        g |_        |j                  j                         D ci c]  \  }}|t        j                   v s|| c}}|_        t        j"                  ||      S c c}}w )NxcodeFc              3  L   K   | ]  \  }}|j                  d       xr |  yw))static_argsshared_argsN)r  )rG  r   r   s      r   rH  z3Interpreter.build_both_libraries.<locals>.<genexpr>  s&     ]da:;AA]s   "$)rB  r
   r  r  r  r  	uses_rustrJ  r   picr  r   r  r
  	generatedr   clink_langsr  )	r   r  r  r{   
shared_lib
static_libreuse_object_filesr   r   s	            r   r  z Interpreter.build_both_librariesv  s)   &&tT65;N;NO
&&tT65;N;NO
<<' "'!!# "']flln]]!&!+
 %%e&<&<ZI[I[]g]q]qsu&vw!#J#%J  6@5I5I5O5O5Q#pTQUVZcZoZoUoAqD#pJ "":z:: $qs   E0Ec                   | j                   j                  t        d| j                              }t	        |t
              sJ d       |dk(  r6| j                  ||t        j                  d|      t        j                        S |dk(  r6| j                  ||t        j                  d|      t        j                        S |dk(  r| j                  |||      S t        d	| d
      )Ndefault_libraryr  r  sharedkwtypes.StaticLibraryr   kwtypes.SharedLibrarybothzUnknown default_library value: r  )r   rO  r   r   r   r   rB  Tcastr
   r  r  r  r-   )r   r  r  r{   rp  s        r   r  zInterpreter.build_library  s    --229=N[_[j[j3kl/3/;;/h&$$T48OQW1XZ_ZmZmnn($$T48OQW1XZ_ZmZmnn&,,T4@@&)HHYYZ'[\\r   c                f   g }g }t        j                  | j                  j                         | j                  j	                               }|D ]_  }t        |t         j                        r2|j                  |       |j                  |j                  |             O|j                  |       a ||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   relpathr   r   r-  r   r   r   rel_to_builddir)r   rawr;  r  build_to_sourcer  s         r   __convert_file_argszInterpreter.__convert_file_args  s     /1"**4+;+;+J+J+L+/+;+;+I+I+KM  	A!X]]+##A&A--o>?A	 T!!r   c                    |j                  dg       }t        j                  t              }t        j
                  D ]2  }| j                  || d         \  }}|||<   |j                  |       4 ||d<   y)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)
setdefaultr   r   r   r   all_languages_Interpreter__convert_file_argsrj  )r   r{   r  new_argsrV  r  r  s          r   __process_language_argsz#Interpreter.__process_language_args  sz     nb14?4K4KD4Q(( 	A11&A3e2EFJD$HQKHHTN	 #+r   c                     y r$  r   r   r  r  r{   targetclasss        r   rB  zInterpreter.build_target  s    mpr   c                     y r$  r   r  s        r   rB  zInterpreter.build_target      vyr   c                     y r$  r   r  s        r   rB  zInterpreter.build_target  r  r   c                     y r$  r   r  s        r   rB  zInterpreter.build_target  s    svr   c                     y r$  r   r  s        r   rB  zInterpreter.build_target  s    X[r   c                   |\  }}|d   }|j                  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 cg c].  }t        |t        j                  t        j                  f      s|0 }}t        |d   t              s#t	        j
                  dd| j                  d|       | j                  |      }|d   }	t        |d      |d<   | j                  |d         |d<   | j                  t        j                   j#                  | j$                  | j&                        |       |t        j(                  t        j*                  t        j,                  t        j.                  t        j0                  hvr*t3        j4                  dt7        |             t9        d      | j;                  |       |t        j.                  u rlt<        j>                  dhz
  D ]T  }
| jA                  |j                  |
 dg             \  }}|d   |
   jC                  |       |d   jC                  |       V n}|t        j*                  u rkt<        j>                  dhz
  D ]T  }
| jA                  |j                  |
 dg             \  }}|d   |
   jC                  |       |d   jC                  |       V |t        j0                  ur| jE                  |       |jG                         D ci c]  \  }}||jH                  dhz  v s|| }}}g }t        jJ                         }|D ]3  }t        |t        jJ                        r||z   }#|jM                  |       5 |sd }n|jN                  jQ                         D ]  }tS               }|D ]  }t        |t6              r!t        j                   jU                  |      g}n8t        |tV        jX                        r|jZ                  g}n|j]                         }|j_                  |      }|r2ta        jb                  ddj#                  te        |             |      |jg                  |         | ji                  |      |d<   |t        j(                  u rtk        jl                  d|      }|d   &|d    ta        jb                  d!|      |d   rd"|d <   |d    d#|d <   |d$   r1|d%   d&u r$to        j
                  d'd| jp                  d(|)       d*|d%<   n|d%   r|d$   d&u rta        d+      d*|d$<   |d%   d&|d%<   |d$   d&|d$<    ||| j&                  | j                  ||||	| jr                  | j<                  |   |
      }| ju                  ||       d*| _;        |S c c}w c c}}w ),Nr   rust_crate_typez
proc-macror
  c              3  P   K   | ]  }t        |t        j                           y wr$  )r   r
   r  rG  r<  s     r   rH  z+Interpreter.build_target.<locals>.<genexpr>  s     AAz!U../ArI  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  P   K   | ]  }t        |t        j                           y wr$  )r   r
   r  r  s     r   rH  z+Interpreter.build_target.<locals>.<genexpr>  s     Fz!U334FrI  zpassing object files as sourceszUPass these to the `objects` keyword instead, they are ignored when passed as sources.r6  z$install kwarg with non-boolean valuer  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   r  r;  r   z+Conflicting sources in structured sources: r  r  rR  kwtypes.Executablegui_appwin_subsystemzZExecutable got both "gui_app", and "win_subsystem" arguments, which are mutually exclusivewindowsr1  implibexport_dynamicFz+implib overrides explict export_dynamic offzCDo not set ths if want export_dynamic disabled if implib is enabledrD  TzM"implib" keyword" must not be false if "export_dynamic" is set and not false.)<r  r   rI  rJ  r5   r   r   r   r
   r  r  r   rv  r   check_sources_existr  r  r  rP  r   r  r  r  r  r  r	   rF  r   r  #_Interpreter__process_language_argsr   r  r  rj  kwarg_strings_to_includedirsr   known_kwargsr  r   r
  r   r  r  r   r   r  get_outputsintersectionr.   r  rq  r  r  ru  rv  r4   	subprojctr   r  r  )r   r  r  r{   r  r  r
  rT  r<  objsrw  r  r   r   srcsstructr.  r8  rN  	conflictsr3  s                        r   rB  zInterpreter.build_target  s    gX&::'(L8 (--KF9--AAA$$%[]dfjfufu &X%)+ FgFF$$%FQUQ`Q`%|%)+
 & V$Q):):E<R<R(ST  V V &+T2$$%KWVZVeVe &R%)+ ..w7i !0!H~ $ < <VM=R S}  d.>.>!LgVu//1D1DeFXFXZ_ZmZmotoxoxyyJJ-s;/?@122$$V,%---!//6(: 4!55fjjD6AVXZ6[\
d'-44T:~&--d34 E///!//6(: 4!55fjjD6AVXZ6[\
d'-44T:~&--d34 eii'--f5 $*<<>g41aQ+:R:RVeUf:f5f!Q$gg')6;6M6M6O 	A!U445!A		 F
 ^^**, &&)e &A!!S)WW--a01#Ax}}5WWIMMO ' 4 4Q 7I .88I$))TZ[dTeJfIgh!%' ' NN1%&&" )-(<(<V(D$%%***VV0&9Fi ,/*6*44t!# # )$.7F?+o&.*3'h*+u4%001^`gimiwiw1v:>@ ,0'(()(#u,*+z{{#'x &'/+0'(h'#(x T4;;dTZ\`!--t~~k/JFT 	f%#' IVB hs   %3WW#&W#c                ,   |d   r|d   }g }|D ]  }t        |t              rt        j                  j	                  |      j                  | j                  j                               rt        j                  d| j                         t        j                  j                  |t        j                  j                  | j                  j                         | j                              }| j                  |g      }|j                  |        ||d<   y y )Nrz  z}Building a path to the source dir is not supported. Use a relative path instead.
This will become a hard error in the future.rD  )r   r   r  r  r)  r,  r   r   r	   rm  rO  rx  r  r   r  r   )r   r{   r   cleaned_itemsr   s        r   r  z(Interpreter.kwarg_strings_to_includedirs_  s    /"?+E79M 
(a% ww''*55d6F6F6U6U6WX &0:>:K:KMGGOOArww||D<L<L<[<[<]_c_j_j/kl 44aS9$$Q'
( '4F?# #r   c                    |j                   j                         D ]I  }| j                  j                  |j                     j                  |d       }|s9|j                  |       K y r$  )r   rK  r
   rR  rT  r  add_deps)r   r3  rV  rY  s       r   rZ  zInterpreter.add_stdlib_infop  sV    !!&&( 	%A**$$V%7%78<<QEC$	%r   c                    |D ]a  }t        |t              st        j                  j	                  ||      }t        j                  j                  |      rTt        d| d       y )Nz&Tried to add non-existing source file r  )r   r   r  r  r  r+  r-   )r   r   r
  r<  r  s        r   r  zInterpreter.check_sources_existv  s\     	ZAa%GGLL+E77>>%(*-STUSVVW+XYY	Zr   c                L    | j                   |j                   k7  rt        d      y )Nz5Tried to extract objects from a different subproject.)r   r-   )r   buildtargets     r   validate_extractionzInterpreter.validate_extraction  s%    ??k444&'^__ 5r   c                     | j                   dk7  S r  r  r'  s    r   r  zInterpreter.is_subproject  s    "$$r   rd  c                6    |\  }}| j                  ||d       y )NT)	holderify)rd  )r   r  r  r{   varnamer   s         r   r  zInterpreter.func_set_variable  s"    
 '5D9r   rP  c                    |\  }}t        |t              r|S 	 | j                  |   S # t        $ r || j	                  |      cY S Y nw xY wt        d| d      )NzTried to get unknown variable "r7  )r   r1   r@  rN  
_holderifyr-   )r   r  r  r{   r  r   s         r   r  zInterpreter.func_get_variable  sq     !gx(N	1>>'** 	1#x00 $	1 #%DWIR#PQQs   ( A	A	rZ  c                $    |d   | j                   v S r   r?  rw  s       r   r  zInterpreter.func_is_variable  s     Aw$..((r   rk  c                b    |d   }	 | j                   |= y # t        $ r t        d| d      w xY w)Nr   z!Tried to unset unknown variable "r7  )r@  rN  r-   )r   r  r  r{   r  s        r   r  zInterpreter.func_unset_variable  sF     q'	Xw' 	X&)J7)SU'VWW	Xs    .c                    | j                  dd      }t        |t              st        d      |rt        j
                  S t        j                  S )Nr   Fz'Argument to "native" must be a boolean.)r  r   r   r.   r   rI  rG  )r{   r   s     r   rs  z%Interpreter.machine_from_native_kwarg  sA    He,&$'"#LMM&,}""D-2D2DDr   rY  c                (    t        |d   t              S r   )r   r1   rw  s       r   r  zInterpreter.func_is_disabler  s     $q'8,,r   ra  c                    |\  }}}||}d}|d}|dk  rt        d      ||k  rt        d      |dk  rt        d      t        j                  |||| j                        S )Nr   r@   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19&'ABB%<&'GHH!8&'9::  dtOOr   )
Nr   r   r   NFNFNN)r"  zbuild.Buildr  zT.Optional[Backend]r   r   r   r   r   r   r  z"T.Optional[T.Dict[OptionKey, str]]r#  r   r  !T.Optional[mparser.CodeBlockNode]r$  r   r	  ,T.Optional[T.Set[InterpreterRuleRelaxation]]r  z T.Optional['argparse.Namespace']r   r   )r   z-T.Tuple[T.Tuple[object], T.Dict[str, object]])r   r   )r  zT.Type[mesonlib.HoldableObject]r  zT.Type[ObjectHolder]r   r   )r  z2T.List[T.Union[TYPE_var, ExecutableSerialisation]]r   r   )r  r   r  mparser.BaseNoder   r   )r   zmesonlib.OrderedSet[str])r8  zmesonlib.FileOrStringr   r   )r   zT.Dict[str, InterpreterObject])r  r  r  T.Tuple[str]r{   z'kwtypes.FuncImportModule'r   zET.Union[ExtensionModule, NewExtensionModule, NotFoundExtensionModule])r  mparser.FunctionNoder  T.Tuple[T.List[str]]r{   'TYPE_kwargs'r   T.List[mesonlib.File])r  r  r  T.List[TYPE_var]r{   zkwtypes.FuncDeclareDependencyr   zdependencies.Dependency)r  r  r  zT.Tuple[bool, T.Optional[str]]r{   r  r   r   )r  r  r  T.Tuple[T.Union[build.Executable, ExternalProgram, compilers.Compiler, mesonlib.File, str], T.List[T.Union[build.Executable, ExternalProgram, compilers.Compiler, mesonlib.File, str]]]r{   'kwtypes.RunCommand'r   rG   )F)r  r  r{   r  r  r   r   rG   )r  r  r  r  r{   zkwtypes.Subprojectr   rE   )NN)r  r   r  r   ro  zT.Optional[Exception]r   rE   r$  )r  r   r{   kwtypes.DoSubprojectr  zT.Optional[wrap.Method]r   rE   )NNN)r  r   r   r   r   T.Dict[OptionKey, str]r{   r  r  r  r  T.Optional[T.List[str]]r	  r  r   rE   )
r  r   r   r   r   r  r{   r  r   rE   )r"  r   r   zcoredata.UserOption)r  r  r  r  r{   r  r   z(T.Union[coredata.UserOption, 'TYPE_var'])r  r  r  z'T.Tuple[T.Optional[T.Dict[str, T.Any]]]r{   r  r   zbuild.ConfigurationData)r  r  r  zT.Tuple[str, T.List[str]]r{   z'kwtypes.Project'r   r   )r  r  r  r  r{   z'kwtypes.FuncAddLanguages'r   r   )r  r  r{  r   r   T.List[str])r  r  )r  r  r  z<T.Tuple[T.Union[str, T.Dict[str, T.Any]], T.Optional[T.Any]]r{   'kwtypes.Summary'r   r   )r   r   r{   r  r   r   )r  r  r  r  r{   r   r   r8   )r  r  r   r   rT  r   r   r   )rT  r   r   r   )rT  r   r  T.List[mesonlib.FileOrString]r   T.Optional[ExternalProgram])r  r  r  r  r  T.List[mlog.TV_Loggable]r   r  )r  r  r  zT.List['mlog.TV_Loggable']r   zGT.Optional[T.Union[ExternalProgram, OverrideProgram, build.Executable]])r  r  r   r   )r  r   r  z=T.Union[build.Executable, ExternalProgram, 'OverrideProgram']r   r   )r  r  r   r   )r  r  rT  r   r   CT.Optional[T.Dict[OptionKey, T.Union[str, int, bool, T.List[str]]]]r   r   r  r   r  T.Union[str, T.List[str]]r  r  r  T.Optional[ProgramVersionFunc]r   zAT.Union['ExternalProgram', 'build.Executable', 'OverrideProgram'])r  r  rT  r   r   r  r   r   r  r  r  r  r  r  r  r  r   GT.Optional[T.Union[ExternalProgram, build.Executable, OverrideProgram]])
r  z;T.Union[ExternalProgram, build.Executable, OverrideProgram]r  r  r  r  r  r  r   r   )r   r   r  r  r   z7T.Dict[OptionKey, T.Union[str, int, bool, T.List[str]]]r   r   r  r  r   r  )r  r  r  z&T.Tuple[T.List[mesonlib.FileOrString]]r{   z'kwtypes.FindProgram'r   z?T.Union['build.Executable', ExternalProgram, 'OverrideProgram'])r  r  r  r  r   r    )r  r  r   T.Tuple[str, SourcesVarargsType]r{   r  r   build.Executable)r  r  r  r  r{   rr  r   build.StaticLibrary)r  r  r  r  r{   rs  r   build.SharedLibrary)r  r  r  r  r{   kwtypes.Libraryr   zbuild.BothLibraries)r  r  r  r  r{   kwtypes.SharedModuler   build.SharedModule)r  r  r  r  r{   r  r   r  )r  r  r  zGT.Tuple[str, T.List[T.Union[str, mesonlib.File, build.GeneratedTypes]]]r{   kwtypes.Jarr   	build.Jar)r  r  r  r  r{   zkwtypes.BuildTargetr   zwT.Union[build.Executable, build.StaticLibrary, build.SharedLibrary, build.SharedModule, build.BothLibraries, build.Jar])r  r  r  zT.List['TYPE_var']r{   z'kwtypes.VcsTag'r   build.CustomTarget)r  r  r  r~   r{   r   r   z
T.NoReturn)r-  r   r.  zT.Iterable[str]r  r   r   r   )r  r  r  r  r{   z'kwtypes.CustomTarget'r   r  )r  r  r  r  r{   z'kwtypes.RunTarget'r   zbuild.RunTarget)r  r  r  z"T.Tuple[str, T.List[build.Target]]r{   r  r   zbuild.AliasTarget)r  r  r  z3T.Tuple[T.Union[build.Executable, ExternalProgram]]r{   z'kwtypes.FuncGenerator'r   zbuild.Generator)r  r  r  RT.Tuple[str, T.Union[build.Executable, build.Jar, ExternalProgram, mesonlib.File]]r{   z'kwtypes.FuncBenchmark'r   r   )r  r  r  r  r{   z'kwtypes.FuncTest'r   r   )r{   zOT.Union[EnvironmentVariables, T.Dict[str, 'TYPE_var'], T.List['TYPE_var'], str]r   r   )r  r  r  r  r{   z'kwtypes.BaseTest'r   rF   )r  r  r  r  r{   r   re  r   )r  r  r  (T.Tuple[T.List['mesonlib.FileOrString']]r{   z'kwtypes.FuncInstallHeaders'r   zbuild.Headers)r  r  r  r  r{   z'kwtypes.FuncInstallMan'r   z	build.Man)r  r  r  r  r   r   )r  r  r  r  r   zbuild.SymlinkData)r  r  r  z0T.Tuple[object, T.Optional[T.Dict[str, object]]]r{   r  r   zbuild.StructuredSources)r  r  r  r  r{   z'kwtypes.Subdir'r   r   )r  r   r   r   )r  r  r  r  r{   z'kwtypes.FuncInstallData'r   
build.Data)NFN)r
  r  r9  r   r4  r   r  r   r  r   r  r   rg  r   rh  zT.Optional[bool]r   r  )r  r  r  r  r{   z'kwtypes.FuncInstallSubdir'r   zbuild.InstallDir)r  r  r  r  r{   zkwtypes.ConfigureFile)rR  )r#  r   r   zT.List[build.IncludeDirs])r  r  r  r  r{   z 'kwtypes.FuncIncludeDirectories'r   build.IncludeDirs)r  r  r  r   r   r  )r  r  r  r  r{   z'kwtypes.AddTestSetup'r   r   )r  r  r  r  r{   'kwtypes.FuncAddProjectArgs'r   r   )r  r  r  z(T.Tuple[T.List[dependencies.Dependency]]r{   r  r   r   )r  r  r   r   )
r  r  r$  T.Dict[str, T.List[str]]r  r  r{   r  r   r   )
r  r  r$  z%T.Dict[str, T.Dict[str, T.List[str]]]r  r  r{   r  r   r   )r  r  r$  r  r(  r   r  r  r{   r  r   r   )r  r  r  zHT.Tuple[T.Union[None, str, T.List['TYPE_var'], T.Dict[str, 'TYPE_var']]]r{   r  r   r   )r  r  r  r  r{   r  r   r   )T)r
  T.List['mesonlib.FileOrString']r7  r   r   zT.List['mesonlib.File'])r
  r  r7  r   r   r  )r
  z<T.List[T.Union[mesonlib.FileOrString, build.GeneratedTypes]]r   z4T.List[T.Union[mesonlib.File, build.GeneratedTypes]])r
  zT.List['SourceInputs']r7  r   r   T.List['SourceOutputs'])r
  zT.List[SourcesVarargsType]r7  r   r   r  )r  r   r   r   )r  r   r_  zbuild.Targetr   r   )r  r  r  r  r{   r  )rz  r  r   z+T.Tuple[T.List[mesonlib.File], T.List[str]])r{   z*T.Dict[str, T.List[mesonlib.FileOrString]]r   r   )
r  r  r  r  r{   r  r  zT.Type[build.Executable]r   r  )
r  r  r  r  r{   rr  r  zT.Type[build.StaticLibrary]r   r  )
r  r  r  r  r{   rs  r  zT.Type[build.SharedLibrary]r   r  )
r  r  r  r  r{   r  r  zT.Type[build.SharedModule]r   r  )
r  r  r  r  r{   r  r  zT.Type[build.Jar]r   r  )
r  r  r  r  r{   zlT.Union[kwtypes.Executable, kwtypes.StaticLibrary, kwtypes.SharedLibrary, kwtypes.SharedModule, kwtypes.Jar]r  zjT.Type[T.Union[build.Executable, build.StaticLibrary, build.SharedModule, build.SharedLibrary, build.Jar]]r   zbT.Union[build.Executable, build.StaticLibrary, build.SharedModule, build.SharedLibrary, build.Jar])r{   zkwtypes._BuildTargetr   r   )r  zmesonlib.HoldableObjectr   r   )r   r   )r  r  r  zT.Tuple[str, object]r{   r  r   r   )r  r  r  z3T.Tuple[T.Union[str, Disabler], T.Optional[object]]r{   r  r   z
'TYPE_var')r  r  r  r  r{   r  r   r   )r  r  r  r  r{   r  r   r   )r{   r   r   r   )r  r  r  zT.Tuple[object]r{   r  r   r   )r  z.T.Tuple[int, T.Optional[int], T.Optional[int]]r{   r   r   zP_OBJ.RangeHolder)r   r   r   r   r(  r!  r  r  r  r  r  r"  r%  r=  rA  rZ  r&   r   r%   rm   r  r\   r2   r  r(   r  r'   r$   r"   r   ra   r]   rX   rf   rg   rp   r   r   rs   ru   r
   r  r  r   r{  r  r  r   r   r  r^   r  r  r  rW   r  r  r  r  r  r  r)  r  r   r  rB  r   r  ru  r|  r*   r  r~  r3   objectr  r  r  r  r  r  r  rv   r  r9  r  r  r  r  r  r  r  r  r   rG  r  r  r  r  rk   r  r6   r)   permitted_dependency_kwargsr  r  known_exe_kwargsrq   rR   r  known_stlib_kwargsrr   r  known_shlib_kwargsrn   r  known_library_kwargsrT   r}  known_shmod_kwargsro   r  r  known_jar_kwargsr  r  r  r  rS   r  known_build_target_kwargsrK   r~  rP   rU   r  r  staticmethodr#  rL   rM   rN   rO   rQ   rh   rY   rZ   r[   rb   rd   r  r  Targetrz  r  r  rt   r|  r  rX  rb  rS  rl   rc   re   r  r  r  ri   r  r  r  r>  r  r  r  r   r  rV   r  r  r  r  ry  rj   rs  rt  rv  rx  r   r    rw  r!  r  r  r#  r_   r`   r  r  r  r6  r:  r  ru  overloadrv  r?  r  r  r  r  r  rB  r  rZ  r  r  r  r+   r  r1   r,   r  r  r  rs  r  r  r  r  s   @r   r   r     sf   
 04"$ &3NR"9=&+LPIM?"#?" -?"  	?"
 ?" !$?" *L?" ?" 7?"  $?" J?" 'G?" ?"B=L$@HD?B	^<>
>$!(F9* Hc"**
 ;6; <A;  #;z GS)5  *5 ."3D#">VXY"""xH###(3+0s;TSUV8,-!24(--9M!NX\fhpwx($9IJ)c8_-).tU5K5KLVZdfnuv "(E"Ja"! ""H HdSE2D)D.2D  3DG 			?I,>,>sS!!?I4F4FWZ[] 'D(+8<)T4x@H%	3 C3 "63 ;E3	]3 .3	JQ CJQ "6JQ '+	JQ 8B	JQX@ L#&X.).tS92tT	/ '/ W[?C'<HXHZ GKHLY];+.D;+%9;+ #D;+ /F	;+
 +W;+
 cs;+z.D%9>N6
6.D
6%9
6>N
6!SF L#& -2Z  '* (4&9	7(5	7:Q	7  :	7+@ IsC0/C?3(--400B	
 	)/c:HEt]ab/#4T3#?UYahi"C?L! 1 L!\ /9Xh7Gx#XZefOS1 2 g,? $  $/ 	8$IT{VH=)S"-)T51*sHoX>	
=.
=37
= > % 
=U& P 	8$/  % / Q  Q "(  # ( 5  5 NC(%i;KYX\L];^_J	 )
J$=~#>(@E`:
+E
$k
7
. 8E7I7Iqu+/>@AEIM'4+n %) :> #<	
 (? )G  a>'(k'!%' %0'  9	'
 &D' $<' d'R&?,J +C HL0=/f=(,=:R= $k=  NS(--,@aP*&+D#6DX`a).tS92t[cdW- ?"7?^?  Q? lH/F.GHlH/?.@AlH|n=lH~.>?lH.fglHzl;lHxj901L#1=, 6 6 6X FVZ[& \ > 2  : < h @ > B I&P 
H%   & U++,L#?,DDtDG>G 2G7GG E @ -G
 U--.$c?C"H^H4HJ>J 5J:MJ I D /J
 U--.$c?C"H^H4H> 5:M I D / )*$c?C"E[EE=<=-=2E= F D +=
 *U--.OS/B/GNG$GI!AI#7I<NI H C / +I
 )*IsO<)>k>>6;6,61A6 ? = +6
 U++,E3hmmU=O=OQVQhQhjoj}j}  @E  @V  @V  X]  Xi  Xi  )j  k%6'66@^@$@)2@ 7 k -@
 nh?Q0RS./NCA.H#3H4H@ @@"5@ [@ I B 0 T@( D)dS%*;*;U=O=OQVQhQhjy  |D  |I  |I  %J  K		
 	*sHo."C=3 3j x("   )" 	j 	j OcU3H%X.&$X>)T51)T5A%([#9[>P[) 4*[z L#&H%	 38G ' )NC1M"/4E  N * K%"2"2O!DE+0sNY]gkl(-dCUKVZdhi)T5AP6;J F" Ku'7'7OU]UbUb&cd+))1o161;?1 * e1
 FC%"2"2EIIPXP]P]!^_&R8RY}dD%QR0j0,0150 S `0
))'j)',)'15)'V	Di	D+	D;?	D %X]]/CD(S(O,X.#K%AFS E@ MC+?@(S(O8<X.	G!9>G A* "H--#xA
 . !8,NC(-t4-t4	#7(9 ) - $h/(&4&A0(0B0 "0 '>0   B 002 Hc"dF+y	

,"
 #,"f NS(--,@A).tc8==5IJTXbde(-dC8"dZbcX.H-h/	Q HQ";Q@JQ	 BQ@ @D05>B(0:I. .= *.	
 ,<
 HR2 $c*-t4#T59/#4T3#?d(h	j 	'):4)Ed(h	j 	X.H-$?DT +: 
)Y/H-)T5Ate&6&6I[I[]e]j]jlo%p  D  E  GO  P	

 	tc3%568O8OQYZ	
 	D%x4M	
 	*c7(C(C,-IJ	LdX]]C$89		
 	)dH-X>-#tbY	[/38SY[bRc,-BC	E,hWMG$JXB$9XBK$ LXBt& )37';e)TUF)IFN_F V 8FAF $c*-!24#9O!PZ^hjk%u-&Q7"$5dC$@$XZbjk,e8DW +W8 *C8()[Ad B 9d /=()[Ai B >i +S9)9kBg C :g 0#>()[Al B ?l *H5.8O8OP,iEu F Q 6u$96B$/B9UBZ^BD%0D:VD[_D
;$(
;0;
;Ea
;fj
; MS$,=+>?-0G0@0G0Gh0WX&!.&3G& Y @ & L#1=
  >
",0*~X ZZ E  EZZ N  NZZ j  jZZ{ {ZZ @ 	C 	C'KR  (+"; ,";H
]".+" ZZq/q>Vq[kq q ZZz2zA\zatz z ZZz2zA\zatz z ZZw1w@Zw_qw w ZZ\(\7H\MV\ \z Jz #Mz }zx4"%Z`% NC0!: "   1: NS(OfXFR"/R4>R    GR M3')  ()  (+$c*X  + ,X E E x(M6*-  + )- "GS3*5P 6 # Pr   r   )r   z)T.Union[T.List, str, mesonlib.File, None]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   programsr   r   r    r3  r!   interpreterbaser"   r#   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?   rA   r4  rB   r  	mesonmainrC   dependencyfallbacksrD   rE   rF   rG   rH   rI   rJ   type_checkingrK   rL   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   r  pathlibry   enumrz   r  r   r\  r  r0  r   typingru  r  rf  r  TYPE_CHECKINGargparser{   kwtypesbackend.backendsr|   interpreterbase.baseobjectsr}   r~   r   r   r   Unionr   r  r  r  r  r  r  r   SourceInputsr  SourceOutputsFileOrStringGeneratedTypesBuildTargetSourceCallabler  ProgramVersionFuncr   r   r  r  r  r  r  r  r  r   r  r  r   )rV  s   0r   <module>r     s   #          ! T T T T C %  i i D  D d d : \ \ @ 4 u u * ' %   : . . . . . . . . . . . .^ "   	   	      ??#*VV*1 778==%*=*=u?P?PRWReRe 22E4F4FH[H[ 1137 8L GGHMM5+>+>!--u/F/FHZHZ!22E4G4GI`I`a bM  5 5u7K7KUMdMd deQWW_e>N>NP_-_%`$acf$fgD? D?N 
	!*!8!8F8!CDAs,DE "+!8!8F8!CDAs,DE  		 O ( ( , F C3P/> C3P_ EDs   O3O	