[evolution-data-server] Add a "services" directory.



commit 67e7dd47e7ece60df7b14c583f542b0063b377df
Author: Matthew Barnes <mbarnes redhat com>
Date:   Wed Sep 28 17:01:18 2011 -0400

    Add a "services" directory.
    
    Split the D-Bus service binaries out of their respective "libedata"
    folders and give them their own folder under "services".  This just
    consists of the main() function, any migration gunk, and the D-Bus
    .service key file.
    
    This provides a natural place to add a new D-Bus service for ESources,
    coming soon to a repository near you!
    
    Also, by popular demand, change the binary and source code prefix in
    these folders from "e" to "evolution".  I guess so grepping a process
    list for "evolution" reveals all.

 .gitignore                                         |    2 +-
 Makefile.am                                        |    4 +-
 addressbook/libedata-book/Makefile.am              |   50 +------
 addressbook/libedata-book/e-data-book-factory.c    |  149 ++-----------------
 calendar/libedata-cal/Makefile.am                  |   45 +------
 calendar/libedata-cal/e-data-cal-factory.c         |  125 ----------------
 ....gnome.evolution.dataserver.Calendar.service.in |    2 +-
 configure.ac                                       |    6 +-
 docs/reference/camel/tmpl/camel-session.sgml       |    5 +
 docs/reference/camel/tmpl/camel-store.sgml         |    5 +
 services/Makefile.am                               |    8 +
 services/evolution-addressbook-factory/Makefile.am |   40 ++++++
 ...evolution-addressbook-factory-migrate-basedir.c |   49 ++++---
 .../evolution-addressbook-factory.c                |  144 +++++++++++++++++++
 ...ome.evolution.dataserver.AddressBook.service.in |    2 +-
 services/evolution-calendar-factory/Makefile.am    |   38 +++++
 .../evolution-calendar-factory-migrate-basedir.c   |   77 +++++-----
 .../evolution-calendar-factory.c                   |  146 +++++++++++++++++++
 ....gnome.evolution.dataserver.Calendar.service.in |    3 +
 19 files changed, 491 insertions(+), 409 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 074ecea..c12ef12 100644
--- a/.gitignore
+++ b/.gitignore
@@ -101,7 +101,7 @@
 /po/boldquot.sed
 /po/en boldquot header
 /po/en quot header
-/po/evolution-data-server-3.2.pot
+/po/evolution-data-server-3.4.pot
 /po/insert-header.sin
 /po/quot.sed
 /po/remove-potcdate.sin
diff --git a/Makefile.am b/Makefile.am
index b5dc433..cd5a844 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -6,8 +6,8 @@ if ENABLE_CALENDAR
 CALENDAR_DIR = calendar
 endif
 
-SUBDIRS = libedataserver libebackend camel addressbook $(CALENDAR_DIR) libedataserverui tests docs art po
-DIST_SUBDIRS = libedataserver libebackend camel addressbook calendar libedataserverui tests docs art po vala
+SUBDIRS = libedataserver libebackend camel addressbook $(CALENDAR_DIR) libedataserverui services tests docs art po
+DIST_SUBDIRS = libedataserver libebackend camel addressbook calendar libedataserverui services tests docs art po vala
 
 if HAVE_INTROSPECTION
 if HAVE_VALA
diff --git a/addressbook/libedata-book/Makefile.am b/addressbook/libedata-book/Makefile.am
index 50a689a..14883fa 100644
--- a/addressbook/libedata-book/Makefile.am
+++ b/addressbook/libedata-book/Makefile.am
@@ -11,7 +11,7 @@ lib_LTLIBRARIES = libedata-book-1.2.la
 libedata_book_1_2_la_CPPFLAGS = \
 	$(AM_CPPFLAGS) \
 	-DG_LOG_DOMAIN=\"libedata-book\" \
-	-DLIBEXECDIR=\"$(libexecdir)\" \
+	-DBACKENDDIR=\"$(ebook_backenddir)\" \
 	-I$(top_srcdir) \
 	-I$(top_srcdir)/addressbook \
 	-I$(top_srcdir)/addressbook/libegdbus \
@@ -22,6 +22,7 @@ libedata_book_1_2_la_CPPFLAGS = \
 	$(EVOLUTION_ADDRESSBOOK_CFLAGS)
 
 libedata_book_1_2_la_SOURCES = \
+	$(ENUM_GENERATED) \
 	e-book-backend-factory.c \
 	e-book-backend-sexp.c \
 	e-book-backend-summary.c \
@@ -30,14 +31,14 @@ libedata_book_1_2_la_SOURCES = \
 	e-book-backend-sqlitedb.c \
 	e-book-backend-sync.c \
 	e-book-backend.c \
-	e-data-book-view.c \
 	e-data-book.c \
-	ximian-vcard.h \
-	$(ENUM_GENERATED)
+	e-data-book-factory.c \
+	e-data-book-view.c \
+	ximian-vcard.h
 
 libedata_book_1_2_la_LIBADD = \
-	$(top_builddir)/addressbook/libegdbus/libegdbus-book.la \
 	$(top_builddir)/addressbook/libebook/libebook-1.2.la \
+	$(top_builddir)/addressbook/libegdbus/libegdbus-book.la \
 	$(top_builddir)/libedataserver/libedataserver-1.2.la \
 	$(top_builddir)/libebackend/libebackend-1.2.la \
 	$(DB_LIBS) \
@@ -74,55 +75,20 @@ e_book_backend_sqlitedb_test_LDADD = \
 	libedata-book-1.2.la \
 	$(libedata_book_1_2_la_LIBADD)
 
-factory_PROGRAMS = e-addressbook-factory
-
-e_addressbook_factory_CPPFLAGS = \
-	$(AM_CPPFLAGS) \
-	-DG_LOG_DOMAIN=\"libedata-book\" \
-	-DE_PRGNAME=\"e-addressbook-factory\" \
-	-DBACKENDDIR=\"$(ebook_backenddir)\" \
-	-I$(top_srcdir) \
-	-I$(top_srcdir)/addressbook \
-	-I$(top_srcdir)/addressbook/libegdbus \
-	-I$(top_builddir) \
-	-I$(top_builddir)/addressbook \
-	$(EVOLUTION_ADDRESSBOOK_CFLAGS) \
-	$(GOA_CFLAGS) \
-	$(FACTORY_GTK_CFLAGS)
-
-e_addressbook_factory_SOURCES = \
-	e-data-book-factory.c \
-	e-data-book-factory.h \
-	e-data-book-migrate-basedir.c
-
-e_addressbook_factory_LDADD = \
-	libedata-book-1.2.la \
-	$(top_builddir)/libedataserver/libedataserver-1.2.la \
-	$(top_builddir)/libebackend/libebackend-1.2.la \
-	$(EVOLUTION_ADDRESSBOOK_LIBS) \
-	$(GOA_LIBS) \
-	$(FACTORY_GTK_LIBS)
-
 %-$(API_VERSION).pc: %.pc
 	 cp $< $@
 
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libedata-book-$(API_VERSION).pc
 
-service_in_files = org.gnome.evolution.dataserver.AddressBook.service.in
-servicedir = $(datadir)/dbus-1/services
-service_DATA = $(service_in_files:.service.in=.service)
- EVO_SUBST_SERVICE_RULE@
-
 BUILT_SOURCES = $(ENUM_GENERATED)
-CLEANFILES = $(BUILT_SOURCES) $(service_DATA)
+CLEANFILES = $(BUILT_SOURCES)
 DISTCLEANFILES = $(pkgconfig_DATA)
 
 EXTRA_DIST = \
 	e-data-book-factory.xml \
 	e-data-book-view.xml \
 	e-data-book.xml \
-	$(pkgconfig_DATA:-$(API_VERSION).pc=.pc.in) \
-	$(service_in_files)
+	$(pkgconfig_DATA:-$(API_VERSION).pc=.pc.in)
 
 -include $(top_srcdir)/git.mk
diff --git a/addressbook/libedata-book/e-data-book-factory.c b/addressbook/libedata-book/e-data-book-factory.c
index d85d2db..a61b0bb 100644
--- a/addressbook/libedata-book/e-data-book-factory.c
+++ b/addressbook/libedata-book/e-data-book-factory.c
@@ -26,16 +26,6 @@
 #include <unistd.h>
 #include <glib/gi18n.h>
 
-#ifdef ENABLE_MAINTAINER_MODE
-#include <gtk/gtk.h>
-#endif
-
-#ifdef G_OS_UNIX
-#if GLIB_CHECK_VERSION(2,29,5)
-#include <glib-unix.h>
-#endif
-#endif
-
 #ifdef HAVE_GOA
 #define GOA_API_IS_SUBJECT_TO_CHANGE
 #include <goa/goa.h>
@@ -45,44 +35,19 @@
 #define GOA_KEY "goa-account-id"
 #endif
 
+#include "e-book-backend.h"
 #include "e-book-backend-factory.h"
-#include "e-data-book-factory.h"
 #include "e-data-book.h"
-#include "e-book-backend.h"
+#include "e-data-book-factory.h"
 
 #include "e-gdbus-book-factory.h"
 
-#ifdef G_OS_WIN32
-#include <windows.h>
-#include <conio.h>
-#ifndef PROCESS_DEP_ENABLE
-#define PROCESS_DEP_ENABLE 0x00000001
-#endif
-#ifndef PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION
-#define PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION 0x00000002
-#endif
-#endif
-
 #define d(x)
 
 #define E_DATA_BOOK_FACTORY_GET_PRIVATE(obj) \
 	(G_TYPE_INSTANCE_GET_PRIVATE \
 	((obj), E_TYPE_DATA_BOOK_FACTORY, EDataBookFactoryPrivate))
 
-/* Keep running after the last client is closed. */
-static gboolean opt_keep_running = FALSE;
-
-/* Convenience macro to test and set a GError/return on failure */
-#define g_set_error_val_if_fail(test, returnval, error, domain, code) \
-	G_STMT_START {							\
-	if G_LIKELY (test) {						\
-	} else {							\
-		g_set_error_literal (error, domain, code, #test);	\
-		g_warning (#test " failed");				\
-		return (returnval);					\
-	}								\
-	} G_STMT_END
-
 G_DEFINE_TYPE (EDataBookFactory, e_data_book_factory, E_TYPE_DATA_FACTORY);
 
 struct _EDataBookFactoryPrivate {
@@ -490,23 +455,23 @@ e_data_book_factory_update_goa_accounts (EDataBookFactory *factory)
 
 		/* Takes ownership of the GoaObject. */
 		g_hash_table_insert (
-				     factory->priv->goa_accounts,
-				     g_strdup (goa_account_id), goa_object);
+			factory->priv->goa_accounts,
+			g_strdup (goa_account_id), goa_object);
 	}
 
 	g_list_free (list);
 }
 
 static void
-e_data_book_factory_accounts_changed_cb (GoaClient *client, GDBusObject *object, EDataBookFactory *factory)
+e_data_book_factory_accounts_changed_cb (GoaClient *client,
+                                         GDBusObject *object,
+                                         EDataBookFactory *factory)
 {
 	e_data_book_factory_update_goa_accounts (factory);
 }
 
 #endif
 
-
-
 static void
 e_data_book_factory_init (EDataBookFactory *factory)
 {
@@ -546,12 +511,15 @@ e_data_book_factory_init (EDataBookFactory *factory)
 	if (factory->priv->goa_client != NULL) {
 		e_data_book_factory_update_goa_accounts (factory);
 
-		g_signal_connect (factory->priv->goa_client,
-				  "account_added", e_data_book_factory_accounts_changed_cb, factory);
-		g_signal_connect (factory->priv->goa_client,
-				  "account_removed", e_data_book_factory_accounts_changed_cb, factory);
-		g_signal_connect (factory->priv->goa_client,
-				  "account_changed", e_data_book_factory_accounts_changed_cb, factory);
+		g_signal_connect (
+			factory->priv->goa_client, "account_added",
+			e_data_book_factory_accounts_changed_cb, factory);
+		g_signal_connect (
+			factory->priv->goa_client, "account_removed",
+			e_data_book_factory_accounts_changed_cb, factory);
+		g_signal_connect (
+			factory->priv->goa_client, "account_changed",
+			e_data_book_factory_accounts_changed_cb, factory);
 	} else if (error != NULL) {
 		g_warning ("%s", error->message);
 		g_error_free (error);
@@ -559,88 +527,3 @@ e_data_book_factory_init (EDataBookFactory *factory)
 #endif
 }
 
-static GOptionEntry entries[] = {
-
-	/* FIXME Have the description translated for 3.2, but this
-	 *       option is to aid in testing and development so it
-	 *       doesn't really matter. */
-	{ "keep-running", 'r', 0, G_OPTION_ARG_NONE, &opt_keep_running,
-	  "Keep running after the last client is closed", NULL },
-	{ NULL }
-};
-
-gint
-main (gint argc,
-      gchar **argv)
-{
-	GOptionContext *context;
-	EDBusServer *server;
-	GError *error = NULL;
-
-#ifdef G_OS_WIN32
-	/* Reduce risks */
-	{
-		typedef BOOL (WINAPI *t_SetDllDirectoryA) (LPCSTR lpPathName);
-		t_SetDllDirectoryA p_SetDllDirectoryA;
-
-		p_SetDllDirectoryA = GetProcAddress (GetModuleHandle ("kernel32.dll"), "SetDllDirectoryA");
-		if (p_SetDllDirectoryA)
-			(*p_SetDllDirectoryA) ("");
-	}
-#ifndef _WIN64
-	{
-		typedef BOOL (WINAPI *t_SetProcessDEPPolicy) (DWORD dwFlags);
-		t_SetProcessDEPPolicy p_SetProcessDEPPolicy;
-
-		p_SetProcessDEPPolicy = GetProcAddress (GetModuleHandle ("kernel32.dll"), "SetProcessDEPPolicy");
-		if (p_SetProcessDEPPolicy)
-			(*p_SetProcessDEPPolicy) (PROCESS_DEP_ENABLE | PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION);
-	}
-#endif
-#endif
-
-	g_type_init ();
-	g_set_prgname (E_PRGNAME);
-	if (!g_thread_supported ()) g_thread_init (NULL);
-
-	#ifdef ENABLE_MAINTAINER_MODE
-	/* only to load gtk-modules, like bug-buddy's gnomesegvhandler, if possible */
-	gtk_init_check (&argc, &argv);
-	#endif
-
-	context = g_option_context_new (NULL);
-	g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
-	g_option_context_parse (context, &argc, &argv, &error);
-	g_option_context_free (context);
-
-	if (error != NULL) {
-		g_printerr ("%s\n", error->message);
-		exit (EXIT_FAILURE);
-	}
-
-	/* Migrate user data from ~/.evolution to XDG base directories. */
-	e_data_book_migrate_basedir ();
-
-	server = g_initable_new (
-		E_TYPE_DATA_BOOK_FACTORY, NULL, &error, NULL);
-
-	if (error != NULL) {
-		g_printerr ("%s\n", error->message);
-		exit (EXIT_FAILURE);
-	}
-
-	g_print ("Server is up and running...\n");
-
-	/* This SHOULD keep the server's use
-	 * count from ever reaching zero. */
-	if (opt_keep_running)
-		e_dbus_server_hold (server);
-
-	e_dbus_server_run (server);
-
-	g_object_unref (server);
-
-	g_print ("Bye.\n");
-
-	return 0;
-}
diff --git a/calendar/libedata-cal/Makefile.am b/calendar/libedata-cal/Makefile.am
index 8ca641d..bc56024 100644
--- a/calendar/libedata-cal/Makefile.am
+++ b/calendar/libedata-cal/Makefile.am
@@ -11,7 +11,7 @@ lib_LTLIBRARIES = libedata-cal-1.2.la
 libedata_cal_1_2_la_CPPFLAGS = 			\
 	$(AM_CPPFLAGS)				\
 	-DG_LOG_DOMAIN=\"libedata-cal\"		\
-	-DBASE_VERSION=\""$(BASE_VERSION)"\"	\
+	-DBACKENDDIR=\"$(ecal_backenddir)\"	\
 	-I$(top_srcdir)				\
 	-I$(top_srcdir)/calendar		\
 	-I$(top_srcdir)/calendar/libegdbus	\
@@ -32,6 +32,7 @@ libedata_cal_1_2_la_SOURCES =		\
 	e-cal-backend-store.c		\
 	e-cal-backend-file-store.c	\
 	e-data-cal.c			\
+	e-data-cal-factory.c		\
 	e-data-cal-view.c
 
 libedata_cal_1_2_la_LIBADD =					\
@@ -69,52 +70,14 @@ libedata_calinclude_HEADERS = 		\
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libedata-cal-$(API_VERSION).pc
 
-service_in_files = org.gnome.evolution.dataserver.Calendar.service.in
-servicedir = $(datadir)/dbus-1/services
-service_DATA = $(service_in_files:.service.in=.service)
- EVO_SUBST_SERVICE_RULE@
-
 BUILT_SOURCES = $(ENUM_GENERATED)
-CLEANFILES = $(BUILT_SOURCES) $(service_DATA)
-DISTCLEANFILES = $(pkgconfig_DATA) $(service_DATA)
+CLEANFILES = $(BUILT_SOURCES)
+DISTCLEANFILES = $(pkgconfig_DATA)
 
 EXTRA_DIST = 						\
 	e-data-cal-factory.xml				\
 	e-data-cal-view.xml				\
 	e-data-cal.xml					\
-	$(service_in_files)				\
 	$(pkgconfig_DATA:-$(API_VERSION).pc=.pc.in)
 
-
-factorydir = $(libexecdir)
-factory_PROGRAMS = e-calendar-factory
-
-e_calendar_factory_SOURCES =		\
-	e-data-cal-factory.c		\
-	e-data-cal-factory.h		\
-	e-data-cal-migrate-basedir.c
-
-e_calendar_factory_CPPFLAGS = \
-	$(AM_CPPFLAGS)					\
-	-DG_LOG_DOMAIN=\"libedata-cal\"			\
-	-DE_PRGNAME=\"e-calendar-factory\"		\
-	-DBACKENDDIR=\"$(ecal_backenddir)\"		\
-	-DLOCALEDIR=\"$(localedir)\"			\
-	-I$(top_srcdir)					\
-	-I$(top_srcdir)/calendar			\
-	-I$(top_srcdir)/calendar/libegdbus		\
-	-I$(top_builddir)				\
-	-I$(top_builddir)/calendar			\
-	$(LIBICAL_CFLAGS)				\
-	$(EVOLUTION_CALENDAR_CFLAGS)			\
-	$(FACTORY_GTK_CFLAGS)
-
-e_calendar_factory_LDADD =						\
-	$(top_builddir)/calendar/libecal/libecal-1.2.la			\
-	$(top_builddir)/calendar/libegdbus/libegdbus-cal.la		\
-	libedata-cal-1.2.la						\
-	$(top_builddir)/libedataserver/libedataserver-1.2.la 		\
-	$(top_builddir)/libebackend/libebackend-1.2.la			\
-	$(FACTORY_GTK_LIBS)
-
 -include $(top_srcdir)/git.mk
diff --git a/calendar/libedata-cal/e-data-cal-factory.c b/calendar/libedata-cal/e-data-cal-factory.c
index 31aef28..3557ef4 100644
--- a/calendar/libedata-cal/e-data-cal-factory.c
+++ b/calendar/libedata-cal/e-data-cal-factory.c
@@ -30,13 +30,6 @@
 #include <unistd.h>
 #include <glib/gi18n.h>
 
-#ifdef ENABLE_MAINTAINER_MODE
-#include <gtk/gtk.h>
-#endif
-
-#include <libedataserver/e-url.h>
-#include <libedataserver/e-source-list.h>
-#include <libecal/e-cal-client.h>
 #include "e-cal-backend.h"
 #include "e-cal-backend-factory.h"
 #include "e-data-cal.h"
@@ -48,36 +41,12 @@
 #include <libical/ical.h>
 #endif
 
-#ifdef G_OS_WIN32
-#include <windows.h>
-#include <conio.h>
-#ifndef PROCESS_DEP_ENABLE
-#define PROCESS_DEP_ENABLE 0x00000001
-#endif
-#ifndef PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION
-#define PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION 0x00000002
-#endif
-#endif
-
 #define d(x)
 
 #define E_DATA_CAL_FACTORY_GET_PRIVATE(obj) \
 	(G_TYPE_INSTANCE_GET_PRIVATE \
 	((obj), E_TYPE_DATA_CAL_FACTORY, EDataCalFactoryPrivate))
 
-/* Keeps running after the last client is closed. */
-static gboolean opt_keep_running = FALSE;
-
-/* Convenience macro to test and set a GError/return on failure */
-#define g_set_error_val_if_fail(test, returnval, error, domain, code) \
-	G_STMT_START {							\
-	if G_LIKELY (test) {} else {					\
-		g_set_error_literal (error, domain, code, #test);	\
-		g_warning(#test " failed");				\
-		return (returnval);					\
-	}								\
-	} G_STMT_END
-
 G_DEFINE_TYPE (EDataCalFactory, e_data_cal_factory, E_TYPE_DATA_FACTORY);
 
 struct _EDataCalFactoryPrivate {
@@ -469,97 +438,3 @@ e_data_cal_factory_init (EDataCalFactory *factory)
 		(GDestroyNotify) g_free,
 		(GDestroyNotify) NULL);
 }
-
-static GOptionEntry entries[] = {
-
-	/* FIXME Have the description translated for 3.2, but this
-	 *       option is to aid in testing and development so it
-	 *       doesn't really matter. */
-	{ "keep-running", 'r', 0, G_OPTION_ARG_NONE, &opt_keep_running,
-	  "Keep running after the last client is closed", NULL },
-	{ NULL }
-};
-
-gint
-main (gint argc,
-      gchar **argv)
-{
-	GOptionContext *context;
-	EDBusServer *server;
-	GError *error = NULL;
-
-#ifdef G_OS_WIN32
-	/* Reduce risks */
-	{
-		typedef BOOL (WINAPI *t_SetDllDirectoryA) (LPCSTR lpPathName);
-		t_SetDllDirectoryA p_SetDllDirectoryA;
-
-		p_SetDllDirectoryA = GetProcAddress (GetModuleHandle ("kernel32.dll"), "SetDllDirectoryA");
-		if (p_SetDllDirectoryA)
-			(*p_SetDllDirectoryA) ("");
-	}
-#ifndef _WIN64
-	{
-		typedef BOOL (WINAPI *t_SetProcessDEPPolicy) (DWORD dwFlags);
-		t_SetProcessDEPPolicy p_SetProcessDEPPolicy;
-
-		p_SetProcessDEPPolicy = GetProcAddress (GetModuleHandle ("kernel32.dll"), "SetProcessDEPPolicy");
-		if (p_SetProcessDEPPolicy)
-			(*p_SetProcessDEPPolicy) (PROCESS_DEP_ENABLE | PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION);
-	}
-#endif
-#endif
-
-	setlocale (LC_ALL, "");
-	bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
-	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-
-	g_type_init ();
-	g_set_prgname (E_PRGNAME);
-	if (!g_thread_supported ()) g_thread_init (NULL);
-
-	#ifdef ENABLE_MAINTAINER_MODE
-	/* only to load gtk-modules, like bug-buddy's gnomesegvhandler, if possible */
-	gtk_init_check (&argc, &argv);
-	#endif
-
-	context = g_option_context_new (NULL);
-	g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
-	g_option_context_parse (context, &argc, &argv, &error);
-	g_option_context_free (context);
-
-	if (error != NULL) {
-		g_printerr ("%s\n", error->message);
-		exit (EXIT_FAILURE);
-	}
-
-#ifdef HAVE_ICAL_UNKNOWN_TOKEN_HANDLING
-	ical_set_unknown_token_handling_setting (ICAL_DISCARD_TOKEN);
-#endif
-
-	/* Migrate user data from ~/.evolution to XDG base directories. */
-	e_data_cal_migrate_basedir ();
-
-	server = g_initable_new (
-		E_TYPE_DATA_CAL_FACTORY, NULL, &error, NULL);
-
-	if (error != NULL) {
-		g_printerr ("%s\n", error->message);
-		exit (EXIT_FAILURE);
-	}
-
-	g_print ("Server is up and running...\n");
-
-	/* This SHOULD keep the server's use
-	 * count from ever reaching zero. */
-	if (opt_keep_running)
-		e_dbus_server_hold (server);
-
-	e_dbus_server_run (server);
-
-	g_object_unref (server);
-
-	g_print ("Bye.\n");
-
-	return 0;
-}
diff --git a/calendar/libedata-cal/org.gnome.evolution.dataserver.Calendar.service.in b/calendar/libedata-cal/org.gnome.evolution.dataserver.Calendar.service.in
index c23c276..c985b31 100644
--- a/calendar/libedata-cal/org.gnome.evolution.dataserver.Calendar.service.in
+++ b/calendar/libedata-cal/org.gnome.evolution.dataserver.Calendar.service.in
@@ -1,3 +1,3 @@
 [D-BUS Service]
 Name= CALENDAR_DBUS_SERVICE_NAME@
-Exec= libexecdir@/e-calendar-factory
+Exec= libexecdir@/evolution-calendar-factory
diff --git a/configure.ac b/configure.ac
index bd10885..299f32c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1488,7 +1488,8 @@ AC_SUBST(camel_providerdir)
 dnl *******************
 dnl D-BUS service stuff
 dnl *******************
-EVO_SUBST_SERVICE_RULE='%.service: %.service.in Makefile ; sed -e "s|\ libexecdir\@|$(libexecdir)|" -e s"|\ ADDRESS_BOOK_DBUS_SERVICE_NAME\@|$(ADDRESS_BOOK_DBUS_SERVICE_NAME)|" -e "s|\ CALENDAR_DBUS_SERVICE_NAME\@|$(CALENDAR_DBUS_SERVICE_NAME)|" $< > $@'
+m4_pattern_allow([AM_V_GEN])
+EVO_SUBST_SERVICE_RULE='%.service: %.service.in Makefile ; $(AM_V_GEN) sed -e "s|\ libexecdir\@|$(libexecdir)|" -e s"|\ ADDRESS_BOOK_DBUS_SERVICE_NAME\@|$(ADDRESS_BOOK_DBUS_SERVICE_NAME)|" -e "s|\ CALENDAR_DBUS_SERVICE_NAME\@|$(CALENDAR_DBUS_SERVICE_NAME)|" $< > $@'
 AC_SUBST(EVO_SUBST_SERVICE_RULE)
 
 dnl ******************************
@@ -1600,6 +1601,9 @@ libedataserver/eds-version.h
 libedataserver/libedataserver.pc
 libedataserverui/Makefile
 libedataserverui/libedataserverui.pc
+services/Makefile
+services/evolution-addressbook-factory/Makefile
+services/evolution-calendar-factory/Makefile
 tests/Makefile
 tests/libebook/Makefile
 tests/libebook/client/Makefile
diff --git a/docs/reference/camel/tmpl/camel-session.sgml b/docs/reference/camel/tmpl/camel-session.sgml
index c5a13a6..3589b46 100644
--- a/docs/reference/camel/tmpl/camel-session.sgml
+++ b/docs/reference/camel/tmpl/camel-session.sgml
@@ -63,6 +63,11 @@ CamelSession
 
 </para>
 
+<!-- ##### ARG CamelSession:user-cache-dir ##### -->
+<para>
+
+</para>
+
 <!-- ##### ARG CamelSession:user-data-dir ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-store.sgml b/docs/reference/camel/tmpl/camel-store.sgml
index 1bc9ee6..aa4363e 100644
--- a/docs/reference/camel/tmpl/camel-store.sgml
+++ b/docs/reference/camel/tmpl/camel-store.sgml
@@ -109,6 +109,10 @@ CamelStore
 @CAMEL_FOLDER_TYPE_TRASH: 
 @CAMEL_FOLDER_TYPE_JUNK: 
 @CAMEL_FOLDER_TYPE_SENT: 
+ CAMEL_FOLDER_TYPE_CONTACTS: 
+ CAMEL_FOLDER_TYPE_EVENTS: 
+ CAMEL_FOLDER_TYPE_MEMOS: 
+ CAMEL_FOLDER_TYPE_TASKS: 
 @CAMEL_FOLDER_READONLY: 
 @CAMEL_FOLDER_CHECK_FOR_NEW: 
 @CAMEL_FOLDER_FLAGGED: 
@@ -139,6 +143,7 @@ CamelStore
 @CAMEL_STORE_IS_MIGRATING: 
 @CAMEL_STORE_REAL_JUNK_FOLDER: 
 @CAMEL_STORE_CAN_EDIT_FOLDERS: 
+ CAMEL_STORE_USE_CACHE_DIR: 
 
 <!-- ##### ENUM CamelStorePermissionFlags ##### -->
 <para>
diff --git a/services/Makefile.am b/services/Makefile.am
new file mode 100644
index 0000000..1750bfa
--- /dev/null
+++ b/services/Makefile.am
@@ -0,0 +1,8 @@
+NULL =
+
+SUBDIRS = \
+	evolution-addressbook-factory \
+	evolution-calendar-factory \
+	$(NULL)
+
+-include $(top_srcdir)/git.mk
diff --git a/services/evolution-addressbook-factory/Makefile.am b/services/evolution-addressbook-factory/Makefile.am
new file mode 100644
index 0000000..ff2416f
--- /dev/null
+++ b/services/evolution-addressbook-factory/Makefile.am
@@ -0,0 +1,40 @@
+NULL =
+
+service_in_files = org.gnome.evolution.dataserver.AddressBook.service.in
+servicedir = $(datadir)/dbus-1/services
+service_DATA = $(service_in_files:.service.in=.service)
+ EVO_SUBST_SERVICE_RULE@
+
+CLEANFILES = $(service_DATA)
+EXTRA_DIST = $(service_in_files)
+
+libexec_PROGRAMS = evolution-addressbook-factory
+
+evolution_addressbook_factory_CPPFLAGS = \
+	$(AM_CPPFLAGS) \
+	-DG_LOG_DOMAIN=\"evolution-addressbook-factory\" \
+	-DLOCALEDIR=\"$(localedir)\" \
+	-I$(top_srcdir) \
+	-I$(top_srcdir)/addressbook \
+	-I$(top_builddir) \
+	-I$(top_builddir)/addressbook \
+	$(EVOLUTION_ADDRESSBOOK_CFLAGS) \
+	$(FACTORY_GTK_CFLAGS) \
+	$(GOA_CFLAGS) \
+	$(NULL)
+
+evolution_addressbook_factory_SOURCES = \
+	evolution-addressbook-factory.c \
+	evolution-addressbook-factory-migrate-basedir.c \
+	$(NULL)
+
+evolution_addressbook_factory_LDADD = \
+	$(top_builddir)/addressbook/libedata-book/libedata-book-1.2.la \
+	$(top_builddir)/libebackend/libebackend-1.2.la \
+	$(top_builddir)/libedataserver/libedataserver-1.2.la \
+	$(EVOLUTION_ADDRESSBOOK_LIBS) \
+	$(FACTORY_GTK_LIBS) \
+	$(GOA_LIBS) \
+	$(NULL)
+
+-include $(top_srcdir)/git.mk
diff --git a/addressbook/libedata-book/e-data-book-migrate-basedir.c b/services/evolution-addressbook-factory/evolution-addressbook-factory-migrate-basedir.c
similarity index 85%
rename from addressbook/libedata-book/e-data-book-migrate-basedir.c
rename to services/evolution-addressbook-factory/evolution-addressbook-factory-migrate-basedir.c
index 76e711e..e8ed74c 100644
--- a/addressbook/libedata-book/e-data-book-migrate-basedir.c
+++ b/services/evolution-addressbook-factory/evolution-addressbook-factory-migrate-basedir.c
@@ -1,5 +1,5 @@
 /*
- * e-data-book-migrate-basedir.c
+ * evolution-addressbook-factory-migrate-basedir.c
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -20,11 +20,12 @@
 #include <glib/gstdio.h>
 #include <libedataserver/e-data-server-util.h>
 
-void e_data_book_migrate_basedir (void);
+/* Forward Declarations */
+void evolution_addressbook_factory_migrate_basedir (void);
 
 static gboolean
-data_book_migrate_rename (const gchar *old_filename,
-                          const gchar *new_filename)
+migrate_rename (const gchar *old_filename,
+                const gchar *new_filename)
 {
 	gboolean old_filename_is_dir;
 	gboolean old_filename_exists;
@@ -58,7 +59,7 @@ data_book_migrate_rename (const gchar *old_filename,
 }
 
 static gboolean
-data_book_migrate_rmdir (const gchar *dirname)
+migrate_rmdir (const gchar *dirname)
 {
 	GDir *dir = NULL;
 	gboolean success = TRUE;
@@ -91,7 +92,7 @@ data_book_migrate_rmdir (const gchar *dirname)
 }
 
 static void
-data_book_migrate_process_corrections (GHashTable *corrections)
+migrate_process_corrections (GHashTable *corrections)
 {
 	GHashTableIter iter;
 	gpointer old_filename;
@@ -100,14 +101,14 @@ data_book_migrate_process_corrections (GHashTable *corrections)
 	g_hash_table_iter_init (&iter, corrections);
 
 	while (g_hash_table_iter_next (&iter, &old_filename, &new_filename)) {
-		data_book_migrate_rename (old_filename, new_filename);
+		migrate_rename (old_filename, new_filename);
 		g_hash_table_iter_remove (&iter);
 	}
 }
 
 static gboolean
-data_book_migrate_move_contents (const gchar *src_directory,
-                                 const gchar *dst_directory)
+migrate_move_contents (const gchar *src_directory,
+                       const gchar *dst_directory)
 {
 	GDir *dir;
 	GHashTable *corrections;
@@ -138,7 +139,7 @@ data_book_migrate_move_contents (const gchar *src_directory,
 
 	g_dir_close (dir);
 
-	data_book_migrate_process_corrections (corrections);
+	migrate_process_corrections (corrections);
 	g_hash_table_destroy (corrections);
 
 	/* It's tempting to want to remove the source directory here.
@@ -150,7 +151,7 @@ data_book_migrate_move_contents (const gchar *src_directory,
 }
 
 static void
-data_book_migrate_fix_groupwise_bug (const gchar *old_base_dir)
+migrate_fix_groupwise_bug (const gchar *old_base_dir)
 {
 	GDir *dir;
 	GHashTable *corrections;
@@ -192,7 +193,7 @@ data_book_migrate_fix_groupwise_bug (const gchar *old_base_dir)
 
 	g_dir_close (dir);
 
-	data_book_migrate_process_corrections (corrections);
+	migrate_process_corrections (corrections);
 	g_hash_table_destroy (corrections);
 
 exit:
@@ -201,7 +202,7 @@ exit:
 }
 
 static void
-data_book_migrate_to_user_cache_dir (const gchar *old_base_dir)
+migrate_to_user_cache_dir (const gchar *old_base_dir)
 {
 	const gchar *new_cache_dir;
 	gchar *old_cache_dir;
@@ -235,21 +236,21 @@ data_book_migrate_to_user_cache_dir (const gchar *old_base_dir)
 	src_directory = g_build_filename (old_cache_dir, "addressbook", NULL);
 	dst_directory = g_build_filename (new_cache_dir, "addressbook", NULL);
 
-	data_book_migrate_move_contents (src_directory, dst_directory);
-	data_book_migrate_rmdir (src_directory);
+	migrate_move_contents (src_directory, dst_directory);
+	migrate_rmdir (src_directory);
 
 	g_free (src_directory);
 	g_free (dst_directory);
 
 	/* Try to remove the old cache directory.  Good chance this will
 	 * fail on the first try, since Evolution puts stuff here too. */
-	data_book_migrate_rmdir (old_cache_dir);
+	migrate_rmdir (old_cache_dir);
 
 	g_free (old_cache_dir);
 }
 
 static void
-data_book_migrate_to_user_data_dir (const gchar *old_base_dir)
+migrate_to_user_data_dir (const gchar *old_base_dir)
 {
 	const gchar *new_data_dir;
 	gchar *src_directory;
@@ -281,15 +282,15 @@ data_book_migrate_to_user_data_dir (const gchar *old_base_dir)
 	src_directory = g_build_filename (old_base_dir, "addressbook", "local", NULL);
 	dst_directory = g_build_filename (new_data_dir, "addressbook", NULL);
 
-	data_book_migrate_move_contents (src_directory, dst_directory);
-	data_book_migrate_rmdir (src_directory);
+	migrate_move_contents (src_directory, dst_directory);
+	migrate_rmdir (src_directory);
 
 	g_free (src_directory);
 	g_free (dst_directory);
 }
 
 void
-e_data_book_migrate_basedir (void)
+evolution_addressbook_factory_migrate_basedir (void)
 {
 	const gchar *home_dir;
 	gchar *old_base_dir;
@@ -304,14 +305,14 @@ e_data_book_migrate_basedir (void)
 	if (!g_file_test (old_base_dir, G_FILE_TEST_IS_DIR))
 		goto exit;
 
-	data_book_migrate_fix_groupwise_bug (old_base_dir);
+	migrate_fix_groupwise_bug (old_base_dir);
 
-	data_book_migrate_to_user_cache_dir (old_base_dir);
-	data_book_migrate_to_user_data_dir (old_base_dir);
+	migrate_to_user_cache_dir (old_base_dir);
+	migrate_to_user_data_dir (old_base_dir);
 
 	/* Try to remove the old base directory.  Good chance this will
 	 * fail on the first try, since Evolution puts stuff here too. */
-	data_book_migrate_rmdir (old_base_dir);
+	migrate_rmdir (old_base_dir);
 
 exit:
 	g_free (old_base_dir);
diff --git a/services/evolution-addressbook-factory/evolution-addressbook-factory.c b/services/evolution-addressbook-factory/evolution-addressbook-factory.c
new file mode 100644
index 0000000..d4d3350
--- /dev/null
+++ b/services/evolution-addressbook-factory/evolution-addressbook-factory.c
@@ -0,0 +1,144 @@
+/*
+ * evolution-addressbook-factory.c
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+#include <config.h>
+#include <locale.h>
+#include <glib/gi18n.h>
+
+#ifdef ENABLE_MAINTAINER_MODE
+#include <gtk/gtk.h>
+#endif
+
+#ifdef G_OS_UNIX
+#if GLIB_CHECK_VERSION(2,29,5)
+#include <glib-unix.h>
+#endif
+#endif
+
+#ifdef G_OS_WIN32
+#include <windows.h>
+#include <conio.h>
+#ifndef PROCESS_DEP_ENABLE
+#define PROCESS_DEP_ENABLE 0x00000001
+#endif
+#ifndef PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION
+#define PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION 0x00000002
+#endif
+#endif
+
+#include <libedata-book/e-data-book-factory.h>
+
+/* Keep running after the last client is closed. */
+static gboolean opt_keep_running = FALSE;
+
+static GOptionEntry entries[] = {
+
+	{ "keep-running", 'r', 0, G_OPTION_ARG_NONE, &opt_keep_running,
+	  N_("Keep running after the last client is closed"), NULL },
+	{ NULL }
+};
+
+/* Forward Declarations */
+void evolution_addressbook_factory_migrate_basedir (void);
+
+gint
+main (gint argc,
+      gchar **argv)
+{
+	GOptionContext *context;
+	EDBusServer *server;
+	GError *error = NULL;
+
+#ifdef G_OS_WIN32
+	/* Reduce risks */
+	{
+		typedef BOOL (WINAPI *t_SetDllDirectoryA) (LPCSTR lpPathName);
+		t_SetDllDirectoryA p_SetDllDirectoryA;
+
+		p_SetDllDirectoryA = GetProcAddress (
+			GetModuleHandle ("kernel32.dll"),
+			"SetDllDirectoryA");
+
+		if (p_SetDllDirectoryA != NULL)
+			p_SetDllDirectoryA ("");
+	}
+#ifndef _WIN64
+	{
+		typedef BOOL (WINAPI *t_SetProcessDEPPolicy) (DWORD dwFlags);
+		t_SetProcessDEPPolicy p_SetProcessDEPPolicy;
+
+		p_SetProcessDEPPolicy = GetProcAddress (
+			GetModuleHandle ("kernel32.dll"),
+			"SetProcessDEPPolicy");
+
+		if (p_SetProcessDEPPolicy != NULL)
+			p_SetProcessDEPPolicy (
+				PROCESS_DEP_ENABLE |
+				PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION);
+	}
+#endif
+#endif
+
+	setlocale (LC_ALL, "");
+	bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+
+#ifdef ENABLE_MAINTAINER_MODE
+	/* This is only to load gtk-modules, like
+	 * bug-buddy's gnomesegvhandler, if possible */
+	gtk_init_check (&argc, &argv);
+#else
+	g_type_init ();
+#endif
+
+	context = g_option_context_new (NULL);
+	g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
+	g_option_context_parse (context, &argc, &argv, &error);
+	g_option_context_free (context);
+
+	if (error != NULL) {
+		g_printerr ("%s\n", error->message);
+		exit (EXIT_FAILURE);
+	}
+
+	/* Migrate user data from ~/.evolution to XDG base directories. */
+	evolution_addressbook_factory_migrate_basedir ();
+
+	server = g_initable_new (
+		E_TYPE_DATA_BOOK_FACTORY, NULL, &error, NULL);
+
+	if (error != NULL) {
+		g_printerr ("%s\n", error->message);
+		exit (EXIT_FAILURE);
+	}
+
+	g_print ("Server is up and running...\n");
+
+	/* This SHOULD keep the server's use
+	 * count from ever reaching zero. */
+	if (opt_keep_running)
+		e_dbus_server_hold (server);
+
+	e_dbus_server_run (server);
+
+	g_object_unref (server);
+
+	g_print ("Bye.\n");
+
+	return 0;
+}
diff --git a/addressbook/libedata-book/org.gnome.evolution.dataserver.AddressBook.service.in b/services/evolution-addressbook-factory/org.gnome.evolution.dataserver.AddressBook.service.in
similarity index 52%
rename from addressbook/libedata-book/org.gnome.evolution.dataserver.AddressBook.service.in
rename to services/evolution-addressbook-factory/org.gnome.evolution.dataserver.AddressBook.service.in
index 6d80567..84c346c 100644
--- a/addressbook/libedata-book/org.gnome.evolution.dataserver.AddressBook.service.in
+++ b/services/evolution-addressbook-factory/org.gnome.evolution.dataserver.AddressBook.service.in
@@ -1,3 +1,3 @@
 [D-BUS Service]
 Name= ADDRESS_BOOK_DBUS_SERVICE_NAME@
-Exec= libexecdir@/e-addressbook-factory
+Exec= libexecdir@/evolution-addressbook-factory
diff --git a/services/evolution-calendar-factory/Makefile.am b/services/evolution-calendar-factory/Makefile.am
new file mode 100644
index 0000000..39bd5e4
--- /dev/null
+++ b/services/evolution-calendar-factory/Makefile.am
@@ -0,0 +1,38 @@
+NULL =
+
+service_in_files = org.gnome.evolution.dataserver.Calendar.service.in
+servicedir = $(datadir)/dbus-1/services
+service_DATA = $(service_in_files:.service.in=.service)
+ EVO_SUBST_SERVICE_RULE@
+
+CLEANFILES = $(service_DATA)
+EXTRA_DIST = $(service_in_files)
+
+libexec_PROGRAMS = evolution-calendar-factory
+
+evolution_calendar_factory_CPPFLAGS = \
+	$(AM_CPPFLAGS) \
+	-DG_LOG_DOMAIN=\"evolution-calendar-factory\" \
+	-DLOCALEDIR=\"$(localedir)\" \
+	-I$(top_srcdir) \
+	-I$(top_srcdir)/calendar \
+	-I$(top_builddir) \
+	-I$(top_builddir)/calendar \
+	$(EVOLUTION_CALENDAR_CFLAGS) \
+	$(FACTORY_GTK_CFLAGS) \
+	$(NULL)
+
+evolution_calendar_factory_SOURCES = \
+	evolution-calendar-factory.c \
+	evolution-calendar-factory-migrate-basedir.c \
+	$(NULL)
+
+evolution_calendar_factory_LDADD = \
+	$(top_builddir)/calendar/libedata-cal/libedata-cal-1.2.la \
+	$(top_builddir)/libebackend/libebackend-1.2.la \
+	$(top_builddir)/libedataserver/libedataserver-1.2.la \
+	$(EVOLUTION_CALENDAR_LIBS) \
+	$(FACTORY_GTK_LIBS) \
+	$(NULL)
+
+-include $(top_srcdir)/git.mk
diff --git a/calendar/libedata-cal/e-data-cal-migrate-basedir.c b/services/evolution-calendar-factory/evolution-calendar-factory-migrate-basedir.c
similarity index 82%
rename from calendar/libedata-cal/e-data-cal-migrate-basedir.c
rename to services/evolution-calendar-factory/evolution-calendar-factory-migrate-basedir.c
index 4c17608..d44119c 100644
--- a/calendar/libedata-cal/e-data-cal-migrate-basedir.c
+++ b/services/evolution-calendar-factory/evolution-calendar-factory-migrate-basedir.c
@@ -1,5 +1,5 @@
 /*
- * e-data-cal-migrate-basedir.c
+ * evolution-calendar-factory-migrate-basedir.c
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -20,11 +20,12 @@
 #include <glib/gstdio.h>
 #include <libedataserver/e-data-server-util.h>
 
-void e_data_cal_migrate_basedir (void);
+/* Forward Declarations */
+void evolution_calendar_factory_migrate_basedir (void);
 
 static gboolean
-data_cal_migrate_rename (const gchar *old_filename,
-                         const gchar *new_filename)
+migrate_rename (const gchar *old_filename,
+                const gchar *new_filename)
 {
 	gboolean old_filename_is_dir;
 	gboolean old_filename_exists;
@@ -58,7 +59,7 @@ data_cal_migrate_rename (const gchar *old_filename,
 }
 
 static gboolean
-data_cal_migrate_rmdir (const gchar *dirname)
+migrate_rmdir (const gchar *dirname)
 {
 	GDir *dir = NULL;
 	gboolean success = TRUE;
@@ -91,7 +92,7 @@ data_cal_migrate_rmdir (const gchar *dirname)
 }
 
 static void
-data_cal_migrate_process_corrections (GHashTable *corrections)
+migrate_process_corrections (GHashTable *corrections)
 {
 	GHashTableIter iter;
 	gpointer old_filename;
@@ -100,14 +101,14 @@ data_cal_migrate_process_corrections (GHashTable *corrections)
 	g_hash_table_iter_init (&iter, corrections);
 
 	while (g_hash_table_iter_next (&iter, &old_filename, &new_filename)) {
-		data_cal_migrate_rename (old_filename, new_filename);
+		migrate_rename (old_filename, new_filename);
 		g_hash_table_iter_remove (&iter);
 	}
 }
 
 static gboolean
-data_cal_migrate_move_contents (const gchar *src_directory,
-                                const gchar *dst_directory)
+migrate_move_contents (const gchar *src_directory,
+                       const gchar *dst_directory)
 {
 	GDir *dir;
 	GHashTable *corrections;
@@ -138,7 +139,7 @@ data_cal_migrate_move_contents (const gchar *src_directory,
 
 	g_dir_close (dir);
 
-	data_cal_migrate_process_corrections (corrections);
+	migrate_process_corrections (corrections);
 	g_hash_table_destroy (corrections);
 
 	/* It's tempting to want to remove the source directory here.
@@ -150,7 +151,7 @@ data_cal_migrate_move_contents (const gchar *src_directory,
 }
 
 static void
-data_cal_migrate_fix_exchange_bug (const gchar *old_base_dir)
+migrate_fix_exchange_bug (const gchar *old_base_dir)
 {
 	GDir *dir;
 	GHashTable *corrections;
@@ -191,7 +192,7 @@ data_cal_migrate_fix_exchange_bug (const gchar *old_base_dir)
 
 	g_dir_close (dir);
 
-	data_cal_migrate_process_corrections (corrections);
+	migrate_process_corrections (corrections);
 	g_hash_table_destroy (corrections);
 
 exit:
@@ -200,7 +201,7 @@ exit:
 }
 
 static void
-data_cal_migrate_fix_memos_cache_bug (const gchar *old_base_dir)
+migrate_fix_memos_cache_bug (const gchar *old_base_dir)
 {
 	gchar *src_directory;
 	gchar *dst_directory;
@@ -212,15 +213,15 @@ data_cal_migrate_fix_memos_cache_bug (const gchar *old_base_dir)
 	src_directory = g_build_filename (old_base_dir, "cache", "journal", NULL);
 	dst_directory = g_build_filename (old_base_dir, "cache", "memos", NULL);
 
-	data_cal_migrate_move_contents (src_directory, dst_directory);
-	data_cal_migrate_rmdir (src_directory);
+	migrate_move_contents (src_directory, dst_directory);
+	migrate_rmdir (src_directory);
 
 	g_free (src_directory);
 	g_free (dst_directory);
 }
 
 static void
-data_cal_migrate_to_user_cache_dir (const gchar *old_base_dir)
+migrate_to_user_cache_dir (const gchar *old_base_dir)
 {
 	const gchar *new_cache_dir;
 	gchar *old_cache_dir;
@@ -254,8 +255,8 @@ data_cal_migrate_to_user_cache_dir (const gchar *old_base_dir)
 	src_directory = g_build_filename (old_cache_dir, "calendar", NULL);
 	dst_directory = g_build_filename (new_cache_dir, "calendar", NULL);
 
-	data_cal_migrate_move_contents (src_directory, dst_directory);
-	data_cal_migrate_rmdir (src_directory);
+	migrate_move_contents (src_directory, dst_directory);
+	migrate_rmdir (src_directory);
 
 	g_free (src_directory);
 	g_free (dst_directory);
@@ -263,8 +264,8 @@ data_cal_migrate_to_user_cache_dir (const gchar *old_base_dir)
 	src_directory = g_build_filename (old_cache_dir, "memos", NULL);
 	dst_directory = g_build_filename (new_cache_dir, "memos", NULL);
 
-	data_cal_migrate_move_contents (src_directory, dst_directory);
-	data_cal_migrate_rmdir (src_directory);
+	migrate_move_contents (src_directory, dst_directory);
+	migrate_rmdir (src_directory);
 
 	g_free (src_directory);
 	g_free (dst_directory);
@@ -272,21 +273,21 @@ data_cal_migrate_to_user_cache_dir (const gchar *old_base_dir)
 	src_directory = g_build_filename (old_cache_dir, "tasks", NULL);
 	dst_directory = g_build_filename (new_cache_dir, "tasks", NULL);
 
-	data_cal_migrate_move_contents (src_directory, dst_directory);
-	data_cal_migrate_rmdir (src_directory);
+	migrate_move_contents (src_directory, dst_directory);
+	migrate_rmdir (src_directory);
 
 	g_free (src_directory);
 	g_free (dst_directory);
 
 	/* Try to remove the old cache directory.  Good chance this will
 	 * fail on the first try, since Evolution puts stuff here too. */
-	data_cal_migrate_rmdir (old_cache_dir);
+	migrate_rmdir (old_cache_dir);
 
 	g_free (old_cache_dir);
 }
 
 static void
-data_cal_migrate_to_user_data_dir (const gchar *old_base_dir)
+migrate_to_user_data_dir (const gchar *old_base_dir)
 {
 	const gchar *new_data_dir;
 	gchar *src_directory;
@@ -318,8 +319,8 @@ data_cal_migrate_to_user_data_dir (const gchar *old_base_dir)
 	src_directory = g_build_filename (old_base_dir, "calendar", "local", NULL);
 	dst_directory = g_build_filename (new_data_dir, "calendar", NULL);
 
-	data_cal_migrate_move_contents (src_directory, dst_directory);
-	data_cal_migrate_rmdir (src_directory);
+	migrate_move_contents (src_directory, dst_directory);
+	migrate_rmdir (src_directory);
 
 	g_free (src_directory);
 	g_free (dst_directory);
@@ -327,8 +328,8 @@ data_cal_migrate_to_user_data_dir (const gchar *old_base_dir)
 	src_directory = g_build_filename (old_base_dir, "memos", "local", NULL);
 	dst_directory = g_build_filename (new_data_dir, "memos", NULL);
 
-	data_cal_migrate_move_contents (src_directory, dst_directory);
-	data_cal_migrate_rmdir (src_directory);
+	migrate_move_contents (src_directory, dst_directory);
+	migrate_rmdir (src_directory);
 
 	g_free (src_directory);
 	g_free (dst_directory);
@@ -336,8 +337,8 @@ data_cal_migrate_to_user_data_dir (const gchar *old_base_dir)
 	src_directory = g_build_filename (old_base_dir, "tasks", "local", NULL);
 	dst_directory = g_build_filename (new_data_dir, "tasks", NULL);
 
-	data_cal_migrate_move_contents (src_directory, dst_directory);
-	data_cal_migrate_rmdir (src_directory);
+	migrate_move_contents (src_directory, dst_directory);
+	migrate_rmdir (src_directory);
 
 	g_free (src_directory);
 	g_free (dst_directory);
@@ -350,15 +351,15 @@ data_cal_migrate_to_user_data_dir (const gchar *old_base_dir)
 	src_directory = g_build_filename (old_base_dir, "exchange", NULL);
 	dst_directory = g_build_filename (new_data_dir, "exchange", NULL);
 
-	data_cal_migrate_move_contents (src_directory, dst_directory);
-	data_cal_migrate_rmdir (src_directory);
+	migrate_move_contents (src_directory, dst_directory);
+	migrate_rmdir (src_directory);
 
 	g_free (src_directory);
 	g_free (dst_directory);
 }
 
 void
-e_data_cal_migrate_basedir (void)
+evolution_calendar_factory_migrate_basedir (void)
 {
 	const gchar *home_dir;
 	gchar *old_base_dir;
@@ -373,15 +374,15 @@ e_data_cal_migrate_basedir (void)
 	if (!g_file_test (old_base_dir, G_FILE_TEST_IS_DIR))
 		goto exit;
 
-	data_cal_migrate_fix_exchange_bug (old_base_dir);
-	data_cal_migrate_fix_memos_cache_bug (old_base_dir);
+	migrate_fix_exchange_bug (old_base_dir);
+	migrate_fix_memos_cache_bug (old_base_dir);
 
-	data_cal_migrate_to_user_cache_dir (old_base_dir);
-	data_cal_migrate_to_user_data_dir (old_base_dir);
+	migrate_to_user_cache_dir (old_base_dir);
+	migrate_to_user_data_dir (old_base_dir);
 
 	/* Try to remove the old base directory.  Good chance this will
 	 * fail on the first try, since Evolution puts stuff here too. */
-	data_cal_migrate_rmdir (old_base_dir);
+	migrate_rmdir (old_base_dir);
 
 exit:
 	g_free (old_base_dir);
diff --git a/services/evolution-calendar-factory/evolution-calendar-factory.c b/services/evolution-calendar-factory/evolution-calendar-factory.c
new file mode 100644
index 0000000..9936728
--- /dev/null
+++ b/services/evolution-calendar-factory/evolution-calendar-factory.c
@@ -0,0 +1,146 @@
+/*
+ * evolution-calendar-factory.c
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+#include <config.h>
+#include <locale.h>
+#include <glib/gi18n.h>
+
+#ifdef ENABLE_MAINTAINER_MODE
+#include <gtk/gtk.h>
+#endif
+
+#ifdef HAVE_ICAL_UNKNOWN_TOKEN_HANDLING
+#include <libical/ical.h>
+#endif
+
+#ifdef G_OS_WIN32
+#include <windows.h>
+#include <conio.h>
+#ifndef PROCESS_DEP_ENABLE
+#define PROCESS_DEP_ENABLE 0x00000001
+#endif
+#ifndef PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION
+#define PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION 0x00000002
+#endif
+#endif
+
+#include <libedata-cal/e-data-cal-factory.h>
+
+/* Keeps running after the last client is closed. */
+static gboolean opt_keep_running = FALSE;
+
+static GOptionEntry entries[] = {
+
+	{ "keep-running", 'r', 0, G_OPTION_ARG_NONE, &opt_keep_running,
+	  N_("Keep running after the last client is closed"), NULL },
+	{ NULL }
+};
+
+/* Forward Declarations */
+void evolution_calendar_factory_migrate_basedir (void);
+
+gint
+main (gint argc,
+      gchar **argv)
+{
+	GOptionContext *context;
+	EDBusServer *server;
+	GError *error = NULL;
+
+#ifdef G_OS_WIN32
+	/* Reduce risks */
+	{
+		typedef BOOL (WINAPI *t_SetDllDirectoryA) (LPCSTR lpPathName);
+		t_SetDllDirectoryA p_SetDllDirectoryA;
+
+		p_SetDllDirectoryA = GetProcAddress (
+			GetModuleHandle ("kernel32.dll"),
+			"SetDllDirectoryA");
+
+		if (p_SetDllDirectoryA != NULL)
+			p_SetDllDirectoryA ("");
+	}
+#ifndef _WIN64
+	{
+		typedef BOOL (WINAPI *t_SetProcessDEPPolicy) (DWORD dwFlags);
+		t_SetProcessDEPPolicy p_SetProcessDEPPolicy;
+
+		p_SetProcessDEPPolicy = GetProcAddress (
+			GetModuleHandle ("kernel32.dll"),
+			"SetProcessDEPPolicy");
+
+		if (p_SetProcessDEPPolicy != NULL)
+			p_SetProcessDEPPolicy (
+				PROCESS_DEP_ENABLE |
+				PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION);
+	}
+#endif
+#endif
+
+	setlocale (LC_ALL, "");
+	bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+
+#ifdef ENABLE_MAINTAINER_MODE
+	/* This is only to load gtk-modules, like
+	 * bug-buddy's gnomesegvhandler, if possible. */
+	gtk_init_check (&argc, &argv);
+#else
+	g_type_init ();
+#endif
+
+	context = g_option_context_new (NULL);
+	g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
+	g_option_context_parse (context, &argc, &argv, &error);
+	g_option_context_free (context);
+
+	if (error != NULL) {
+		g_printerr ("%s\n", error->message);
+		exit (EXIT_FAILURE);
+	}
+
+#ifdef HAVE_ICAL_UNKNOWN_TOKEN_HANDLING
+	ical_set_unknown_token_handling_setting (ICAL_DISCARD_TOKEN);
+#endif
+
+	/* Migrate user data from ~/.evolution to XDG base directories. */
+	evolution_calendar_factory_migrate_basedir ();
+
+	server = g_initable_new (
+		E_TYPE_DATA_CAL_FACTORY, NULL, &error, NULL);
+
+	if (error != NULL) {
+		g_printerr ("%s\n", error->message);
+		exit (EXIT_FAILURE);
+	}
+
+	g_print ("Server is up and running...\n");
+
+	/* This SHOULD keep the server's use
+	 * count from ever reaching zero. */
+	if (opt_keep_running)
+		e_dbus_server_hold (server);
+
+	e_dbus_server_run (server);
+
+	g_object_unref (server);
+
+	g_print ("Bye.\n");
+
+	return 0;
+}
diff --git a/services/evolution-calendar-factory/org.gnome.evolution.dataserver.Calendar.service.in b/services/evolution-calendar-factory/org.gnome.evolution.dataserver.Calendar.service.in
new file mode 100644
index 0000000..c985b31
--- /dev/null
+++ b/services/evolution-calendar-factory/org.gnome.evolution.dataserver.Calendar.service.in
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name= CALENDAR_DBUS_SERVICE_NAME@
+Exec= libexecdir@/evolution-calendar-factory



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]