From 9ee1c0355a779d4a927f28d20c5efb70213c0cbd Mon Sep 17 00:00:00 2001
From: Dan Egnor <egnor@ofb.net>
Date: Sun, 4 May 2003 13:48:02 +0000
Subject: [PATCH] Start supporting glib 2.0

---
 Makefile.am  | 13 ++++++++++---
 configure.ac |  4 ++++
 glib.c       | 22 ++++++++++++++--------
 3 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index de0fc46..e9b7d00 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -6,9 +6,8 @@
 # terms of the GNU Lesser General Public License, version 2.1 or later.
 # See the file COPYING for details.
 
-AUTOMAKE_OPTIONS = foreign 1.2
-lib_LTLIBRARIES = liboop-adns.la liboop-glib.la liboop-tcl.la liboop-www.la liboop-rl.la liboop.la
-INCLUDES = $(GLIB_INCLUDES) $(TCL_INCLUDES) $(WWW_INCLUDES)
+AUTOMAKE_OPTIONS = foreign 1.7
+lib_LTLIBRARIES = liboop-adns.la liboop-glib.la liboop-glib2.la liboop-tcl.la liboop-www.la liboop-rl.la liboop.la
 
 # versions updated as of 0.8
 liboop_la_LDFLAGS = -version-info 4:0:0 # version:revision:age
@@ -20,14 +19,22 @@ liboop_adns_la_SOURCES = adns.c
 
 liboop_glib_la_LDFLAGS = -version-info 1:0:0
 liboop_glib_la_LIBADD = $(GLIB_LIBS)
+liboop_glib_la_CFLAGS = $(GLIB_INCLUDES)
 liboop_glib_la_SOURCES = glib.c
 
+liboop_glib2_la_LDFLAGS = -version-info 0:0:0
+liboop_glib2_la_LIBADD = $(GLIB2_LIBS)
+liboop_glib2_la_CFLAGS = $(GLIB2_CFLAGS)
+liboop_glib2_la_SOURCES = glib.c
+
 liboop_tcl_la_LDFLAGS = -version-info 0:0:0
 liboop_tcl_la_LIBADD = $(TCL_LIBS)
+liboop_tcl_la_CFLAGS = $(TCL_INCLUDES)
 liboop_tcl_la_SOURCES = tcl.c
 
 liboop_www_la_LDFLAGS = -version-info 0:0:0
 liboop_www_la_LIBADD = $(WWW_LIBS)
+liboop_www_la_CFLAGS = $(WWW_INCLUDES)
 liboop_www_la_SOURCES = www.c
 
 liboop_rl_la_LDFLAGS = -version-info 0:0:0
diff --git a/configure.ac b/configure.ac
index 5fec673..b993492 100644
--- a/configure.ac
+++ b/configure.ac
@@ -52,6 +52,8 @@ fi
 LIBS="$save_libs"
 CPPFLAGS="$save_cppflags"
 
+PKG_CHECK_MODULES(GLIB2,glib-2.0 >= 2.0,AC_DEFINE(HAVE_GLIB),[:])
+
 for version in 8.4 8.3 8.2 8.1 8.0 ; do
   CPPFLAGS="$save_cppflags -I/usr/include/tcl$version"
   AC_CHECK_LIB(tcl$version,Tcl_Main,[
@@ -86,6 +88,8 @@ CFLAGS="-Wall -Wno-comment -Wmissing-prototypes -Wstrict-prototypes -Wpointer-ar
 AC_SUBST(PROG_LDCONFIG)
 AC_SUBST(GLIB_INCLUDES)
 AC_SUBST(GLIB_LIBS)
+AC_SUBST(GLIB2_CFLAGS)
+AC_SUBST(GLIB2_LIBS)
 AC_SUBST(TCL_INCLUDES)
 AC_SUBST(TCL_LIBS)
 AC_SUBST(ADNS_LIBS)
diff --git a/glib.c b/glib.c
index 47160a6..57d1949 100644
--- a/glib.c
+++ b/glib.c
@@ -85,19 +85,18 @@ static gint on_poll(GPollFD *array,guint num,gint timeout) {
 	return count;
 }
 
-#ifdef HAVE_POLL_H
-static gint real_poll(GPollFD *array,guint num,gint timeout) {
-	assert(sizeof(GPollFD) == sizeof(struct pollfd));
-	return poll((struct pollfd *) array,num,timeout);
-}
-#endif
-
 oop_source *oop_glib_new(void) {
 	if (use_count++) return oop_sys_source(sys);
 
 	sys = oop_sys_new();
 	sel = oop_select_new(oop_sys_source(sys),on_select,NULL);
-	g_main_set_poll_func(on_poll);
+
+#if GLIB_MAJOR_VERSION >= 2
+        g_main_context_set_poll_func(g_main_context_default(), on_poll);
+#else
+        g_main_set_poll_func(on_poll);
+#endif
+
 	return oop_sys_source(sys);
 }
 
@@ -107,6 +106,11 @@ void *oop_glib_return(void) {
 }
 
 #ifdef HAVE_POLL_H
+static gint real_poll(GPollFD *array,guint num,gint timeout) {
+	assert(sizeof(GPollFD) == sizeof(struct pollfd));
+	return poll((struct pollfd *) array,num,timeout);
+}
+
 void oop_glib_delete(void) {
 	assert(use_count > 0 && "oop_glib_delete() called too much");
 	if (0 != --use_count) return;
@@ -115,6 +119,8 @@ void oop_glib_delete(void) {
 	oop_sys_delete(sys);
 	g_main_set_poll_func(real_poll);
 }
+#else
+void oop_glib_delete(void) { /* sigh */ }
 #endif
 
 #endif
-- 
GitLab