
    ex                    b   U d dl mZ 	 d dlmZ d dlZd dlZd dlZd dlZd dlm	Z	m
Z
 d dlZd dlZddl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 dd	lmZ dd
lmZ ddlm Z  ddlm!Z! ddl"m#Z#m$Z$m%Z%m&Z& ej'        rd dl(Z(ddl)m*Z* ddl"m+Z+ dsdZ,dtdZ-dudZ. G d d          Z/	 	 	 dvdwd Z0dxd$Z1dyd(Z2dzd,Z3d{d.Z4d|d1Z5d}d3Z6d~d7Z7dd9Z8ddd<Z9dd>Z:ddAZ;ddCZ<ddEZ=ddGZ>ddKZ?ddLZ@ddNZAddPZBddRZCddSZDdd[ZEddd^ZFdddaZGdddcZHdddZIg ZJdeKde<   ddgZLddhZMddiZNddlZOdddrZPdS )    )annotations)redirect_stdoutN)PathPurePath   )buildmesonlibcoredata)IntrospectionInterpreterBUILD_TARGET_FUNCTIONSAstConditionLevelAstIDGeneratorAstIndentationGeneratorAstJSONPrinter)backends)
Dependency)environment)ObjectHolder)	OptionKey)FunctionNode	ArrayNodeArgumentNodeBaseStringNode)Interpreter)BaseNodeinfo_dirstrreturnc                B    t           j                            | d          S )Nmeson-info.jsonospathjoin)r   s    6/usr/lib/python3.11/site-packages/mesonbuild/mintro.pyget_meson_info_filer&   /   s    7<<"3444    c                     dS )Nz1.0.0 r)   r'   r%   get_meson_introspection_versionr*   2   s    7r'   T.List[str]c                 
    ddgS )Nz>=1.0z<2.0r)   r)   r'   r%   (get_meson_introspection_required_versionr-   5   s    Vr'   c                      e Zd Z	 	 ddd
ZdS )IntroCommandNdescr   func/T.Optional[T.Callable[[], T.Union[dict, list]]]no_bdGT.Optional[T.Callable[[IntrospectionInterpreter], T.Union[dict, list]]]r   Nonec                6    |dz   | _         || _        || _        d S )N.)r0   r1   r3   )selfr0   r1   r3   s       r%   __init__zIntroCommand.__init__9   s!     3J		


r'   )NN)r0   r   r1   r2   r3   r4   r   r5   )__name__
__module____qualname__r9   r)   r'   r%   r/   r/   8   s7         JNbf      r'   r/   r
   T.Optional[cdata.CoreData]	builddataT.Optional[build.Build]backendT.Optional[backends.Backend]'T.Mapping[str, IntroCommand]'c                    rlrj                                                                                                                                                              j        nd xxt          j        dt          dt                    fdt          dfd          fdt          d	 fd
t                    fdt          dfd          fdt          d fd          fdt          d fdt                    fdt          dt                    fdt          dfd          fdt          dfd          fdt          dfd          fd t          d!fd"t                    fd#t          d$fd%t                    fd&t          d'fd(          fg          S ))NastzDump the AST of the meson file)r3   
benchmarkszList all benchmarksc                 "    t                     S N)list_benchmarks)benchmarkdatas   r%   <lambda>z/get_meson_introspection_types.<locals>.<lambda>O   s    XeHfHf r'   )r1   buildoptionszList all build optionsc                 "    t                     S rG   )list_buildoptionsr
   s   r%   rJ   z/get_meson_introspection_types.<locals>.<lambda>P   s    M^_gMhMh r'   )r1   r3   buildsystem_filesz(List files that make up the build systemc                 $    t                     S rG   )list_buildsystem_files)r>   interpreters   r%   rJ   z/get_meson_introspection_types.<locals>.<lambda>Q   s$    dz  |E  GR  eS  eS r'   	compilerszList used compilersc                 "    t                     S rG   )list_compilersrN   s   r%   rJ   z/get_meson_introspection_types.<locals>.<lambda>R   s    ~V^G_G_ r'   dependencieszList external dependenciesc                 $    t                     S rG   )	list_deps)r@   r
   s   r%   rJ   z/get_meson_introspection_types.<locals>.<lambda>S   s    QZ[celQmQm r'   scan_dependenciesz2Scan for dependencies used in the meson.build file	installedz(List all installed files and directoriesc                 "    t                     S rG   )list_installedinstalldatas   r%   rJ   z/get_meson_introspection_types.<locals>.<lambda>U   s    \jkv\w\w r'   install_planz;List all installed files and directories with their detailsc                 "    t                     S rG   )list_install_planr]   s   r%   rJ   z/get_meson_introspection_types.<locals>.<lambda>V   s!      sD  EP  sQ  sQ r'   machinesz2Information about host, build, and target machinesc                 "    t                     S rG   )list_machinesr>   s   r%   rJ   z/get_meson_introspection_types.<locals>.<lambda>W   s    ers|e}e} r'   projectinfozInformation about projectsc                 "    t                     S rG   )list_projinfore   s   r%   rJ   z/get_meson_introspection_types.<locals>.<lambda>X   s    P]^gPhPh r'   targetszList top level targetsc                 &    t                     S rG   )list_targets)r@   r>   r^   s   r%   rJ   z/get_meson_introspection_types.<locals>.<lambda>Y   s    U^`kmtHuHu r'   testszList all unit testsc                 "    t                     S rG   )
list_teststestdatas   r%   rJ   z/get_meson_introspection_types.<locals>.<lambda>Z   s    :hCWCW r'   )create_test_serialisationget_benchmarks	get_testscreate_install_datarR   collectionsOrderedDictr/   dump_astlist_buildoptions_from_sourcelist_deps_from_sourcelist_projinfo_from_sourcelist_targets_from_source)r
   r>   r@   rI   r^   rR   rp   s   ```@@@@r%   get_meson_introspection_typesr|   A   s     69 699):R:R:T:TUU44Y5H5H5J5JKK1133)1555; "	=XNNNO	|$9@f@f@f@fgggh	&>EhEhEhEh  qN  O  O  O  	P	l+U  ]S  ]S  ]S  ]S  ]S  T  T  T  	U	l#8?_?_?_?_```a	&BImImImImIm  vK  L  L  L  	M	l+_g|}}}~	l#MTwTwTwTwxxxy	&c  kQ  kQ  kQ  kQ  R  R  R  	S	\"V]}]}]}]}~~~	%AHhHhHhHh  qJ  K  K  K  	L	L!9@u@u@u@u@u@u  ~V  W  W  W  	X	,4;W;W;W;WXXXY$   r'   parserargparse.ArgumentParserr5   c                   t                      }|                                D ]=\  }}d|                    dd          z   }|                     |d|d|j                   >|                     dt          t          j                  dd	d
           |                     dddddd           |                     dddddd           |                     dddddd           |                     dddd           d S )Nz--_-
store_trueF)actiondestdefaulthelpz	--backendr@   ninjaz8The backend to use for the --buildoptions introspection.)choicesr   r   r   z-az--allallz Print all available information.z-iz--indentindentzEnable pretty printed JSON.z-fz--force-object-output
force_dictz]Always use the new JSON format for multiple entries (even for 0 and 1 introspection commands)builddir?r7   zThe build directory)nargsr   r   )r|   itemsreplaceadd_argumentr0   sortedcdatabackendlist)r}   intro_typeskeyvalflags        r%   add_argumentsr   _   sP   /11K%%'' _ _Sckk#s+++DCUXU]^^^^
VE4E-F-FY`gW  Y Y Y
glPU?  A A A
jHV[:  < < <
5lQ]gl|  ~ ~ ~

#sAVWWWWWr'   intrr   T.Dict[str, T.Any]c                `    t                      }| j                            |           |j        S rG   )r   rD   acceptresult)r   printers     r%   rw   rw   o   s)    GHOOG>r'   r^   backends.InstallDataT.Dict[str, str]c                   i }| | j         D ]z}t          j                            | j        |j        t          j                            |j                            |t          j                            | j        |j                  <   {| j	        D ]4}t          j                            | j        |j
                  ||j        <   5| j        D ]W}t          j                            | j        |j
        t          j                            |j                            ||j        <   X| j        D ]4}t          j                            | j        |j
                  ||j        <   5| j        D ]4}t          j                            | j        |j
                  ||j        <   5| j        D ]T}t          j                            |j                  }t          j                            | j        |j
        |          ||<   U|S rG   )ri   r"   r#   r$   prefixoutdirbasenamefname	build_dirdatainstall_pathheadersmaninstall_subdirssymlinksname)r^   restisr   s         r%   r\   r\   t   s   
C$ 	V 	VA[/27;K;KAG;T;TUU [2AG<<==! 	K 	KA',,{'91>JJCKK$ 	e 	eA',,{'91>27K[K[\]\bKcKcddCKK 	K 	KA',,{'91>JJCKK, 	K 	KA',,{'91>JJCKK% 	W 	WAw''//HGLL);Q^XVVCMMJr'   6T.Dict[str, T.Dict[str, T.Dict[str, T.Optional[str]]]]c                <    d fd j         D             i} j         j         j         j        d                                D ]\  }}|D ]}|j        p|}|j        }|dk    rBt          j	        
                    |t          j	                            |j	                            }||j        pd |j        pd d}|dk    r2|j        pg g f\  }}	t          |	          |d<   t          |          |d<   |                    |i           ||<   |||         |j	        <   Ќ|S )	Nri   c                    i | ]D}t           j                            j        |j                  |j        |j        pd |j        pd dES )Ndestinationtag
subproject)r"   r#   r$   r   r   out_namer   r   ).0targetr^   s     r%   
<dictcomp>z%list_install_plan.<locals>.<dictcomp>   sf     
 
 
  GLL.==%z)T$/74@ @
 
 
r'   )r   r   r   r   r   r   r   exclude_dirsexclude_files)ri   r   r   r   r   r   	data_typeinstall_path_namer"   r#   r$   r   r   r   excludelistget)
r^   planr   	data_listr   r   r   entryr   r   s
   `         r%   ra   ra      su    
 
 
 
 &-
 
 
	DD  &&6	 
 egg/ /Y  	/ 	/D-#I $ 6i$&GLL1BBGDTDTUYU^D_D_$`$`!  1x'4"o5 E '''.2l.Fr2h+|(,\(:(:n%)-m)<)<o&"hhy"55DO).DODI&&%	/( Kr'   cdata.CoreDatasubdirc                V    |                      t          d                    dk    rdS |S )Nlayoutflatz	meson-out)
get_optionr   )r
   r   s     r%   get_target_dirr      s-    9X..//699{r'   kT.List[T.Dict[str, T.Union[bool, str, T.List[T.Union[str, T.Dict[str, T.Union[str, T.List[str], bool]]]]]]]c                   g }t          | j                  dfd}| j        D ] |d                   } |d                   }t          | j        d                   |d	         d
         d         d         fdd         D             d         dg g d |D             g dgg d |D             d d         dgz  }|S )N	node_listT.List[BaseNode]r   T.List[Path]c                l   g }| D ]}g }t          |t                    rBt          |j        j                  }|j        j        t          v r|                    d           n>t          |t                    r|j        j        }nt          |t                    r|j        }|D ]t}t          |t                    r5t          |j        t                    sJ |t          |j                  gz  }Lt          |t                    r|t          |          gz  }ufd|D             }d |D             }|S )Nr   c                ,    g | ]}d          z  |z  S )r   r)   )r   xr   root_dirs     r%   
<listcomp>zDlist_targets_from_source.<locals>.nodes_to_paths.<locals>.<listcomp>   s'    777ax!H+%)777r'   c                6    g | ]}|                                 S r)   )resolver   r   s     r%   r   zDlist_targets_from_source.<locals>.nodes_to_paths.<locals>.<listcomp>   s     (((qqyy{{(((r'   )
isinstancer   r   args	arguments	func_namevaluer   popr   r   r   r   r   )r   r   nr   jr   r   s        r%   nodes_to_pathsz0list_targets_from_source.<locals>.nodes_to_paths   sG    	% 	%A%'D!\** #AF,--;$(>>>HHQKKKAy)) #v'A|,, #{ % %a00 %%ags33333DMM?*CC3'' %DGG9$C% 877773777((C(((
r'   sourcesextra_filesr   r   idtype
defined_inc                P    g | ]"}t           j                            |          #S r)   r!   )r   r   r   s     r%   r   z,list_targets_from_source.<locals>.<listcomp>   s)    GGGQfa00GGGr'   outputsbuild_by_defaultunknownc                ,    g | ]}t          |          S r)   r   r   s     r%   r   z,list_targets_from_source.<locals>.<listcomp>       444qCFF444r'   )languagecompiler
parametersr   generated_sourcesc                ,    g | ]}t          |          S r)   r   r   s     r%   r   z,list_targets_from_source.<locals>.<listcomp>   r   r'   rZ   )r   r   r   r   filenamer   target_sourcesdependsr   r   rZ   )r   r   r   r   )r   source_rootri   r   r
   )r   tlistr   r   extra_fr   r   r   s        @@@r%   r{   r{      s:   y{ED$%%H      , \   .9.. .=!122q{;;fID'fIL/GGGG!I,GGG !"4 5% 44G444%'     44G444;#
 
  	( Lr'   build.Buildbackends.BackendT.List[T.Any]c                   g }| j                                         | j                                         i |j        D ]R}t          j                            |j                  }t          t          |j
        |j        |                    g|<   S|j        D ]}t          j                            |j                  }	 t          j                            |j                           |<   |                             t          t          |j
        |j        |                               # t"          $ r Y w xY w|                                                                 D ]\  }}t)          |t*          j                  st/          d          t1          | j         j        |j                  |                                ||                                t          j                            t          j                            |j        t           j                            fd|                                 D             |j!        |"                    ||          fd|j#        D             |j$        pd d tK          |dg           D             d tK          |dg           D             d}	tK          |d	d           }
|
|
&                                |	d	<   tK          |d
d           }|||	d
<   |rI|'                                r5d|	d<   fd|                                 D             }d |D             |	d<   nd|	d<   |                    |	           |S )NzxThe target object in `builddata.get_targets()` is not of type `build.Target`. Please file a bug with this error message.c                R    g | ]#}t           j                            |          $S r)   r!   )r   r   r   r   s     r%   r   z list_targets.<locals>.<listcomp>  s+    ZZZi;;ZZZr'   c           	         g | ]J}t           j                            t           j                            |j        |j                            KS r)   )r"   r#   normpathr$   r   r   r   r   src_dirs     r%   r   z list_targets.<locals>.<listcomp>  s@    sss[\BG,,RW\\'18QW-U-UVVsssr'   c                    g | ]	}|j         
S r)   r   )r   ds     r%   r   z list_targets.<locals>.<listcomp>  s    RRRQVRRRr'   external_depsc                6    g | ]}|                                 S r)   get_idr   libs     r%   r   z list_targets.<locals>.<listcomp>  s     TTT

TTTr'   rV   )r   r   r   r   r   r   r   r   r   rV   r   vs_module_defswin_subsystemTrZ   c                >    g | ]}                     |d g          S rG   )r   )r   r   install_lookuptables     r%   r   z list_targets.<locals>.<listcomp>  s,    TTT!&**1tf55TTTr'   c                    g | ]	}|D ]}|
S r)   r)   )r   sublistr   s      r%   r   z list_targets.<locals>.<listcomp>  s%    $K$K$K77$K$KaQ$K$K$K$Kr'   install_filenameF)(r   get_build_dirget_source_dirri   r"   r#   r   r   r   r   r   r   r   r   r   appendr   KeyErrorget_targetsr   r   r   TargetRuntimeErrorr   r
   r   get_basenameget_typenamer  r$   build_filenameget_outputsr   get_introspection_datar   r   getattrrelative_nameshould_install)r>   r^   r@   r   r   r   r   idnamer   r   r  r  ifnr   r  r   r  s                @@@@r%   rk   rk      s   E%3355I#2244G   ` `7##AG,,),Xk6H!(T\-]-])^)^(_H%%!   7##AF++	,?@P@PQRQY@Z@Z,[))00Xk>PRSR`bj5k5k1l1lmmmm 	 	 	D	 &113399;;    &%,// 	[   Z  [  [  [	 5 >NN''))''))'**27<<P[Pj+k+kllZZZZZVEWEWEYEYZZZ & 7%<<VVLLssss`f`rsss +3tRRWV_b-Q-QRRRTTPR0S0STTT
 
 !)94@@%"0">">"@"@A>>$!.Ao 	#60022 	#!AkNTTTTv?Q?Q?S?STTTC$K$Kc$K$K$KA !!"AkNQLs   A.D22
D?>D?9T.List[T.Dict[str, T.Union[str, bool, int, T.List[str]]]]c                Z    d | j         d         D             }t          | j        |          S )Nc                    g | ]
}|d          S r  r)   )r   r   s     r%   r   z1list_buildoptions_from_source.<locals>.<listcomp>"  s    GGG1V9GGGr'   subprojects)project_datarM   r
   )r   r)  s     r%   rx   rx   !  s/    GGd&7&FGGGKT]K888r'   r)  T.Optional[T.List[str]]c                P    g |pg }t          t          j                  }t          d          t          d          h}i }i }i } j                                        D ]W\  }}||v r|||<   ||v r|||<   |                                r*|||<   |j        s|D ]}	|||                    |	          <   Xd fd
}
 |
|d            |
d  j                                        D             d            |
d  j                                        D             d            |
d t           j                                        d           D             d            |
|d            |
d  j                                        D             d            |
|d           S )N	errorlogsstdsplit)r   options'cdata.KeyedOptionDictType'sectionr   r   r5   c                   t          |                                           D ],\  }}t          |          |j        |                    |          r|j                                        ndd}t          |t          j	                  rd}nt          |t          j
                  rd}nt          |t          j                  r|j        |d<   d}nZt          |t          j                  rd}n=t          |t          j                  rd}|j        r
|j        |d<   nt          d	          ||d
<   |j        |d<                       |           .d S )Nany)r   r   r1  machinestringbooleanr   combointegerarrayzUnknown option typer   description)r   r   r   r   is_per_machine_optionr4  get_lower_case_namer   r   UserStringOptionUserBooleanOptionUserComboOptionr   UserIntegerOptionUserArrayOptionr  r:  r  )r/  r1  r   optoptdicttypestrr
   optlists         r%   add_keysz#list_buildoptions.<locals>.add_keys;  s^   w}}// 	$ 	$HC"3xx#)GOGeGefiGjGj"u#+"A"A"C"C"Cpuw wG#u566 :"C!899 :#C!677 
:%([	"!C!899 :#C!677 :!; 5),GI&"#8999%GFO%(_GM"NN7####)	$ 	$r'   corec                B    i | ]\  }}|                                 ||S r)   )
is_backendr   kvs      r%   r   z%list_buildoptions.<locals>.<dictcomp>S  +    JJJtq!1<<>>JaJJJr'   r@   c                B    i | ]\  }}|                                 ||S r)   )is_baserJ  s      r%   r   z%list_buildoptions.<locals>.<dictcomp>T  s+    GGGtq!199;;GaGGGr'   basec                B    i | ]\  }}|                                 ||S r)   )is_compilerrJ  s      r%   r   z%list_buildoptions.<locals>.<dictcomp>V  s0    jjj$!QZ[ZgZgZiZijAjjjr'   c                    | d         j         S )Nr   )r4  )r   s    r%   rJ   z#list_buildoptions.<locals>.<lambda>V  s    1 r'   )r   r   	directoryc                B    i | ]\  }}|                                 ||S r)   )
is_projectrJ  s      r%   r   z%list_buildoptions.<locals>.<dictcomp>Z  rM  r'   usertest)r/  r0  r1  r   r   r5   )
setr   BUILTIN_DIR_OPTIONSr   r/  r   
is_builtinyieldingevolver   )r
   r)  dir_option_namestest_option_namesdir_optionstest_optionscore_optionsrK  rL  r   rF  rE  s   `          @r%   rM   rM   %  s+   IKG#K5455";//":..0 79K79L79L &&(( 	= 	=1   KNN###LOO\\^^ 	=LO: =$ = =A;<LQ!7!788$ $ $ $ $ $ $. H\6"""HJJx/5577JJJIVVVHGGx/5577GGGPPPHjj&!1!7!7!9!9?U?UVVVjjj   H[+&&&HJJx/5577JJJFSSSH\6"""Nr'   r  c                     t          h d          }g }t          j                   D ];\  }}|                     fd|                    |          D                        <|S )N>   meson.optionsmeson_options.txtmeson.buildc              3     K   | ]B}t           j                            t           j                            |                    V  Cd S rG   )r"   r#   relpathr$   )r   frootr  s     r%   	<genexpr>z.find_buildsystem_files_list.<locals>.<genexpr>c  s_       B B T1(=(=wGG B B B B B Br'   )	frozensetr"   walkextendintersection)r  build_filesfilelistr   filesrj  s   `    @r%   find_buildsystem_files_listrs  ^  s    QQQRRKH''** B Ba B B B B B!,!9!9%!@!@B B B 	B 	B 	B 	BOr'   rR   r   c                    | j                                         t          |                                          }fd|D             }|S )Nc                T    g | ]$}t          |                                          %S r)   )r   as_posixr  s     r%   r   z*list_buildsystem_files.<locals>.<listcomp>j  s/    BBBA!$$--//BBBr'   )r   r  r   get_build_def_files)r>   rR   rq  r  s      @r%   rQ   rQ   g  sN    #2244GK335566HBBBBBBBHOr'   *T.Dict[str, T.Dict[str, T.Dict[str, str]]]c                r   i }dD ]}i ||<   t          | j        |                                          D ]\  }}|                                |                                |                                |j        |                                |j        |j	        |
                                d||         |<   |S )N)hostr   )r   exelistlinker_exelistfile_suffixesdefault_suffixversionfull_version	linker_id)r!  rS   r   r  get_exelistget_linker_exelistr}  get_default_suffixr  r  get_linker_id)r
   rS   r4  r   r   s        r%   rU   rU   m  s    <>I$  	'")(*<g"F"F"L"L"N"N 
	 
	Hhoo''#//11"*"="="?"?!)!7"*"="="?"?#+ ( 5%3355	, 	,Igx((
	 r'   'T.List[T.Dict[str, T.Union[str, bool]]]c                p    g }| j         D ]*}g d|fd|                                D             gz  }+|S )N)r   requiredr  has_fallbackconditionalc                $    i | ]\  }}|v 	||S r)   r)   )r   rK  rL  keyss      r%   r   z)list_deps_from_source.<locals>.<dictcomp>  s$    <<<TQ!t))Aq)))r'   )rV   r   )r   r   r   r  s      @r%   ry   ry   ~  s^    68F > >
 
 
 	<<<<QWWYY<<<==Mr'   .T.List[T.Dict[str, T.Union[str, T.List[str]]]]c                z   i }dfdddfd}| j         j                                        D ])}|                                r ||          ||j        <   *j        j                                        D ]\  }}t          |t                    r|j
        }t          |t                    rk|                                rW|j        |v r:t          j        d||j                 d                                       |            |||          ||j        <   t          |                                          S )Nsrc_fileyT.Union[mesonlib.FileOrString, build.CustomTarget, build.StructuredSources, build.CustomTargetIndex, build.GeneratedList]r   r+   c                   t          | t                    r| gS t          | t          j                  r!|                     j        j                  gS t          | t          j        t          j	        t          j
        f          r|                                 S t          | t          j                  r fd|                                 D             S t          j        dt          |            d          )Nc                0    g | ]} |          D ]}|S r)   r)   r   r   ri  _src_to_strs      r%   r   z2list_deps.<locals>._src_to_str.<locals>.<listcomp>  s.    JJJ!;;q>>JJaAJJJJr'   zInvalid file type r7   )r   r   r	   Fileabsolute_path
source_dirr   r   CustomTargetCustomTargetIndexGeneratedListr  StructuredSourcesas_listMesonBugExceptionr   )r  r  r@   s    r%   r  zlist_deps.<locals>._src_to_str  s    h$$ 	:h.. 	S**7+=w?PQQRRh!3U5LeNa bcc 	*'')))h 788 	KJJJJx//11JJJJ()Od8nn)O)O)OPPPr'   r  r   varnameT.Optional[str]r   c                   | j         | j        |                                 |                                 |                                 fd|                                 D             fd|                                 D             fd|                                 D             d | j        D             d t          | dg           D             |r|gng dS )Nc                Z    g | ]'}|                     j        j                  D ]}|(S r)   )to_string_listr  r   )r   idirsr   r@   s      r%   r   z5list_deps.<locals>._create_result.<locals>.<listcomp>  sj      $N  $N  $N%QVQeQefmfx  {B  {L  RM  RM  $N  $NAA  $N  $N  $N  $Nr'   c                0    g | ]} |          D ]}|S r)   r)   r  s      r%   r   z5list_deps.<locals>._create_result.<locals>.<listcomp>  s.    KKKaKKNNKKqKKKKr'   c                0    g | ]} |          D ]}|S r)   r)   r  s      r%   r   z5list_deps.<locals>._create_result.<locals>.<listcomp>  s/    SSS!KKPQNNSSqASSSSr'   c                    g | ]	}|j         
S r)   r  )r   es     r%   r   z5list_deps.<locals>._create_result.<locals>.<listcomp>  s    888QV888r'   c                6    g | ]}|                                 S r)   r
  r  s     r%   r   z5list_deps.<locals>._create_result.<locals>.<listcomp>  s     LLL

LLLr'   	libraries)r   r   r  compile_args	link_argsinclude_directoriesr   r   rV   r   meson_variables)
r   	type_nameget_versionget_compile_argsget_link_argsget_include_dirsget_sourcesget_extra_filesext_depsr!  )r  r  r  r@   s     r%   _create_resultz!list_deps.<locals>._create_result  s    FK}}..00** $N  $N  $N  $N13E3E3G3G  $N  $N  $NKKKK1==??KKKSSSSq'8'8':':SSS88QZ888LL;0K0KLLL,3;yy
 
 	
r'   r  )r  r  r   r+   rG   )r  r   r  r  r   r   )depsrz  valuesfoundr   rR   	variablesr   r   r   held_objectr   Tcastr  r   )r
   r@   r   r  r  r  holderr  s    `     @r%   rX   rX     ss   BDF	Q 	Q 	Q 	Q 	Q 	Q 	Q
 
 
 
 
 
 
 
 ]&&(( / /7799 	/+^A..F16N".8>>@@ @ @fl++ 	@"A!Z(( @QWWYY @6V##F=&.9J*KLLSST[\\\\%3^Aw%?%?F16N   r'   rp   "T.List[backends.TestSerialisation]ET.List[T.Dict[str, T.Union[str, int, T.List[str], T.Dict[str, str]]]]c                   g }| D ]}i }t          |j        t                    r	|j        g}n|j        }||j        z   |d<   t          |j        t
          j                  r|j                            i           |d<   n
|j        |d<   |j        |d<   |j	        |d<   |j
        |d<   |j        |d<   |j        |d<   |j        |d<   t          |j                  |d	<   |j        |d
<   |j        |d<   |                    |           |S )Ncmdenvr   workdirtimeoutsuiteis_parallelpriorityprotocolr   extra_paths)r   r   r   cmd_argsr  r	   EnvironmentVariablesget_envr   r  r  r  r  r  r  r   r  r  )rp   r   r   tor   s        r%   get_test_listr    s   TVF  LNags## 	WIEEGEAJ&5	aeX:;; 	b))BuIIBuIV6
	9	9g7M=:QZ:	9M=bMr'   c                     t          |           S rG   r  ro   s    r%   rn   rn     s    """r'   	benchdatac                     t          |           S rG   r  )r  s    r%   rH   rH     s    ###r'   ,T.Dict[str, T.Dict[str, T.Union[str, bool]]]c                
   i }dD ]}}t          | j        j        |          }t          j        |          ||<   |j        ||         d<   |                                ||         d<   |                                ||         d<   ~|S )N)rz  r   r   	is_64_bit
exe_suffixobject_suffix)r!  r   rb   dataclassesasdictr  get_exe_suffixget_object_suffix)r>   rb   mr4  s       r%   rd   rd     s    =?H( C C)/8!<<!(11#*#4K $+$:$:$<$<L!'.'@'@'B'BO$$Or'   3T.Dict[str, T.Union[str, T.List[T.Dict[str, str]]]]c                    | j         | j        | j        d}g }| j                                        D ]8\  }}||| j                            |          d}|                    |           9||d<   |S )N)r  descriptive_namesubproject_dir)r   r  r  r)  )project_versionproject_namer  r)  r   projectsr   r  )r>   r   r)  rK  rL  cs         r%   rh   rh     s    ,%2#2C CF
 K%++--  1 ) 2 6 6q 9 9
 

 	1'F=Mr'   c                <   | j         }t          |          }d |D             }| j        d         D ]L}t          j                            | j        |d                   fd|D             |d<   fd|D             }M|| j        d<   | j        | j        d<   | j        S )Nc                L    g | ]!}t           j                            |          "S r)   )r"   r#   r  r   s     r%   r   z-list_projinfo_from_source.<locals>.<listcomp>  s(    000QRWa  000r'   r)  r   c                >    g | ]}|                               |S r)   
startswithr   r   basedirs     r%   r   z-list_projinfo_from_source.<locals>.<listcomp>  s*    !L!L!Lall76K6K!L!!L!L!Lr'   rO   c                >    g | ]}|                               |S r)   r  r  s     r%   r   z-list_projinfo_from_source.<locals>.<listcomp>  s*    ???qg)>)>????r'   r  )r   rs  r*  r"   r#   r$   r  )r   	sourcedirrr  r   r  s       @r%   rz   rz     s     I'	22E00%000E}- @ @',,t2AfI>>!L!L!L!LU!L!L!L
????E???-2D)**.*=D&'r'   r/  argparse.Namespaceresults6T.Sequence[T.Tuple[str, T.Union[dict, T.List[T.Any]]]]r   T.Optional[int]intc                D   |s| j         st          d           dS t          |          dk    r7| j         s0t          t          j        |d         d         |                     n;i }|D ]}|d         ||d         <   t          t          j        ||                     dS )NzNo command specifiedr   r   )r   )r   printlenjsondumps)r/  r  r   outr   s        r%   print_resultsr    s     
.7- 
.$%%%q	W		7#5	djAv6667777 	 	A!C!IIdjV,,,---1r'   r   r  c                N    d}|  t           j                            | |          }|S )Nz
meson-infor!   )r   infodirs     r%   get_infodirr    s'    G',,x11Nr'   r  kindc                R    t           j                            | |sdnd| d          S )Nr    intro-.jsonr!   )r  r  s     r%   get_info_filer    s9    7<<15O));OD;O;O;OQ Q Qr'   T.Anyc                    t          t          | |          d          5 }t          j        |          cd d d            S # 1 swxY w Y   d S )Nutf-8encoding)openr  r  load)r  r  fps      r%   load_info_filer    s    	mGT**W	=	=	= y}}                 s   AAAc           
     $   d}t          | j                  }| j        %t          j                            | j        |          }| j        rdnd }g }| j        dk    rdn| j        d d         }t                      }dt          j                            | j                  | j        fv rt          t          j
                  5  t          j        | j                  }|J t          |d|j        t!                      t#                      t%                      g          }|                                 d d d            n# 1 swxY w Y   |                                D ]@\  }	}
| j        st-          | |	d          r|
j        s%||	|
                    |          fgz  }At1          | ||          S 	 t3          |          }|                    d	i                               d
i                               dd          }n# t6          $ r t          j                            |          rt          j                            |          st;          d           n/t;          d                    t?          |                               Y dS w xY wtA                      }|D ]P}tC          j"        ||          s9t;          d                    |d                    |                                dS Q|                                D ]\  }}|j#        s| j        st-          | |d          s&	 ||t3          ||          fgz  }># t6          $ r5 t;          d                    t?          ||                               Y  dS w xY wt1          | ||          S )Nzmeson-private   rf  r7   i )visitorsFintrospectionr  fullz0.0.0zyCurrent directory is not a meson build directory.
Please specify a valid build dir or change the working directory to it.zIntrospection file {} does not exist.
It is also possible that the build directory was generated with an old
meson version. Please regenerate it in this case.r   zFIntrospection version {} is not supported. The required version is: {}z and z%Introspection file {} does not exist.)$r  r   r"   r#   r$   r   r|   r   r   sysstderrr   get_backend_from_namer@   r   r   r   r   r   analyzer   r   r!  r3   r  r  r   FileNotFoundErrorisdirr  formatr  r-   r	   version_comparer1   )r/  datadirr  r   r  r  r   r@   r   r   r   raw
intro_versvers_to_checkr   rL  s                   r%   runr    s2   G'*++G#',,w/99.*QQdFBDG'=88g>NtPSt>TI/11K))'*:;;W=MNNNSZ(( 	 	4W_EEG&&&+Ir7<UcUeUeg~  hA  hA  CT  CV  CV  UW  X  X  XDLLNNN		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $))++ 	0 	0HCK e(D(D SY ciioo.//GGWgv666W%%WW_b1155iDDHHQXYY

   w}}W%% 	fRW]]7-C-C 	f \ ] ] ] ]  FFLf][bMcMcFdFdf f f qq =>>M  '
A66 	 06*gll=&A&ABBD D D 11		 !!## 	 	1v 	{ 	77Au#=#= 		N7A66788GG  	 	 	9@@wXYAZAZ[[\\\111	 '6222s9   A1D>>EE0AG> >BJ	J	(L??:M>=M>updated_introspection_files
intro_infoc                   | D ]\  }}t           j                            |d| d          }t           j                            |d          }t          |dd          5 }t	          j        ||           |                                 d d d            n# 1 swxY w Y   t          j        ||           t          	                    |           d S )Nr   r  tmp_dump.jsonwr  r  )
r"   r#   r$   r  r  dumpflushr   r  r  )r   r   r  r   out_filetmp_filer
  s          r%   write_intro_infor(  X  s     1 1
d7<<*>4*>*>*>??7<</::(C'222 	bIdBHHJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
8X&&&#**400001 1s   *BB	B	c                   | j                                         }t          || |          }g }|                                D ]'\  }}|j        s|||                                fgz  }(t          || j         j                   d S )N)r
   r>   r@   )r   get_coredatar|   r   r1   r(  r   )r>   r@   r
   r   r   r   r   s          r%   generate_introspection_filer+  b  s    $1133H/Y`ghhhKEGJ%%'' * *Sx 	SXXZZ())

Z!6!?@@@@@r'   c                J    dt          |           fg}t          ||           d S )NrK   )rM   r(  )r
   r   r   s      r%   update_build_optionsr-  n  s2    	*8445J Z*****r'   r  T.Dict[str, T.Union[str, int]]c                *   |                      d          }| t          t          |          dk    r|d         nd          t          t          |          dk    r|d         nd          t          t          |          dk    r|d         nd          dS )Nr7   r   r      )r  majorminorpatch)splitr  r  )r  	vers_lists     r%   split_version_stringr6  u  s    c""IS^^a%7%7Yq\\Q??S^^a%7%7Yq\\Q??S^^a%7%7Yq\\Q??	  r'   Ferrorsr   build_files_updatedboolc                   | j         j        }t          |          }t                      }i }|                                D ] \  }}|j        sd| d|t          v d||<   !t          t          j	                  | j         
                                | j                                         |dt          t                                |d|d}	|rd|	d<   d	 |D             |	d
<   nd|	d<   t          j                            |d          }
t!          |
dd          5 }t#          j        |	|           |                                 d d d            n# 1 swxY w Y   t          j        |
|           d S )Nr   r  )fileupdated)sourcer   info)r  information)meson_versiondirectoriesr  r8  Terrorc                Z    g | ](}t          |t                    r|nt          |          )S r)   )r   r   r   s     r%   r   z)write_meson_info_file.<locals>.<listcomp>  s1    "W"W"W1
1c(:(:#F11A"W"W"Wr'   
error_listFr"  r#  r  r  )r   r   r&   r|   r   r1   r  r6  r   r  r  r  r*   r"   r#   r$   r  r  r$  r%  r   )r>   r7  r8  r   	info_filer   r   r   rL  	info_datar'  r
  s               r%   write_meson_info_filerG  ~  s   $-H#H--I/11KJ!!## 
 
1v 	%Q%%%77
 

1 .em<<+::<<*88::
 
 ,,K,M,MNN%
 
  3 I  #!	'"W"WPV"W"W"W	,"	' w||Ho66H	hg	.	.	. "	)R   



               Jx#####s   *EEE)r   r   r   r   )r   r   )r   r+   )NNN)r
   r=   r>   r?   r@   rA   r   rB   )r}   r~   r   r5   )r   r   r   r   )r^   r   r   r   )r^   r   r   r   )r
   r   r   r   r   r   )r   r   r   r   )r>   r   r^   r   r@   r   r   r   )r   r   r   r&  rG   )r
   r   r)  r+  r   r&  )r  r   r   r+   )r>   r   rR   r   r   r+   )r
   r   r   rx  )r   r   r   r  )r
   r   r@   r   r   r  )rp   r  r   r  )r  r  r   r  )r>   r   r   r  )r>   r   r   r  )r   r   r   r  )r/  r  r  r  r   r  r   r  )r   r  r   r   )r  r   r  r  r   r   )r  r   r  r  r   r  )r/  r  r   r  )r   r  r   r   r   r5   )r>   r   r@   r   r   r5   )r
   r   r   r   r   r5   )r  r   r   r.  )F)r>   r   r7  r   r8  r9  r   r5   )Q
__future__r   
contextlibr   ru   r  r  r"   pathlibr   r   r  typingr  r  r   r	   r
   r   rD   r   r   r   r   r   r   r@   r   rV   r   r   interpreterbaser   r   mparserr   r   r   r   TYPE_CHECKINGargparserR   r   r   r&   r*   r-   r/   r|   r   rw   r\   ra   r   r{   rk   rx   rM   rs  rQ   rU   ry   rX   r  rn   rH   rd   rh   rz   r  r  r  r  r  r  __annotations__r(  r+  r-  r6  rG  r)   r'   r%   <module>rQ     s   # " " " " " "+ ' & & & & &          				 " " " " " " " " 



     0 0 0 0 0 0 0 0 0 0 N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N       $ $ $ $ $ $       ) ) ) ) ) )       J J J J J J J J J J J J? "OOO((((((!!!!!!5 5 5 5              JNGKJN    <X X X X    
   && & & &P   3 3 3 3j5 5 5 5n9 9 9 97 7 7 7 7r         "   *! *! *! *!X   2# # # #$ $ $ $      "          Q Q Q Q Q    93 93 93 93v ,.  - - - -1 1 1 1
A 
A 
A 
A+ + + +   '$ '$ '$ '$ '$ '$ '$r'   