r18863 - gnucash/trunk/src - Add variant of gnc_engine_init which is suitable for statically the linked-in library.

Christian Stimming cstim at code.gnucash.org
Sun Mar 7 07:54:34 EST 2010


Author: cstim
Date: 2010-03-07 07:54:33 -0500 (Sun, 07 Mar 2010)
New Revision: 18863
Trac: http://svn.gnucash.org/trac/changeset/18863

Modified:
   gnucash/trunk/src/engine/gnc-engine.c
   gnucash/trunk/src/engine/gnc-engine.h
   gnucash/trunk/src/gnc/main.cpp
Log:
Add variant of gnc_engine_init which is suitable for statically the linked-in library.

Modified: gnucash/trunk/src/engine/gnc-engine.c
===================================================================
--- gnucash/trunk/src/engine/gnc-engine.c	2010-03-07 11:21:26 UTC (rev 18862)
+++ gnucash/trunk/src/engine/gnc-engine.c	2010-03-07 12:54:33 UTC (rev 18863)
@@ -72,9 +72,23 @@
  * initialize backend, load any necessary databases, etc.
  ********************************************************************/
 
-void
-gnc_engine_init(int argc, char ** argv)
+static void
+gnc_engine_init_part1()
 {
+    if (1 == engine_is_initialized) return;
+
+    /* initialize QOF */
+    qof_init();
+    qof_set_alt_dirty_mode(TRUE);
+
+    /* Now register our core types */
+    cashobjects_register();
+}
+
+static void
+gnc_engine_init_part2()
+{
+    gchar *pkglibdir = gnc_path_get_pkglibdir ();
     static struct
     {
         const gchar* lib;
@@ -87,20 +101,7 @@
         { "gncmod-backend-xml", TRUE },
         { NULL, FALSE }
     }, *lib;
-    gnc_engine_init_hook_t hook;
-    GList * cur;
-    gchar *pkglibdir;
 
-    if (1 == engine_is_initialized) return;
-
-    /* initialize QOF */
-    qof_init();
-    qof_set_alt_dirty_mode(TRUE);
-
-    /* Now register our core types */
-    cashobjects_register();
-
-    pkglibdir = gnc_path_get_pkglibdir ();
     for (lib = libs; lib->lib ; lib++)
     {
         if (qof_load_backend_library(pkglibdir, lib->lib))
@@ -118,17 +119,38 @@
         }
     }
     g_free (pkglibdir);
+}
 
+static void
+gnc_engine_init_part3(int argc, char ** argv)
+{
+    GList * cur;
     /* call any engine hooks */
     for (cur = engine_init_hooks; cur; cur = cur->next)
     {
-        hook = (gnc_engine_init_hook_t)cur->data;
+        gnc_engine_init_hook_t hook = (gnc_engine_init_hook_t)cur->data;
 
         if (hook)
             (*hook)(argc, argv);
     }
 }
 
+void
+gnc_engine_init(int argc, char ** argv)
+{
+    gnc_engine_init_part1();
+    gnc_engine_init_part2();
+    gnc_engine_init_part3(argc, argv);
+}
+
+void
+gnc_engine_init_static(int argc, char ** argv)
+{
+    gnc_engine_init_part1();
+    gnc_engine_init_part3(argc, argv);
+}
+
+
 /********************************************************************
  * gnc_engine_shutdown
  * shutdown backend, destroy any global data, etc.

Modified: gnucash/trunk/src/engine/gnc-engine.h
===================================================================
--- gnucash/trunk/src/engine/gnc-engine.h	2010-03-07 11:21:26 UTC (rev 18862)
+++ gnucash/trunk/src/engine/gnc-engine.h	2010-03-07 12:54:33 UTC (rev 18863)
@@ -231,6 +231,13 @@
  * method that does not require Guile. */
 void gnc_engine_init(int argc, char ** argv);
 
+/** This is the statically linked-in version of gnc_engine_init. It is
+ * identically to that function except that it doesn't load the
+ * loadable shared module, which means this function will not load the
+ * "(gnucash engine)" scheme module.
+ */
+void gnc_engine_init_static(int argc, char ** argv);
+
 /** Called to shutdown the engine, see also ::qof_close
  * for use without Guile. */
 void gnc_engine_shutdown (void);

Modified: gnucash/trunk/src/gnc/main.cpp
===================================================================
--- gnucash/trunk/src/gnc/main.cpp	2010-03-07 11:21:26 UTC (rev 18862)
+++ gnucash/trunk/src/gnc/main.cpp	2010-03-07 12:54:33 UTC (rev 18863)
@@ -175,7 +175,7 @@
 
     qof_init();
     gnc_module_system_init();
-    gnc_engine_init(argc, argv);
+    gnc_engine_init_static(argc, argv);
 
     // Call the statically-linked versions of the backend init
     // functions



More information about the gnucash-changes mailing list