aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/modules
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2021-12-03 15:45:11 -0800
committerEli Schwartz <eschwartz93@gmail.com>2021-12-20 16:03:19 -0500
commit7e833d1484d43f76eb9e592c65bd4a067f3cd664 (patch)
treee0b85416e682a541bfa10644845a0ffc43707658 /mesonbuild/modules
parent4d8c91134c08fc577e053ff007975e90c9bebf6d (diff)
downloadmeson-7e833d1484d43f76eb9e592c65bd4a067f3cd664.zip
meson-7e833d1484d43f76eb9e592c65bd4a067f3cd664.tar.gz
meson-7e833d1484d43f76eb9e592c65bd4a067f3cd664.tar.bz2
modules/gnome: don't call through mkenums for mkenums_simple
It's just a bad idea, but especially once we start adding type annotations to both of them.
Diffstat (limited to 'mesonbuild/modules')
-rw-r--r--mesonbuild/modules/gnome.py93
1 files changed, 60 insertions, 33 deletions
diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
index 9cd0bd8..b409d0c 100644
--- a/mesonbuild/modules/gnome.py
+++ b/mesonbuild/modules/gnome.py
@@ -1621,22 +1621,18 @@ class GnomeModule(ExtensionModule):
hdr_filename = f'{args[0]}.h'
body_filename = f'{args[0]}.c'
- mkenums_kwargs: T.Dict[str, T.Any] = {
- 'sources': kwargs['sources'],
- }
- if kwargs['install_dir']:
- mkenums_kwargs['install_dir'] = kwargs['install_dir']
-
- # .c file generation
- c_file_kwargs = mkenums_kwargs.copy()
- # Never install the C file
- c_file_kwargs['install_header'] = False
-
header_prefix = kwargs['header_prefix']
decl_decorator = kwargs['decorator']
func_prefix = kwargs['function_prefix']
body_prefix = kwargs['body_prefix']
+ cmd: T.List[str] = []
+ if kwargs['identifier_prefix']:
+ cmd.extend(['--identifier-prefix', kwargs['identifier_prefix']])
+ if kwargs['symbol_prefix']:
+ cmd.extend(['--symbol-prefix', kwargs['symbol_prefix']])
+
+ c_cmd = cmd.copy()
# Maybe we should write our own template files into the build dir
# instead, but that seems like much more work, nice as it would be.
fhead = ''
@@ -1650,24 +1646,27 @@ class GnomeModule(ExtensionModule):
#define C_ENUM(v) ((gint) v)
#define C_FLAGS(v) ((guint) v)
''')
- c_file_kwargs['fhead'] = fhead
+ c_cmd.extend(['--fhead', fhead])
- c_file_kwargs['fprod'] = textwrap.dedent(
+ c_cmd.append('--fprod')
+ c_cmd.append(textwrap.dedent(
'''
/* enumerations from "@basename@" */
- ''')
+ '''))
- c_file_kwargs['vhead'] = textwrap.dedent(
+ c_cmd.append('--vhead')
+ c_cmd.append(textwrap.dedent(
f'''
GType
{func_prefix}@enum_name@_get_type (void)
{{
static gsize gtype_id = 0;
- static const G@Type@Value values[] = {{''')
+ static const G@Type@Value values[] = {{'''))
- c_file_kwargs['vprod'] = ' { C_@TYPE@(@VALUENAME@), "@VALUENAME@", "@valuenick@" },'
+ c_cmd.extend(['--vprod', ' { C_@TYPE@(@VALUENAME@), "@VALUENAME@", "@valuenick@" },'])
- c_file_kwargs['vtail'] = textwrap.dedent(
+ c_cmd.append('--vtail')
+ c_cmd.append(textwrap.dedent(
''' { 0, NULL, NULL }
};
if (g_once_init_enter (&gtype_id)) {
@@ -1675,45 +1674,73 @@ class GnomeModule(ExtensionModule):
g_once_init_leave (&gtype_id, new_type);
}
return (GType) gtype_id;
- }''')
+ }'''))
- rv = self.mkenums(state, [body_filename], c_file_kwargs)
- c_file = rv.return_value
+ c_file = self._make_mkenum_impl(state, kwargs['sources'], body_filename, c_cmd)
# .h file generation
- h_file_kwargs = mkenums_kwargs.copy()
- h_file_kwargs['install_header'] = kwargs['install_header']
+ h_cmd = cmd.copy()
- h_file_kwargs['fhead'] = textwrap.dedent(
+ h_cmd.append('--fhead')
+ h_cmd.append(textwrap.dedent(
f'''#pragma once
#include <glib-object.h>
{header_prefix}
G_BEGIN_DECLS
- ''')
+ '''))
- h_file_kwargs['fprod'] = textwrap.dedent(
+ h_cmd.append('--fprod')
+ h_cmd.append(textwrap.dedent(
'''
/* enumerations from "@basename@" */
- ''')
+ '''))
- h_file_kwargs['vhead'] = textwrap.dedent(
+ h_cmd.append('--vhead')
+ h_cmd.append(textwrap.dedent(
f'''
{decl_decorator}
GType {func_prefix}@enum_name@_get_type (void);
- #define @ENUMPREFIX@_TYPE_@ENUMSHORT@ ({func_prefix}@enum_name@_get_type())''')
+ #define @ENUMPREFIX@_TYPE_@ENUMSHORT@ ({func_prefix}@enum_name@_get_type())'''))
- h_file_kwargs['ftail'] = textwrap.dedent(
+ h_cmd.append('--ftail')
+ h_cmd.append(textwrap.dedent(
'''
- G_END_DECLS''')
+ G_END_DECLS'''))
- rv = self.mkenums(state, [hdr_filename], h_file_kwargs)
- h_file = rv.return_value
+ h_file = self._make_mkenum_impl(
+ state, kwargs['sources'], hdr_filename, h_cmd,
+ install=kwargs['install_header'],
+ install_dir=kwargs['install_dir'])
return ModuleReturnValue([c_file, h_file], [c_file, h_file])
@staticmethod
+ def _make_mkenum_impl(
+ state: 'ModuleState',
+ sources: T.Sequence[T.Union[str, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.GeneratedList]],
+ output: str,
+ cmd: T.List[str],
+ *,
+ install: bool = False,
+ install_dir: T.Optional[T.Sequence[T.Union[str, bool]]] = None) -> build.CustomTarget:
+ real_cmd: T.List[T.Union[str, ExternalProgram]] = [state.find_program(['glib-mkenums', 'mkenums'])]
+ real_cmd.extend(cmd)
+ real_cmd.append('@INPUT@')
+ custom_kwargs = {
+ 'input': sources,
+ 'output': [output],
+ 'capture': True,
+ 'command': real_cmd,
+ 'install': install,
+ 'install_dir': install_dir or state.environment.coredata.get_option(mesonlib.OptionKey('includedir')),
+ }
+ return build.CustomTarget(output, state.subdir, state.subproject, custom_kwargs,
+ # https://github.com/mesonbuild/meson/issues/973
+ absolute_paths=True)
+
+ @staticmethod
def _make_mkenum_custom_target(
state: 'ModuleState',
sources: T.Sequence[T.Union[str, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.GeneratedList]],