gnome: allow generator outputs as gdbus-codegen inputs

GeneratedLists as sources to `gnome.gdbus_codegen` worked until
version 0.60 of Meson, but broke in 0.61 because of the conversion to
typed_pos_args and typed_kwargs.  Reinstate this by adding them to the
decorators and annotations.

Note that gdbus_codegen desugars to two custom_targets and therefore the
generator is invoked twice.  This is not optimal, but it should not be
an issue and can be changed later.

Fixes: 53a187ba2 ("modules/gnome: use typed_pos_args for gdbus_codegen", 2021-11-01)
Fixes: ef52e6093 ("modules/gnome: use typed_kwargs for gdbus_codegen", 2021-11-08)
pull/10967/head
Paolo Bonzini 3 years ago committed by Jussi Pakkanen
parent 2fe3271f77
commit 212af2b278
  1. 6
      mesonbuild/modules/gnome.py
  2. 8
      test cases/frameworks/7 gnome/gdbus/meson.build
  3. 3
      test cases/frameworks/7 gnome/meson.build

@ -32,7 +32,7 @@ from .. import mesonlib
from .. import mlog from .. import mlog
from ..build import CustomTarget, CustomTargetIndex, Executable, GeneratedList, InvalidArguments from ..build import CustomTarget, CustomTargetIndex, Executable, GeneratedList, InvalidArguments
from ..dependencies import Dependency, PkgConfigDependency, InternalDependency from ..dependencies import Dependency, PkgConfigDependency, InternalDependency
from ..interpreter.type_checking import DEPENDS_KW, DEPEND_FILES_KW, INSTALL_DIR_KW, INSTALL_KW, NoneType, in_set_validator from ..interpreter.type_checking import DEPENDS_KW, DEPEND_FILES_KW, INSTALL_DIR_KW, INSTALL_KW, NoneType, SOURCES_KW, in_set_validator
from ..interpreterbase import noPosargs, noKwargs, FeatureNew, FeatureDeprecated from ..interpreterbase import noPosargs, noKwargs, FeatureNew, FeatureDeprecated
from ..interpreterbase import typed_kwargs, KwargInfo, ContainerTypeInfo from ..interpreterbase import typed_kwargs, KwargInfo, ContainerTypeInfo
from ..interpreterbase.decorators import typed_pos_args from ..interpreterbase.decorators import typed_pos_args
@ -1570,11 +1570,11 @@ class GnomeModule(ExtensionModule):
def gtkdoc_html_dir(self, state: 'ModuleState', args: T.Tuple[str], kwargs: 'TYPE_kwargs') -> str: def gtkdoc_html_dir(self, state: 'ModuleState', args: T.Tuple[str], kwargs: 'TYPE_kwargs') -> str:
return os.path.join('share/gtk-doc/html', args[0]) return os.path.join('share/gtk-doc/html', args[0])
@typed_pos_args('gnome.gdbus_codegen', str, optargs=[(str, mesonlib.File, build.CustomTarget, build.CustomTargetIndex)]) @typed_pos_args('gnome.gdbus_codegen', str, optargs=[(str, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.GeneratedList)])
@typed_kwargs( @typed_kwargs(
'gnome.gdbus_codegen', 'gnome.gdbus_codegen',
_BUILD_BY_DEFAULT.evolve(since='0.40.0'), _BUILD_BY_DEFAULT.evolve(since='0.40.0'),
KwargInfo('sources', ContainerTypeInfo(list, (str, mesonlib.File, build.CustomTarget, build.CustomTargetIndex)), since='0.46.0', default=[], listify=True), SOURCES_KW.evolve(since='0.46.0'),
KwargInfo('extra_args', ContainerTypeInfo(list, str), since='0.47.0', default=[], listify=True), KwargInfo('extra_args', ContainerTypeInfo(list, str), since='0.47.0', default=[], listify=True),
KwargInfo('interface_prefix', (str, NoneType)), KwargInfo('interface_prefix', (str, NoneType)),
KwargInfo('namespace', (str, NoneType)), KwargInfo('namespace', (str, NoneType)),

@ -79,6 +79,14 @@ gdbus_src_cti = gnome.gdbus_codegen(
annotations : [], annotations : [],
) )
gdbus_src_gen = gnome.gdbus_codegen(
'generated-gdbus-generator-src',
copyfile_gen.process('data/com.example.Sample.xml'),
interface_prefix : 'com.example.',
namespace : 'Sample',
annotations : [],
)
gdbus_exe = executable('gdbus-test', 'gdbusprog.c', gdbus_exe = executable('gdbus-test', 'gdbusprog.c',
gdbus_src, gdbus_src,
include_directories : includes, include_directories : includes,

@ -1,6 +1,9 @@
project('gobject-introspection', 'c') project('gobject-introspection', 'c')
copyfile = find_program('copyfile.py') copyfile = find_program('copyfile.py')
copyfile_gen = generator(copyfile,
output: '@BASENAME@Gen.xml',
arguments : ['@INPUT@', '@OUTPUT@'])
glib = dependency('glib-2.0', required: false) glib = dependency('glib-2.0', required: false)
if not glib.found() if not glib.found()

Loading…
Cancel
Save