[atk/wip/meson: 4/8] build: Use template files for the ATK enumerations



commit 7fffa9999f9359454e6ffba0c975269bb3989865
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Sat May 20 15:33:43 2017 +0100

    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.

 atk/Makefile.am               |   78 ++++++++++++++++++-----------------------
 atk/atk-enum-types.c.template |   38 ++++++++++++++++++++
 atk/atk-enum-types.h.template |   30 ++++++++++++++++
 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 ***/


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