From 8dd32506f468b46ce196900e10c975d936084fcc Mon Sep 17 00:00:00 2001 From: Patrick Griffis Date: Sat, 19 Nov 2016 14:04:42 -0500 Subject: [PATCH 1/2] gnome.compile_resources(): Add ability to output gresource bundles Closes #1061 --- mesonbuild/modules/gnome.py | 18 ++++++++++++++++-- .../frameworks/7 gnome/installed_files.txt | 1 + .../frameworks/7 gnome/resources/meson.build | 9 +++++++++ .../frameworks/7 gnome/resources/resources.py | 10 ++++++++++ 4 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 test cases/frameworks/7 gnome/resources/resources.py diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py index 7c4fb1d94..4f9db48a0 100644 --- a/mesonbuild/modules/gnome.py +++ b/mesonbuild/modules/gnome.py @@ -108,8 +108,19 @@ can not be used with the current version of glib-compiled-resources, due to cmd += mesonlib.stringlistify(kwargs.pop('extra_args', [])) + gresource = kwargs.pop('gresource_bundle', False) + if gresource: + output = args[0] + '.gresource' + name = args[0] + '_gresource' + else: + output = args[0] + '.c' + name = args[0] + '_c' + + if kwargs.get('install', False) and not gresource: + raise MesonException('Only gresource files can be installed') + kwargs['input'] = args[1] - kwargs['output'] = args[0] + '.c' + kwargs['output'] = output kwargs['depends'] = depends if not mesonlib.version_compare(glib_version, gresource_dep_needed_version): # This will eventually go out of sync if dependencies are added @@ -119,7 +130,10 @@ can not be used with the current version of glib-compiled-resources, due to depfile = kwargs['output'] + '.d' kwargs['depfile'] = depfile kwargs['command'] = copy.copy(cmd) + ['--dependency-file', '@DEPFILE@'] - target_c = build.CustomTarget(args[0] + '_c', state.subdir, kwargs) + target_c = build.CustomTarget(name, state.subdir, kwargs) + + if gresource: # Only one target for .gresource files + return [target_c] h_kwargs = { 'command': cmd, diff --git a/test cases/frameworks/7 gnome/installed_files.txt b/test cases/frameworks/7 gnome/installed_files.txt index 06f416396..2f18cb1b0 100644 --- a/test cases/frameworks/7 gnome/installed_files.txt +++ b/test cases/frameworks/7 gnome/installed_files.txt @@ -12,3 +12,4 @@ usr/share/gir-1.0/Meson-1.0.gir usr/share/gir-1.0/MesonDep1-1.0.gir usr/share/gir-1.0/MesonDep2-1.0.gir usr/share/glib-2.0/schemas/com.github.meson.gschema.xml +usr/share/simple-resources.gresource diff --git a/test cases/frameworks/7 gnome/resources/meson.build b/test cases/frameworks/7 gnome/resources/meson.build index f17e46970..bee99f027 100644 --- a/test cases/frameworks/7 gnome/resources/meson.build +++ b/test cases/frameworks/7 gnome/resources/meson.build @@ -11,6 +11,15 @@ simple_res_exe = executable('simple-resources-test', dependencies: gio) test('simple resource test', simple_res_exe) +gnome.compile_resources('simple-resources', + 'simple.gresource.xml', + gresource_bundle: true, + install: true, + install_dir: get_option('datadir'), + source_dir : '../resources-data', +) +test('simple resource test (gresource)', find_program('resources.py')) + if glib.version() >= '2.52.0' # This test cannot pass if GLib version is older than 9.99.9. # Meson will raise an error if the user tries to use the 'dependencies' diff --git a/test cases/frameworks/7 gnome/resources/resources.py b/test cases/frameworks/7 gnome/resources/resources.py new file mode 100644 index 000000000..b351b04e6 --- /dev/null +++ b/test cases/frameworks/7 gnome/resources/resources.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python3 +import os +from gi.repository import Gio + +if __name__ == '__main__': + res = Gio.resource_load(os.path.join('resources', 'simple-resources.gresource')) + Gio.Resource._register(res) + + data = Gio.resources_lookup_data('/com/example/myprog/res1.txt', Gio.ResourceLookupFlags.NONE) + assert(data.get_data() == b'This is a resource.\n') From 9a6db2eb2f1acf3111371516c56eae0e7a69de13 Mon Sep 17 00:00:00 2001 From: Patrick Griffis Date: Sun, 20 Nov 2016 17:35:47 -0500 Subject: [PATCH 2/2] gnome.compile_resources(): Add export and install_header kwargs This defaults to not exporting resources as that is generally what you want but that does make this a breaking change. Along with that if you export your resources you would want to install the header. --- mesonbuild/modules/gnome.py | 16 +++++++++++++++- .../frameworks/7 gnome/installed_files.txt | 1 + .../frameworks/7 gnome/resources/meson.build | 2 ++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py index 4f9db48a0..fedf95cbc 100644 --- a/mesonbuild/modules/gnome.py +++ b/mesonbuild/modules/gnome.py @@ -104,6 +104,10 @@ can not be used with the current version of glib-compiled-resources, due to if 'c_name' in kwargs: cmd += ['--c-name', kwargs.pop('c_name')] + export = kwargs.pop('export', False) + if not export: + cmd += ['--internal'] + cmd += ['--generate', '--target', '@OUTPUT@'] cmd += mesonlib.stringlistify(kwargs.pop('extra_args', [])) @@ -117,7 +121,13 @@ can not be used with the current version of glib-compiled-resources, due to name = args[0] + '_c' if kwargs.get('install', False) and not gresource: - raise MesonException('Only gresource files can be installed') + raise MesonException('The install kwarg only applies to gresource bundles, see install_header') + + install_header = kwargs.pop('install_header', False) + if install_header and gresource: + raise MesonException('The install_header kwarg does not apply to gresource bundles') + if install_header and not export: + raise MesonException('GResource header is installed yet export is not enabled') kwargs['input'] = args[1] kwargs['output'] = output @@ -142,6 +152,10 @@ can not be used with the current version of glib-compiled-resources, due to # The header doesn't actually care about the files yet it errors if missing 'depends': depends } + if install_header: + h_kwargs['install'] = install_header + h_kwargs['install_dir'] = kwargs.get('install_dir', + state.environment.coredata.get_builtin_option('includedir')) target_h = build.CustomTarget(args[0] + '_h', state.subdir, h_kwargs) return [target_c, target_h] diff --git a/test cases/frameworks/7 gnome/installed_files.txt b/test cases/frameworks/7 gnome/installed_files.txt index 2f18cb1b0..d0d51d51b 100644 --- a/test cases/frameworks/7 gnome/installed_files.txt +++ b/test cases/frameworks/7 gnome/installed_files.txt @@ -13,3 +13,4 @@ usr/share/gir-1.0/MesonDep1-1.0.gir usr/share/gir-1.0/MesonDep2-1.0.gir usr/share/glib-2.0/schemas/com.github.meson.gschema.xml usr/share/simple-resources.gresource +usr/include/simple-resources.h diff --git a/test cases/frameworks/7 gnome/resources/meson.build b/test cases/frameworks/7 gnome/resources/meson.build index bee99f027..2e7250134 100644 --- a/test cases/frameworks/7 gnome/resources/meson.build +++ b/test cases/frameworks/7 gnome/resources/meson.build @@ -3,6 +3,8 @@ simple_resources = gnome.compile_resources('simple-resources', 'simple.gresource.xml', + install_header : true, + export : true, source_dir : '../resources-data', c_name : 'simple_resources')