gnome: Split header and code targets in gdbus_codegen()

The development version of `glib` (2.55.2) has acquired support for
generating gdbus header and source code files separately. This
allows dependencies to be more fine grained on those targets
depending only on the header.
pull/2930/head
Iñigo Martínez 7 years ago
parent e103675a39
commit 351b59f03a
  1. 13
      docs/markdown/Gnome-module.md
  2. 71
      mesonbuild/modules/gnome.py

@ -235,9 +235,18 @@ files and the second specifies the XML file name.
* `object_manager`: *(Added 0.40.0)* if true generates object manager code
* `annotations`: *(Added 0.43.0)* list of lists of 3 strings for the annotation for `'ELEMENT', 'KEY', 'VALUE'`
* `docbook`: *(Added 0.43.0)* prefix to generate `'PREFIX'-NAME.xml` docbooks
* `build_by_default`: causes, when set to true, to have this target be
built by default, that is, when invoking plain `ninja`, the default
value is true for all built target types
* `install_dir`: (*Added 0.46.0*) location to install the header or
bundle depending on previous options
* `install_header`: (*Added 0.46.0*) if true, install the header file
Returns an opaque object containing the source files. Add it to a top
level target's source list.
If gdbus-codegen version is greater than 2.55.2 it will return at
most three targets, one for the souce code, one for the header and
another one for the files generated with docbook. Otherwise, it
returns an opaque object containing the source files. Add it to a
top level target's source list.
Example:

@ -869,7 +869,7 @@ This will become a hard error in the future.''')
return []
@permittedKwargs({'interface_prefix', 'namespace', 'object_manager', 'build_by_default',
'annotations', 'docbook'})
'annotations', 'docbook', 'install', 'install_header'})
def gdbus_codegen(self, state, args, kwargs):
if len(args) != 2:
raise MesonException('Gdbus_codegen takes two arguments, name and xml file.')
@ -883,8 +883,7 @@ This will become a hard error in the future.''')
cmd += ['--c-namespace', kwargs.pop('namespace')]
if kwargs.get('object_manager', False):
cmd += ['--c-generate-object-manager']
if 'docbook' in kwargs:
cmd += ['--generate-docbook', kwargs.pop('docbook')]
build_by_default = kwargs.get('build_by_default', False)
# Annotations are a bit ugly in that they are a list of lists of strings...
annotations = kwargs.pop('annotations', [])
@ -898,21 +897,59 @@ This will become a hard error in the future.''')
raise MesonException('Annotations must be made up of 3 strings for ELEMENT, KEY, and VALUE')
cmd += ['--annotate'] + annotation
# https://git.gnome.org/browse/glib/commit/?id=ee09bb704fe9ccb24d92dd86696a0e6bb8f0dc1a
if mesonlib.version_compare(self._get_native_glib_version(state), '>= 2.51.3'):
cmd += ['--output-directory', '@OUTDIR@', '--generate-c-code', namebase, '@INPUT@']
# https://git.gnome.org/browse/glib/commit/?id=e4d68c7b3e8b01ab1a4231bf6da21d045cb5a816
if mesonlib.version_compare(self._get_native_glib_version(state), '>= 2.55.2'):
targets = []
install_header = kwargs.get('install_header', False)
install_dir = kwargs.get('install_dir', state.environment.coredata.get_builtin_option('includedir'))
output = namebase + '.c'
custom_kwargs = {'input': xml_file,
'output': output,
'command': cmd + ['--body', '--output', '@OUTDIR@/' + output, '@INPUT@'],
'build_by_default': build_by_default
}
targets.append(build.CustomTarget(output, state.subdir, state.subproject, custom_kwargs))
output = namebase + '.h'
custom_kwargs = {'input': xml_file,
'output': output,
'command': cmd + ['--header', '--output', '@OUTDIR@/' + output, '@INPUT@'],
'build_by_default': build_by_default,
'install': install_header,
'install_dir': install_dir
}
targets.append(build.CustomTarget(output, state.subdir, state.subproject, custom_kwargs))
if 'docbook' in kwargs:
docbook_cmd = cmd + ['--output-directory', '@OUTDIR@', '--generate-docbook', kwargs.pop('docbook'), '@INPUT@']
output = namebase + '-docbook'
custom_kwargs = {'input': xml_file,
'output': output,
'command': docbook_cmd,
'build_by_default': build_by_default
}
targets.append(build.CustomTarget(output, state.subdir, state.subproject, custom_kwargs))
else:
self._print_gdbus_warning()
cmd += ['--generate-c-code', '@OUTDIR@/' + namebase, '@INPUT@']
outputs = [namebase + '.c', namebase + '.h']
custom_kwargs = {'input': xml_file,
'output': outputs,
'command': cmd
}
if 'build_by_default' in kwargs:
custom_kwargs['build_by_default'] = kwargs['build_by_default']
ct = build.CustomTarget(target_name, state.subdir, state.subproject, custom_kwargs)
return ModuleReturnValue(ct, [ct])
if 'docbook' in kwargs:
cmd += ['--generate-docbook', kwargs.pop('docbook')]
# https://git.gnome.org/browse/glib/commit/?id=ee09bb704fe9ccb24d92dd86696a0e6bb8f0dc1a
if mesonlib.version_compare(self._get_native_glib_version(state), '>= 2.51.3'):
cmd += ['--output-directory', '@OUTDIR@', '--generate-c-code', namebase, '@INPUT@']
else:
self._print_gdbus_warning()
cmd += ['--generate-c-code', '@OUTDIR@/' + namebase, '@INPUT@']
outputs = [namebase + '.c', namebase + '.h']
custom_kwargs = {'input': xml_file,
'output': outputs,
'command': cmd,
'build_by_default': build_by_default
}
ct = build.CustomTarget(target_name, state.subdir, state.subproject, custom_kwargs)
targets = [ct, ct, ct]
return ModuleReturnValue(targets, targets)
@permittedKwargs({'sources', 'c_template', 'h_template', 'install_header', 'install_dir',
'comments', 'identifier_prefix', 'symbol_prefix', 'eprod', 'vprod',

Loading…
Cancel
Save