diff options
author | Ernestas Kulik <ernestask@src.gnome.org> | 2016-08-28 13:34:58 +0300 |
---|---|---|
committer | Ernestas Kulik <ernestask@src.gnome.org> | 2016-09-01 18:02:49 +0300 |
commit | 437f573cf5441587457996863c8eb2a33a682b28 (patch) | |
tree | a0febe3e669b4f603a1a29c812d9471fe8525037 | |
parent | 2f0a9546b24a4a66baf8074cb12af6ab157f23d2 (diff) | |
download | nautilus-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.am | 44 | ||||
-rw-r--r-- | src/nautilus-enum-types.c.template | 37 | ||||
-rw-r--r-- | 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 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 ***/ |