Loadable Modules

Author: Aaron Stone
Last changed: Jan 10, 2005
First SVN appearance: Nov 25, 2005

Using GLib's module loading interface, it is easy to dynamically load the convenience libraries in mysql/, pgsql/, and sqlite/ so that all database drivers can be built at compile time, and the one you want / have installed can be loaded at run time. This is a big, big deal for packaging DBMail for inclusion in distributions, because most binary distributions rather dislike needing to maintain two sets of mutually-exclusive packages for the same thing.

The debian packages for 2.1 have finally caught up with the new situation. They now provide separate packages for all loadable modules, and a single base packages with all the binaries and the common libdbmail library. This means that apart from some cosmetics, this is a done deal.

Necessary changes:

  • De-integrate the convenience libraries for the three database drivers in 2.1.SVN. Done, AS. Improved, PJS.]
  • Wrappers for db_function() calls to db→function() in dbmodule.c [done, AS]
  • Create a function called db_load_driver() that populates the function table. [done, AS].
  • Updates to acinclude.m4 to set up the right tests and defines. [done, AS].
  • Would be nice to have ./configure give a summary table at the end, too. [done, AS].

Things I've noticed:

  • The SQLite implementation is for SQLite 2.x, needs some updates to support the 3.x API. [todo]
  • Needs to collect both compile time and runtime list of places to look for the library. [done, PJS.]


  • Is the db loadable layer decent to copy for auth? Is there a more generic way to code this? [Nah. Done, AS.]
  • Replace -DAUTHLDAP sections with calls to the module (that are no-op or do stuff, as needed). [done, PJS]


  • Modularize sort/ and make sort_sieve.so a loadable module, too. [Done, AS.]
  • Replace -DSIEVE sections with calls to the module (that are no-op or do stuff, as needed). [Done, AS.]
loadable_modules.txt · Last modified: 2006/02/22 10:43 (external edit)
DBMail is developed by Paul J Stevens together with developers world-wide