From 96d000574450ed0a7a0589a069938b0f0dc5c05b Mon Sep 17 00:00:00 2001 From: Eli Schwartz Date: Fri, 14 Jan 2022 15:13:47 -0500 Subject: gnome.genmarshal: restore the ability to pass sources as Files objects It used to support: - a single string - an array of anything And as long as CustomTarget supported it too, everything worked fine. So, a `files('foo')` worked but a `files('foo')[0]` did not, which is silly... and it's not exactly terrible to use files() here, the input is literally a list of source files. Fixes building gnome-terminal Fixes #9827 Test updated by Nirbheek Chauhan --- test cases/frameworks/7 gnome/genmarshal/main.c | 102 --------------------- test cases/frameworks/7 gnome/genmarshal/main.c.in | 102 +++++++++++++++++++++ .../frameworks/7 gnome/genmarshal/meson.build | 63 ++++++++++--- test cases/frameworks/7 gnome/test.json | 7 +- 4 files changed, 159 insertions(+), 115 deletions(-) delete mode 100644 test cases/frameworks/7 gnome/genmarshal/main.c create mode 100644 test cases/frameworks/7 gnome/genmarshal/main.c.in (limited to 'test cases') diff --git a/test cases/frameworks/7 gnome/genmarshal/main.c b/test cases/frameworks/7 gnome/genmarshal/main.c deleted file mode 100644 index 83b08af..0000000 --- a/test cases/frameworks/7 gnome/genmarshal/main.c +++ /dev/null @@ -1,102 +0,0 @@ -#include -#include -#include -#include"marshaller.h" - -static int singleton = 42; - -void foo(gpointer user_data, gpointer data) { - if (user_data != &singleton) { - fprintf(stderr, "Invoked foo function was passed incorrect user data.\n"); - exit(1); - } -} - -void bar(gpointer user_data, gint param1, gpointer data) { - if (param1 != singleton) { - fprintf(stderr, "Invoked bar function was passed incorrect param1, but %d.\n", param1); - exit(2); - } - if (user_data != &singleton) { - fprintf(stderr, "Invoked bar function was passed incorrect user data.\n"); - exit(3); - } -} - -gfloat baz(gpointer user_data, gboolean param1, guchar param2, gpointer data) { - if (param1 != TRUE) { - fprintf(stderr, "Invoked baz function was passed incorrect param1.\n"); - exit(4); - } - if (param2 != singleton) { - fprintf(stderr, "Invoked baz function was passed incorrect param2.\n"); - exit(5); - } - if (user_data != &singleton) { - fprintf(stderr, "Invoked baz function was passed incorrect user data.\n"); - exit(6); - } - return (gfloat)param2; -} - -int main(int argc, char **argv) { - GClosure *cc_foo, *cc_bar, *cc_baz; - GValue return_value = G_VALUE_INIT; - GValue param_values[3] = {G_VALUE_INIT, G_VALUE_INIT, G_VALUE_INIT}; - - fprintf(stderr, "Invoking foo function.\n"); - cc_foo = g_cclosure_new(G_CALLBACK(foo), NULL, NULL); - g_closure_set_marshal(cc_foo, g_cclosure_user_marshal_VOID__VOID); - g_value_init(¶m_values[0], G_TYPE_POINTER); - g_value_set_pointer(¶m_values[0], &singleton); - g_closure_invoke(cc_foo, &return_value, 1, param_values, NULL); - if (G_VALUE_TYPE(&return_value) != G_TYPE_INVALID) { - fprintf(stderr, "Invoked foo function did not return empty value, but %s.\n", - G_VALUE_TYPE_NAME(&return_value)); - return 7; - } - g_value_unset(¶m_values[0]); - g_value_unset(&return_value); - g_closure_unref(cc_foo); - - fprintf(stderr, "Invoking bar function.\n"); - cc_bar = g_cclosure_new(G_CALLBACK(bar), NULL, NULL); - g_closure_set_marshal(cc_bar, g_cclosure_user_marshal_VOID__INT); - g_value_init(¶m_values[0], G_TYPE_POINTER); - g_value_set_pointer(¶m_values[0], &singleton); - g_value_init(¶m_values[1], G_TYPE_INT); - g_value_set_int(¶m_values[1], 42); - g_closure_invoke(cc_bar, &return_value, 2, param_values, NULL); - if (G_VALUE_TYPE(&return_value) != G_TYPE_INVALID) { - fprintf(stderr, "Invoked bar function did not return empty value.\n"); - return 8; - } - g_value_unset(¶m_values[0]); - g_value_unset(¶m_values[1]); - g_value_unset(&return_value); - g_closure_unref(cc_bar); - - fprintf(stderr, "Invoking baz function.\n"); - cc_baz = g_cclosure_new(G_CALLBACK(baz), NULL, NULL); - g_closure_set_marshal(cc_baz, g_cclosure_user_marshal_FLOAT__BOOLEAN_UCHAR); - g_value_init(¶m_values[0], G_TYPE_POINTER); - g_value_set_pointer(¶m_values[0], &singleton); - g_value_init(¶m_values[1], G_TYPE_BOOLEAN); - g_value_set_boolean(¶m_values[1], TRUE); - g_value_init(¶m_values[2], G_TYPE_UCHAR); - g_value_set_uchar(¶m_values[2], 42); - g_value_init(&return_value, G_TYPE_FLOAT); - g_closure_invoke(cc_baz, &return_value, 3, param_values, NULL); - if (g_value_get_float(&return_value) != 42.0f) { - fprintf(stderr, "Invoked baz function did not return expected value.\n"); - return 9; - } - g_value_unset(¶m_values[0]); - g_value_unset(¶m_values[1]); - g_value_unset(¶m_values[2]); - g_value_unset(&return_value); - g_closure_unref(cc_baz); - - fprintf(stderr, "All ok.\n"); - return 0; -} diff --git a/test cases/frameworks/7 gnome/genmarshal/main.c.in b/test cases/frameworks/7 gnome/genmarshal/main.c.in new file mode 100644 index 0000000..8e3ca7a --- /dev/null +++ b/test cases/frameworks/7 gnome/genmarshal/main.c.in @@ -0,0 +1,102 @@ +#include +#include +#include +#include @MARSHALLER_HEADER@ + +static int singleton = 42; + +void foo(gpointer user_data, gpointer data) { + if (user_data != &singleton) { + fprintf(stderr, "Invoked foo function was passed incorrect user data.\n"); + exit(1); + } +} + +void bar(gpointer user_data, gint param1, gpointer data) { + if (param1 != singleton) { + fprintf(stderr, "Invoked bar function was passed incorrect param1, but %d.\n", param1); + exit(2); + } + if (user_data != &singleton) { + fprintf(stderr, "Invoked bar function was passed incorrect user data.\n"); + exit(3); + } +} + +gfloat baz(gpointer user_data, gboolean param1, guchar param2, gpointer data) { + if (param1 != TRUE) { + fprintf(stderr, "Invoked baz function was passed incorrect param1.\n"); + exit(4); + } + if (param2 != singleton) { + fprintf(stderr, "Invoked baz function was passed incorrect param2.\n"); + exit(5); + } + if (user_data != &singleton) { + fprintf(stderr, "Invoked baz function was passed incorrect user data.\n"); + exit(6); + } + return (gfloat)param2; +} + +int main(int argc, char **argv) { + GClosure *cc_foo, *cc_bar, *cc_baz; + GValue return_value = G_VALUE_INIT; + GValue param_values[3] = {G_VALUE_INIT, G_VALUE_INIT, G_VALUE_INIT}; + + fprintf(stderr, "Invoking foo function.\n"); + cc_foo = g_cclosure_new(G_CALLBACK(foo), NULL, NULL); + g_closure_set_marshal(cc_foo, g_cclosure_user_marshal_VOID__VOID); + g_value_init(¶m_values[0], G_TYPE_POINTER); + g_value_set_pointer(¶m_values[0], &singleton); + g_closure_invoke(cc_foo, &return_value, 1, param_values, NULL); + if (G_VALUE_TYPE(&return_value) != G_TYPE_INVALID) { + fprintf(stderr, "Invoked foo function did not return empty value, but %s.\n", + G_VALUE_TYPE_NAME(&return_value)); + return 7; + } + g_value_unset(¶m_values[0]); + g_value_unset(&return_value); + g_closure_unref(cc_foo); + + fprintf(stderr, "Invoking bar function.\n"); + cc_bar = g_cclosure_new(G_CALLBACK(bar), NULL, NULL); + g_closure_set_marshal(cc_bar, g_cclosure_user_marshal_VOID__INT); + g_value_init(¶m_values[0], G_TYPE_POINTER); + g_value_set_pointer(¶m_values[0], &singleton); + g_value_init(¶m_values[1], G_TYPE_INT); + g_value_set_int(¶m_values[1], 42); + g_closure_invoke(cc_bar, &return_value, 2, param_values, NULL); + if (G_VALUE_TYPE(&return_value) != G_TYPE_INVALID) { + fprintf(stderr, "Invoked bar function did not return empty value.\n"); + return 8; + } + g_value_unset(¶m_values[0]); + g_value_unset(¶m_values[1]); + g_value_unset(&return_value); + g_closure_unref(cc_bar); + + fprintf(stderr, "Invoking baz function.\n"); + cc_baz = g_cclosure_new(G_CALLBACK(baz), NULL, NULL); + g_closure_set_marshal(cc_baz, g_cclosure_user_marshal_FLOAT__BOOLEAN_UCHAR); + g_value_init(¶m_values[0], G_TYPE_POINTER); + g_value_set_pointer(¶m_values[0], &singleton); + g_value_init(¶m_values[1], G_TYPE_BOOLEAN); + g_value_set_boolean(¶m_values[1], TRUE); + g_value_init(¶m_values[2], G_TYPE_UCHAR); + g_value_set_uchar(¶m_values[2], 42); + g_value_init(&return_value, G_TYPE_FLOAT); + g_closure_invoke(cc_baz, &return_value, 3, param_values, NULL); + if (g_value_get_float(&return_value) != 42.0f) { + fprintf(stderr, "Invoked baz function did not return expected value.\n"); + return 9; + } + g_value_unset(¶m_values[0]); + g_value_unset(¶m_values[1]); + g_value_unset(¶m_values[2]); + g_value_unset(&return_value); + g_closure_unref(cc_baz); + + fprintf(stderr, "All ok.\n"); + return 0; +} diff --git a/test cases/frameworks/7 gnome/genmarshal/meson.build b/test cases/frameworks/7 gnome/genmarshal/meson.build index d7189f5..7686b4b 100644 --- a/test cases/frameworks/7 gnome/genmarshal/meson.build +++ b/test cases/frameworks/7 gnome/genmarshal/meson.build @@ -1,12 +1,51 @@ -marshallers = gnome.genmarshal('marshaller', -sources : 'marshaller.list', -install_header : true, -install_dir : get_option('includedir'), -extra_args : ['-UG_ENABLE_DEBUG', '--prototypes']) - -marshaller_c = marshallers[0] -marshaller_h = marshallers[1] - -genmarshalexe = executable('genmarshalprog', 'main.c', marshaller_c, marshaller_h, -dependencies : gobj) -test('genmarshal test', genmarshalexe) +m_list = configure_file(input: 'marshaller.list', + output: 'm.list', + copy: true) + +idx = 0 +mlists = ['marshaller.list', files('marshaller.list'), m_list] + +foreach mlist : mlists + marshallers = gnome.genmarshal('marshaller-@0@'.format(idx), + sources : mlist, + install_header : true, + install_dir : get_option('includedir') / 'subdir-@0@'.format(idx), + extra_args : ['-UG_ENABLE_DEBUG', '--prototypes']) + + marshaller_c = marshallers[0] + marshaller_h = marshallers[1] + + cdata = configuration_data() + cdata.set_quoted('MARSHALLER_HEADER', 'marshaller-@0@.h'.format(idx)) + + main_c = configure_file(input: 'main.c.in', + output: 'main-@0@.c'.format(idx), + configuration: cdata) + + genmarshalexe = executable('genmarshalprog-@0@'.format(idx), + main_c, marshaller_c, marshaller_h, + dependencies : gobj) + test('genmarshal test @0@'.format(idx), genmarshalexe) + idx += 1 +endforeach + +foreach mlist : mlists + marshallers = gnome.genmarshal('marshaller-@0@'.format(idx), + sources : [mlist], + install_header : true, + install_dir : get_option('includedir') / 'subdir-@0@'.format(idx), + extra_args : ['-UG_ENABLE_DEBUG', '--prototypes']) + + marshaller_c = marshallers[0] + marshaller_h = marshallers[1] + + main_c = configure_file(input: 'main.c.in', + output: 'main-@0@.c'.format(idx), + configuration: cdata) + + genmarshalexe = executable('genmarshalprog-@0@'.format(idx), + main_c, marshaller_c, marshaller_h, + dependencies : gobj) + test('genmarshal test @0@'.format(idx), genmarshalexe) + idx += 1 +endforeach diff --git a/test cases/frameworks/7 gnome/test.json b/test cases/frameworks/7 gnome/test.json index d243cff..0d17384 100644 --- a/test cases/frameworks/7 gnome/test.json +++ b/test cases/frameworks/7 gnome/test.json @@ -4,7 +4,12 @@ {"type": "file", "file": "usr/include/enums2.h"}, {"type": "file", "file": "usr/include/enums3.h"}, {"type": "file", "file": "usr/include/enums5.h"}, - {"type": "file", "file": "usr/include/marshaller.h"}, + {"type": "file", "file": "usr/include/subdir-0/marshaller-0.h"}, + {"type": "file", "file": "usr/include/subdir-1/marshaller-1.h"}, + {"type": "file", "file": "usr/include/subdir-2/marshaller-2.h"}, + {"type": "file", "file": "usr/include/subdir-3/marshaller-3.h"}, + {"type": "file", "file": "usr/include/subdir-4/marshaller-4.h"}, + {"type": "file", "file": "usr/include/subdir-5/marshaller-5.h"}, {"type": "expr", "file": "usr/lib/?libgir_lib.so"}, {"type": "file", "platform": "cygwin", "file": "usr/lib/libgir_lib.dll.a"}, {"type": "expr", "file": "usr/lib/?libgir_lib2.so"}, -- cgit v1.1