[maemo-commits] [maemo-commits] r12437 - in projects/haf/trunk/hildon-desktop: . debian libhildondesktop

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Mon Jun 25 10:50:29 EEST 2007
Author: lucasr
Date: 2007-06-25 10:50:08 +0300 (Mon, 25 Jun 2007)
New Revision: 12437

Modified:
   projects/haf/trunk/hildon-desktop/ChangeLog
   projects/haf/trunk/hildon-desktop/debian/control
   projects/haf/trunk/hildon-desktop/libhildondesktop/Makefile.am
   projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-notification-manager.c
Log:
2007-06-25  Lucas Rocha  <lucas.rocha at nokia.com>

	* debian/control: added build dependency on libsqlite3-dev to enable
	notification manager persistency support.
	* libhildondesktop/hildon-desktop-notification-manager.c: dynamicaly
	load libsqlite3 in order to avoid direct linking.
	* libhildondesktop/Makefile.am: don't link to sqlite anymore.


Modified: projects/haf/trunk/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/trunk/hildon-desktop/ChangeLog	2007-06-22 16:17:24 UTC (rev 12436)
+++ projects/haf/trunk/hildon-desktop/ChangeLog	2007-06-25 07:50:08 UTC (rev 12437)
@@ -1,3 +1,11 @@
+2007-06-25  Lucas Rocha  <lucas.rocha at nokia.com>
+
+	* debian/control: added build dependency on libsqlite3-dev to enable
+	notification manager persistency support.
+	* libhildondesktop/hildon-desktop-notification-manager.c: dynamicaly
+	load libsqlite3 in order to avoid direct linking.
+	* libhildondesktop/Makefile.am: don't link to sqlite anymore.
+
 2007-06-22  Moises Martinez  <moises.martinez at nokia.com>
 
 	* src/hd-desktop.c:
@@ -205,7 +213,6 @@
 	Pointed out by Tommi.
 
 2007-06-12  Johan Bilien  <johan.bilien at nokia.com>
-2007-06-12  Johan Bilien  <johan.bilien at nokia.com>
 
 	* libhildondesktop/hildon-home-area.c:
 	- Allow add without layout

Modified: projects/haf/trunk/hildon-desktop/debian/control
===================================================================
--- projects/haf/trunk/hildon-desktop/debian/control	2007-06-22 16:17:24 UTC (rev 12436)
+++ projects/haf/trunk/hildon-desktop/debian/control	2007-06-25 07:50:08 UTC (rev 12437)
@@ -2,7 +2,7 @@
 Section: x11
 Priority: optional
 Maintainer: Johan Bilien <johan.bilien at nokia.com>
-Build-Depends: debhelper (>= 4.0.0), libhildon1-dev | hildon-libs-dev, pkg-config, libosso-dev (>= 0.9.19), libosso-gnomevfs2-dev, osso-af-settings, libhildonfm2-dev | hildon-fm-dev, libhildonhelp-dev | libosso-help-dev, libxtst-dev, libxml2-dev, osso-esd-dev, libxdamage-dev, libxcomposite-dev
+Build-Depends: debhelper (>= 4.0.0), libhildon1-dev | hildon-libs-dev, pkg-config, libosso-dev (>= 0.9.19), libosso-gnomevfs2-dev, osso-af-settings, libhildonfm2-dev | hildon-fm-dev, libhildonhelp-dev | libosso-help-dev, libxtst-dev, libxml2-dev, osso-esd-dev, libxdamage-dev, libxcomposite-dev, libsqlite3-dev
 Standards-Version: 3.6.0
 
 Package: hildon-desktop

Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/Makefile.am
===================================================================
--- projects/haf/trunk/hildon-desktop/libhildondesktop/Makefile.am	2007-06-22 16:17:24 UTC (rev 12436)
+++ projects/haf/trunk/hildon-desktop/libhildondesktop/Makefile.am	2007-06-25 07:50:08 UTC (rev 12437)
@@ -40,7 +40,6 @@
 	$(HILDON_CFLAGS)             \
 	$(GNOME_VFS_CFLAGS)          \
 	$(OSSO_CFLAGS)               \
-	$(SQLITE_CFLAGS)             \
 	$(LIBXML_CFLAGS)             \
 	$(DBUS_GLIB_CFLAGS)          \
 	$(XCOMPOSITE_CFLAGS)         \
@@ -130,7 +129,6 @@
 
 libhildondesktop_la_LIBADD =                      \
 	$(HILDON_LIBS)                            \
-	$(SQLITE_LIBS)                            \
 	$(HILDONBASELIB_LIBS)                     \
 	$(GNOME_VFS_LIBS)                         \
 	$(DBUS_GLIB_LIBS)                         \

Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-notification-manager.c
===================================================================
--- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-notification-manager.c	2007-06-22 16:17:24 UTC (rev 12436)
+++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-notification-manager.c	2007-06-25 07:50:08 UTC (rev 12437)
@@ -35,10 +35,6 @@
 #include <gtk/gtk.h>
 #include <gdk-pixbuf/gdk-pixbuf.h>
 
-#ifdef HAVE_SQLITE
-#include <sqlite3.h>
-#endif
-
 #define HILDON_DESKTOP_NOTIFICATION_MANAGER_GET_PRIVATE(object) \
         (G_TYPE_INSTANCE_GET_PRIVATE ((object), HILDON_DESKTOP_TYPE_NOTIFICATION_MANAGER, HildonDesktopNotificationManagerPrivate))
 
@@ -56,6 +52,63 @@
 
 #define HILDON_DESKTOP_NOTIFICATION_MANAGER_ICON_SIZE  48
 
+#ifdef HAVE_SQLITE
+
+#define SQLITE_OK     0 
+#define SQLITE_ERROR  1 
+
+typedef struct _sqlite3 sqlite3;
+
+typedef int        (*sqlite3_callback)   (void *,
+                                          int,
+                                          char**, 
+                                          char**);
+
+static char       *(*sqlite3_mprintf)    (const char*, ...);
+
+static void        (*sqlite3_free_table) (char **result);
+
+static int         (*sqlite3_get_table)  (sqlite3 *, 
+                                          const char *sql, 
+                                          char ***resultp, 
+                                          int *nrow, 
+                                          int *ncolumn, 
+                                          char **errmsg);
+
+static int         (*sqlite3_open)       (const char *filename, 
+                                          sqlite3 **ppDb);
+
+static int         (*sqlite3_close)      (sqlite3 *);
+
+static void        (*sqlite3_free)       (void *);
+
+static int         (*sqlite3_exec)       (sqlite3 *, 
+                                          const char *sql, 
+                                          sqlite3_callback,
+                                          void *, 
+                                          char **errmsg);
+
+static const char *(*sqlite3_errmsg)     (sqlite3 *);
+
+static struct SqliteDlMapping
+{
+  const char *fn_name;
+  gpointer *fn_ptr_ref;
+} sqlite_dl_mapping[] =
+{
+#define MAP_SYMBOL(a) { #a, (void *)&a }
+  MAP_SYMBOL (sqlite3_mprintf),
+  MAP_SYMBOL (sqlite3_open),
+  MAP_SYMBOL (sqlite3_errmsg),
+  MAP_SYMBOL (sqlite3_close),
+  MAP_SYMBOL (sqlite3_free),
+  MAP_SYMBOL (sqlite3_exec),
+  MAP_SYMBOL (sqlite3_get_table),
+  MAP_SYMBOL (sqlite3_free_table)
+#undef MAP_SYMBOL
+};
+#endif
+
 struct _HildonDesktopNotificationManagerPrivate
 {
   DBusGConnection *connection;
@@ -82,6 +135,42 @@
   HD_NM_HINT_TYPE_UCHAR
 };
 
+#ifdef HAVE_SQLITE
+static void
+open_libsqlite3 ()
+{
+  static gboolean done = FALSE;
+
+  if (!done)
+  {
+    int i;
+    GModule *sqlite;
+
+    done = TRUE;
+
+    sqlite = g_module_open ("libsqlite3.so.0", G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
+
+    if (!sqlite)
+      return;
+
+    for (i = 0; i < G_N_ELEMENTS (sqlite_dl_mapping); i++)
+    {
+      if (!g_module_symbol (sqlite, sqlite_dl_mapping[i].fn_name,
+                            sqlite_dl_mapping[i].fn_ptr_ref))
+      {
+        g_warning ("Missing symbol '%s' in libsqlite3", sqlite_dl_mapping[i].fn_name);
+        g_module_close (sqlite);
+
+        for (i = 0; i < G_N_ELEMENTS (sqlite_dl_mapping); i++)
+          sqlite_dl_mapping[i].fn_ptr_ref = NULL;
+
+        return;
+      }
+    }
+  }
+}
+#endif
+
 static void                            
 hint_value_free (GValue *value)
 {
@@ -326,7 +415,7 @@
 {
   gchar *error;
   
-  g_return_if_fail(nm->priv->db != NULL);
+  g_return_if_fail (nm->priv->db != NULL);
   
   if (sqlite3_exec (nm->priv->db, 
 		    "SELECT * FROM notifications",
@@ -631,7 +720,7 @@
 {
   gchar *sql;
   gint result;
-        
+
   result = hildon_desktop_notification_manager_db_exec (nm, "BEGIN TRANSACTION");
 
   if (result != SQLITE_OK) goto rollback;
@@ -745,11 +834,18 @@
                                        G_OBJECT (nm));
 
 #ifdef HAVE_SQLITE
+  nm->priv->db = NULL;
+
+  open_libsqlite3 ();
+
+  if (sqlite3_open == NULL)
+    return;
+
   notifications_db = g_build_filename (g_get_home_dir (), 
 		  		       ".osso/hildon-desktop",
 				       "notifications.db",
 				       NULL); 
-  
+
   result = sqlite3_open (notifications_db, &nm->priv->db);
 
   g_free (notifications_db);


More information about the maemo-commits mailing list