aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2017-07-11 12:00:46 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2017-07-23 16:30:34 +0100
commitde45352d9d3736da78e47896d4fa5eeb76f561f1 (patch)
tree7044e9a2d1d22f47a0a8831440a7efeb22c9e8ff
parent99fdb6c19e93eff0219bbea0f789d42215c89d5d (diff)
downloadmeson-de45352d9d3736da78e47896d4fa5eeb76f561f1.zip
meson-de45352d9d3736da78e47896d4fa5eeb76f561f1.tar.gz
meson-de45352d9d3736da78e47896d4fa5eeb76f561f1.tar.bz2
gnome: Support new glib-genmarshal arguments
The glib-genmarshal tool was rewritten in GLib 2.53.3, and now supports more command line arguments, such as: "--pragma-once": emits a "#pragma once" instead of the old header guards when generating the header file "--prototypes": emits the marshallers prototype when generating the source file "-D,-U": defines and undefines pre-processor symbols "--include-header": emits an "#include" directive when generating the source file for the specified header file Meson should take advantage of these new options, as they can be used to replace most of the ad hoc build rules that projects are currently using to implement the same thing. Instead of mapping each option to a named argument, I used the same approach as the compile_resources() and generate_gir() methods; the genmarshal() method now has an 'extra_args' argument that can be used to pass extra arguments to the glib-genmarshal tool.
-rw-r--r--mesonbuild/modules/gnome.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
index 883799c..addcab3 100644
--- a/mesonbuild/modules/gnome.py
+++ b/mesonbuild/modules/gnome.py
@@ -954,7 +954,8 @@ class GnomeModule(ExtensionModule):
absolute_paths=True)
@permittedKwargs({'sources', 'prefix', 'install_header', 'install_dir', 'stdinc',
- 'nostdinc', 'internal', 'skip_source', 'valist_marshallers'})
+ 'nostdinc', 'internal', 'skip_source', 'valist_marshallers',
+ 'extra_args'})
def genmarshal(self, state, args, kwargs):
if len(args) != 1:
raise MesonException(
@@ -970,15 +971,24 @@ class GnomeModule(ExtensionModule):
raise MesonException(
'Sources keyword argument must be a string or array.')
+ new_genmarshal = mesonlib.version_compare(self._get_native_glib_version(state), '>= 2.53.3')
+
cmd = [find_program('glib-genmarshal', output + '_genmarshal')]
known_kwargs = ['internal', 'nostdinc', 'skip_source', 'stdinc',
- 'valist_marshallers']
+ 'valist_marshallers', 'extra_args']
known_custom_target_kwargs = ['build_always', 'depends',
'depend_files', 'install_dir',
'install_header']
for arg, value in kwargs.items():
if arg == 'prefix':
cmd += ['--prefix', value]
+ elif arg == 'extra_args':
+ if new_genmarshal:
+ cmd += mesonlib.stringlistify(value, [])
+ else:
+ mlog.warning('The current version of GLib does not support extra arguments \n'
+ 'for glib-genmarshal. You need at least GLib 2.53.3. See ',
+ mlog.bold('https://github.com/mesonbuild/meson/pull/2049'))
elif arg in known_kwargs and value:
cmd += ['--' + arg.replace('_', '-')]
elif arg not in known_custom_target_kwargs:
@@ -1014,6 +1024,8 @@ class GnomeModule(ExtensionModule):
custom_kwargs['install'] = install_header
if install_dir is not None:
custom_kwargs['install_dir'] = install_dir
+ if new_genmarshal:
+ cmd += ['--pragma-once']
custom_kwargs['command'] = cmd + ['--header', '@INPUT@']
custom_kwargs['output'] = header_file
header = build.CustomTarget(output + '_h', state.subdir, custom_kwargs)