summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErnestas Kulik <ernestask@src.gnome.org>2016-08-28 13:34:58 +0300
committerErnestas Kulik <ernestask@src.gnome.org>2016-09-01 18:02:49 +0300
commit437f573cf5441587457996863c8eb2a33a682b28 (patch)
treea0febe3e669b4f603a1a29c812d9471fe8525037
parent2f0a9546b24a4a66baf8074cb12af6ab157f23d2 (diff)
downloadnautilus-437f573cf5441587457996863c8eb2a33a682b28.tar.gz
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
-rw-r--r--src/Makefile.am44
-rw-r--r--src/nautilus-enum-types.c.template37
-rw-r--r--src/nautilus-enum-types.h.template25
3 files changed, 72 insertions, 34 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index e0b7b663b..d51456951 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 000000000..00155ca04
--- /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 000000000..399bbca71
--- /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 ***/