Repository: mesonbuild/meson

Issue:
gnome.marshal() accept files in addition to strings for the sources
Hello!
Since meson > 0.61 the method [gnome.marshal()](https://mesonbuild.com/Gnome-module.html#gnomegenmarshal) doesn't accept anymore a list of files for the parameter `sources`. According to the documentation this is correct:

```
sources []str required: List of string sources to consume
sources: the list of sources to use as inputs
```

I assume a more strict and therefore better type checking. The maintainers of gnome-terminal [prefer](https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/7886#note_1355184) to keep passing files. Is it possible to extend the API?


Discussion:

Resolving patch:
diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
--- a/mesonbuild/modules/gnome.py
+++ b/mesonbuild/modules/gnome.py
@@ -153,7 +153,7 @@ class GenMarshal(TypedDict):
         nostdinc: bool
         prefix: T.Optional[str]
         skip_source: bool
-        sources: T.List[str]
+        sources: T.List[FileOrString]
         stdinc: bool
         valist_marshallers: bool
 
@@ -1813,7 +1813,7 @@ def _make_mkenum_impl(
         KwargInfo('nostdinc', bool, default=False),
         KwargInfo('prefix', (str, NoneType)),
         KwargInfo('skip_source', bool, default=False),
-        KwargInfo('sources', ContainerTypeInfo(list, str, allow_empty=False), listify=True, required=True),
+        KwargInfo('sources', ContainerTypeInfo(list, (str, mesonlib.File), allow_empty=False), listify=True, required=True),
         KwargInfo('stdinc', bool, default=False),
         KwargInfo('valist_marshallers', bool, default=False),
     )


Test patch:
diff --git a/test cases/frameworks/7 gnome/genmarshal/main.c b/test cases/frameworks/7 gnome/genmarshal/main.c.in
similarity index 97%
rename from test cases/frameworks/7 gnome/genmarshal/main.c
rename to test cases/frameworks/7 gnome/genmarshal/main.c.in
--- a/test cases/frameworks/7 gnome/genmarshal/main.c	
+++ b/test cases/frameworks/7 gnome/genmarshal/main.c.in	
@@ -1,7 +1,7 @@
-#include<stdio.h>
-#include<stdlib.h>
-#include<glib-object.h>
-#include"marshaller.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <glib-object.h>
+#include @MARSHALLER_HEADER@
 
 static int singleton = 42;
 
diff --git a/test cases/frameworks/7 gnome/genmarshal/meson.build b/test cases/frameworks/7 gnome/genmarshal/meson.build
--- 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
--- 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"},