[nautilus] Use templates for glib-mkenums



commit 437f573cf5441587457996863c8eb2a33a682b28
Author: Ernestas Kulik <ernestask src gnome org>
Date:   Sun Aug 28 13:34:58 2016 +0300

    Use templates for glib-mkenums
    
    Currently, enum types are generated by passing command line
    arguments to glib-mkenums. A better alternative to that is passing a
    template file, which also declutters build files.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=770507

 src/Makefile.am                    |   44 ++++++++---------------------------
 src/nautilus-enum-types.c.template |   37 ++++++++++++++++++++++++++++++
 src/nautilus-enum-types.h.template |   25 ++++++++++++++++++++
 3 files changed, 72 insertions(+), 34 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index e0b7b66..d514569 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -99,44 +99,19 @@ nautilus-resources.c: resources/nautilus.gresource.xml $(resource_files)
 nautilus-resources.h: resources/nautilus.gresource.xml $(resource_files)
        glib-compile-resources --manual-register --target=$@ --sourcedir=$(srcdir)/resources 
--generate-header --c-name nautilus $(srcdir)/resources/nautilus.gresource.xml
 
-nautilus-enum-types.h: stamp-nautilus-enum-types.h
-       $(AM_V_GEN)true
-
-stamp-nautilus-enum-types.h: $(headers) Makefile
+nautilus-enum-types.h: nautilus-enum-types.h.template $(headers)
        $(AM_V_GEN)(cd $(srcdir) \
        && glib-mkenums \
-                       --fhead "#ifndef __NAUTILUS_ENUM_TYPES_H__\n" \
-                       --fhead "#define __NAUTILUS_ENUM_TYPES_H__ 1\n\n" \
-                       --fhead "#include <glib-object.h>\n\n" \
-                       --fhead "G_BEGIN_DECLS\n\n" \
-                       --ftail "G_END_DECLS\n\n" \
-                       --ftail "#endif /* __NAUTILUS_ENUM_TYPES_H__ */\n" \
-                       --fprod "#include \"@filename@\"\n" \
-                       --eprod "#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ @enum_name@_get_type()\n" \
-                       --eprod "GType @enum_name@_get_type (void);\n" \
-               $(headers) ) > xgen-gth \
-       && (cmp -s xgen-gth nautilus-enum-types.h || cp xgen-gth nautilus-enum-types.h) \
-       && rm -f xgen-gth \
-       && echo timestamp > $(@F)
+               --template nautilus-enum-types.h.template \
+               $(headers)) \
+       > $@
 
-nautilus-enum-types.c: $(headers) Makefile
+nautilus-enum-types.c: nautilus-enum-types.c.template $(headers)
        $(AM_V_GEN)(cd $(srcdir) \
        && glib-mkenums \
-                       --fhead "#include <config.h>\n" \
-                       --fhead "#include <glib-object.h>\n" \
-                       --fhead "#include \"nautilus-enum-types.h\"\n\n" \
-                       --fprod "\n/* enumerations from \"@filename@\" */" \
-                       --vhead "static const G@Type@Value _@enum_name@_values[] = {" \
-                       --vprod "  { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
-                       --vtail "  { 0, NULL, NULL }\n};\n\n" \
-                       --vtail "GType\n@enum_name@_get_type (void)\n{\n" \
-                       --vtail "  static GType type = 0;\n\n" \
-                       --vtail "  if (!type)\n" \
-                       --vtail "    type = g_@type@_register_static (\"@EnumName@\", 
_@enum_name@_values);\n\n" \
-                       --vtail "  return type;\n}\n\n" \
-               $(headers) ) > xgen-gtc \
-       && cp xgen-gtc $(@F) \
-       && rm -f xgen-gtc
+               --template nautilus-enum-types.c.template \
+               $(headers)) \
+       > $@
 
 if ENABLE_TRACKER
 nautilus_tracker_engine_sources = \
@@ -392,7 +367,6 @@ TESTS=check-nautilus
 CLEANFILES = \
        $(BUILT_SOURCES)                        \
        $(server_DATA)                          \
-       stamp-nautilus-enum-types.h             \
        $(NULL)
 
 EXTRA_DIST =                                   \
@@ -400,6 +374,8 @@ EXTRA_DIST =                                        \
        $(server_in_files)                      \
        resources/nautilus.gresource.xml        \
        check-nautilus                          \
+       nautilus-enum-types.h.template          \
+       nautilus-enum-types.c.template          \
        $(NULL)
 
 dist-hook:
diff --git a/src/nautilus-enum-types.c.template b/src/nautilus-enum-types.c.template
new file mode 100644
index 0000000..00155ca
--- /dev/null
+++ b/src/nautilus-enum-types.c.template
@@ -0,0 +1,37 @@
+/*** BEGIN file-header ***/
+#include "nautilus-enum-types.h"
+
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+/* Enumerations from "@filename@" */
+#include "@filename@"
+
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType
+@enum_name@_get_type (void)
+{
+    static volatile GType type_once = 0;
+
+    if (g_once_init_enter (&type_once))
+    {
+        static const G@Type@Value values[] = {
+/*** END value-header ***/
+/*** BEGIN value-production ***/
+            { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
+/*** END value-production ***/
+/*** BEGIN value-tail ***/
+            { 0, NULL, NULL }
+        };
+
+        GType type = g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
+
+        g_once_init_leave (&type_once, type);
+    }
+
+    return type_once;
+}
+
+/*** END value-tail ***/
diff --git a/src/nautilus-enum-types.h.template b/src/nautilus-enum-types.h.template
new file mode 100644
index 0000000..399bbca
--- /dev/null
+++ b/src/nautilus-enum-types.h.template
@@ -0,0 +1,25 @@
+/*** BEGIN file-header ***/
+#ifndef NAUTILUS_ENUM_TYPES_H
+#define NAUTILUS_ENUM_TYPES_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+/* Enumerations from "@filename@" */
+
+/*** END file-production ***/
+
+/*** BEGIN enumeration-production ***/
+#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ())
+GType @enum_name@_get_type (void);
+
+/*** END enumeration-production ***/
+
+/*** BEGIN file-tail ***/
+G_END_DECLS
+
+#endif /* NAUTILUS_ENUM_TYPES_H */
+/*** END file-tail ***/


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