From de45352d9d3736da78e47896d4fa5eeb76f561f1 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Tue, 11 Jul 2017 12:00:46 +0100 Subject: 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. --- mesonbuild/modules/gnome.py | 16 ++++++++++++++-- 1 file 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) -- cgit v1.1 From 0b64bac3ad24802dd6f47b5e9a7e1a79c2230410 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Sun, 23 Jul 2017 16:26:56 +0100 Subject: Test the newly added gnome.genmarshal() argument --- test cases/frameworks/7 gnome/genmarshal/meson.build | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test cases/frameworks/7 gnome/genmarshal/meson.build b/test cases/frameworks/7 gnome/genmarshal/meson.build index 4a1a7f9..d7189f5 100644 --- a/test cases/frameworks/7 gnome/genmarshal/meson.build +++ b/test cases/frameworks/7 gnome/genmarshal/meson.build @@ -1,7 +1,8 @@ marshallers = gnome.genmarshal('marshaller', sources : 'marshaller.list', install_header : true, -install_dir : get_option('includedir')) +install_dir : get_option('includedir'), +extra_args : ['-UG_ENABLE_DEBUG', '--prototypes']) marshaller_c = marshallers[0] marshaller_h = marshallers[1] -- cgit v1.1 From 6ba6c174ba9a4fa06d06575e609f2c7bfe3f7d8c Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Sun, 23 Jul 2017 16:24:47 +0100 Subject: Document the newly added gnome.genmarshal() argument --- docs/markdown/Gnome-module.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/markdown/Gnome-module.md b/docs/markdown/Gnome-module.md index d01deaf..3476d34 100644 --- a/docs/markdown/Gnome-module.md +++ b/docs/markdown/Gnome-module.md @@ -61,7 +61,8 @@ the output files. * `internal`: if true, mark generated sources as internal * `skip_source`: if true, skip source location comments * `valist_marshallers`: if true, generate va_list marshallers - +* `extra_args`: (*Added 0.42.0*) additional command line arguments to pass + to `glib-genmarshal` (*Requires GLib 2.54*) *Added 0.35.0* -- cgit v1.1