
    ex                    n   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jN                  rd dl(Z(ddl)m*Z* ddl"m+Z+ d6dZ,d7dZ-d8dZ. G d d      Z/	 	 	 d9	 	 	 	 	 d:dZ0d;dZ1d<dZ2d=dZ3d>dZ4d?dZ5d@dZ6dAdZ7dBdZ8dCdDdZ9dEd Z:dFd!Z;dGd"Z<dHd#Z=dId$Z>dJd%Z?dJd&Z@dKd'ZAdLd(ZBdMd)ZCdNd*ZDdOd+ZEdCdPd,ZFdCdQd-ZGdCdRd.ZHdSd/ZIg ZJdeKd0<   dTd1ZLdUd2ZMdVd3ZNdWd4ZOdXdYd5ZPy)Z    )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)BaseNodec                B    t         j                  j                  | d      S )Nmeson-info.jsonospathjoin)info_dirs    3/usr/lib/python3/dist-packages/mesonbuild/mintro.pyget_meson_info_filer$   /   s    77<<"344    c                      y)Nz1.0.0 r'   r%   r#   get_meson_introspection_versionr(   2   s    r%   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y)IntroCommandNc                4    |dz   | _         || _        || _        y )N.)descfuncno_bd)selfr0   r1   r2   s       r#   __init__zIntroCommand.__init__9   s     3J		
r%   )NN)r0   strr1   z/T.Optional[T.Callable[[], T.Union[dict, list]]]r2   zGT.Optional[T.Callable[[IntrospectionInterpreter], T.Union[dict, list]]]returnNone)__name__
__module____qualname__r4   r'   r%   r#   r-   r-   8   s8     JNbfF ` lpr%   r-   c                    r]r[j                  j                               j                  j                               j                         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)r2   
benchmarkszList all benchmarksc                     t               S N)list_benchmarks)benchmarkdatas   r#   <lambda>z/get_meson_introspection_types.<locals>.<lambda>O   s    XeHf r%   )r1   buildoptionszList all build optionsc                     t               S r?   )list_buildoptionsr
   s   r#   rB   z/get_meson_introspection_types.<locals>.<lambda>P   s    M^_gMh r%   )r1   r2   buildsystem_filesz(List files that make up the build systemc                     t               S r?   )list_buildsystem_files)	builddatainterpreters   r#   rB   z/get_meson_introspection_types.<locals>.<lambda>Q   s    dz  |E  GR  eS r%   	compilerszList used compilersc                     t               S r?   )list_compilersrF   s   r#   rB   z/get_meson_introspection_types.<locals>.<lambda>R   s    ~V^G_ r%   dependencieszList external dependenciesc                     t               S r?   )	list_deps)backendr
   s   r#   rB   z/get_meson_introspection_types.<locals>.<lambda>S   s    QZ[celQm r%   scan_dependenciesz2Scan for dependencies used in the meson.build file	installedz(List all installed files and directoriesc                     t               S r?   )list_installedinstalldatas   r#   rB   z/get_meson_introspection_types.<locals>.<lambda>U   s    \jkv\w r%   install_planz;List all installed files and directories with their detailsc                     t               S r?   )list_install_planrW   s   r#   rB   z/get_meson_introspection_types.<locals>.<lambda>V   s      sD  EP  sQ r%   machinesz2Information about host, build, and target machinesc                     t               S r?   )list_machinesrJ   s   r#   rB   z/get_meson_introspection_types.<locals>.<lambda>W   s    ers|e} r%   projectinfozInformation about projectsc                     t               S r?   )list_projinfor_   s   r#   rB   z/get_meson_introspection_types.<locals>.<lambda>X   s    P]^gPh r%   targetszList top level targetsc                     t               S r?   )list_targets)rR   rJ   rX   s   r#   rB   z/get_meson_introspection_types.<locals>.<lambda>Y   s    U^`kmtHu r%   testszList all unit testsc                     t               S r?   )
list_teststestdatas   r#   rB   z/get_meson_introspection_types.<locals>.<lambda>Z   s    :hCW r%   )create_test_serialisationget_benchmarks	get_testscreate_install_datarK   collectionsOrderedDictr-   dump_astlist_buildoptions_from_sourcelist_deps_from_sourcelist_projinfo_from_sourcelist_targets_from_source)r
   rJ   rR   rA   rX   rK   rj   s   ```@@@@r#   get_meson_introspection_typesrv   A   s    999):R:R:TU44Y5H5H5JK113))1555; ""	=XNO	|$9@fgh	&>Eh  qN  O  	P	l+U  ]S  T  	U	l#8?_`a	&BIm  vK  L  	M	l+_g|}~	l#MTwxy	&c  kQ  R  	S	\"V]}~	%AHh  qJ  K  	L	L!9@u  ~V  W  	X	,4;WXY$  r%   c                   t               }|j                         D ]:  \  }}d|j                  dd      z   }| j                  |d|d|j                         < | j                  dt        t        j                        dd	d
       | j                  dddddd       | j                  dddddd       | j                  dddddd       | j                  dddd       y )Nz--_-
store_trueF)actiondestdefaulthelpz	--backendrR   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?r/   zThe build directory)nargsr}   r~   )rv   itemsreplaceadd_argumentr0   sortedcdatabackendlist)parserintro_typeskeyvalflags        r#   add_argumentsr   _   s	   /1K%%' _Sckk#s++DCUXU]U]^_ VE4E4E-FY`gW  Y
glPU?  A
jHV[:  <
5lQ]gl|  ~

#sAVWr%   c                d    t               }| j                  j                  |       |j                  S r?   )r   r<   acceptresult)intrprinters     r#   rq   rq   o   s$    GHHOOG>>r%   c                   i }| | j                   D ]  }t        j                  j                  | j                  |j
                  t        j                  j                  |j                              |t        j                  j                  | j                  |j                        <    | j                  D ]C  }t        j                  j                  | j                  |j                        ||j                  <   E | j                  D ]k  }t        j                  j                  | j                  |j                  t        j                  j                  |j                              ||j                  <   m | j                  D ]C  }t        j                  j                  | j                  |j                        ||j                  <   E | j                  D ]C  }t        j                  j                  | j                  |j                        ||j                  <   E | j                  D ]c  }t        j                  j                  |j                        }t        j                  j                  | j                  |j                  |      ||<   e |S r?   )rc   r   r    r!   prefixoutdirbasenamefname	build_dirdatainstall_pathheadersmaninstall_subdirssymlinksname)rX   restisr   s         r#   rV   rV   t   s   
C$$ 	VA[//277;K;KAGG;TU [22AGG<=	V !! 	KA'',,{'9'91>>JCK	K$$ 	eA'',,{'9'91>>277K[K[\]\b\bKcdCK	e 	KA'',,{'9'91>>JCK	K,, 	KA'',,{'9'91>>JCK	K%% 	WAww''/HGGLL););Q^^XVCM	W Jr%   c           	     h   d| j                   D ci c]a  }t        j                  j                  | j                  |j
                        |j                  |j                  xs d |j                  xs d dc c}i}| j                  | j                  | j                  | j                  dj                         D ]  \  }}|D ]  }|j                  xs |}|j                  }|dk(  rGt        j                  j                  |t        j                  j!                  |j                              }||j                  xs d |j                  xs d d}|dk(  r1|j"                  xs g g f\  }	}
t%        |
      |d<   t%        |	      |d<   |j'                  |i       ||<   |||   |j                  <     |S c c}w )Nrc   )destinationtag
subproject)r   r   r   r   r   r   exclude_dirsexclude_files)rc   r   r    r!   r   r   out_namer   r   r   r   r   r   r   	data_typeinstall_path_namer   excludelistget)rX   targetplanr   	data_listr   r   r   entryr   r   s              r#   r[   r[      s    &--
  GGLL..=%zz)T$//74@ 
	DD   &&&66	
 eg/Y  	/D-#I $ 6 6i$&GGLL1BBGGDTDTUYU^U^D_$`!  1xx'4"oo5E ''.2ll.Fr2h+|(,\(:n%)-m)<o&"hhy"5DO).DODII&%	//6 KI
s   A&F/c                B    | j                  t        d            dk(  ry|S )Nlayoutflatz	meson-out)
get_optionr   )r
   subdirs     r#   get_target_dirr      s"    9X./69r%   c                   g }t        | j                        dfd}| j                  D ]   |d         } |d         }t        | j                  d         }|d   d   d   d   d	   D cg c]"  }t
        j                  j                  ||      $ c}d
   dg g |D cg c]  }t        |       c}g dgg |D cg c]  }t        |       c}d d   dgz  } |S c c}w c c}w c c}w )Nc                   g }| D ]  }g }t        |t              rMt        |j                  j                        }|j
                  j                  t        v rU|j                  d       nCt        |t              r|j                  j                  }nt        |t              r|j                  }|D ]h  }t        |t              r6t        |j                  t              sJ |t        |j                        gz  }It        |t              sZ|t        |      gz  }j  |D cg c]  }d   z  |z   }}|D cg c]  }|j                          }}|S c c}w c c}w )Nr   r   )
isinstancer   r   args	arguments	func_namevaluer   popr   r   r   r5   r   resolve)	node_listr   nr   jxr   root_dirs         r#   nodes_to_pathsz0list_targets_from_source.<locals>.nodes_to_paths   s(    	%A%'D!\*AFF,,-;;$$(>>HHQKAy)vv''A|,{{ %a0%aggs333DM?*C3'DG9$C%	%  477ax!H+%)77$'(qqyy{((
 8(s    E8Esourcesextra_filesr   r   idtype
defined_inoutputsbuild_by_defaultunknown)languagecompiler
parametersr   generated_sourcesrT   )r   r   r   r   filenamer   target_sourcesdependsr   r   rT   )r   zT.List[BaseNode]r6   zT.List[Path])	r   source_rootrc   r   r
   r   r    r!   r5   )	r   tlistr   r   extra_fr   r   r   r   s	          @@r#   ru   ru      s   y{ED$$%H, \\  9. =!12q{;fID'fIL/:;I,GQfa0G !"4 5% ,34qCF4%'   ,34qCF4;#
  	2 L H 5 5s   7'C++C0C5c                `   g }| j                   j                         }| j                   j                         }i }|j                  D ]Y  }t        j
                  j                  |j                        }t        t        |j                  |j                  |            g||<   [ |j                  D ]  }	t        j
                  j                  |	j                        }	 |t        j
                  j                  |	j                           ||<   ||   j                  t        t        |j                  |	j                   |                    | j%                         j'                         D ]  \  }
}t)        |t*        j,                        st/        d      t1        | j                   j2                  |j4                        }|j7                         |
|j9                         t        j
                  j;                  t        j
                  j=                  ||j4                  t         j>                              |jA                         D cg c]#  }t        j
                  j=                  |||      % c}|jB                  |jE                  |
|      |jF                  D cg c]T  }t        j
                  j;                  t        j
                  j=                  ||j4                  |j                              V c}|jH                  xs d tK        |dg       D cg c]  }|j                   c}tK        |dg       D cg c]  }|jM                          c}d}tK        |dd       }||jO                         |d<   tK        |dd       }|||d<   |r`|jQ                         rPd|d<   |jA                         D cg c]  }|jS                  |d g       }}|D cg c]  }|D ]  }|  c}}|d	<   nd
|d<   |j                  |        |S # t"        $ r Y `w xY wc c}w c c}w c c}w c c}w c c}w c c}}w )NzxThe target object in `builddata.get_targets()` is not of type `build.Target`. Please file a bug with this error message.external_depsrO   )r   r   r   r   r   r   r   r   r   rO   r   vs_module_defswin_subsystemTrT   install_filenameF)*r   get_build_dirget_source_dirrc   r   r    r   r   r5   r   r   r   r   r   r   appendr   KeyErrorget_targetsr   r   r   TargetRuntimeErrorr   r
   r   get_basenameget_typenamenormpathr!   build_filenameget_outputsr   get_introspection_datar   r   getattrget_idrelative_nameshould_installr   )rJ   rX   rR   r   r   src_dirinstall_lookuptabler   r   r   idnamer   r   r   dlibr   r   r   ifnsublists                        r#   re   re      s   E%%335I##224G    `77##AGG,),Xk6H6H!((T\-])^(_H%` !!  77##AFF+	,?@P@PQRQYQY@Z,[))00Xk>P>PRSR`R`bj5k1lm &11399;  &%,,/   Z  [  [	 5 5 > >N'')'')''**277<<P[PjPj+klEKEWEWEYZi;Z & 7 7%<<VVL`f`r`rs[\BGG,,RWW\\'188QWW-UVs ++3t-4V_b-QRQVVR07PR0ST

T
 !)94@%"0">">"@A>$!.Ao6002!AkN?E?Q?Q?ST!&**1tf5TCT69$K77$KaQ$KQ$KA !"AkNQA B LI  		 [ tRT U$Ks8   A+P(PAPP2P -P%P*	PPc                v    | j                   d   D cg c]  }|d   	 }}t        | j                  |      S c c}w )Nsubprojectsr   )project_datarE   r
   )r   r   r   s      r#   rr   rr   !  s;    &*&7&7&FG1V9GKGT]]K88 Hs   6c                *    g |xs g }t        t        j                        }t        d      t        d      h}i }i }i } j                  j                         D ]X  \  }}||v r|||<   ||v r|||<   |j                         s+|||<   |j                  r=|D ]  }	|||j                  |	      <    Z d fd}
 |
|d        |
 j                  j                         D ci c]  \  }}|j                         s|| c}}d        |
 j                  j                         D ci c]  \  }}|j                         s|| c}}d        |
t         j                  j                         d 	      D ci c]  \  }}|j                         s|| c}}d
        |
|d        |
 j                  j                         D ci c]  \  }}|j                         s|| c}}d        |
|d       S c c}}w c c}}w c c}}w c c}}w )N	errorlogsstdsplit)r   c                   t        | j                               D ]6  \  }}t        |      |j                  |j	                  |      r|j
                  j                         ndd}t        |t        j                        rd}nt        |t        j                        rd}nt        |t        j                        r|j                  |d<   d}n`t        |t        j                        rd}nCt        |t        j                        rd}|j                  r|j                  |d<   nt        d	      ||d
<   |j                   |d<   j#                  |       9 y )Nany)r   r   sectionmachinestringbooleanr   combointegerarrayzUnknown option typer   description)r   r   r5   r   is_per_machine_optionr  get_lower_case_namer   r   UserStringOptionUserBooleanOptionUserComboOptionr   UserIntegerOptionUserArrayOptionr   r  r   )optionsr  r   optoptdicttypestrr
   optlists         r#   add_keysz#list_buildoptions.<locals>.add_keys;  s   w}}/ 	$HC"3x#))GOGeGefiGj#++"A"A"CpuwG#u556"C!8!89#C!6!67%([[	"!C!8!89#C!6!67!;;),GI&"#899%GFO%(__GM"NN7#)	$r%   corerR   basec                     | d   j                   S )Nr   )r  )r   s    r#   rB   z#list_buildoptions.<locals>.<lambda>V  s    1 r%   )r   r   	directoryusertest)r  z'cdata.KeyedOptionDictType'r  r5   r6   r7   )setr   BUILTIN_DIR_OPTIONSr   r  r   
is_builtinyieldingevolve
is_backendis_baser   is_compiler
is_project)r
   r   dir_option_namestest_option_namesdir_optionstest_optionscore_optionskvr   r  r  s   `          @r#   rE   rE   %  s   IKG#K5445";/":.0 79K79L79L  &&( 	=1  KN##LO\\^LO::$ =A;<LQ!78=	=$. \6"x//557Jtq!1<<>adJIVx//557Gtq!199;adGP !1!1!7!7!9?UVj$!QZ[ZgZgZiAj [+&x//557Jtq!1<<>adJFS\6"N KGj Ks0   $G=
=G=
*H
H
<H	
H	
H
$H
c                     t        h d      }g }t        j                         D ]0  \  }}|j                   fd|j	                  |      D               2 |S )N>   meson.optionsmeson_options.txtmeson.buildc              3     K   | ]B  }t         j                  j                  t         j                  j                  |             D y wr?   )r   r    relpathr!   ).0frootr   s     r#   	<genexpr>z.find_buildsystem_files_list.<locals>.<genexpr>c  s9      B T1(=wG Bs   AA)	frozensetr   walkextendintersection)r   build_filesfilelistrx   filesr8  s   `    @r#   find_buildsystem_files_listrA  ^  sa    QRKH'''* Ba B!,!9!9%!@B 	BB Or%   c                    | j                   j                         }t        |j                               }|D cg c]  }t	        ||      j                          }}|S c c}w r?   )r   r   r   get_build_def_filesr   as_posix)rJ   rK   r   r?  r   s        r#   rI   rI   g  sW    ##224GK3356H9ABA!$--/BHBO Cs   !Ac                d   i }dD ]  }i ||<   t        | j                  |      j                         D ]z  \  }}|j                         |j	                         |j                         |j                  |j                         |j                  |j                  |j                         d||   |<   |  |S )N)hostr   )r   exelistlinker_exelistfile_suffixesdefault_suffixversionfull_version	linker_id)r   rL   r   r   get_exelistget_linker_exelistrI  get_default_suffixrK  rL  get_linker_id)r
   rL   r  r   r   s        r#   rN   rN   m  s    <>I$ 	'")(*<*<g"F"L"L"N 
	Hhoo'#//1"*"="="?!)!7!7"*"="="?#++ ( 5 5%335	,Igx(
	 r%   c                    g }| j                   D ]3  }g d}||j                         D ci c]  \  }}||v s|| c}}gz  }5 |S c c}}w )N)r   requiredrK  has_fallbackconditional)rO   r   )r   r   r   keysr.  r/  s         r#   rs   rs   ~  s]    68F >
 	QWWY<TQ!t)AqD<==> M =s
   A
A
c                   i }dfdddfd}| j                   j                  j                         D ](  }|j                         s ||      ||j                  <   * j
                  j                  j                         D ]  \  }}t        |t              s|j                  }t        |t              s4|j                         sE|j                  |v r6t        j                  d||j                     d         j                  |        |||      ||j                  <    t        |j                               S )Nr)   c                   t        | t              r| gS t        | t        j                        r'| j	                  j
                  j                        gS t        | t        j                  t        j                  t        j                  f      r| j                         S t        | t        j                        r-| j                         D cg c]  } |      D ]  }|  c}}S t        j                  dt        |        d      c c}}w )NzInvalid file type r/   )r   r5   r	   Fileabsolute_path
source_dirr   r   CustomTargetCustomTargetIndexGeneratedListr   StructuredSourcesas_listMesonBugExceptionr   )src_filer   r7  _src_to_strrR   s      r#   rc  zlist_deps.<locals>._src_to_str  s    h$:h.**7+=+=w?P?PQRRh!3!3U5L5LeNaNa bc''))h 7 78'//1J!;q>JaAJAJJ((+=d8n=MQ)OPP Ks   Dc                   | j                   | j                  | j                         | j                         | j	                         | j                         D cg c]/  }|j                  	j                  	j                        D ]  }| 1 c}}| j                         D cg c]  } |      D ]  }|  c}}| j                         D cg c]  } |      D ]  }|  c}}| j                  D cg c]  }|j                    c}t        | dg       D cg c]  }|j                          c}|r|gdS g dS c c}}w c c}}w c c}}w c c}w c c}w )N	libraries)r   r   rK  compile_args	link_argsinclude_directoriesr   r   rO   r   meson_variables)r   	type_nameget_versionget_compile_argsget_link_argsget_include_dirsto_string_listr[  r   get_sourcesget_extra_filesext_depsr   r   )
r   varnameidirsr   r   r7  er   rc  rR   s
           r#   _create_resultz!list_deps.<locals>._create_result  s<   FFKK}}..0*343E3E3G  $N%QVQeQefmfxfx  {B  {L  {L  RM  $NAA  $NA  $N#$==?KaKNKqKK'('8'8':S!KPQNSqASAS-.ZZ8QVV807;0KL

L,3y
 	
 :<
 	
 $NKS8Ls   4D="EE	5EEri  )rb  zyT.Union[mesonlib.FileOrString, build.CustomTarget, build.StructuredSources, build.CustomTargetIndex, build.GeneratedList]r6   r)   r?   )r   r   rs  T.Optional[str]r6   T.Dict[str, T.Any])depsrF  valuesfoundr   rK   	variablesr   r   r   held_objectr   Tcastr   r   )r
   rR   r   rv  r   rs  holderrc  s    `     @r#   rQ   rQ     s    BDF	Q
 ]]&&( /779+A.F166N/ #..88>>@ @fl+""A!Z(QWWY66V#FF=&.9J*KLSST[\%3Aw%?F166N@   r%   c                   g }| D ]>  }i }t        |j                  t              r|j                  g}n|j                  }||j                  z   |d<   t        |j                  t
        j                        r|j                  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<   |j#                  |       A |S )Ncmdenvr   workdirtimeoutsuiteis_parallelpriorityprotocolr   extra_paths)r   r   r5   cmd_argsr  r	   EnvironmentVariablesget_envr   r  r  r  r  r  r  r   r  r   )rj   r   r   tor   s        r#   get_test_listr    s   TVF LNaggs#WWIEGGEAJJ&5	aeeX::;b)BuIBuIVV6
		9		9gg7MM=:QZZ:		9MM=b)* Mr%   c                    t        |       S r?   r  ri   s    r#   rh   rh     s    ""r%   c                    t        |       S r?   r  )	benchdatas    r#   r@   r@     s    ##r%   c                   i }dD ]x  }t        | j                  j                  |      }t        j                  |      ||<   |j
                  ||   d<   |j                         ||   d<   |j                         ||   d<   z |S )N)rF  r   r   	is_64_bit
exe_suffixobject_suffix)r   r   r\   dataclassesasdictr  get_exe_suffixget_object_suffix)rJ   r\   mr  s       r#   r^   r^     s    =?H( C)//88!<!((1#*#4#4K $+$:$:$<L!'.'@'@'BO$C Or%   c                    | j                   | j                  | j                  d}g }| j                  j	                         D ]5  \  }}||| j
                  j                  |      d}|j                  |       7 ||d<   |S )N)rK  descriptive_namesubproject_dir)r   rK  r  r   )project_versionproject_namer  r   r   projectsr   r   )rJ   r   r   r.  r/  cs         r#   rb   rb     s    ,,%22#22CF
 K%%++- 1 ) 2 2 6 6q 9

 	1 (F=Mr%   c                   | j                   }t        |      }|D cg c]!  }t        j                  j	                  |      # }}| j
                  d   D ]u  }t        j                  j                  | j                  |d         }|D cg c]  }|j                  |      s| c}|d<   |D cg c]  }|j                  |      r| }}w || j
                  d<   | j                  | j
                  d<   | j
                  S c c}w c c}w c c}w )Nr   r   rG   r  )	r   rA  r   r    r   r   r!   r  
startswith)r   	sourcedirr@  r   r   basedirs         r#   rt   rt     s      I'	2E*/0QRWWa 0E0}- @'',,t22AfI>-2!Lall76K!!L
!?qg)>??@
 .3D)**.*=*=D&' 1 "M?s   &C?DD,D	D	c                "   |s| j                   st        d       yt        |      dk(  r3| j                   s't        t        j                  |d   d   |             yi }|D ]  }|d   ||d   <    t        t        j                  ||             y)NzNo command specifiedr   r   )r   )r   printlenjsondumps)r  resultsr   outr   s        r#   print_resultsr    s    7--$%	W	7#5#5djjAv67 	  	A!C!I	djjV,-r%   c                N    d}|  t         j                  j                  | |      }|S )Nz
meson-infor   )r   infodirs     r#   get_infodirr    s&    G'',,x1Nr%   c                Z    t         j                  j                  | |sd      S d| d      S )Nr   intro-.jsonr   )r  kinds     r#   get_info_filer    s9    77<<15)Q Q=CD6;OQ Qr%   c                    t        t        | |      d      5 }t        j                  |      cd d d        S # 1 sw Y   y xY w)Nutf-8encoding)openr  r  load)r  r  fps      r#   load_info_filer    s5    	mGT*W	= yy}  s	   7A c           
        d}t        | j                        }| j                  *t        j                  j	                  | j                  |      }| j
                  rdnd }g }| j                  dk(  rdn| j                  d d }t               }dt        j                  j                  | j                        | j                  fv rt        t        j                        5  t        j                  | j                        }|J t        |d|j                  t!               t#               t%               g      }|j'                          d d d        |j)                         D ]B  \  }	}
| j*                  st-        | |	d      r|
j.                  s,||	|
j/                        fgz  }D t1        | ||      S 	 t3        |      }|j5                  d	i       j5                  d
i       j5                  dd      }tA               }|D ]D  }tC        jD                  ||      rt;        dj=                  |dj	                  |                    y |j)                         D ]?  \  }}|jF                  s| j*                  st-        | |d      s-	 ||t3        ||      fgz  }A t1        | ||      S # 1 sw Y   \xY w# t6        $ rq t        j                  j9                  |      rt        j                  j9                  |      st;        d       Y yt;        dj=                  t?        |                   Y yw xY w# t6        $ r( t;        dj=                  t?        ||                   Y  yw xY w)Nzmeson-private   r3  r/   i )visitorsFintrospectionrK  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   rv   r   r   sysstderrr   get_backend_from_namerR   r   r   r   r   r   analyzer   r   r   r2   r  r  r   FileNotFoundErrorisdirr  formatr  r+   r	   version_comparer1   )r  datadirr  r   r  r  r   rR   r   r   r   raw
intro_versvers_to_checkr   r/  s                   r#   runr    s   G'**+G#'',,w//9..QdFBDG''=8g>N>NtPS>TI/1K))'*:*:;W=M=MNNSZZ( 	44W__EG&&&+Ir7<<UcUeg~  hA  CT  CV  UW  XDLLN		 $))+ 	0HCKKe(DSYYciio.//G	0 Wgv66W%WW_b155iDHHQXY
 =>M ''
A6 06*gll=&ABD  !!# 	1vv{{77Au#=	N7A6788G	 '622[	 	  ww}}W%RWW]]7-C \ ]   FFLf][bMcFdf 4 ! 	9@@wXYAZ[\	s8   A(J-=J) ;L&J&)AL#=#L#"L#&-MMupdated_introspection_filesc                   | D ]  \  }}t         j                  j                  |d| d      }t         j                  j                  |d      }t        |dd      5 }t	        j
                  ||       |j                          d d d        t        j                  ||       t        j                  |        y # 1 sw Y   7xY w)Nr  r  tmp_dump.jsonwr  r  )
r   r    r!   r  r  dumpflushr   r  r   )
intro_infor"   r  r   out_filetmp_filer  s          r#   write_intro_infor  X  s      1
d77<<F4&*>?77<</:(C'2 	bIIdBHHJ	 	

8X&#**401	 	s   'B88C	c                   | j                   j                         }t        || |      }g }|j                         D ](  \  }}|j                  s|||j	                         fgz  }* t        || j                   j                         y )N)r
   rJ   rR   )r   get_coredatarv   r   r1   r  r"   )rJ   rR   r
   r   r  r   r   s          r#   generate_introspection_filer  b  s    $$113H/Y`ghKEGJ%%' *SxxSXXZ())
*
 Z!6!6!?!?@r%   c                8    dt        |       fg}t        ||       y )NrC   )rE   r  )r
   r"   r  s      r#   update_build_optionsr  n  s#    	*845J Z*r%   c                    | j                  d      }| t        t        |      dkD  r|d   nd      t        t        |      dkD  r|d   nd      t        t        |      dkD  r|d         dS d      dS )Nr/   r   r      )r  majorminorpatch)splitintr  )rK  	vers_lists     r#   split_version_stringr  u  sx    c"IS^a%7Yq\Q?S^a%7Yq\Q?S^a%7Yq\?	  >??	 r%   c                   | j                   j                  }t        |      }t               }i }|j	                         D ]$  \  }}|j
                  sd| d|t        v d||<   & t        t        j                        | j                   j                         | j                   j                         |dt        t                     |d|d}	|r4d|	d<   |D 
cg c]  }
t        |
t              r|
n
t        |
      ! c}
|	d	<   nd
|	d<   t        j                   j#                  |d      }t%        |dd      5 }t'        j(                  |	|       |j+                          d d d        t        j,                  ||       y c c}
w # 1 sw Y   %xY w)Nr  r  )fileupdated)sourcer   info)rK  information)meson_versiondirectoriesr  build_files_updatedTerror
error_listFr  r  r  r  )r   r"   r$   rv   r   r1   r  r  r   rK  r   r   r(   r   r5   r   r    r!   r  r  r  r  r   )rJ   errorsr  r"   	info_filer   r  r   r/  	info_datar   r  r  s                r#   write_meson_info_filer  ~  sr   $$--H#H-I/1KJ!!# 
1vvQCu%77

1
 .emm<++::<**88:
 ,,K,MN%
  3I !	'PV"W1
1c(:1A#F"W	,"	' ww||Ho6H	hg	. "		)R 

 JJx# #X s   $E:4'E??F)r"   r5   r6   r5   )r6   r5   )r6   r)   )NNN)r
   zT.Optional[cdata.CoreData]rJ   zT.Optional[build.Build]rR   zT.Optional[backends.Backend]r6   z'T.Mapping[str, IntroCommand]')r   zargparse.ArgumentParserr6   r7   )r   r   r6   rx  )rX   backends.InstallDatar6   zT.Dict[str, str])rX   r  r6   z6T.Dict[str, T.Dict[str, T.Dict[str, T.Optional[str]]]])r
   cdata.CoreDatar   r5   r6   r5   )r   r   r6   zkT.List[T.Dict[str, T.Union[bool, str, T.List[T.Union[str, T.Dict[str, T.Union[str, T.List[str], bool]]]]]]])rJ   build.BuildrX   r  rR   backends.Backendr6   zT.List[T.Any])r   r   r6   9T.List[T.Dict[str, T.Union[str, bool, int, T.List[str]]]]r?   )r
   r  r   zT.Optional[T.List[str]]r6   r  )r   r5   r6   r)   )rJ   r  rK   r   r6   r)   )r
   r  r6   z*T.Dict[str, T.Dict[str, T.Dict[str, str]]])r   r   r6   z'T.List[T.Dict[str, T.Union[str, bool]]])r
   r  rR   r  r6   z.T.List[T.Dict[str, T.Union[str, T.List[str]]]])rj   "T.List[backends.TestSerialisation]r6   ET.List[T.Dict[str, T.Union[str, int, T.List[str], T.Dict[str, str]]]])r  r  r6   r   )rJ   r  r6   z,T.Dict[str, T.Dict[str, T.Union[str, bool]]])rJ   r  r6   3T.Dict[str, T.Union[str, T.List[T.Dict[str, str]]]])r   r   r6   r  )r  argparse.Namespacer  6T.Sequence[T.Tuple[str, T.Union[dict, T.List[T.Any]]]]r   zT.Optional[int]r6   r  )r   rw  r6   r5   )r  r5   r  rw  r6   r5   )r  r5   r  rw  r6   zT.Any)r  r  r6   r  )r  r  r"   r5   r6   r7   )rJ   r  rR   r  r6   r7   )r
   r  r"   r5   r6   r7   )rK  r5   r6   zT.Dict[str, T.Union[str, int]])F)rJ   r  r  r   r  boolr6   r7   )Q
__future__r   
contextlibr   ro   r  r  r   pathlibr   r   r  typingr~  r  r   r	   r
   r   r<   r   r   r   r   r   r   rR   r   rO   r   r   interpreterbaser   r   mparserr   r   r   r   TYPE_CHECKINGargparserK   r   r   r$   r(   r+   r-   rv   r   rq   rV   r[   r   ru   re   rr   rE   rA  rI   rN   rs   rQ   r  rh   r@   r^   rb   rt   r  r  r  r  r  r  __annotations__r  r  r  r  r  r'   r%   r#   <module>r     sO   #+ '    	 " 
  0 0 N  N  $  )  J J??(!5  JNGKJN-D+GSq<X 
&&P3j5n97r"*!X2#$"Q93v ,. [ -1
A+'$r%   