summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2017-05-20 15:33:43 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2017-05-22 09:20:14 +0100
commit7fffa9999f9359454e6ffba0c975269bb3989865 (patch)
tree456e345f546f986e32eb95ec5766094f5e4e62bb
parent60d7145c68a90e6d6aae4b50e20a50ce49d3052a (diff)
downloadatk-7fffa9999f9359454e6ffba0c975269bb3989865.tar.gz
build: Use template files for the ATK enumerations
Placing the enumeration GType inline in the Makefile makes them unreadable, and does not allow to easily update the body of the get_type() functions. Case in point: ATK still generates thread-unsafe versions of the enumeration and flags GTypes. Let's update the build to something more idiomatic, and use template files, like every other G* library does.
-rw-r--r--atk/Makefile.am78
-rw-r--r--atk/atk-enum-types.c.template38
-rw-r--r--atk/atk-enum-types.h.template30
3 files changed, 102 insertions, 44 deletions
diff --git a/atk/Makefile.am b/atk/Makefile.am
index 660b26b..0d3ec27 100644
--- a/atk/Makefile.am
+++ b/atk/Makefile.am
@@ -6,7 +6,9 @@ include $(INTROSPECTION_MAKEFILE)
INTROSPECTION_GIRS =
INTROSPECTION_SCANNER_ENV = CC="$(CC)"
+EXTRA_DIST =
CLEANFILES =
+DISTCLEANFILES =
if PLATFORM_WIN32
no_undefined = -no-undefined
@@ -15,24 +17,25 @@ no_undefined =
endif
AM_CPPFLAGS = \
- -I$(top_srcdir) \
- -DG_DISABLE_DEPRECATED \
- -DATK_DISABLE_DEPRECATED \
- -DATK_COMPILATION \
+ -I$(top_srcdir) \
+ -I$(top_builddir) \
+ -DG_DISABLE_DEPRECATED \
+ -DATK_DISABLE_DEPRECATED \
+ -DATK_COMPILATION \
-DATK_LOCALEDIR="\"$(datadir)/locale\"" \
- $(DEP_CFLAGS) \
+ $(DEP_CFLAGS) \
$(ATK_HIDDEN_VISIBILITY_CFLAGS)
lib_LTLIBRARIES = libatk-1.0.la
-libatk_1_0_la_LDFLAGS = \
- -version-info $(LT_VERSION_INFO) \
+libatk_1_0_la_LDFLAGS = \
+ -version-info $(LT_VERSION_INFO) \
$(no_undefined)
libatk_1_0_la_LIBADD = \
- $(DEP_LIBS) \
+ $(DEP_LIBS) \
$(INTLLIBS)
-atk_sources = \
+atk_sources = \
atkaction.c \
atkcomponent.c \
atkdocument.c \
@@ -103,13 +106,13 @@ atk_headers = \
atktext.h \
atkutil.h \
atkmisc.h \
- atkvalue.h \
+ atkvalue.h \
atkwindow.h
libatkinclude_HEADERS = \
atk.h \
$(atk_headers) \
- $(top_builddir)/atk/atkversion.h \
+ atkversion.h \
atk-enum-types.h
@@ -133,51 +136,48 @@ stamp-atkmarshal.c: @REBUILD@ atkmarshal.list
&& rm -f xgen-gmc xgen-gmc~ \
&& echo timestamp > $(@F)
+EXTRA_DIST += atkmarshal.list
+DISTCLEANFILES += stamp-atkmarshal.h stamp-atkmarshal.c
+
atk-enum-types.h: s-enum-types-h
@true
-s-enum-types-h: @REBUILD@ $(atk_headers) Makefile
- $(AM_V_GEN) ( cd $(srcdir) && $(GLIB_MKENUMS) \
- --fhead "#if defined(ATK_DISABLE_SINGLE_INCLUDES) && !defined (__ATK_H_INSIDE__) && !defined (ATK_COMPILATION)\n#error \"Only <atk/atk.h> can be included directly.\"\n#endif\n\n#ifndef __ATK_ENUM_TYPES_H__\n#define __ATK_ENUM_TYPES_H__\n\n#include <atk/atkversion.h>\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
- --fprod "/* enumerations from \"@filename@\" */\n" \
- --vhead "ATK_AVAILABLE_IN_ALL\nGType @enum_name@_get_type (void);\n#define ATK_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \
- --ftail "G_END_DECLS\n\n#endif /* __ATK_ENUM_TYPES_H__ */" \
- $(atk_headers) ) > tmp-atk-enum-types.h \
- && (cmp -s tmp-atk-enum-types.h atk-enum-types.h || cp tmp-atk-enum-types.h atk-enum-types.h ) \
+s-enum-types-h: @REBUILD@ $(atk_headers) $(top_srcdir)/atk/atk-enum-types.h.template Makefile
+ $(AM_V_GEN) $(GLIB_MKENUMS) \
+ --template $(top_srcdir)/atk/atk-enum-types.h.template \
+ $(addprefix $(srcdir)/, $(atk_headers)) > tmp-atk-enum-types.h \
+ && (cmp -s tmp-atk-enum-types.h atk-enum-types.h || cp -f tmp-atk-enum-types.h atk-enum-types.h ) \
&& rm -f tmp-atk-enum-types.h \
&& echo timestamp > $(@F)
atk-enum-types.c: s-enum-types-c
@true
-s-enum-types-c: @REBUILD@ $(atk_headers) Makefile
- $(AM_V_GEN) ( cd $(srcdir) && $(GLIB_MKENUMS) \
- --fhead "#include \"config.h\"\n\n#include <atk.h>" \
- --fprod "\n/* enumerations from \"@filename@\" */" \
- --vhead "GType\n@enum_name@_get_type (void)\n{\n static GType etype = 0;\n if (etype == 0) {\n static const G@Type@Value values[] = {" \
- --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
- --vtail " { 0, NULL, NULL }\n };\n etype = g_@type@_register_static (\"@EnumName@\", values);\n }\n return etype;\n}\n" \
- $(atk_headers) ) > tmp-atk-enum-types.c \
+s-enum-types-c: @REBUILD@ $(atk_headers) $(top_srcdir)/atk/atk-enum-types.c.template Makefile
+ $(AM_V_GEN) $(GLIB_MKENUMS) \
+ --template $(top_srcdir)/atk/atk-enum-types.c.template \
+ $(addprefix $(srcdir)/, $(atk_headers)) > tmp-atk-enum-types.c \
&& (cmp -s tmp-atk-enum-types.c atk-enum-types.c || cp tmp-atk-enum-types.c atk-enum-types.c ) \
&& rm -f tmp-atk-enum-types.c \
&& echo timestamp > $(@F)
+EXTRA_DIST += atk-enum-types.h.template atk-enum-types.c.template
+CLEANFILES += s-enum-types-h s-enum-types-c
+DISTCLEANFILES += atk-enum-types.h atk-enum-types.c
if HAVE_INTROSPECTION
introspection_sources = \
$(atk_headers) \
$(atk_sources)
introspection_generated_sources = \
- $(top_builddir)/atk/atkversion.h \
+ atkversion.h \
atk-enum-types.c \
atk-enum-types.h
Atk-1.0.gir: libatk-1.0.la Makefile
Atk_1_0_gir_INCLUDES = GObject-2.0
-Atk_1_0_gir_CFLAGS = $(AM_CPPFLAGS) -I ..
+Atk_1_0_gir_CFLAGS = $(AM_CPPFLAGS)
Atk_1_0_gir_LIBS = libatk-1.0.la
-Atk_1_0_gir_SCANNERFLAGS = --pkg-export atk --warn-all --c-include "atk/atk.h"
-Atk_1_0_gir_FILES = \
- $(addprefix $(srcdir)/, $(introspection_sources)) \
- $(introspection_generated_sources)
+Atk_1_0_gir_SCANNERFLAGS = --pkg-export=atk --warn-all --c-include="atk/atk.h"
+Atk_1_0_gir_FILES = $(introspection_sources) $(introspection_generated_sources)
INTROSPECTION_GIRS += Atk-1.0.gir
girdir = $(datadir)/gir-1.0
@@ -190,7 +190,6 @@ CLEANFILES += $(gir_DATA) $(typelibs_DATA)
endif
# ---------- Win32 stuff ----------
-
if OS_WIN32
libatk_1_0_la_LDFLAGS += -no-undefined -Wl,atk-win32-res.o
libatk_1_0_la_DEPENDENCIES = atk-win32-res.o
@@ -199,11 +198,7 @@ endif
atk-win32-res.o: atk.rc
$(WINDRES) $< $@
-EXTRA_DIST = atk.rc.in atkmarshal.list atk.rc atkversion.h.in
-
-DISTCLEANFILES = \
- stamp-atkmarshal.h stamp-atkmarshal.c \
- s-enum-types-h s-enum-types-c
+EXTRA_DIST += atk.rc.in
# ---------- MSVC Project Items ---------
MSVCPROJS = atk
@@ -253,8 +248,3 @@ dist-hook: \
$(top_builddir)/win32/vs9/atk.vcproj \
$(top_builddir)/win32/vs9/atk.headers \
$(INTROSPECTION_INTERMEDIATE_ITEMS)
-
-distclean-local:
- if test $(srcdir) = .; then :; else \
- rm -f atkmarshal.h atkmarshal.c atk-enum-types.h atk-enum-types.c; \
- fi
diff --git a/atk/atk-enum-types.c.template b/atk/atk-enum-types.c.template
new file mode 100644
index 0000000..df2f546
--- /dev/null
+++ b/atk/atk-enum-types.c.template
@@ -0,0 +1,38 @@
+/*** BEGIN file-header ***/
+#include "config.h"
+
+#include <atk.h>
+
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+
+/* enumerations from "@filename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+
+GType
+@enum_name@_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ 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 g_define_type_id =
+ g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+ return g_define_type_id__volatile;
+}
+/*** END value-tail ***/
diff --git a/atk/atk-enum-types.h.template b/atk/atk-enum-types.h.template
new file mode 100644
index 0000000..7b4cec4
--- /dev/null
+++ b/atk/atk-enum-types.h.template
@@ -0,0 +1,30 @@
+/*** BEGIN file-header ***/
+#if defined(ATK_DISABLE_SINGLE_INCLUDES) && !defined (__ATK_H_INSIDE__) && !defined (ATK_COMPILATION)
+#error "Only <atk/atk.h> can be included directly."
+#endif
+
+#ifndef __ATK_ENUM_TYPES_H__
+#define __ATK_ENUM_TYPES_H__
+
+#include <atk/atkversion.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+
+/* enumerations from "@filename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+ATK_AVAILABLE_IN_ALL
+GType @enum_name@_get_type (void);
+#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type())
+/*** END value-header ***/
+
+/*** BEGIN file-tail ***/
+G_END_DECLS
+
+#endif /* __ATK_ENUM_TYPES_H__ */
+/*** END file-tail ***/