[virt-tools-list] [libosinfo v2 1/8] Use glib-mkenums to register enums with glib

Zeeshan Ali (Khattak) zeeshanak at gnome.org
Fri Nov 9 15:14:17 UTC 2012


From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>

This commit adds the generation of osinfo_enum_types.[ch] using
glib-mkenums. These files will register the various enums that will get
added to osinfo header files with glib.

Commit message shamelessly stolen from a similar commit to libvirt-glib
by Christophe Fergeau <cfergeau at redhat.com>.
---
 configure.ac                        |  3 +++
 osinfo/Makefile.am                  | 17 +++++++++++++++--
 osinfo/libosinfo.syms               |  8 ++++++++
 osinfo/osinfo.h                     |  3 +++
 osinfo/osinfo_enum_types.c.template | 36 ++++++++++++++++++++++++++++++++++++
 osinfo/osinfo_enum_types.h.template | 24 ++++++++++++++++++++++++
 6 files changed, 89 insertions(+), 2 deletions(-)
 create mode 100644 osinfo/osinfo_enum_types.c.template
 create mode 100644 osinfo/osinfo_enum_types.h.template

diff --git a/configure.ac b/configure.ac
index c0950f7..277ab33 100644
--- a/configure.ac
+++ b/configure.ac
@@ -173,6 +173,9 @@ fi
 AC_SUBST(COVERAGE_CFLAGS)
 AC_SUBST(COVERAGE_LDFLAGS)
 
+# Setup GLIB_MKENUMS to use glib-mkenums even if GLib is uninstalled.
+GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
+AC_SUBST(GLIB_MKENUMS)
 
 AC_CONFIG_FILES([
 	Makefile
diff --git a/osinfo/Makefile.am b/osinfo/Makefile.am
index 6ddb956..7875102 100644
--- a/osinfo/Makefile.am
+++ b/osinfo/Makefile.am
@@ -1,9 +1,14 @@
 
-EXTRA_DIST = libosinfo.syms
+EXTRA_DIST = libosinfo.syms \
+	     osinfo_enum_types.h.template \
+	     osinfo_enum_types.c.template
+
+BUILT_SOURCES = osinfo_enum_types.c \
+	        osinfo_enum_types.h
 
 if USE_VERSION_DEFS
 LIBOSINFO_VERSION_FILE = $(builddir)/libosinfo.def
-BUILT_SOURCES = $(LIBOSINFO_VERSION_FILE)
+BUILT_SOURCES += $(LIBOSINFO_VERSION_FILE)
 
 %.def: %.syms
 	$(AM_V_GEN)rm -f -- $@-tmp $@ ; \
@@ -58,6 +63,7 @@ libosinfo_1_0_include_HEADERS = \
   osinfo_devicelinklist.h	\
   osinfo_devicelinkfilter.h	\
   osinfo_entity.h		\
+  osinfo_enum_types.h		\
   osinfo_filter.h		\
   osinfo_install_config.h       \
   osinfo_install_config_param.h \
@@ -83,6 +89,7 @@ libosinfo_1_0_include_HEADERS = \
 
 libosinfo_1_0_la_SOURCES =	\
   osinfo_entity.c		\
+  osinfo_enum_types.c		\
   osinfo_filter.c		\
   osinfo_list.c			\
   osinfo_device.c		\
@@ -113,6 +120,12 @@ libosinfo_1_0_la_SOURCES =	\
   osinfo_loader.c		\
   $(NULL)
 
+osinfo_enum_types.h: $(libosinfo_1_0_include_HEADERS) osinfo_enum_types.h.template
+	$(AM_V_GEN) ( $(GLIB_MKENUMS) --template $(srcdir)/osinfo_enum_types.h.template $(libosinfo_1_0_include_HEADERS:%=$(srcdir)/%) ) > $(srcdir)/osinfo_enum_types.h
+
+osinfo_enum_types.c: $(libosinfo_1_0_include_HEADERS) osinfo_enum_types.c.template
+	$(AM_V_GEN) ( $(GLIB_MKENUMS) --template $(srcdir)/osinfo_enum_types.c.template $(libosinfo_1_0_include_HEADERS:%=$(srcdir)/%) ) > $(srcdir)/osinfo_enum_types.c
+
 if WITH_GOBJECT_INTROSPECTION
 
 Libosinfo-1.0.gir: libosinfo-1.0.la $(G_IR_SCANNER) Makefile.am
diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
index 8cbb94e..2d28388 100644
--- a/osinfo/libosinfo.syms
+++ b/osinfo/libosinfo.syms
@@ -315,6 +315,14 @@ LIBOSINFO_0.2.1 {
 	osinfo_media_get_installer_reboots;
 } LIBOSINFO_0.2.0;
 
+LIBOSINFO_0.2.2 {
+    global:
+	osinfo_install_config_param_policy_get_type;
+	osinfo_media_error_get_type;
+	osinfo_product_relationship_get_type;
+} LIBOSINFO_0.2.1;
+
+
 /* Symbols in next release...
 
   LIBOSINFO_0.0.2 {
diff --git a/osinfo/osinfo.h b/osinfo/osinfo.h
index 204569b..81ed1cc 100644
--- a/osinfo/osinfo.h
+++ b/osinfo/osinfo.h
@@ -25,6 +25,9 @@
 #ifndef __OSINFO_H__
 #define __OSINFO_H__
 
+#include <glib-object.h>
+
+#include <osinfo/osinfo_enum_types.h>
 #include <osinfo/osinfo_entity.h>
 #include <osinfo/osinfo_filter.h>
 #include <osinfo/osinfo_list.h>
diff --git a/osinfo/osinfo_enum_types.c.template b/osinfo/osinfo_enum_types.c.template
new file mode 100644
index 0000000..1f3e474
--- /dev/null
+++ b/osinfo/osinfo_enum_types.c.template
@@ -0,0 +1,36 @@
+/*** BEGIN file-header ***/
+#include <osinfo/osinfo.h>
+
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+/* enumerations from "@filename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType
+ at enum_name@_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+
+  if (g_once_init_enter (&g_define_type_id__volatile))
+    {
+      static const G at 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_ at 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/osinfo/osinfo_enum_types.h.template b/osinfo/osinfo_enum_types.h.template
new file mode 100644
index 0000000..3f4ce1f
--- /dev/null
+++ b/osinfo/osinfo_enum_types.h.template
@@ -0,0 +1,24 @@
+/*** BEGIN file-header ***/
+#ifndef __OSINFO_ENUM_TYPES_H__
+#define __OSINFO_ENUM_TYPES_H__
+
+#include <osinfo/osinfo.h>
+
+G_BEGIN_DECLS
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+
+/* enumerations from "@filename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType @enum_name at _get_type (void) G_GNUC_CONST;
+#define @ENUMPREFIX at _TYPE_@ENUMSHORT@ (@enum_name at _get_type ())
+/*** END value-header ***/
+
+/*** BEGIN file-tail ***/
+G_END_DECLS
+
+#endif /* __OSINFO_ENUM_TYPES_H__ */
+/*** END file-tail ***/
-- 
1.8.0




More information about the virt-tools-list mailing list