o
    WodO                    @  s  U d 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ZddlZddl	Z
ddlmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZmZmZm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"m#Z# ddl$m%Z%m&Z&m'Z'm(Z( ddl$m)Z)m*Z*m+Z+ ddl,m-Z- ddlm.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 e
j7rCddl8m9Z9m: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@mAZA ddlmBZB ddl3mCZC G dd de:ZDG dd  d e:ZEG d!d" d"e:ZFG d#d$ d$e:ZGG d%d& d&e:ZHG d'd( d(e:ZIG d)d* d*e:ZJG d+d, d,e:ZKG d-d. d.e:ZLG d/d0 d0e:ZMG d1d2 d2eMZNG d3d4 d4eMZOe*d5ePd6d7ZQd8eRd9< e*d:e+eSeTg d6d;ZUd<eRd=< e jVd>d?ee*d@e+eSeTejWejejejfd6d6dAe*dBeTe!fe*dCeTe!fgZXdDeRdE< d]dJdKZYG dLdM dMejZZG dNdO dOejZ[G dPdQ dQejZ\G dRdS dSejZ]G dTdU dUejZ^dVZ_G dWdX dXeZ`d^d[d\ZadS )_zThis module provides helper functions for Gnome/GLib related
functionality such as gobject-introspection, gresources and gtk-doc    )annotationsN   )ExtensionModule
ModuleInfo)ModuleReturnValue   )build)interpreter)mesonlib)mlog)CustomTargetCustomTargetIndex
ExecutableGeneratedListInvalidArguments)
DependencyPkgConfigDependencyInternalDependency)
DEPENDS_KWDEPEND_FILES_KWINSTALL_DIR_KW
INSTALL_KWNoneType
SOURCES_KWin_set_validator)	noPosargsnoKwargs
FeatureNewFeatureDeprecated)typed_kwargs	KwargInfoContainerTypeInfo)typed_pos_args)MachineChoiceMesonException
OrderedSet
Popen_safe	join_args)OverrideProgram)read_linguas)Literal	TypedDict)ModuleState)BuildTarget)Compiler)Interpreter)TYPE_varTYPE_kwargs)FileOrString)ExternalProgramc                   @  s6   e Zd ZU ded< ded< ded< ded< ded< dS )	PostInstallboolglib_compile_schemasT.List[str]gio_querymodulesgtk_update_icon_cacheupdate_desktop_databaseupdate_mime_databaseN__name__
__module____qualname____annotations__ rA   rA   whome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/modules/gnome.pyr4   8   s   
 r4   c                   @  s   e Zd ZU ded< ded< dS )CompileSchemasr5   build_by_defaultT.List[FileOrString]depend_filesNr<   rA   rA   rA   rB   rC   ?   s   
 rC   c                   @  s.   e Zd ZU ded< ded< ded< ded< dS )Yelpr7   	languagesmediasourcesr5   symlink_mediaNr<   rA   rA   rA   rB   rG   D   
   
 rG   c                   @  s^   e Zd ZU ded< ded< ded< ded< ded	< ded
< ded< ded< ded< ded< dS )CompileResourcesr5   rD   T.Optional[str]c_namezKT.List[T.Union[mesonlib.File, build.CustomTarget, build.CustomTargetIndex]]dependenciesexportr7   
extra_argsgresource_bundleinstallinstall_dirinstall_header
source_dirNr<   rA   rA   rA   rB   rM   K   s   
 rM   c                   @  s   e Zd ZU ded< ded< ded< ded< ded< ded	< ded
< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< dS )GenerateGirr5   rD   zT.List[Dependency]rP   r7   export_packagesrR   fatal_warningsheaderidentifier_prefixz'T.List[T.Union[build.IncludeDirs, str]]include_directoriesT.List[T.Union[str, GirTarget]]includesrT   rN   install_dir_girinstall_dir_typelibz9T.List[T.Union[build.SharedLibrary, build.StaticLibrary]]	link_withstr	namespace	nsversion3T.List[T.Union[FileOrString, build.GeneratedTypes]]rJ   symbol_prefixNr<   rA   rA   rA   rB   rX   X   s$   
 rX   c                   @  s   e Zd ZU ded< ded< ded< ded< ded< ded	< d
ed< d
ed< d
ed< d
ed< d
ed< ded< d
ed< d
ed< ded< ded< ded< ded< ded< d
ed< ded< ded< dS ) GtkDoc'T.List[T.Union[str, build.IncludeDirs]]src_dirrc   	main_sgmlmain_xmlmodule_versionrd   z&Literal['xml', 'smgl', 'auto', 'none']moder7   	html_args	scan_argsscanobjs_argsfixxref_args	mkdb_argsz3T.List[T.Union[build.GeneratedTypes, FileOrString]]content_filesignore_headersrU   r5   checkrT   rE   gobject_typesfilehtml_assetsexpand_content_filesc_argsr]   ET.List[T.Union[Dependency, build.SharedLibrary, build.StaticLibrary]]rP   Nr<   rA   rA   rA   rB   rh   l   s.   
 rh   c                   @  sf   e Zd ZU ded< ded< ded< ded< ded	< ded
< ded< ded< ded< ded< ded< dS )GdbusCodegenrE   rJ   r7   rR   rN   interface_prefixrd   r5   object_managerrD   zT.List[T.List[str]]r   rV   rU   docbookz,Literal['all', 'none', 'objects', 'default']autocleanupNr<   rA   rA   rA   rB   r|         
 r|   c                   @  s~   e Zd ZU ded< ded< ded< ded< ded	< ded
< ded< ded< ded< ded< ded< ded< ded< ded< dS )
GenMarshalrN   Zbuild_alwayszT.Optional[bool]build_always_stalerD   zT.List[mesonlib.File]rF   r7   rR   rU   r5   rV   internalnostdincprefixskip_sourcerE   rJ   stdincvalist_marshallersNr<   rA   rA   rA   rB   r      s   
 r   c                   @  sF   e Zd ZU ded< ded< ded< ded< ded	< ded
< ded< dS )GenerateVapir^   rJ   rN   rU   r5   rT   r7   	vapi_dirsmetadata_dirsgir_dirsz(T.List[T.Union[str, InternalDependency]]packagesNr<   rA   rA   rA   rB   r      s   
 r   c                   @  s6   e Zd ZU ded< ded< ded< ded< ded< d	S )
_MkEnumsCommonrf   rJ   r5   rV   rN   rU   r\   rg   Nr<   rA   rA   rA   rB   r      s   
 r   c                   @  s.   e Zd ZU ded< ded< ded< ded< dS )MkEnumsSimplerc   header_prefix	decoratorfunction_prefixbody_prefixNr<   rA   rA   rA   rB   r      rL   r   c                   @  sf   e Zd ZU ded< ded< ded< ded< ded< ded< ded	< ded
< ded< ded< ded< dS )MkEnumszT.Optional[FileOrString]
c_template
h_templaterN   commentseprodfheadfprodftailvheadvprodvtailz=T.List[T.Union[BuildTarget, CustomTarget, CustomTargetIndex]]dependsNr<   rA   rA   rA   rB   r      r   r   rD   TdefaultzKwargInfo[bool]_BUILD_BY_DEFAULTrR   r   listifyzKwargInfo[T.List[str]]_EXTRA_ARGS_KWrV   namerJ   r   requiredr\   rg   zT.List[KwargInfo]_MK_ENUMS_COMMON_KWSr   !T.List[T.Union[str, T.List[str]]]returnrN   c                 C  s   d}| sdS t dd | D rt| dkrdS |S t dd | D s<t| D ]\}}t|ts9d|d  d	  S q&dS t| D ]\}}t|dksSt d
d |D s_d|d  d|   S q@dS )z+Validate gdbus-codegen annotations argumentz8must be made up of 3 strings for ELEMENT, KEY, and VALUENc                 s      | ]}t |tV  qd S N
isinstancerc   .0annotrA   rA   rB   	<genexpr>       z(annotations_validator.<locals>.<genexpr>   c                 s  r   r   )r   listr   rA   rA   rB   r      r   zelement r   z must be a listc                 s  r   r   r   )r   irA   rA   rB   r      r    )alllen	enumerater   r   )r   Zbadlistcr   rA   rA   rB   annotations_validator   s$   
r   c                   @     e Zd ZdS )GResourceTargetNr=   r>   r?   rA   rA   rA   rB   r          r   c                   @  r   )GResourceHeaderTargetNr   rA   rA   rA   rB   r      r   r   c                   @  r   )	GirTargetNr   rA   rA   rA   rB   r     r   r   c                   @  r   )TypelibTargetNr   rA   rA   rA   rB   r     r   r   c                   @  r   )
VapiTargetNr   rA   rA   rA   rB   r     r   r   z	>= 2.51.1c                      s
  e Zd ZedZdH fddZdIddZejdJddZ	e
dKddZedededdedeeeg ddededdededddededddeedddLd$d%Zed&eeejejejejfed&eeeejd'd(d)eed*ee fed+eeejejejfg dded,edd(ded-edd(ded.eeeg dddMd2d3Z!e
dNd9d:Z"		dOdPdCdDZ#dQdHdIZ$		dOdRdKdLZ%dSdOdPZ&dTdSdTZ'dUdVdWZ(dVdYdZZ)e*j+d[d\dWd^d_Z,e
dXdcddZ-e
dYdgdhZ.e
dZdldmZ/e
d[dodpZ0e
d\drdsZ1e
d]dudvZ2e
d^dydzZ3e
d_ddZ4e
d`ddZ5e
daddZ6e
dbddZ7e
dcddZ8e
ddddZ9e
deddZ:edej;ej<ej=fddedeejddeed+eee>g ddedeeeg ddededddedeeeg ddedeeeg ddedeeeej?fg dded`eeee@fg ddedee fddedeee fddidd dedee fddedeee fddidd dedeeej<ej=fg ddededded}eddedeeeejejejejfg ddedeeeg dddfddZAeedejddeBdgddZCedeedededeeedg dddōedeeedg dǍedeeedg dǍededddhdd̄ZDedeededeeedg ddЍededddedeeeejejejejfg dded+eee>ej<ej=fdg dǍedeeeejfg ddedeeeg ddedeeeejfg ddedeeeg ddedeeeejfg ddedeeeg ddedeeeej?fdg dǍededdedeeeg ddedee fedee fedeeeg ddededd(eEh ddededddededd(dedeeeg ddedeeeg ddedeeeej?fddddiddZFdjddZGeHededkddZIedeeejejejejfgdedejddeJjddedeeedg ddЍedee fedee fededdedeeeefg eKdd d ed'edddedee fededdeEh ddejdddlddZLed	eed	geMeNed
eeje fedeeje fedee fedee fedee fedee fedee fedee fedee fedee fR  dmddZOeddedeedgeMededdededdededdededdR  dnddZPe
dd[d[d dod&d'ZQed(eed(eBjddeNjddejd'd)eedeeedg dǍed*edded+edded,ee fed-eddedeeeejfdd.ddded/edded0edddpd2d3ZRdqd7d8ZSdrd;d<ZTdsd?d@ZUedAeedAeeedeeee@fdd.dddedBeeedg dǍedCeeedg dǍedDeeedg dǍed4eeeeVfdg dǍdtdFdGZW  ZXS (u  GnomeModuleZgnomer	   'Interpreter'r   Nonec                   s   t  | d | _d | _d | _d| _g | _d| _d| _d| _	d | _
d | _| j| j| j| j| j| j| j| j| j| j| j| j| jd d S )NF)post_installcompile_resourcesgenerate_gircompile_schemasyelpgtkdocgtkdoc_html_dirgdbus_codegenmkenumsmkenums_simple
genmarshalgenerate_vapi)super__init__gir_dep	giscanner
gicompilerinstall_glib_compile_schemasinstall_gio_querymodulesinstall_gtk_update_icon_cacheinstall_update_desktop_databaseinstall_update_mime_databasedevenvnative_glib_versionmethodsupdater   r   r   r   r   r   r   r   r   r   r   r   )selfr	   	__class__rA   rB   r     s2   zGnomeModule.__init__state'ModuleState'rc   c                 C  sL   | j d u r#td|jddd}| r| | _ | j S td d| _ | j S )Nglib-2.0TF)Znativer   z]Could not detect glib version, assuming 2.54. You may get build errors if your glib is older.z2.54)r   r   environmentfoundget_versionr   warning)r   r   Zglib_deprA   rA   rB   _get_native_glib_version0  s   


z$GnomeModule._get_native_glib_versionc                 C  s2   t | |tstjdtdddd d S d S )NztGLib compiled dependencies do not work reliably with 
the current version of GLib. See the following upstream issue:z1https://bugzilla.gnome.org/show_bug.cgi?id=774368TFoncefatal)r
   version_comparer   gresource_dep_needed_versionr   r   boldr   r   rA   rA   rB   Z__print_gresources_warning<  s   
z&GnomeModule.__print_gresources_warningc                   C  s   t jdt dddd d S )NzCode generated with gdbus_codegen() requires the root directory be added to
  include_directories of targets with GLib < 2.51.3:z/https://github.com/mesonbuild/meson/issues/1387TFr   )r   r   r   rA   rA   rA   rB   _print_gdbus_warningE  s   
z GnomeModule._print_gdbus_warningzgnome.post_installr6   Fr   r8   Tr   r9   r:   z0.59.0)r   sincer;   z0.64.0z0.57.0argsT.List['TYPE_var']kwargs'PostInstall'r   c                 C  s  g }t j|j |j }|d r8| js8d| _|ddd}t j|dd}|j	||g}d|_
|| |d D ].}	|	| jvrj| j|	 |ddd}t j|j |	}
|j	||
g}d|_
|| q<|d	 r| jsd| _|jd
dd}t|tjp| }|s|d}t j|dd}|j	|ddd|g}d|_
|| |d r| jsd| _|d}t j|d}|j	|d|g}d|_
|| |d r| jsd| _|d}t j|d}|j	||g}d|_
|| td |S )Nr6   Tglib-compile-schemaszgio-2.0r   Zschemasr8   zgio-querymodulesr9   zgtk4-update-icon-cacheFr   zgtk-update-icon-cacheZiconsZhicolor-qz-tz-fr:   zupdate-desktop-databaseZapplicationsr;   zupdate-mime-databasemime)ospathjoinr   Z
get_prefixget_datadirr   	find_toolbackendget_executable_serialisationZskip_if_destdirappendr   r   find_programr   r   r   r   r   r   r   )r   r   r   r   rvZdatadir_absprogZ
schemasdirscriptdZ	moduledirr   ZicondirZappdirrA   rA   rB   r   L  sV   









zGnomeModule.post_installzgnome.compile_resourcesrV   z0.37.0)r   r   rO   rP   rQ   rS   rW   T.Tuple[str, 'FileOrString']'CompileResources''ModuleReturnValue'c                   s  |    |  } d}|dg}|d }|d }|\}	}
g }g }|D ]'}t|tjr4||j q%|| ||  t	|t
sLd}t|q%t	|t
st|
tjrt|
jrjtj j |
j|
j}n!tj|
j|
j}nt|
tjtjtjfrtdtj j|
}|  |||\}}} fdd|D }||7 }|tj j j t|D ]}|d	|g7 }q|d
 r|d|d
 g7 }|d s|dg7 }|g d7 }||d 7 }|d }|r|	 d}|	 d}n,d jjjjv r|	 d}|	 d}nd jjjjv r|	 d}|	 d}ntd|d r&|s&td|d }|r4|r4td|r@|d s@tdd }t	|t
sL|}n| d}g }t|d d!g }t| j j j||
g|g|d" ||||d |d# r||d# gng d$gd%}|rt ||gS |d# p jj!t"d&}t|t#sJ d't$|	 d( j j j||
g|	 d)g|d" |||gd*gd+}||g}t ||S ),Nglib-compile-resources@INPUT@rW   rP   zThe "dependencies" argument of gnome.compile_resources() can not
be used with the current version of glib-compile-resources due to
<https://bugzilla.gnome.org/show_bug.cgi?id=774368>a4  Resource xml files generated at build-time cannot be used with gnome.compile_resources() in the current version of glib-compile-resources because we need to scan the xml for dependencies due to <https://bugzilla.gnome.org/show_bug.cgi?id=774368>
Use configure_file() instead to generate it at configure-time.c                   s    g | ]}t j j j|qS rA   )r  r  r  build_to_srcsubdirr   r  r   rA   rB   
<listcomp>       z1GnomeModule.compile_resources.<locals>.<listcomp>--sourcedirrO   z--c-namerQ   
--internal)z
--generatez--target@OUTPUT@rR   rS   z
.gresourceZ
_gresourcer   .c_ccppz.cppZ_cppzFCompiling GResources into code is only supported in C and C++ projectsrT   zGThe install kwarg only applies to gresource bundles, see install_headerrV   z<The install_header kwarg does not apply to gresource bundlesz7GResource header is installed yet export is not enabledz.dz--dependency-filez	@DEPFILE@rD   rU   Zruntime)rD   depfilerF   extra_dependsrT   rU   install_tag
includedirfor mypy_h.hdevelrD   r   rT   rU   r!  )%&_GnomeModule__print_gresources_warningr   r	  r   r
   Filer  r  
get_subdirr   r   r$   Zis_builtr  r  r  r   get_build_dirfnamer   r   r   r   _get_gresource_dependenciesr  r%   coredata	compilershostcopyr   
subprojectr   
get_option	OptionKeyrc   r   )r   r   r   r   glib_versionZglib_compile_resourcescmdsource_dirsrP   target_name
input_filesubdirsr   depmZifilerF   rW   Z	gresourceoutputr   rV   r  Z
target_cmdZtarget_crU   Ztarget_hr
  rA   r  rB   r     s   











zGnomeModule.compile_resourcesr9  r7  r7   OT.Sequence[T.Union[mesonlib.File, build.CustomTarget, build.CustomTargetIndex]]qT.Tuple[T.List[mesonlib.FileOrString], T.List[T.Union[build.CustomTarget, build.CustomTargetIndex]], T.List[str]]c              
   C  s  d|dg}|d| j g7 }|D ]}|dtj| j |g7 }qzt|| j d\}}}W n ttfy8   t	dw |j
dkrTd|d  d	| }	t|	 t|j
||d
d d }
g }g }g }|
 D ]}tj|}|D ]Z}t|tjr|j|krqq|
| || ||j   net|tjtjfrd }dd | D }|D ]\}}||kr|} nq|d ur|
| || ||   n+qqztj| j d|}W n t	y   t	d| d| dw |
| || qg||
 |||fS )Nr  z--generate-dependenciesr  )cwdz)Could not execute glib-compile-resources.r   z6glib-compile-resources failed to get dependencies for r   z:

c                 S  s   h | ]
}|t j|fqS rA   )r  r  basename)r   orA   rA   rB   	<setcomp>H      z:GnomeModule._get_gresource_dependencies.<locals>.<setcomp>.z
Resource "z" listed in "z" was not found. If this is a generated file, pass the target that generates it to gnome.compile_resources() using the "dependencies" keyword argument.)r  r  r  r  r&   r   get_source_dirFileNotFoundErrorPermissionErrorr$   
returncoder   r   
subprocessCalledProcessErrorsplitr1  rC  r   r
   r)  r,  remover  r   r   r   get_outputsr*  from_source_fileextend)r   r9  r7  rP   r6  rW   Zpcstdoutstderrr<  Zraw_dep_filesr   r:  Z	dep_filesZresfileZresbasenamer;  r,  outputsrD  ZbaseofrA   rA   rB   r-    st   











z'GnomeModule._get_gresource_dependencieslib1T.Union[build.SharedLibrary, build.StaticLibrary]r   gT.Sequence[T.Union[build.BuildTarget, 'build.GeneratedTypes', 'FileOrString', build.StructuredSources]]include_rpathr5   use_gir_argsyT.Tuple[T.List[str], T.List[T.Union[build.BuildTarget, 'build.GeneratedTypes', 'FileOrString', build.StructuredSources]]]c           
      C  s   g }t |}t|tjrRtj|j |j	
|}|d|  |r*|d|  || |j	|D ]}	tj|j |	}	|d|	  |rQ|d|	  q5|re| dre|d|j  ||fS |d|j  ||fS )N-Lz-Wl,-rpath,--extra-library--extra-library=-l)r   r   r   SharedLibraryr  r  r  r   r+  r  get_target_dirr  determine_rpath_dirs_gir_has_optionr   )
r   r   rW  r   rZ  r[  Zlink_commandnew_dependslibdirr  rA   rA   rB   _get_link_argsi  s&   
zGnomeModule._get_link_argsdepsaT.Sequence[T.Union['Dependency', build.BuildTarget, build.CustomTarget, build.CustomTargetIndex]]T.Tuple[OrderedSet[str], OrderedSet[T.Union[str, T.Tuple[str, str]]], OrderedSet[T.Union[str, T.Tuple[str, str]]], OrderedSet[str], T.List[T.Union[build.BuildTarget, 'build.GeneratedTypes', 'FileOrString', build.StructuredSources]]]c              	   C  s2  t  }t  }t  }t  }	t|}t|}|D ]c}
t|
tr8|
jdddd}|r8t|ts2J d|	|g t|
t	r||

  |||
j |
jD ]B}t|tjr| ||||\}}|| | | ||||}||d  ||d  ||d  |	|d  |d	 }qP| |
j||||}||d  ||d  ||d  |	|d  |d	 }|
jD ]}t|tr|	tj|j | g qqt|
trX||

  t|
jd
d}|D ]f}tj|r9t|
ddr9tj |}|d| g |r|d| g tj!|}|"dr-|dd  }|#dd }d| }|"dr@q|dkrP||t$|fg q||g qqt|
tj%tjfrr|||
&  |'|
 qt()d|
d q|r| *drddd}||}||}||||	|fS )Ngirdir Z	pkgconfigr   default_valuer#  r   r   r   r      T)rawZ
is_libtoolFr]  z-Wl,-rpath rW  z.sor`  z-Wz
-frameworkzdependency z not handled to build gir filesr^  ldflags+T.Iterable[T.Union[str, T.Tuple[str, str]]]r   +OrderedSet[T.Union[str, T.Tuple[str, str]]]c                 S  s@   t  }| D ]}t|tr|dr|ddd}|| q|S )Nr`  r_  r   )r%   r   rc   
startswithreplaceadd)rq  Zfixed_ldflagsldflagrA   rA   rB   fix_ldflags  s   z<GnomeModule._get_dependencies_flags_raw.<locals>.fix_ldflags)rq  rr  r   rs  )+r%   r
   r   r   r   r   get_variablerc   r   r   Zget_compile_argsget_include_argsr]   	librariesr   ra  rg  _get_dependencies_flags_rawget_external_depsZext_depsrJ   r   r  r  r  r   r+  r*  iterZget_link_argsisabsgetattrdirnamerC  rt  rN  nextStaticLibraryget_include_dirsr  r   logrd  )r   rh  r   r   rZ  r[  cflagsinternal_ldflagsexternal_ldflagsgi_includesr;  rk  rW  Z_ldZlibdepflagsZextdepflagssourcerq  flaglib_dirlibnamerx  rA   rA   rB   r|    s   











z'GnomeModule._get_dependencies_flags_rawT.Tuple[OrderedSet[str], T.List[str], T.List[str], OrderedSet[str], T.List[T.Union[build.BuildTarget, 'build.GeneratedTypes', 'FileOrString', build.StructuredSources]]]c                 C  s   |  |||||\}}}}	}g }
g }|D ]}t|tr!|
| q|
| q|D ]}t|tr6|| q)|| q)||
||	|fS r   )r|  r   rc   r  rR  )r   rh  r   r   rZ  r[  r  Zinternal_ldflags_rawZexternal_ldflags_rawr  r  r  rw  rA   rA   rB   _get_dependencies_flags  s   	

z#GnomeModule._get_dependencies_flags	girtargetCT.Union[build.Executable, build.StaticLibrary, build.SharedLibrary]c                 C  sj   t |tjtjtjfstd| dt|j d}t |tjr3t	| 
|d  |s3td| |S )Nz4Gir target must be an executable or library but is "z
" of type z>=1.58.1r   zEStatic libraries can only be introspected with GObject-Introspection )r   r   r   ra  r  r$   typer=   r
   r   _get_gir_depr   )r   r  r   ZSTATIC_BUILD_REQUIRED_VERSIONrA   rA   rB   _unwrap_gir_target  s   zGnomeModule._unwrap_gir_targetvarnamevaluec                 C  s(   | j d u r
t | _ | j ||g d S r   )r   r   ZEnvironmentVariablesprepend)r   r  r  rA   rA   rB   _devenv_prepend  s   

zGnomeModule._devenv_prepend&T.Optional[build.EnvironmentVariables]c                 C  s   | j S r   )r   )r   rA   rA   rB   
get_devenv  s   zGnomeModule.get_devenvT.Tuple[Dependency, T.Union[build.Executable, 'ExternalProgram', 'OverrideProgram'], T.Union[build.Executable, 'ExternalProgram', 'OverrideProgram']]c                 C  sB   | j s|d| _ |ddd| _|ddd| _| j | j| jfS )Nzgobject-introspection-1.0zg-ir-scannerZg_ir_scannerzg-ir-compilerZg_ir_compiler)r   Z
dependencyr  r   r   r   rA   rA   rB   r    s
   zGnomeModule._get_gir_depN)maxsizeoptionc                 C  sP   | j }t|tr|dv sJ dS t| dg tjd\}}}|jdko'||v S )N>   r^  --sources-top-dirsTz--help)rT  r   )r   r   r(   r&   get_commandrL  STDOUTrK  )r   r  exeprD  _rA   rA   rB   rd    s   
zGnomeModule._gir_has_optionr_   r^   4T.Tuple[T.List[str], T.List[str], T.List[GirTarget]]c              	   C  s   g }g }g }|D ]:}t |tr|d| g7 }qt |trB|tj| j |	  |dtj|	 |
   || q|||fS )Nz
--include=z--include-uninstalled=)r   rc   r   r  r  r  r  r   r+  r*  get_basename)r   r_   retgir_inc_dirsr   ZincrA   rA   rB   _scan_include)  s   

"

zGnomeModule._scan_includelangsT.Iterable[str]c                 C  sB   g }|D ]}| j jtj|}|D ]}|dr|| qq|S )Nr]  )r   r.  get_external_link_argsr#   HOSTrt  r  )r   r  r  langZ	link_argsZlink_argrA   rA   rB   _scan_langs:  s   

zGnomeModule._scan_langs
girtargetsT.Sequence[build.BuildTarget]&T.List[T.Union[str, build.Executable]]c                 C  s   g }|D ]b}t |tjr|d|g7 }qtj| | }| j	 }t |tj
r;|d|tj|g7 }| }ntj| d| }|d|g7 }| j|D ]}tj| j	 |}|d|  qRq|S )Nz	--programz-L{}/{}/z	--libraryr]  )r   r   r   r  r  r  r*  get_filenamer   r+  ra  formatr  r  r  rc  r  )r   r  r  r  libpathZ
build_rootr  r  rA   rA   rB   _scan_gir_targetsF  s    

zGnomeModule._scan_gir_targets T.List[T.Tuple[str, 'Compiler']]c                 C  s@   g }| D ]}|j  D ]\}}|dv r|||f  nqq|S )N>   r   objcr  Zobjcppr  )r/  itemsr  )r  r  r  r  compilerrA   rA   rB   _get_girtargets_langs_compilersh  s   z+GnomeModule._get_girtargets_langs_compilers[T.List[T.Union[build.BuildTarget, build.CustomTarget, build.CustomTargetIndex, Dependency]]c                 C  s*   g }| D ]}||  7 }|| 7 }q|S r   )Zget_all_link_depsr}  r  r  r  rA   rA   rB   _get_gir_targets_depst  s
   z!GnomeModule._get_gir_targets_depsOrderedSet[build.IncludeDirs]c                 C  s"   t  }| D ]	}||  q|S r   )r%   r   r  r  rA   rA   rB   _get_gir_targets_inc_dirs}  s   z%GnomeModule._get_gir_targets_inc_dirslangs_compilers.T.Tuple[T.List[str], T.List[str], T.List[str]]c                 C  s   g }g }g }|D ]X\}}| j |r|| j | 7 }| j|r&|| j| 7 }td|jv r`| jjjtd j	}||
|7 }|d}d|v rN|dg7 }d|v rW|dg7 }d|v r`|dg7 }q|||fS )	NZ
b_sanitize,addressz-lasanthreadz-ltsanZ	undefinedz-lubsan)Zglobal_argsgetZproject_argsr
   r4  Zbase_optionsr   r.  optionsr  Zsanitizer_compile_argsrN  )r   r  r  r  r  r  r  sanitizerA   rA   rB   _get_langs_compilers_flags  s(   




z&GnomeModule._get_langs_compilers_flagssrcdirnsre   
libsourcesiT.Sequence[T.Union[str, mesonlib.File, build.GeneratedList, build.CustomTarget, build.CustomTargetIndex]]c                 C  s8  | j |d }tj|st| tj|| d| d}t|dddk}|D ]_}	t|	t	j
t	jfrQ|	 D ]}
|tj| j | j |	|
d  q9q*t|	tjrc||	| jd  q*t|	t	jr}|	 D ]}|tj||d  qmq*|tj||	d  q*W d    |S 1 sw   Y  |S )Nr   r  Z_gir_filelistwutf-8encodingrA  )r  Zget_target_private_dir_absr  r  isdirmkdirr  openr   r   r   r   rP  writer   r+  rb  r
   r)  Zrel_to_builddirr  r   )r   r  r  re   r  r  Zgir_filelist_dirZgir_filelist_filenameZgir_filelistsZcustom_outputgen_srcrA   rA   rB   _make_gir_filelist  s6   


zGnomeModule._make_gir_filelistgirfilescan_commandQT.Sequence[T.Union['FileOrString', Executable, ExternalProgram, OverrideProgram]]generated_filesiT.Sequence[T.Union[str, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.GeneratedList]]gT.Sequence[T.Union['FileOrString', build.BuildTarget, 'build.GeneratedTypes', build.StructuredSources]]T.Dict[str, T.Any]r   c           	      C  s   |d }|d u r|d }|d }|d u rt j| j d}n|du r%d}tj| jtjdd}t	|| j
| j| j|||g|d |||gd	g|d
S )Ninstall_girrT   r`   zgir-1.0FT)ZuninstalledrD   r&  )rD   r   rT   rU   r!  env)r  r  r  r   r  r   Zget_envr#   r  r   r  r2  )	r   r  r  r  r   r   rT   rU   Zrun_envrA   rA   rB   _make_gir_target  s0   zGnomeModule._make_gir_targettypelib_outputtypelib_cmdOT.Sequence[T.Union[str, build.Executable, ExternalProgram, build.CustomTarget]]r   c                 C  sx   |d }|d u r|d }|d }|d u rt j| j d}n|du r%d}t|| j| j| j|||g||gdg|d dS )	Ninstall_typelibrT   ra   zgirepository-1.0FZtypelibrD   )rT   rU   r!  rD   )r  r  r  r   Z
get_libdirr   r  r2  )r   r  r  r  r   rT   rU   rA   rA   rB   _make_typelib_target  s*   z GnomeModule._make_typelib_target_T.Sequence[T.Union[Dependency, build.BuildTarget, build.CustomTarget, build.CustomTargetIndex]]c           
      C  s
  g }t |}|D ]x}t|tr9|jD ]%}t|tr7||vr7|| tj| j	
 | }||vr7|| qn&t|tjr_|jD ]}t|tr^tj| j	
 | }||vr^|| qBt|tr|jdddd}	t|	tsuJ d|	r|	|vr||	 q||fS )Nrk  rl  rm  r#  )r   r   r   rJ   r   r  r  r  r  r   r+  r*  r   ra  Z	generatedr   ry  rc   )
r   rh  r   typelib_includesre  r;  r  r  Zg_sourcerk  rA   rA   rB   +_gather_typelib_includes_and_update_depends  s<   	








z7GnomeModule._gather_typelib_includes_and_update_dependsc                 C  s.   g }|D ]}|t | jjtj|7 }q|S r   )r
   r   r   r.  get_external_argsr#   r  )r   r  r  r  rA   rA   rB   _get_external_args_for_langs-  s   z(GnomeModule._get_external_args_for_langsr  c                 c  s*    | D ]}| dr| ds|V  qdS )z?g-ir-scanner only accepts -I/-D/-U; must ignore all other flags)z-Dz-U-Iz-D_FORTIFY_SOURCENrt  )r  rV  rA   rA   rB   _get_scanner_cflags4  s   zGnomeModule._get_scanner_cflagsrq  c                 c  s     | D ]
}| dr|V  qdS )zFg-ir-scanner only accepts -L/-l; must ignore -F and other linker flags)r]  r`  r^  Nr  )rq  rV  rA   rA   rB   _get_scanner_ldflags=  s   
z GnomeModule._get_scanner_ldflagszgnome.generate_girr   )varargsZmin_varargsz0.40.0)r   rY   rZ   0.55.0r[   r\   r]   r  0.61.0r`   )r  z'Use install_gir to disable installationc                 C     | du rdS d S NTzas boolean can only be falserA   xrA   rA   rB   <lambda>T      zGnomeModule.<lambda>)Zdeprecated_values	validatorr  ra   )r  z+Use install_typelib to disable installationc                 C  r  r  rA   r  rA   rA   rB   r  X  r  rb   rd   r   rJ   rg   TT.Tuple[T.List[T.Union[build.Executable, build.SharedLibrary, build.StaticLibrary]]]'GenerateGir'c           ,        s   fdd|d D }t |dkrtdd |D rtd \}}}|d }|d	 }	|d
 }
| d|	 d}tjj j	}tjj
 j	}g }||j ||  |} |\}}} |}||d 7 }||g7 } ||\}} j||dd\}}}}}g }|t |7 }|t |7 }|t  dd |D 7 }g }|t |7 }|t |7 }g }|t |7 }|t |7 } |}|d }g }|g}|dg7 }|dg7 }|d| d|	 g7 }|dg7 }|ddg7 }|dd |d D 7 }||d 7 }|d| d| g7 }||7 }|d |||	||
 g7 }|d D ]}  j| |dd\}!}||! qC |d \}"}#}$||" ||# ||$ |d d |d! D 7 }|d"d |d# D 7 }|d$d |d% D 7 }|d&g7 }||7 }|d'g7 }||7 }|jt|||d(d)7 }|t|7 }| |7 }| d*d |D 7 }|t|7 } d+r|d+tjj j g7 }|d+tjj
 j g7 }d,|v r
t!"d-d.j#d/j$ |d0 r|%d, d1d |
D }% &|||%|t'(d2|}&| d|	 d3}'||&ddg}(|(j|d4d)7 }(|D ]
})|(d4|) g7 }(qB )|'|(|%t'(d2|}* *d5tjj
 j	 |&|*g}+t+|+|+S )6Nc                   s   g | ]}  |qS rA   )r  )r   argr   rA   rB   r  a  s    z,GnomeModule.generate_gir.<locals>.<listcomp>r   r   c                 s  s    | ]	}t |tjV  qd S r   )r   r   r   )r   elrA   rA   rB   r   b  s    z+GnomeModule.generate_gir.<locals>.<genexpr>zVgenerate_gir only accepts a single argument when one of the arguments is an executablerd   re   rJ   -z.girrP   T)r[  c                 S     g | ]}|d  qS r   rA   r   ZlcrA   rA   rB   r        r]   --quietz--no-libtool--namespace=z--nsversion=z
--warn-all--outputr  c                 S     g | ]}d | qS )z--c-include=rA   )r   hrA   rA   rB   r        r[   rR   r  z--filelist=rb   r_   c                 S  r  )z--symbol-prefix=rA   r   r  rA   rA   rB   r    r	  rg   c                 S  r  )z--identifier-prefix=rA   r
  rA   rA   rB   r    r	  r\   c                 S  r  )z--pkg-export=rA   r
  rA   rA   rB   r    r	  rY   z--cflags-beginz--cflags-endz--add-include-path=)r   c                 S  r   r  rA   r  rA   rA   rB   r    r  r  z--warn-errorz(gnome.generate_gir argument --warn-errorr  z%Use "fatal_warnings" keyword argumentrZ   c                 S  s    g | ]}t |tttfr|qS rA   )r   r   r   r   )r   rV  rA   rA   rB   r    r  r  z.typelibz--includedir=ZGI_TYPELIB_PATH),r   anyr$   r  r  r  r  r   rH  r  r+  rR  rJ   r  r  r  r  r  r   r  r  r  r  rz  r  rg  r  	itertoolschainr  r  rd  Zroot_subdirr   
single_user2  current_noder  r  Tcastr  r  r   ),r   r   r   r   r  r   r   r   r  re   r  r  r  Zbuilddirr   r  r  r  r  rh  r  Z
dep_cflagsZdep_internal_ldflagsZdep_external_ldflagsr  Zscan_cflagsZscan_internal_ldflagsZscan_external_ldflagsZgirtargets_inc_dirsinc_dirsr  r  lZ_cflagsZ_cmdZ_gincZ_depsr  Zscan_targetr  r  incdirZtypelib_targetr
  rA   r   rB   r   D  s   



$















zGnomeModule.generate_girzgnome.compile_schemas'CompileSchemas'c           	      C  s   t j|j|j}|j}|dd||g}|jdkrd}n	d|jdd }tj||j|j	|j
|g dg|d	 |d
 d	}| dt j|j
 |j t||gS )Nr   z--targetdirrl  zgsettings-compilezgsettings-compile-r  r  zgschemas.compiledrD   rF   )rD   rF   ZGSETTINGS_SCHEMA_DIR)r  r  r  r  r  r	  ru  r   r   r2  r   r  r+  r   )	r   r   r   r   r  outdirr6  
targetnameZtarget_grA   rA   rB   r     s&   
zGnomeModule.compile_schemasz
gnome.yelp)r  rH   z0.43.0z2Use a LINGUAS file in the source directory instead)r   r   Z
deprecatedZdeprecated_messagerI   )r   r   rK   T.Tuple[str, T.List[str]]'Yelp'c           *        s@  |d }|d }|d rt dd jd j |s$|d }|s#tdn	|d r-td  fd	d
|D }|d }|sHttj	
 jj j}|d }|d }	g }
g } d} d} d}tj	
 j d}tj	
|d|}tj|||t  jdd}|
| g }|D ]6}tj jjtj	
 jd|}|| tj	
|tj	|}tj|g||t  jdd}|
| qtj	
d jd|d } fdd
|D }|d|g}|| td| d|g tj	
 jd j j}|
| |D ]}tj	
 j|}tj	
|||}t|D ]a\}}tj	|}tj	
||}|	rGtj	
tj	j||d|} tj| tj	|| jdd}!n*ztj jj||}"W n tya   || }"Y nw tj|"g||t  jdd}!|
|! q|d }#|ddtj	
d||#tj	
d||#|g}$td| d| d|$|g| j j}%|
|% ||% |d | d  }&tjd| d| d!| j j|d"dd#g|#g|&gdgd}'|
|' tjd| d| | j j|d$tj	
||&d%|dd&d"g|||'gd'|gdgd(}(|
|( qtd| d| j j j})|
|) t d |
S ))Nr   rJ   r   z,gnome.yelp more than one positional argumentz0.60.0z+use the "sources" keyword argument instead.zYelp requires a list of sourcesz\"gnome.yelp" ignores positional sources arguments when the "sources" keyword argument is setc              	     s,   g | ]}t j jjtj jd |qS )C)	r
   r)  rQ  r   rW   r  r  r  r  r   r  r  rA   rB   r    s    z$GnomeModule.yelp.<locals>.<listcomp>rH   rI   rK   itstoolmsgmergemsgfmthelpr  doc)r!  @SOURCE_ROOT@z.potc                   s    g | ]}t jd  jd|qS )r!  r  )r  r  r  r  r  r  rA   rB   r  !  r  z-ozhelp-z-pot)startz.por   r  z
-update-poz.gmoz-gmor  r  z-mz--lang@OUTDIR@T)r   rT   rU   r!  )!r   r  r2  r  r$   r   r   r)   r  r  r  r   rW   r  r	  r  r   Datar
   FileModer  r)  rQ  r  rR  Z	RunTargetr   relpathZSymlinkDatarC  r   AliasTargetr   )*r   r   r   r   Z
project_idrJ   Zsources_filesr  rI   symlinkstargetsZ	potargetsr  r  r  rU   Zc_install_dirZc_dataZmedia_filesr<  rV  Zm_install_dirZm_dataZpot_fileZpot_sourcesZpot_argsZ	pottargetr  Zl_subdirZl_install_dirr   Zm_dirZlink_targetZl_dataZm_fileZpo_fileZpo_argsZpotargetZgmo_fileZ	gmotargetZmergetargetZallpotargetrA   r  rB   r     s   



















zGnomeModule.yelpzgnome.gtkdocrz   z0.48.0)r   r   r   rv   z0.52.0rt   ry   rr   rw   ro   rx   ru   rT   rU   rk   rl   rs   rn   auto>   Zsgmlr*  xmlnone)r   r   r  rm   rl  rp   rq   rj   r   T.Tuple[str]'GtkDoc'c           #        s  |d }|d }|d }|d ur|d urt d|}|d }||r%d| nd d } j }	|d	 }
dJ fdd}|d }g }|D ]}t|tjrZ|| j  j	  qB|
| qBddd j  d j	  d j dd| d| d| d| d|d  g
}dD ]"}d| } |}| }|d usJ d|
d | d!|  q|
r|
d"|
   j }|r|
d#d$|   |
d%d|d&   |
d'd|d(   |
d)d|d*   |
d+d||d,   |
d-d|d.   |
d/d|d0   |
d1d||d2   g }g }|d3 D ]z}t|tjtjfr]|
| | D ]}|
tj j	  j|| qEq0t|tjru|
| j  j	  q0t|tjr|
| | D ]}|
tj j  j| qq0|
tj j  j| q0|d4d| g7 }|
d5d||d6   |
d7d|d8   |
d9d|d:   | |d; |d< |d=  |\}}|| || tj| j j j|	| g | d>gd?|d@	}t||g j j j}|dA rJ dB}dC| dD| g}|dE |f} tj j	  j}! j| ||!|gdF ||g}"|dG r`|"
 jj |	| dHdI t!||"S )KNr   rk   rl   z<gnome.gtkdoc: main_xml and main_sgml are exclusive argumentsrm   r  rl  z-docrd   filesT.Iterable['FileOrString']r   T.Iterator[str]c                 3  sR    | D ]#}t |tjr| j  j V  qtj	 j  j
|V  qd S r   )r   r
   r)  absolute_pathr   rH  r+  r  r  r  r  )r/  rV  r  rA   rB   abs_filenames  s   z)GnomeModule.gtkdoc.<locals>.abs_filenamesrj   r  r   z--sourcedir=z--builddir=z	--subdir=z--headerdirs=z@@z--mainfile=z--modulename=z--moduleversion=z--mode=rn   )scanZscangobjZmkdbZmkhtmlZfixxrefzgtkdoc-z8This shouldn't be possible since program should be found--=r  z--run=r   z--htmlargs=ro   z--scanargs=rp   z--scanobjsargs=rq   z--gobjects-types-file=rw   z--fixxrefargs=rr   z--mkdbargs=rs   z--html-assets=rx   rt   z--content-files=z--expand-content-files=ry   z--ignore-headers=ru   z--installdir=rU   rz   r]   rP   z	-decl.txtT)r   r   rv   zgtkdoc-checkzDOC_MODULE=zDOC_MAIN_SGML_FILE=z-check)r  Zworkdirr   rT   r   )tag)r/  r0  r   r1  )"r   r   Zget_build_commandr   r   IncludeDirsrR  Zto_string_listrH  r+  r  r  r  r	  get_pathZget_exe_wrapperr  r   r   rP  r  r  r  rb  r
   r)  r2  r   _get_build_argsr2  r'  testr  r   )#r   r   r   r   Z
modulenameZ	main_filerl   Zmoduleversionr  commandrd   r3  src_dirsZheader_dirsrj   t_argstoolZprogram_nameprogramr  Zexe_wrapperr   rt   r  rD  r  Z
build_argsre  Zcustom_targetZalias_targetZ	check_cmdZ	check_envZ
check_argsZcheck_workdirresrA   r  rB   r   k  s   #



















zGnomeModule.gtkdocr  ri   r{   >T.Sequence[T.Union[build.BuildTarget, 'build.GeneratedTypes']]c                 C  s>  g }|  }| j|||dd\}}	}
}}|| ||| g }||	 ||
 ||jjtjd ||jj	tjd |jjj
tj d }| |d|fg}||d  ||d  ||d  |r|dt|  g7 }|dt|  g7 }|r|d	t| g7 }|r|d
t| g7 }||fS )NT)rZ  r   r   r   r   z--cc=%sz--ld=%sz--cflags=%sz--ldflags=%s)r1  r  rR  rz  r   r.  r  r#   r  r  r/  r  r'   Zget_exelistZget_linker_exelist)r   rz   r  rh  r   r   r   r  Zdeps_cflagsr  r  Z_gi_includesre  rq  r  Zcompiler_flagsrA   rA   rB   r:    s0   


zGnomeModule._get_build_argszgnome.gtkdoc_html_dir'TYPE_kwargs'c                 C  s   t jd|d S )Nzshare/gtk-doc/htmlr   )r  r  r  )r   r   r   r   rA   rA   rB   r   !  s   zGnomeModule.gtkdoc_html_dirzgnome.gdbus_codegen)Zoptargsz0.46.0rR   z0.47.0r}   r~   r   c                 C  s   | rt | d tr| gS | S )Nr   r   r  rA   rA   rB   r  3  rF  )r   r  Z	convertorr   r   r   >   r,  objectsr   GT.Tuple[str, T.Optional[T.Union['FileOrString', build.GeneratedTypes]]]'GdbusCodegen'c                 C  s  |d }|d r|d gng }| dg}||d  | |}t|ds7|d dkr6td| d	 n|d }|dkrAd
}|d|g |d d urW|d|d g |d d urf|d|d g |d rp|dg ||d  |d }	|d D ]}
|d ||
 qg }|d }|d p|jj	
td}t|tsJ d|d }t|dr|g d }n/|d d ur|d }|d|g7 }t|dr|d d!d"|d#g7 }n|   |d"d$| d#g7 }|}tj||j|j|j|||g|	d%}|| |d& }t|dr|g d' }g }n|}|g}tj||j|j|j|||g|	|||gd(gd)}|| |d d ur|d }|d* }g }|D ]}|d+|tjt| qGt|drm|d d!d|d#g }g }n|}|g}tj||j|j|j||||	|d,	}|| t||S )-Nr   r   zgdbus-codegenrR   z	>= 2.49.1r   r   zGlib version (zE) is too old to support the 'autocleanup' kwarg, need 2.49.1 or newerr   z--c-generate-autocleanupr}   z--interface-prefixrd   z--c-namespacer~   z--c-generate-object-managerrJ   rD   r   z
--annotaterV   rU   r"  r#  r  z	>= 2.56.2)--bodyr  r  r  r   z--generate-docbookz	>= 2.51.3z--output-directoryr#  z--generate-c-coder  z	@OUTDIR@/)rD   r%  )--headerr  r  r  r&  r'  z-docbookz{}-{})rD   r   )r	  rR  r   r
   r   r   r   r  r   r.  r3  r4  r   rc   r   r   r   r  r2  r  r  r  rC  r   )r   r   r   r   ZnamebaseZ	xml_filesr6  r5  ZacrD   r   r)  rV   rU   r=  c_cmdr   Zcfile_custom_targetZ	hfile_cmdr   Zhfile_custom_targetrU  rV  Zdocbook_cmdZdocbook_custom_targetrA   rA   rB   r   &  s   




"

zGnomeModule.gdbus_codegenzgnome.mkenumsr   r   r   r   r   r   r   r   r   r   	'MkEnums'c                 C  s  |d }|d }t |tjr||jj|jj}|d }t |tjr,||jj|jj}g }g d}|D ]}	||	 rH|d|	dd ||	 g7 }q4g }
d }|d urtj	
tj	|d }|dd	g }|g}||d
  | j|||||d |d d}|
| |d urtj	
tj	|d }|dd	g }|g}||d
  |d  }|d ur|| | j|||||d}|
d| |d u r|d u r|d	g }| j||d
 |||d |d d}t||gS t|
|
S )Nr   r   r   )
r   r   r   r   r   r\   rg   r   r   r   r5  r  r  z
--templater  rJ   rV   rU   rT   rU   r   )r   )r   r
   r)  r2  r   rW   	build_dirru  r  r  rC  splitextrR  _make_mkenum_implr  r1  insertr   )r   r   r   r   rC  r   r   r6  Zknown_kwargsr  r)  Zh_targetZh_outputh_cmdZ	h_sourcesZc_outputrI  Z	c_sourcesr   Zc_targetZgeneric_cmdtargetrA   rA   rB   r     s\   




zGnomeModule.mkenumszgnome.mkenums_simplez0.42.0r   r   r   r   'MkEnumsSimple'c                 C  s0  |d  d}|d  d}|d }|d }|d }|d }	g }
|d r-|
 d	|d g |d
 r:|
 d|d
 g |
 }d}|	dkrJ|d|	 7 }|d| 7 }|d D ]}|dtjt|7 }qT|td7 }| d|g |	d |	td |	d |	td| d | ddg |	d |	td |	d | 
||d ||}|
 }|	d |	td| d |	d |	td |	d |	td| d | d!| d" |	d# |	td$ |	d | j
||d |||d% |d& d'}t||g||gS )(Nr   r%  r  r   r   r   r   r\   z--identifier-prefixrg   z--symbol-prefixrl  z%s
z#include "%s"
rJ   z#include "{}"
za
            #define C_ENUM(v) ((gint) v)
            #define C_FLAGS(v) ((guint) v)
            z--fheadz--fprodz>
            /* enumerations from "@basename@" */
            z--vheadz
            GType
            z@enum_name@_get_type (void)
            {
            static gsize gtype_id = 0;
            static const G@Type@Value values[] = {z--vprodz<    { C_@TYPE@(@VALUENAME@), "@VALUENAME@", "@valuenick@" },z--vtaila:      { 0, NULL, NULL }
            };
            if (g_once_init_enter (&gtype_id)) {
                GType new_type = g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
                g_once_init_leave (&gtype_id, new_type);
            }
            return (GType) gtype_id;
            }r  z?#pragma once

            #include <glib-object.h>
            z(

            G_BEGIN_DECLS
            z
            z
            GType zP@enum_name@_get_type (void);
            #define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (z@enum_name@_get_type())z--ftailz
            G_END_DECLSrV   rU   rK  )rR  r1  r  r  r  rC  rc   textwrapdedentr  rN  r   )r   r   r   r   Zhdr_filenameZbody_filenamer   Zdecl_decoratorZfunc_prefixr   r6  rI  r   hdrZc_filerP  Zh_filerA   rA   rB   r     s   



	

	


zGnomeModule.mkenums_simple)rT   rU   r   r=  r6  *T.Optional[T.Sequence[T.Union[str, bool]]]MT.Optional[T.Sequence[T.Union[CustomTarget, CustomTargetIndex, BuildTarget]]]build.CustomTargetc          	      C  st   |  ddgg}|| |p| jjtd}t|ts"J dt	j
|| j| j| j|||gd||gdg|ddS )Nzglib-mkenumsr   r"  r#  Tr&  )capturerT   rU   r!  r   Zabsolute_paths)r	  rR  r   r.  r3  r
   r4  r   rc   r   r   r  r2  )	r   rJ   r=  r6  rT   rU   r   Zreal_cmdZ_install_dirrA   rA   rB   rN  s  s&   
zGnomeModule._make_mkenum_implzgnome.genmarshalr   r   r   r   r   )Zallow_emptyr   r   'GenMarshal'c                 C  s  |d }|d }t | |d}|dg}|d r$|d|d g |d r>|r2||d  ntjdtd	d
dd dD ]}|| rR|d|	dd  q@|d }	d}
t | |dri|ddg7 }nd
}
|d }|ddg }|r||dg7 }t
j|d |j|j|j|||g|	|d r|d gng dg|
|d d}|ddg }g }t | |dr|d |g7 }|| t
j|d! |j|j|j||| d"g|
|d |d#
}||g}t||S )$Nr   rJ   z	>= 2.53.3zglib-genmarshalr   z--prefixrR   zvThe current version of GLib does not support extra arguments 
for glib-genmarshal. You need at least GLib 2.53.3. See z-https://github.com/mesonbuild/meson/pull/2049TFr   )r   r   r   r   r   r5  r  r  rV   z	>= 2.51.0r  r  r%  rH  r  z--pragma-oncer$  rU   r&  rF   )rT   rU   r!  rY  rF   rG  z	>= 2.53.4z--include-headerr  r  )rY  rF   r   )r
   r   r   r	  rR  r   r   r   r  ru  r   r   r  r2  r   r   )r   r   r   r   r=  rJ   Znew_genmarshalr6  krV   rY  Zheader_filerP  r[   rI  
extra_depsbodyr
  rA   rA   rB   r     sv   



zGnomeModule.genmarshalr   (T.List[T.Union[InternalDependency, str]]OT.Tuple[T.List[str], T.List[VapiTarget], T.List[str], T.List[str], T.List[str]]c                 C  s&  |s	g g g g g fS g }g }g }g }g }|D ]v}t |trpdd |jD }	|	D ]H}
tj|j |
 }tj|j	 |
 }|

 d dd }|d|  |d|  |d|  ||
 || || q&qt |tsyJ d	|d|  || || q|||||fS )
z
        Packages are special because we need to:
        - Get a list of packages for the .deps file
        - Get a list of depends for any VapiTargets
        - Get package name from VapiTargets
        - Add include dirs for any VapiTargets
        c                 S  s   g | ]	}t |tr|qS rA   )r   r   )r   trA   rA   rB   r    s    z6GnomeModule._extract_vapi_packages.<locals>.<listcomp>r   N
--vapidir=	--girdir=z--pkg=r#  )r   r   rJ   r  r  r  r   rH  r*  r+  rP  r  rc   )r   r   r   vapi_dependsvapi_packagesvapi_includesZ	vapi_argsZremaining_argsr  r)  rQ  r  r  outfilerA   rA   rB   _extract_vapi_packages  s<   	



z"GnomeModule._extract_vapi_packageslibrary
build.Datac           	      C  s   |j j}tj||d }t|ddd}|D ]	}||d  qW d    n1 s+w   Y  tt	
d||g||t	 |jS )Nz.depsr  r  r  rA  T)r   Zscratch_dirr  r  r  r  r  r   r$  r
   r)  r%  r2  )	r   r   ri  r   rU   r  r,  ZofilepackagerA   rA   rB   _generate_deps  s   $zGnomeModule._generate_depsrQ  T.List[build.LibTypes]c                 C  sF   g }|  D ]}t|tjr|| qt|tr || |7 }q|S r   )Zget_target_dependenciesr   r   ra  r  r   _get_vapi_link_with)r   rQ  rb   r;  rA   rA   rB   rn    s   
zGnomeModule._get_vapi_link_withzgnome.generate_vapir   r   r   'GenerateVapi'c                 C  s>  g }|d }t j|j |j}t j|j |j}| ||d \}}	}
}}|ddd| d| g}|	dd |d	 D  |	d
d |d D  |	dd |d D  ||7 }|d| g7 }|d }g }|D ]:}t
|tr|t j|| qot
|tr|| |7 }t j|j | }t j|| d }|| qo|d }|jjtd}t
|tsJ d|d pt j|dd}|d r| |||
|}|| t||j|j|j|||g|	|d |gdgd}t|jdg| dg}|g|	 }td |g g |g |g i g g g }|| t||S )Nr   r   Zvapigenr  z
--library=z--directory=c                 S  r  )rb  rA   r  rA   rA   rB   r  =  r	  z-GnomeModule.generate_vapi.<locals>.<listcomp>r   c                 S  r  )--metadatadir=rA   r  rA   rA   rB   r  >  r	  r   c                 S  r  )rc  rA   r  rA   rA   rB   r  ?  r	  r   rp  rJ   z.vapidatadirr#  rU   ZvalaZvapirT   r&  )r<  rJ   rU  r   rT   rU   r!  rG  F)r  r  r  r   r+  r  rH  rh  r	  rR  r   rc   r  r   rn  r*  rP  r.  r3  r
   r4  rl  r   r2  r   r8  r   r   )r   r   r   r   Zcreated_valuesri  rL  rW   Zpkg_cmdrd  re  rf  r   r6  inputsrb   r   r  Zgir_fileZvapi_outputrq  rU   Zdeps_targetZvapi_targetZincsrJ   r
  rA   rA   rB   r   %  sb   






zGnomeModule.generate_vapi)r	   r   r   r   )r   r   r   rc   )r   r   r   r   )r   r   )r   r   r   r   r   r   r   r   )r   r   r   r  r   r  r   r  )
r   r   r9  rc   r7  r7   rP   r>  r   r?  )FF)r   r   rW  rX  r   rY  rZ  r5   r[  r5   r   r\  )rh  ri  r   r   r   rY  rZ  r5   r[  r5   r   rj  )rh  ri  r   r   r   rY  rZ  r5   r[  r5   r   r  )r  r  r   r   r   r  )r  rc   r  rc   r   r   )r   r  )r   r   r   r  )r  rc   r   r5   )r   r   r_   r^   r   r  )r   r   r  r  r   r7   )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  rc   r  rc   re   rc   r  r  r  r  r   rc   )r   r   r  rc   r  r  r  r  r   r  r   r  r   r   )r   r   r  rc   r  r  r  r  r   r  r   r   )r   r   rh  r  r   rY  r   r\  )r   r   r  r7   r   r7   )r  r  r   r  )rq  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   )rz   r7   r  ri   rh  r{   r   r   r   rB  r   r\  )r   r   r   r-  r   rC  r   rc   )r   r   r   rE  r   rF  r   r   )r   r   r   r-  r   rJ  r   r   )r   r   r   r-  r   rR  r   r   )r   r   rJ   r  r=  rc   r6  r7   rT   r5   rU   rV  r   rW  r   rX  )r   r   r   r-  r   rZ  r   r   )r   r   r   r^  r   r_  )
r   r   ri  rc   r   r7   rU   rc   r   rj  )rQ  rX  r   rm  )r   r   r   r-  r   ro  r   r   )Yr=   r>   r?   r   INFOr   r   r
   Zrun_oncer(  staticmethodr   r   r    r5   r!   r   rc   r   r   r   r"   r)  r   r   r   r   r   r   r   evolver   r   r   r-  rg  r|  r  r  r  r  r  	functools	lru_cacherd  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   ra  r  r   r8  r   r   r   r   r   r   r   r:  r   r   r   r   r   r   r   r   r   rN  r   rh  rl  rn  r   r   __classcell__rA   rA   r   rB   r     s,   ,  La

!((
&n
x&
!r" 



}	
;
e
 

 H(
	r   interpr   c                 C  s\   t | }|jttj |jttj |jttj |jttj |jttj |S r   )	r   r	   Zappend_holder_mapr   ZCustomTargetHolderr   r   r   r   )ry  modrA   rA   rB   
initializeq  s   r{  )r   r   r   rN   )ry  r   r   r   )b__doc__
__future__r   r1  r  rv  r  rL  rS  typingr  rl  r   r   r   r   r	   r
   r   r   r   r   r   r   rP   r   r   r   Zinterpreter.type_checkingr   r   r   r   r   r   r   Zinterpreterbaser   r   r   r   r   r    r!   Zinterpreterbase.decoratorsr"   r#   r$   r%   r&   r'   Zprogramsr(   Zscripts.gettextr)   TYPE_CHECKINGtyping_extensionsr*   r+   r,   r-   r/  r.   r/   r0   r1   r2   r3   r4   rC   rG   rM   rX   rh   r|   r   r   r   r   r   r5   r   r@   r   rc   r   ru  r)  r   r   r   r   r   r   r   r   r   r{  rA   rA   rA   rB   <module>   s   $


              n