[retro-gtk/mkenums: 14/16] Build enum types with mk-enums



commit 15ee5439c73ad8a1ddcfdee520451d9b7e4b3259
Author: Adrien Plazas <kekun plazas laposte net>
Date:   Mon Apr 13 17:06:43 2020 +0200

    Build enum types with mk-enums
    
    This will avoid manually defining the enum GType types.

 retro-gtk/meson.build                | 21 ++++++++++++++++++++-
 retro-gtk/retro-gtk-enums.c.in       | 35 +++++++++++++++++++++++++++++++++++
 retro-gtk/retro-gtk-enums.h.in       | 27 +++++++++++++++++++++++++++
 retro-runner/meson.build             | 16 ++++++++++++++++
 retro-runner/retro-runner-enums.c.in | 35 +++++++++++++++++++++++++++++++++++
 retro-runner/retro-runner-enums.h.in | 27 +++++++++++++++++++++++++++
 shared/meson.build                   |  3 +++
 7 files changed, 163 insertions(+), 1 deletion(-)
---
diff --git a/retro-gtk/meson.build b/retro-gtk/meson.build
index baf9737..c09dbcf 100644
--- a/retro-gtk/meson.build
+++ b/retro-gtk/meson.build
@@ -1,3 +1,9 @@
+retro_gtk_include_dir = get_option('includedir') / 'retro-gtk'
+
+retro_gtk_enum_headers = [
+  shared_enum_headers,
+]
+
 retro_gtk_resources = gnome.compile_resources(
   'retro_gtk_resources',
   'retro-gtk.gresource.xml',
@@ -5,6 +11,14 @@ retro_gtk_resources = gnome.compile_resources(
   source_dir: '.',
 )
 
+retro_gtk_enums = gnome.mkenums('retro-gtk-enums',
+  h_template: 'retro-gtk-enums.h.in',
+  c_template: 'retro-gtk-enums.c.in',
+  sources: retro_gtk_enum_headers,
+  install_header: true,
+  install_dir: retro_gtk_include_dir,
+)
+
 retro_gtk_sources = [
   shared_sources,
   retro_gtk_resources,
@@ -32,6 +46,11 @@ retro_gtk_sources = [
 
 retro_gtk_generated_sources = [
   ipc_runner_src,
+  retro_gtk_enums[0],
+]
+
+retro_gtk_generated_headers = [
+  retro_gtk_enums[1],
 ]
 
 retro_gtk_main_header = 'retro-gtk.h'
@@ -71,7 +90,7 @@ retro_gtk_version_h = configure_file(
   output: 'retro-gtk-version.h',
   configuration: version_conf,
   install: true,
-  install_dir: join_paths(get_option('includedir'), 'retro-gtk')
+  install_dir: retro_gtk_include_dir
 )
 
 retro_gtk_c_args = [
diff --git a/retro-gtk/retro-gtk-enums.c.in b/retro-gtk/retro-gtk-enums.c.in
new file mode 100644
index 0000000..9a42d78
--- /dev/null
+++ b/retro-gtk/retro-gtk-enums.c.in
@@ -0,0 +1,35 @@
+/*** BEGIN file-header ***/
+
+
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+/* enumerations from "@filename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType
+@enum_name@_get_type (void)
+{
+    static GType etype = 0;
+    if (G_UNLIKELY(etype == 0)) {
+        static const G@Type@Value values[] = {
+/*** END value-header ***/
+
+/*** BEGIN value-production ***/
+            { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
+/*** END value-production ***/
+
+/*** BEGIN value-tail ***/
+            { 0, NULL, NULL }
+        };
+        etype = g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
+    }
+    return etype;
+}
+
+/*** END value-tail ***/
+
+/*** BEGIN file-tail ***/
+
+/*** END file-tail ***/
diff --git a/retro-gtk/retro-gtk-enums.h.in b/retro-gtk/retro-gtk-enums.h.in
new file mode 100644
index 0000000..746161d
--- /dev/null
+++ b/retro-gtk/retro-gtk-enums.h.in
@@ -0,0 +1,27 @@
+// This file is part of retro-gtk. License: GPL-3.0+.
+
+/*** BEGIN file-header ***/
+#pragma once
+
+#if !defined(__RETRO_GTK_INSIDE__) && !defined(RETRO_GTK_COMPILATION)
+# error "Only <retro-gtk.h> can be included directly."
+#endif
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+
+/* enumerations from "@basename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType @enum_name@_get_type (void);
+#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ())
+/*** END value-header ***/
+
+/*** BEGIN file-tail ***/
+G_END_DECLS
+/*** END file-tail ***/
diff --git a/retro-runner/meson.build b/retro-runner/meson.build
index dcb6c3e..2ae57fb 100644
--- a/retro-runner/meson.build
+++ b/retro-runner/meson.build
@@ -1,5 +1,21 @@
+retro_runner_enum_headers = [
+  shared_enum_headers,
+]
+
+retro_runner_enums = gnome.mkenums('retro-runner-enums',
+  h_template: 'retro-runner-enums.h.in',
+  c_template: 'retro-runner-enums.c.in',
+  sources: retro_runner_enum_headers,
+  install_header: false,
+)
+
+retro_runner_generated_sources = [
+  retro_runner_enums[0],
+]
+
 retro_runner_sources = [
   shared_sources,
+  retro_runner_generated_sources,
 
   'ipc-runner-impl.c',
   'retro-runner.c',
diff --git a/retro-runner/retro-runner-enums.c.in b/retro-runner/retro-runner-enums.c.in
new file mode 100644
index 0000000..9a42d78
--- /dev/null
+++ b/retro-runner/retro-runner-enums.c.in
@@ -0,0 +1,35 @@
+/*** BEGIN file-header ***/
+
+
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+/* enumerations from "@filename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType
+@enum_name@_get_type (void)
+{
+    static GType etype = 0;
+    if (G_UNLIKELY(etype == 0)) {
+        static const G@Type@Value values[] = {
+/*** END value-header ***/
+
+/*** BEGIN value-production ***/
+            { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
+/*** END value-production ***/
+
+/*** BEGIN value-tail ***/
+            { 0, NULL, NULL }
+        };
+        etype = g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
+    }
+    return etype;
+}
+
+/*** END value-tail ***/
+
+/*** BEGIN file-tail ***/
+
+/*** END file-tail ***/
diff --git a/retro-runner/retro-runner-enums.h.in b/retro-runner/retro-runner-enums.h.in
new file mode 100644
index 0000000..746161d
--- /dev/null
+++ b/retro-runner/retro-runner-enums.h.in
@@ -0,0 +1,27 @@
+// This file is part of retro-gtk. License: GPL-3.0+.
+
+/*** BEGIN file-header ***/
+#pragma once
+
+#if !defined(__RETRO_GTK_INSIDE__) && !defined(RETRO_GTK_COMPILATION)
+# error "Only <retro-gtk.h> can be included directly."
+#endif
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+
+/* enumerations from "@basename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType @enum_name@_get_type (void);
+#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ())
+/*** END value-header ***/
+
+/*** BEGIN file-tail ***/
+G_END_DECLS
+/*** END file-tail ***/
diff --git a/shared/meson.build b/shared/meson.build
index d33654b..4114407 100644
--- a/shared/meson.build
+++ b/shared/meson.build
@@ -35,3 +35,6 @@ shared_headers = files([
   'retro-memory-type.h',
   'retro-rumble-effect.h',
 ])
+
+shared_enum_headers = files([
+])


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]