# Generated by configure. Do not edit.
+2014-03-31 Patrick Ohly <patrick.ohly@intel.com>
+
+ * NEWS:
+ * configure.ac:
+
+ autotools, NEWS: SyncEvolution 1.4.1
+
+2014-03-31 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/SyncSource.cpp:
+
+ EDS: only load one backend plugin of each kind
+
+2014-03-27 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/test-dbus.py:
+
+ D-Bus testing: fix testAutoSyncNoNetworkManager
+
+2014-03-27 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/test-dbus.py:
+
+ D-Bus testing: extra sanity checks before starting daemon
+
+2014-03-27 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/sys.supp:
+
+ testing: updated valgrind supressions for Debian Testing and
+ Ubuntu Saucy
+
+2014-03-27 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/runtests.py:
+
+ testing: enable dbug mode when running syncevo-http-server
+
+2014-03-27 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/syncevo-http-server.py:
+
+ http server: include time stamps in debug mode
+
+2014-03-26 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/runtests.py:
+
+ testing: fix akonadi.db creation problem
+
+2014-03-26 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/resultchecker.py:
+ * test/runtests.py:
+
+ testing: split up local testing
+
+2014-03-21 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/dbus-session.sh:
+
+ testing: create XDG_RUNTIME_DIR in dbus-session.sh
+
+2014-03-21 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/dbus-session.sh:
+
+ testing: fix empty DBUS_SESSION_BUS_PID in dbus-session.sh
+
+2014-03-21 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/dbus-session.sh:
+
+ testing: remove debug logging from dbus-session.sh
+
+2014-03-31 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/valgrindcheck.sh:
+
+ testing: use absolute path for valgrind log file
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/SyncContext.cpp:
+
+ syncing: remember original path to session dir
+
+2014-03-20 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/test-dbus.py:
+
+ D-Bus testing: fix testNoParent
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/test-dbus.py:
+
+ D-Bus testing: increase timeouts
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/testcases/eds_event.ics:
+ * test/testcases/eds_event.ics.Ovi.tem.patch:
+ * test/testcases/eds_event.ics.apple.tem.patch:
+ * test/testcases/eds_event.ics.exchange.tem.patch:
+ * test/testcases/eds_event.ics.googleactivesync.tem.patch:
+ * test/testcases/eds_event.ics.googlecalendar.tem.patch:
+ * test/testcases/eds_event.ics.nokia_7210c.tem.patch:
+ * test/testcases/eds_event.ics.radicale.tem.patch:
+
+ testing: remove LANGUAGE from ATTENDEE
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/synccompare.pl:
+
+ testing: ignore harmless data changes in Akonadi
+
+2014-03-20 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/runtests.py:
+
+ testing: ignore one more Akonadi 404 failure
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/runtests.py:
+
+ testing: ignore filekde::file_contact::testItems test failures
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/backends/akonadi/akonadisyncsource.cpp:
+ * src/backends/akonadi/akonadisyncsource.h:
+
+ Akonadi: support KDE Notes, enhanced "database" check
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/configs/scripting/11calendar.xml:
+
+ Akonadi: ensure that UID is set (FDO #74342)
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/ClientTest.cpp:
+
+ testing: disable "NoID" tests when source does not support
+ iCalendar 2.0 semantic
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/backends/akonadi/AkonadiSyncSourceRegister.cpp:
+
+ Akonadi: disable testing of iCalendar 2.0 semantic
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/dbus-session.sh:
+
+ testing: simplify Akonadi server startup
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/syncevo-http-server.py:
+
+ syncevo-http-server: remove D-Bus timeouts
+
+2014-03-13 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/wrappercheck.sh:
+
+ testing: optimize sleep 60 in wrapperchecks.h
+
+2014-03-13 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/runtests.py:
+
+ testing: more SyncEvolution client/server combinations
+
+2014-03-20 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/runtests.py:
+
+ testing: improved parallel testing of Akonadi
+
+2014-03-13 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/runtests.py:
+
+ testing: support parallel testing of Akonadi
+
+2014-03-13 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/backends/akonadi/akonadisyncsource.cpp:
+
+ Akonadi: avoid threading problem in HTTP server mode (FDO #75672)
+
+2014-03-13 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/GLibSupport.cpp:
+ * src/syncevo/GLibSupport.h:
+ * src/syncevo/util.h:
+
+ glib: adding GRunInMain() and GRunIsMain()
+
+2014-03-21 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/src.am:
+ * test/IcalTest.cpp:
+
+ testing: check that we get the right VTIMEZONE
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * configure.ac:
+ * src/src.am:
+ * src/syncevo/icaltz-util.c:
+ * src/syncevo/icaltz-util.h:
+ * src/syncevo/syncevo.am:
+
+ ical: workaround for libical 1.0 builtin timezone change
+
+2014-03-26 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/eds_abi_wrapper.cpp:
+
+ ical: support overriding icaltimezone_get_component() in compat
+ layer
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/eds_abi_wrapper.cpp:
+ * src/syncevo/eds_abi_wrapper.h:
+
+ ical compatibility: cover more symbols
+
+2014-03-20 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/icaltz-util.c:
+
+ ical: fix gcc 4.4 warning
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/icaltz-util.c:
+
+ ical: fix memory leak in case of read error
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/icaltz-util.c:
+ * src/syncevo/icaltz-util.h:
+
+ ical: enable icaltz-util executable
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/icaltz-util.c:
+
+ ical: unistd.h is needed for access()
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/icaltz-util.c:
+ * src/syncevo/icaltz-util.h:
+
+ ical: import icaltz-util
+
+2014-03-26 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/eds_abi_wrapper.cpp:
+
+ EDS: allow compat init before main()
+
+2014-03-13 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/evo.supp:
+ * test/sys.supp:
+
+ testing: ignore some more leaks
+
+2014-03-13 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/src.am:
+ * test/runtests.py:
+
+ testing: link client-test with original LDFLAGS
+
+2014-03-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * Makefile.am:
+
+ autotools: fix dist checking
+
+2014-03-02 Niels Ole Salscheider <niels_ole@salscheider-online.de>
+
+ * src/backends/akonadi/configure-sub.in:
+
+ autotools: Add QtCore include path to KDEPIM_CFLAGS (FDO #75670)
+
+2014-02-24 Tino Mettler <tino+debian@tikei.de>
+
+ * src/gdbusxx/gdbus-cxx-bridge.h:
+
+ GDBus GIO: include missing stdint.h
+
2014-02-14 Patrick Ohly <patrick.ohly@intel.com>
* NEWS:
# (relevant in that case and for static builds) for dependencies on
# problematic libraries and symbols
#
-# Exclude *-2.so, these are EXTRA_BACKENDS for which other rules apply.
+# Exclude *-[0-9].so, these are EXTRA_BACKENDS for which other rules apply.
#
# ical_strdup is an exception because it is in SyncEvolution.
all_local_installchecks += toplevel_so_check
toplevel_so_check:
- for i in `find $(DESTDIR)/$(libdir)/syncevolution $(DESTDIR)/$(libdir)/libsyncevo* $(DESTDIR)/$(libdir)/libsynthesis* -name *.so | grep -v -2.so` $(DESTDIR)/$(bindir)/syncevolution; \
+ for i in `find $(DESTDIR)/$(libdir)/syncevolution $(DESTDIR)/$(libdir)/libsyncevo* $(DESTDIR)/$(libdir)/libsynthesis* -name *.so | grep -v -e -[0-9].so` $(DESTDIR)/$(bindir)/syncevolution; \
do \
if objdump -T -C $$i | grep -v :: | grep '\*UND\*' | sort | grep -v -w ical_strdup | grep -e ical -e " e_"; then \
echo "$$i should not depend on EDS, libical or libbluetooth"; \
INSTALL NEWS compile config.guess config.sub depcomp \
install-sh ltmain.sh missing mkinstalldirs
test_PROGRAMS = $(am__EXEEXT_10)
-bin_PROGRAMS = $(am__EXEEXT_4) $(am__append_79) $(am__append_83)
+bin_PROGRAMS = $(am__EXEEXT_4) $(am__append_81) $(am__append_85)
libexec_PROGRAMS = src/syncevo-local-sync$(EXEEXT) $(am__EXEEXT_5)
noinst_PROGRAMS = $(am__EXEEXT_6) $(am__EXEEXT_7) $(am__EXEEXT_8) \
$(am__EXEEXT_9)
@COND_CORE_TRUE@@ENABLE_ICAL_TRUE@ src/syncevo/icalstrdup.c \
@COND_CORE_TRUE@@ENABLE_ICAL_TRUE@ src/syncevo/icalstrdup.h
-@COND_CORE_TRUE@@ENABLE_OBEX_TRUE@am__append_19 = \
+@COND_CORE_TRUE@@ENABLE_ICALTZ_UTIL_TRUE@am__append_19 = \
+@COND_CORE_TRUE@@ENABLE_ICALTZ_UTIL_TRUE@ src/syncevo/icaltz-util.c \
+@COND_CORE_TRUE@@ENABLE_ICALTZ_UTIL_TRUE@ src/syncevo/icaltz-util.h
+
+@COND_CORE_TRUE@@ENABLE_EVOLUTION_COMPATIBILITY_FALSE@@ENABLE_ICALTZ_UTIL_TRUE@am__append_20 = $(LIBICAL_LIBS)
+@COND_CORE_TRUE@@ENABLE_OBEX_TRUE@am__append_21 = \
@COND_CORE_TRUE@@ENABLE_OBEX_TRUE@ src/syncevo/ObexTransportAgent.h \
@COND_CORE_TRUE@@ENABLE_OBEX_TRUE@ src/syncevo/ObexTransportAgent.cpp
-@COND_CORE_TRUE@@ENABLE_OBEX_TRUE@am__append_20 = $(LIBOPENOBEX_LIBS)
-@COND_CORE_TRUE@@ENABLE_OBEX_TRUE@am__append_21 = $(LIBOPENOBEX_CFLAGS)
-@COND_CORE_TRUE@@ENABLE_BLUETOOTH_TRUE@@ENABLE_OBEX_TRUE@am__append_22 = $(BLUEZ_LIBS)
-@COND_CORE_TRUE@@ENABLE_BLUETOOTH_TRUE@@ENABLE_OBEX_TRUE@am__append_23 = $(BLUEZ_CFLAGS)
+@COND_CORE_TRUE@@ENABLE_OBEX_TRUE@am__append_22 = $(LIBOPENOBEX_LIBS)
+@COND_CORE_TRUE@@ENABLE_OBEX_TRUE@am__append_23 = $(LIBOPENOBEX_CFLAGS)
+@COND_CORE_TRUE@@ENABLE_BLUETOOTH_TRUE@@ENABLE_OBEX_TRUE@am__append_24 = $(BLUEZ_LIBS)
+@COND_CORE_TRUE@@ENABLE_BLUETOOTH_TRUE@@ENABLE_OBEX_TRUE@am__append_25 = $(BLUEZ_CFLAGS)
#pkgconfigdir is defined in $(top_srcdir)/setup-variables.am
-@COND_CORE_TRUE@am__append_24 = src/syncevo/syncevolution.pc
-@COND_CORE_TRUE@am__append_25 = src/syncevo/syncevolution.pc
+@COND_CORE_TRUE@am__append_26 = src/syncevo/syncevolution.pc
+@COND_CORE_TRUE@am__append_27 = src/syncevo/syncevolution.pc
# turn README.rst into a file with plain text strings for
# "Synopsis" and "Usage"
-@COND_CORE_TRUE@am__append_26 = src/syncevo/SyncEvolutionXML.c \
+@COND_CORE_TRUE@am__append_28 = src/syncevo/SyncEvolutionXML.c \
@COND_CORE_TRUE@ src/syncevo/CmdlineHelp.c \
@COND_CORE_TRUE@ src/backends/webdav/syncevo-webdav-lookup
-@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@am__append_27 = -ldl
-@COND_CORE_TRUE@am__append_28 = src/syncevo/GenSyncEvolutionXML
-@COND_CORE_TRUE@am__append_29 = src/syncevo/CmdlineHelp.c
-@COND_CORE_TRUE@am__append_30 = src/syncevo/readme2c.pl \
+@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@am__append_29 = -ldl
+@COND_CORE_TRUE@am__append_30 = src/syncevo/GenSyncEvolutionXML
+@COND_CORE_TRUE@am__append_31 = src/syncevo/CmdlineHelp.c
+@COND_CORE_TRUE@am__append_32 = src/syncevo/readme2c.pl \
@COND_CORE_TRUE@ src/syncevo/installcheck-local.sh \
@COND_CORE_TRUE@ test/Algorithm/Diff.pm \
@COND_CORE_TRUE@ test/syncevo-http-server.py \
@COND_CORE_TRUE@ test/syncevo-phone-config.py \
@COND_CORE_TRUE@ test/synccompare.pl test/log2html.py \
@COND_CORE_TRUE@ test/run_src_client_test.sh
-@COND_CORE_TRUE@am__append_31 = src_syncevo_install_check_local
-@COND_CORE_TRUE@am__append_32 = -I$(top_srcdir)/src/syncevo \
+@COND_CORE_TRUE@am__append_33 = src_syncevo_install_check_local
+@COND_CORE_TRUE@am__append_34 = -I$(top_srcdir)/src/syncevo \
@COND_CORE_TRUE@ $(addprefix -I$(top_srcdir)/,$(BACKENDS)) \
@COND_CORE_TRUE@ -I$(SYNTHESIS_SUBDIR)
-@COND_CORE_TRUE@am__append_33 = $(src_backends_activesync_lib) \
+@COND_CORE_TRUE@am__append_35 = $(src_backends_activesync_lib) \
@COND_CORE_TRUE@ $(src_backends_addressbook_lib) \
@COND_CORE_TRUE@ $(src_backends_akonadi_lib) \
@COND_CORE_TRUE@ $(src_backends_evolution_lib) \
@COND_CORE_TRUE@ $(src_backends_sqlite_lib) \
@COND_CORE_TRUE@ $(src_backends_webdav_lib) \
@COND_CORE_TRUE@ $(src_backends_xmlrpc_lib)
-@COND_CORE_TRUE@@ENABLE_MODULES_FALSE@am__append_34 = $(src_backends_activesync_lib) \
+@COND_CORE_TRUE@@ENABLE_MODULES_FALSE@am__append_36 = $(src_backends_activesync_lib) \
@COND_CORE_TRUE@@ENABLE_MODULES_FALSE@ $(src_backends_addressbook_lib) \
@COND_CORE_TRUE@@ENABLE_MODULES_FALSE@ $(src_backends_akonadi_lib) \
@COND_CORE_TRUE@@ENABLE_MODULES_FALSE@ $(src_backends_evolution_lib) \
@COND_CORE_TRUE@@ENABLE_MODULES_FALSE@ $(src_backends_sqlite_lib) \
@COND_CORE_TRUE@@ENABLE_MODULES_FALSE@ $(src_backends_webdav_lib) \
@COND_CORE_TRUE@@ENABLE_MODULES_FALSE@ $(src_backends_xmlrpc_lib)
-@COND_CORE_TRUE@@ENABLE_ECAL_TRUE@am__append_35 = \
+@COND_CORE_TRUE@@ENABLE_ECAL_TRUE@am__append_37 = \
@COND_CORE_TRUE@@ENABLE_ECAL_TRUE@ src/backends/evolution/e-cal-check-timezones.c \
@COND_CORE_TRUE@@ENABLE_ECAL_TRUE@ src/backends/evolution/e-cal-check-timezones.h
-@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@am__append_36 = \
+@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@am__append_38 = \
@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@ src/backends/gnome/GNOMEPlatformRegister.cpp
-@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@am__append_37 = \
+@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@am__append_39 = \
@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@ src/backends/goa/GOARegister.cpp
-@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@am__append_38 = \
+@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@am__append_40 = \
@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@ src/backends/kde/KDEPlatformRegister.cpp
-@COND_CORE_TRUE@@USE_GSSO_TRUE@am__append_39 = src/backends/signon/providergsso.la
-@COND_CORE_TRUE@@USE_UOA_TRUE@am__append_40 = src/backends/signon/provideruoa.la
-@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@am__append_41 = \
+@COND_CORE_TRUE@@USE_GSSO_TRUE@am__append_41 = src/backends/signon/providergsso.la
+@COND_CORE_TRUE@@USE_UOA_TRUE@am__append_42 = src/backends/signon/provideruoa.la
+@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@am__append_43 = \
@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@ src/backends/signon/signonRegister.cpp
-@COND_CORE_TRUE@am__append_42 = \
+@COND_CORE_TRUE@am__append_44 = \
@COND_CORE_TRUE@ src/backends/webdav/syncevo-webdav-lookup \
@COND_CORE_TRUE@ src/synccompare
-@COND_CORE_TRUE@@NEON_COMPATIBILITY_TRUE@am__append_43 = webdav_so_check
-@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@am__append_44 = $(DESTDIR)/$(src_backends_webdav_backenddir)/syncdav.so
-@COND_CORE_TRUE@am__append_45 = src/syncevolution
-@COND_CORE_FALSE@am__append_46 = -I$(top_srcdir)/$(SYNTHESIS_SUBDIR_INCLUDES)
-@COND_DOC_TRUE@am__append_47 = src/dbus/interfaces/syncevo-dbus-api-doc.html
-@COND_GUI_TRUE@am__append_48 = $(src_dbus_glib_lib)
-@COND_GUI_TRUE@am__append_49 = src/dbus/glib/syncevo-dbus.pc
-@COND_GUI_TRUE@am__append_50 = \
+@COND_CORE_TRUE@@NEON_COMPATIBILITY_TRUE@am__append_45 = webdav_so_check
+@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@am__append_46 = $(DESTDIR)/$(src_backends_webdav_backenddir)/syncdav.so
+@COND_CORE_TRUE@am__append_47 = src/syncevolution
+@COND_CORE_FALSE@am__append_48 = -I$(top_srcdir)/$(SYNTHESIS_SUBDIR_INCLUDES)
+@COND_DOC_TRUE@am__append_49 = src/dbus/interfaces/syncevo-dbus-api-doc.html
+@COND_GUI_TRUE@am__append_50 = $(src_dbus_glib_lib)
+@COND_GUI_TRUE@am__append_51 = src/dbus/glib/syncevo-dbus.pc
+@COND_GUI_TRUE@am__append_52 = \
@COND_GUI_TRUE@ src/dbus/glib/syncevo-dbus.pc.in \
@COND_GUI_TRUE@ src/dbus/glib/syncevo-marshal.list \
@COND_GUI_TRUE@ src/dbus/glib/README
#pkgconfigdir is defined in $(top_srcdir)/setup-variables.am
-@COND_GUI_TRUE@am__append_51 = src/dbus/glib/syncevo-dbus.pc
-@COND_GUI_TRUE@am__append_52 = src/dbus/glib/test-syncevo-dbus
-@COND_GUI_TRUE@am__append_53 = $(src_dbus_glib_built_sources)
-@COND_GUI_TRUE@am__append_54 = $(src_dbus_glib_built_sources)
-@ENABLE_QT_DBUS_TRUE@am__append_55 = $(src_dbus_qt_libsyncevolution_qt_dbus_libraries)
-@ENABLE_QT_DBUS_TRUE@am__append_56 = $(src_dbus_qt_built_sources)
+@COND_GUI_TRUE@am__append_53 = src/dbus/glib/syncevo-dbus.pc
+@COND_GUI_TRUE@am__append_54 = src/dbus/glib/test-syncevo-dbus
+@COND_GUI_TRUE@am__append_55 = $(src_dbus_glib_built_sources)
+@COND_GUI_TRUE@am__append_56 = $(src_dbus_glib_built_sources)
@ENABLE_QT_DBUS_TRUE@am__append_57 = $(src_dbus_qt_libsyncevolution_qt_dbus_libraries)
-@ENABLE_QT_DBUS_TRUE@am__append_58 = src/dbus/qt/Makefile.in
-@ENABLE_QT_DBUS_TRUE@am__append_59 = $(src_dbus_qt_built_sources) \
+@ENABLE_QT_DBUS_TRUE@am__append_58 = $(src_dbus_qt_built_sources)
+@ENABLE_QT_DBUS_TRUE@am__append_59 = $(src_dbus_qt_libsyncevolution_qt_dbus_libraries)
+@ENABLE_QT_DBUS_TRUE@am__append_60 = src/dbus/qt/Makefile.in
+@ENABLE_QT_DBUS_TRUE@am__append_61 = $(src_dbus_qt_built_sources) \
@ENABLE_QT_DBUS_TRUE@ src/dbus/qt/stamp-server \
@ENABLE_QT_DBUS_TRUE@ src/dbus/qt/stamp-session \
@ENABLE_QT_DBUS_TRUE@ src/dbus/qt/stamp-connection
-@ENABLE_QT_DBUS_TRUE@am__append_60 = src/dbus/qt/syncevolution-qt-dbus.pc
-@ENABLE_QT_DBUS_TRUE@am__append_61 = \
+@ENABLE_QT_DBUS_TRUE@am__append_62 = src/dbus/qt/syncevolution-qt-dbus.pc
+@ENABLE_QT_DBUS_TRUE@am__append_63 = \
@ENABLE_QT_DBUS_TRUE@ src/dbus/qt/syncevolution-qt-dbus.pc.in
#pkgconfigdir is defined in $(top_srcdir)/setup-variables.am
-@ENABLE_QT_DBUS_TRUE@am__append_62 = src/dbus/qt/syncevolution-qt-dbus.pc
+@ENABLE_QT_DBUS_TRUE@am__append_64 = src/dbus/qt/syncevolution-qt-dbus.pc
# Session helper: syncevo-dbus-helper
-@COND_DBUS_TRUE@am__append_63 = \
+@COND_DBUS_TRUE@am__append_65 = \
@COND_DBUS_TRUE@ src/dbus/server/libsyncevodbusserver.la \
@COND_DBUS_TRUE@ src/dbus/server/libsyncevodbushelper.la
-@COND_DBUS_TRUE@am__append_64 = src/dbus/server/bluetooth_products.ini
-@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@am__append_65 = \
+@COND_DBUS_TRUE@am__append_66 = src/dbus/server/bluetooth_products.ini
+@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@am__append_67 = \
@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@ src/dbus/server/pim/view.cpp \
@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@ src/dbus/server/pim/full-view.cpp \
@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@ src/dbus/server/pim/filtered-view.cpp \
@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@ src/dbus/server/pim/folks.cpp \
@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@ src/dbus/server/pim/manager.cpp
-@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@am__append_66 = \
+@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@am__append_68 = \
@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@ src/dbus/server/pim/persona-details.h
-@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@am__append_67 = \
+@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@am__append_69 = \
@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@ src/dbus/server/pim/locale-factory-@DBUS_PIM_PLUGIN@.cpp
-@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@am__append_68 = $(DBUS_PIM_PLUGIN_LDFLAGS)
-@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@am__append_69 = $(FOLKS_LIBS) $(DBUS_PIM_PLUGIN_LIBS) $(PHONENUMBERS_LIBS)
-@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@am__append_70 = $(FOLKS_CFLAGS) $(DBUS_PIM_PLUGIN_CFLAGS) $(PHONENUMBERS_CFLAGS) $(DLT_CFLAGS)
+@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@am__append_70 = $(DBUS_PIM_PLUGIN_LDFLAGS)
+@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@am__append_71 = $(FOLKS_LIBS) $(DBUS_PIM_PLUGIN_LIBS) $(PHONENUMBERS_LIBS)
+@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@am__append_72 = $(FOLKS_CFLAGS) $(DBUS_PIM_PLUGIN_CFLAGS) $(PHONENUMBERS_CFLAGS) $(DLT_CFLAGS)
# Need to list all plugins here and not include the active one in the regular
# source list above, because "make dist" would only include the configured one.
-@COND_DBUS_TRUE@am__append_71 = \
+@COND_DBUS_TRUE@am__append_73 = \
@COND_DBUS_TRUE@ src/dbus/server/pim/locale-factory-boost.cpp
# Deal with .service, .desktop and startup script files.
-@COND_DBUS_TRUE@am__append_72 = \
+@COND_DBUS_TRUE@am__append_74 = \
@COND_DBUS_TRUE@ $(src_dbus_server_service_files) \
@COND_DBUS_TRUE@ $(src_dbus_server_desktop) \
@COND_DBUS_TRUE@ $(src_dbus_server_script)
-@COND_DBUS_TRUE@am__append_73 = $(src_dbus_server_script)
-@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@am__append_74 = \
+@COND_DBUS_TRUE@am__append_75 = $(src_dbus_server_script)
+@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@am__append_76 = \
@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@ src/dbus/server/pim/org._01.pim.contacts.service.in
-@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@@ENABLE_TESTING_TRUE@am__append_75 = \
+@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@@ENABLE_TESTING_TRUE@am__append_77 = \
@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@@ENABLE_TESTING_TRUE@ src/dbus/server/pim/testpim.py \
@COND_DBUS_PIM_TRUE@@COND_DBUS_TRUE@@ENABLE_TESTING_TRUE@ $(NOP)
-@COND_DBUS_TRUE@am__append_76 = \
+@COND_DBUS_TRUE@am__append_78 = \
@COND_DBUS_TRUE@ $(src_dbus_server_service_files_in) \
@COND_DBUS_TRUE@ $(src_dbus_server_script_in) \
@COND_DBUS_TRUE@ $(src_dbus_server_desktop_in)
-@COND_GTK2_TRUE@@COND_GUI_TRUE@am__append_77 = src/gtk-ui/README \
+@COND_GTK2_TRUE@@COND_GUI_TRUE@am__append_79 = src/gtk-ui/README \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ $(src_gtk_ui_applications_in_files)
# sync-ui: default GUI, could be plain GTK or Moblin UX
# sync-ui-moblin: Moblin UX
#
# The later two are built when --enable-gui=all was used.
-@COND_GTK2_TRUE@@COND_GUI_TRUE@am__append_78 = \
+@COND_GTK2_TRUE@@COND_GUI_TRUE@am__append_80 = \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ src/gtk-ui/sync-ui \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ src/gtk-ui/sync-ui-gtk \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ src/gtk-ui/sync-ui-moblin
-@COND_GTK2_TRUE@@COND_GUI_TRUE@am__append_79 = @GUI_PROGRAMS@
-@COND_GTK2_TRUE@@COND_GUI_TRUE@am__append_80 = \
+@COND_GTK2_TRUE@@COND_GUI_TRUE@am__append_81 = @GUI_PROGRAMS@
+@COND_GTK2_TRUE@@COND_GUI_TRUE@am__append_82 = \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ src/gtk-ui/sync-moblin.desktop \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ $(src_gtk_ui_applications_generated)
-@COND_GTK2_FALSE@@COND_GUI_TRUE@am__append_81 = src/gtk3-ui/README \
+@COND_GTK2_FALSE@@COND_GUI_TRUE@am__append_83 = src/gtk3-ui/README \
@COND_GTK2_FALSE@@COND_GUI_TRUE@ $(src_gtk3_ui_applications_in_files)
# sync-ui: default GUI, could be plain GTK or Moblin UX
# sync-ui-moblin: Moblin UX
#
# The later two are built when --enable-gui=all was used.
-@COND_GTK2_FALSE@@COND_GUI_TRUE@am__append_82 = \
+@COND_GTK2_FALSE@@COND_GUI_TRUE@am__append_84 = \
@COND_GTK2_FALSE@@COND_GUI_TRUE@ src/gtk3-ui/sync-ui \
@COND_GTK2_FALSE@@COND_GUI_TRUE@ src/gtk3-ui/sync-ui-gtk \
@COND_GTK2_FALSE@@COND_GUI_TRUE@ src/gtk3-ui/sync-ui-moblin
-@COND_GTK2_FALSE@@COND_GUI_TRUE@am__append_83 = @GUI_PROGRAMS@
-@COND_GTK2_FALSE@@COND_GUI_TRUE@am__append_84 = \
+@COND_GTK2_FALSE@@COND_GUI_TRUE@am__append_85 = @GUI_PROGRAMS@
+@COND_GTK2_FALSE@@COND_GUI_TRUE@am__append_86 = \
@COND_GTK2_FALSE@@COND_GUI_TRUE@ src/gtk3-ui/sync-moblin.desktop \
@COND_GTK2_FALSE@@COND_GUI_TRUE@ $(src_gtk3_ui_applications_generated)
-@COND_DBUS_TRUE@am__append_85 = src/syncevo-http-server
+@COND_DBUS_TRUE@am__append_87 = src/syncevo-http-server
# SYNCEVOLUTION_LDADD is defined in configure script.
-@ENABLE_MODULES_FALSE@am__append_86 = @SYNCSOURCES@
-@ENABLE_MODULES_FALSE@am__append_87 = @SYNCSOURCES@
+@ENABLE_MODULES_FALSE@am__append_88 = @SYNCSOURCES@
+@ENABLE_MODULES_FALSE@am__append_89 = @SYNCSOURCES@
# The files which register backends have to be compiled into
# "client-test" and "syncevolution" in order to pull in the
# When using modules the registration is done inside the
# module and the register file is unnecessary. However, they
# still need to be included in "make dist".
-@ENABLE_MODULES_TRUE@am__append_88 = $(BACKEND_REGISTRIES)
-@ENABLE_MODULES_FALSE@am__append_89 = $(BACKEND_REGISTRIES)
-@COND_DBUS_TRUE@am__append_90 = $(gdbus_build_dir)/libgdbussyncevo.la
-@COND_DBUS_TRUE@am__append_91 = $(gdbus_build_dir)/libgdbussyncevo.la
+@ENABLE_MODULES_TRUE@am__append_90 = $(BACKEND_REGISTRIES)
+@ENABLE_MODULES_FALSE@am__append_91 = $(BACKEND_REGISTRIES)
+
+# Force inclusion of our own icaltz-util.o into binaries even though
+# we do not call the icaltzutil_fetch_timezone directly ourself.
+# That way it is there if or when libical needs it.
+@ENABLE_ICALTZ_UTIL_TRUE@am__append_92 = -Wl,-usyncevo_fetch_timezone
+@COND_DBUS_TRUE@am__append_93 = $(gdbus_build_dir)/libgdbussyncevo.la
+@COND_DBUS_TRUE@am__append_94 = $(gdbus_build_dir)/libgdbussyncevo.la
# Do the linking here, as with all SyncEvolution executables.
# Sources are compiled in dbus/server.
# DBus Server
# syncevo-dbus-server's helper binary
-@COND_DBUS_TRUE@am__append_92 = src/syncevo-dbus-server \
+@COND_DBUS_TRUE@am__append_95 = src/syncevo-dbus-server \
@COND_DBUS_TRUE@ src/syncevo-dbus-helper
-@COND_DBUS_TRUE@am__append_93 = src/dbus/server/libsyncevodbushelper.la src/dbus/server/libsyncevodbusserver.la
+@COND_DBUS_TRUE@am__append_96 = src/dbus/server/libsyncevodbushelper.la src/dbus/server/libsyncevodbusserver.la
+@ENABLE_EVOLUTION_COMPATIBILITY_FALSE@am__append_97 = $(LIBICAL_LIBS)
# distribute test system?
# yes: install client-test and test files in testdir
-@ENABLE_TESTING_TRUE@am__append_94 = src/client-test
+@ENABLE_TESTING_TRUE@am__append_98 = src/client-test
# The "all" dependency causes a rebuild even if the actual input files
# haven't changed. If client-test is part of the regular targets built
# by "all", then it must not depend on all!
-@ENABLE_TESTING_FALSE@am__append_95 = src/client-test
-@ENABLE_TESTING_FALSE@am__append_96 = $(CLIENT_LIB_TEST_FILES)
-@ENABLE_TESTING_FALSE@am__append_97 = all
-@COND_CORE_TRUE@am__append_98 = test/abort-redirect.cpp \
+@ENABLE_TESTING_FALSE@am__append_99 = src/client-test
+@ENABLE_TESTING_FALSE@am__append_100 = $(CLIENT_LIB_TEST_FILES)
+@ENABLE_TESTING_FALSE@am__append_101 = all
+@COND_CORE_TRUE@am__append_102 = test/abort-redirect.cpp \
@COND_CORE_TRUE@ test/ClientTest.h test/ClientTestAssert.h \
@COND_CORE_TRUE@ test/ClientTest.cpp test/client-test-main.cpp \
@COND_CORE_TRUE@ test/test.h test/test.cpp test/COPYING \
@COND_CORE_TRUE@ $(wildcard test/testcases/*.patch)
# generic D-Bus client/server tests
-@COND_CORE_TRUE@@COND_DBUS_TRUE@am__append_99 = test/dbus-client-server
-@COND_CORE_TRUE@@COND_DBUS_TRUE@@ENABLE_UNIT_TESTS_TRUE@am__append_100 = test/test.cpp
-@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@am__append_101 = \
+@COND_CORE_TRUE@@COND_DBUS_TRUE@am__append_103 = test/dbus-client-server
+@COND_CORE_TRUE@@COND_DBUS_TRUE@@ENABLE_UNIT_TESTS_TRUE@am__append_104 = test/test.cpp
+@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@am__append_105 = \
@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@ test/__init__.py \
@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@ test/test-dbus.py \
@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@ test/testdbus.py \
# uses the right SyncEvolution without depending on the PATH.
# client-test should have been installed in testdir already as
# normal executable, see src.am.
-@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@am__append_102 = install-test-files
-@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@am__append_103 = uninstall-test-files
-@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@am__append_104 = \
+@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@am__append_106 = install-test-files
+@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@am__append_107 = uninstall-test-files
+@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@am__append_108 = \
@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@ test/Makefile \
@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@ $(NOP)
-@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@am__append_105 = \
+@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@am__append_109 = \
@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@ test/test-dbus/templates/templates/clients/phone/nokia/S40/7210c.ini \
@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@ test/test-dbus/templates/templates/clients/SyncEvolution.ini \
@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@ test/test-dbus/auto-sync/config/syncevolution/.internal.ini \
@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@ test/test-dbus/reports/cache/syncevolution/dummy__test-2009-11-18-12-56/status.ini \
@COND_CORE_TRUE@@ENABLE_TESTING_TRUE@ $(NOP)
-@COND_CORE_TRUE@am__append_106 = po
-@COND_CORE_TRUE@am__append_107 = README NEWS COPYING $(TEST_README_FILES) test/syncevo-http-server-logging.conf
-@COND_CORE_TRUE@am__append_108 = $(disted_docs)
-@COND_CORE_TRUE@am__append_109 = $(disted_docs)
-@COND_CORE_TRUE@@COND_HTML_README_TRUE@am__append_110 = README.html
+@COND_CORE_TRUE@am__append_110 = po
+@COND_CORE_TRUE@am__append_111 = README NEWS COPYING $(TEST_README_FILES) test/syncevo-http-server-logging.conf
+@COND_CORE_TRUE@am__append_112 = $(disted_docs)
+@COND_CORE_TRUE@am__append_113 = $(disted_docs)
+@COND_CORE_TRUE@@COND_HTML_README_TRUE@am__append_114 = README.html
# do not distribute in tarball.
-@COND_CORE_TRUE@@COND_HTML_README_TRUE@am__append_111 = README.html
-@COND_CORE_TRUE@@COND_MAN_PAGES_TRUE@am__append_112 = syncevolution.1
+@COND_CORE_TRUE@@COND_HTML_README_TRUE@am__append_115 = README.html
+@COND_CORE_TRUE@@COND_MAN_PAGES_TRUE@am__append_116 = syncevolution.1
# check .so (relevant for modular builds) and main syncevolution binary
# (relevant in that case and for static builds) for dependencies on
# problematic libraries and symbols
#
-# Exclude *-2.so, these are EXTRA_BACKENDS for which other rules apply.
+# Exclude *-[0-9].so, these are EXTRA_BACKENDS for which other rules apply.
#
# ical_strdup is an exception because it is in SyncEvolution.
-@ENABLE_EVOLUTION_COMPATIBILITY_TRUE@am__append_113 = toplevel_so_check
+@ENABLE_EVOLUTION_COMPATIBILITY_TRUE@am__append_117 = toplevel_so_check
# libneon is intentionally not linked against, to choose between
# GNUTLS and OpenSSL at runtime.
# Allow undefined references to libstdcxx. This happens when
# adding backends compiled on more recent Linux distros into
# the release archive.
-@NEON_COMPATIBILITY_TRUE@am__append_114 = -e 'symbol ne_.*syncdav.so' \
+@NEON_COMPATIBILITY_TRUE@am__append_118 = -e 'symbol ne_.*syncdav.so' \
@NEON_COMPATIBILITY_TRUE@ -e '@GLIBCXX_[^ ]* used by'
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@ENABLE_GNOME_BLUETOOTH_PANEL_TRUE@ $(src_gnome_bluetoothdir)
@COND_CORE_TRUE@@ENABLE_UNIT_TESTS_TRUE@am__DEPENDENCIES_4 = \
@COND_CORE_TRUE@@ENABLE_UNIT_TESTS_TRUE@ $(am__DEPENDENCIES_1)
-@COND_CORE_TRUE@@ENABLE_OBEX_TRUE@am__DEPENDENCIES_5 = \
+@COND_CORE_TRUE@@ENABLE_EVOLUTION_COMPATIBILITY_FALSE@@ENABLE_ICALTZ_UTIL_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1)
+@COND_CORE_TRUE@@ENABLE_OBEX_TRUE@am__DEPENDENCIES_6 = \
@COND_CORE_TRUE@@ENABLE_OBEX_TRUE@ $(am__DEPENDENCIES_1)
-@COND_CORE_TRUE@@ENABLE_BLUETOOTH_TRUE@@ENABLE_OBEX_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1)
-@COND_CORE_TRUE@am__DEPENDENCIES_7 = \
+@COND_CORE_TRUE@@ENABLE_BLUETOOTH_TRUE@@ENABLE_OBEX_TRUE@am__DEPENDENCIES_7 = $(am__DEPENDENCIES_1)
+@COND_CORE_TRUE@am__DEPENDENCIES_8 = \
@COND_CORE_TRUE@ $(gdbus_build_dir)/libgdbussyncevo.la \
@COND_CORE_TRUE@ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_5) \
-@COND_CORE_TRUE@ $(am__DEPENDENCIES_6)
+@COND_CORE_TRUE@ $(am__DEPENDENCIES_6) $(am__DEPENDENCIES_7)
am__src_syncevo_libsyncevolution_la_SOURCES_DIST = \
src/syncevo/GeeSupport.h src/syncevo/GValueSupport.h \
src/syncevo/EDSClient.h src/syncevo/EDSClient.cpp \
src/syncevo/MapSyncSource.h src/syncevo/MapSyncSource.cpp \
src/syncevo/TrackingSyncSource.h \
src/syncevo/TrackingSyncSource.cpp src/syncevo/icalstrdup.c \
- src/syncevo/icalstrdup.h src/syncevo/ObexTransportAgent.h \
+ src/syncevo/icalstrdup.h src/syncevo/icaltz-util.c \
+ src/syncevo/icaltz-util.h src/syncevo/ObexTransportAgent.h \
src/syncevo/ObexTransportAgent.cpp
@COND_CORE_TRUE@@ENABLE_ICAL_TRUE@am__objects_28 = src/syncevo/src_syncevo_libsyncevolution_la-icalstrdup.lo
-@COND_CORE_TRUE@@ENABLE_OBEX_TRUE@am__objects_29 = src/syncevo/src_syncevo_libsyncevolution_la-ObexTransportAgent.lo
-@COND_CORE_TRUE@am__objects_30 = src/syncevo/src_syncevo_libsyncevolution_la-EDSClient.lo \
+@COND_CORE_TRUE@@ENABLE_ICALTZ_UTIL_TRUE@am__objects_29 = src/syncevo/src_syncevo_libsyncevolution_la-icaltz-util.lo
+@COND_CORE_TRUE@@ENABLE_OBEX_TRUE@am__objects_30 = src/syncevo/src_syncevo_libsyncevolution_la-ObexTransportAgent.lo
+@COND_CORE_TRUE@am__objects_31 = src/syncevo/src_syncevo_libsyncevolution_la-EDSClient.lo \
@COND_CORE_TRUE@ src/syncevo/src_syncevo_libsyncevolution_la-IdentityProvider.lo \
@COND_CORE_TRUE@ src/syncevo/src_syncevo_libsyncevolution_la-ConfigFilter.lo \
@COND_CORE_TRUE@ src/syncevo/src_syncevo_libsyncevolution_la-ConfigNode.lo \
@COND_CORE_TRUE@ src/syncevo/src_syncevo_libsyncevolution_la-FileConfigTree.lo \
@COND_CORE_TRUE@ src/syncevo/src_syncevo_libsyncevolution_la-MapSyncSource.lo \
@COND_CORE_TRUE@ src/syncevo/src_syncevo_libsyncevolution_la-TrackingSyncSource.lo \
-@COND_CORE_TRUE@ $(am__objects_28) $(am__objects_29)
-@COND_CORE_TRUE@am_src_syncevo_libsyncevolution_la_OBJECTS = \
+@COND_CORE_TRUE@ $(am__objects_28) $(am__objects_29) \
@COND_CORE_TRUE@ $(am__objects_30)
+@COND_CORE_TRUE@am_src_syncevo_libsyncevolution_la_OBJECTS = \
+@COND_CORE_TRUE@ $(am__objects_31)
@COND_CORE_TRUE@nodist_src_syncevo_libsyncevolution_la_OBJECTS = src/syncevo/src_syncevo_libsyncevolution_la-SyncEvolutionXML.lo
src_syncevo_libsyncevolution_la_OBJECTS = \
$(am_src_syncevo_libsyncevolution_la_OBJECTS) \
am_src_abort_redirect_OBJECTS = \
test/src_abort_redirect-abort-redirect.$(OBJEXT)
src_abort_redirect_OBJECTS = $(am_src_abort_redirect_OBJECTS)
-am__DEPENDENCIES_8 = $(am__DEPENDENCIES_1)
-am__DEPENDENCIES_9 = $(am__DEPENDENCIES_8) \
+am__DEPENDENCIES_9 = $(am__DEPENDENCIES_1)
+am__DEPENDENCIES_10 = $(am__DEPENDENCIES_9) \
src/syncevo/libsyncevolution.la $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
$(src_abort_redirect_CXXFLAGS) $(CXXFLAGS) \
$(src_abort_redirect_LDFLAGS) $(LDFLAGS) -o $@
am__src_client_test_SOURCES_DIST = src/client-test-app.cpp \
- test/ClientTest.cpp test/ClientTest.h test/ClientTestAssert.h \
- test/client-test-main.cpp \
+ test/ClientTest.cpp test/IcalTest.cpp test/ClientTest.h \
+ test/ClientTestAssert.h test/client-test-main.cpp \
src/backends/activesync/ActiveSyncSourceRegister.cpp \
src/backends/addressbook/AddressBookSourceRegister.cpp \
src/backends/akonadi/AkonadiSyncSourceRegister.cpp \
src/backends/sqlite/SQLiteContactSourceRegister.cpp \
src/backends/webdav/WebDAVSourceRegister.cpp \
src/backends/xmlrpc/XMLRPCSyncSourceRegister.cpp
-@COND_CORE_TRUE@am__objects_31 = src/backends/activesync/src_client_test-ActiveSyncSourceRegister.$(OBJEXT) \
+@COND_CORE_TRUE@am__objects_32 = src/backends/activesync/src_client_test-ActiveSyncSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/addressbook/src_client_test-AddressBookSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/akonadi/src_client_test-AkonadiSyncSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/evolution/src_client_test-EvolutionCalendarSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/sqlite/src_client_test-SQLiteContactSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/webdav/src_client_test-WebDAVSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/xmlrpc/src_client_test-XMLRPCSyncSourceRegister.$(OBJEXT)
-@ENABLE_MODULES_FALSE@am__objects_32 = $(am__objects_31)
-am__objects_33 = $(am__objects_32)
+@ENABLE_MODULES_FALSE@am__objects_33 = $(am__objects_32)
+am__objects_34 = $(am__objects_33)
am_src_client_test_OBJECTS = \
src/src_client_test-client-test-app.$(OBJEXT) \
test/src_client_test-ClientTest.$(OBJEXT) \
+ test/src_client_test-IcalTest.$(OBJEXT) \
test/src_client_test-client-test-main.$(OBJEXT) \
- $(am__objects_33)
-am__objects_34 = $(am__objects_19)
-@ENABLE_TESTING_FALSE@am__objects_35 = $(am__objects_34)
+ $(am__objects_34)
+am__objects_35 = $(am__objects_19)
+@ENABLE_TESTING_FALSE@am__objects_36 = $(am__objects_35)
nodist_src_client_test_OBJECTS = test/src_client_test-test.$(OBJEXT) \
- $(am__objects_35)
+ $(am__objects_36)
src_client_test_OBJECTS = $(am_src_client_test_OBJECTS) \
$(nodist_src_client_test_OBJECTS)
+@ENABLE_EVOLUTION_COMPATIBILITY_FALSE@am__DEPENDENCIES_11 = \
+@ENABLE_EVOLUTION_COMPATIBILITY_FALSE@ $(am__DEPENDENCIES_1)
src_client_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
$(src_client_test_CXXFLAGS) $(CXXFLAGS) \
src/gtk-ui/sync-config-widget.c \
src/gtk-ui/sync-config-widget.h src/gtk-ui/gtkinfobar.c \
src/gtk-ui/gtkinfobar.h
-@COND_GTK2_TRUE@@COND_GUI_TRUE@am__objects_36 = src/gtk-ui/src_gtk_ui_sync_ui_gtk-main.$(OBJEXT) \
+@COND_GTK2_TRUE@@COND_GUI_TRUE@am__objects_37 = src/gtk-ui/src_gtk_ui_sync_ui_gtk-main.$(OBJEXT) \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ src/gtk-ui/src_gtk_ui_sync_ui_gtk-sync-ui.$(OBJEXT) \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ src/gtk-ui/src_gtk_ui_sync_ui_gtk-sync-ui-config.$(OBJEXT) \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ src/gtk-ui/src_gtk_ui_sync_ui_gtk-mux-frame.$(OBJEXT) \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ src/gtk-ui/src_gtk_ui_sync_ui_gtk-sync-config-widget.$(OBJEXT) \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ src/gtk-ui/src_gtk_ui_sync_ui_gtk-gtkinfobar.$(OBJEXT)
@COND_GTK2_TRUE@@COND_GUI_TRUE@am_src_gtk_ui_sync_ui_gtk_OBJECTS = \
-@COND_GTK2_TRUE@@COND_GUI_TRUE@ $(am__objects_36)
+@COND_GTK2_TRUE@@COND_GUI_TRUE@ $(am__objects_37)
src_gtk_ui_sync_ui_gtk_OBJECTS = $(am_src_gtk_ui_sync_ui_gtk_OBJECTS)
-@COND_GTK2_TRUE@@COND_GUI_TRUE@am__DEPENDENCIES_10 = \
+@COND_GTK2_TRUE@@COND_GUI_TRUE@am__DEPENDENCIES_12 = \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ $(am__DEPENDENCIES_1) \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ $(am__DEPENDENCIES_1) \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ $(top_builddir)/src/dbus/glib/libsyncevo-dbus.la
@COND_GTK2_TRUE@@COND_GUI_TRUE@src_gtk_ui_sync_ui_gtk_DEPENDENCIES = \
-@COND_GTK2_TRUE@@COND_GUI_TRUE@ $(am__DEPENDENCIES_10)
+@COND_GTK2_TRUE@@COND_GUI_TRUE@ $(am__DEPENDENCIES_12)
src_gtk_ui_sync_ui_gtk_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(src_gtk_ui_sync_ui_gtk_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
src/gtk-ui/sync-config-widget.c \
src/gtk-ui/sync-config-widget.h src/gtk-ui/gtkinfobar.c \
src/gtk-ui/gtkinfobar.h
-@COND_GTK2_TRUE@@COND_GUI_TRUE@am__objects_37 = src/gtk-ui/src_gtk_ui_sync_ui_moblin-main.$(OBJEXT) \
+@COND_GTK2_TRUE@@COND_GUI_TRUE@am__objects_38 = src/gtk-ui/src_gtk_ui_sync_ui_moblin-main.$(OBJEXT) \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ src/gtk-ui/src_gtk_ui_sync_ui_moblin-sync-ui.$(OBJEXT) \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ src/gtk-ui/src_gtk_ui_sync_ui_moblin-sync-ui-config.$(OBJEXT) \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ src/gtk-ui/src_gtk_ui_sync_ui_moblin-mux-frame.$(OBJEXT) \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ src/gtk-ui/src_gtk_ui_sync_ui_moblin-sync-config-widget.$(OBJEXT) \
@COND_GTK2_TRUE@@COND_GUI_TRUE@ src/gtk-ui/src_gtk_ui_sync_ui_moblin-gtkinfobar.$(OBJEXT)
@COND_GTK2_TRUE@@COND_GUI_TRUE@am_src_gtk_ui_sync_ui_moblin_OBJECTS = \
-@COND_GTK2_TRUE@@COND_GUI_TRUE@ $(am__objects_37)
+@COND_GTK2_TRUE@@COND_GUI_TRUE@ $(am__objects_38)
src_gtk_ui_sync_ui_moblin_OBJECTS = \
$(am_src_gtk_ui_sync_ui_moblin_OBJECTS)
@COND_GTK2_TRUE@@COND_GUI_TRUE@src_gtk_ui_sync_ui_moblin_DEPENDENCIES = \
-@COND_GTK2_TRUE@@COND_GUI_TRUE@ $(am__DEPENDENCIES_10)
+@COND_GTK2_TRUE@@COND_GUI_TRUE@ $(am__DEPENDENCIES_12)
src_gtk_ui_sync_ui_moblin_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(src_gtk_ui_sync_ui_moblin_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
src/gtk3-ui/mux-frame.c src/gtk3-ui/mux-frame.h \
src/gtk3-ui/sync-config-widget.c \
src/gtk3-ui/sync-config-widget.h
-@COND_GTK2_FALSE@@COND_GUI_TRUE@am__objects_38 = src/gtk3-ui/src_gtk3_ui_sync_ui_gtk-main.$(OBJEXT) \
+@COND_GTK2_FALSE@@COND_GUI_TRUE@am__objects_39 = src/gtk3-ui/src_gtk3_ui_sync_ui_gtk-main.$(OBJEXT) \
@COND_GTK2_FALSE@@COND_GUI_TRUE@ src/gtk3-ui/src_gtk3_ui_sync_ui_gtk-sync-ui.$(OBJEXT) \
@COND_GTK2_FALSE@@COND_GUI_TRUE@ src/gtk3-ui/src_gtk3_ui_sync_ui_gtk-sync-ui-config.$(OBJEXT) \
@COND_GTK2_FALSE@@COND_GUI_TRUE@ src/gtk3-ui/src_gtk3_ui_sync_ui_gtk-mux-frame.$(OBJEXT) \
@COND_GTK2_FALSE@@COND_GUI_TRUE@ src/gtk3-ui/src_gtk3_ui_sync_ui_gtk-sync-config-widget.$(OBJEXT)
@COND_GTK2_FALSE@@COND_GUI_TRUE@am_src_gtk3_ui_sync_ui_gtk_OBJECTS = \
-@COND_GTK2_FALSE@@COND_GUI_TRUE@ $(am__objects_38)
+@COND_GTK2_FALSE@@COND_GUI_TRUE@ $(am__objects_39)
src_gtk3_ui_sync_ui_gtk_OBJECTS = \
$(am_src_gtk3_ui_sync_ui_gtk_OBJECTS)
-@COND_GTK2_FALSE@@COND_GUI_TRUE@am__DEPENDENCIES_11 = \
+@COND_GTK2_FALSE@@COND_GUI_TRUE@am__DEPENDENCIES_13 = \
@COND_GTK2_FALSE@@COND_GUI_TRUE@ $(am__DEPENDENCIES_1) \
@COND_GTK2_FALSE@@COND_GUI_TRUE@ $(am__DEPENDENCIES_1) \
@COND_GTK2_FALSE@@COND_GUI_TRUE@ $(top_builddir)/src/dbus/glib/libsyncevo-dbus.la
@COND_GTK2_FALSE@@COND_GUI_TRUE@src_gtk3_ui_sync_ui_gtk_DEPENDENCIES = \
-@COND_GTK2_FALSE@@COND_GUI_TRUE@ $(am__DEPENDENCIES_11)
+@COND_GTK2_FALSE@@COND_GUI_TRUE@ $(am__DEPENDENCIES_13)
src_gtk3_ui_sync_ui_gtk_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(src_gtk3_ui_sync_ui_gtk_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
src/gtk3-ui/mux-frame.c src/gtk3-ui/mux-frame.h \
src/gtk3-ui/sync-config-widget.c \
src/gtk3-ui/sync-config-widget.h
-@COND_GTK2_FALSE@@COND_GUI_TRUE@am__objects_39 = src/gtk3-ui/src_gtk3_ui_sync_ui_moblin-main.$(OBJEXT) \
+@COND_GTK2_FALSE@@COND_GUI_TRUE@am__objects_40 = src/gtk3-ui/src_gtk3_ui_sync_ui_moblin-main.$(OBJEXT) \
@COND_GTK2_FALSE@@COND_GUI_TRUE@ src/gtk3-ui/src_gtk3_ui_sync_ui_moblin-sync-ui.$(OBJEXT) \
@COND_GTK2_FALSE@@COND_GUI_TRUE@ src/gtk3-ui/src_gtk3_ui_sync_ui_moblin-sync-ui-config.$(OBJEXT) \
@COND_GTK2_FALSE@@COND_GUI_TRUE@ src/gtk3-ui/src_gtk3_ui_sync_ui_moblin-mux-frame.$(OBJEXT) \
@COND_GTK2_FALSE@@COND_GUI_TRUE@ src/gtk3-ui/src_gtk3_ui_sync_ui_moblin-sync-config-widget.$(OBJEXT)
@COND_GTK2_FALSE@@COND_GUI_TRUE@am_src_gtk3_ui_sync_ui_moblin_OBJECTS = \
-@COND_GTK2_FALSE@@COND_GUI_TRUE@ $(am__objects_39)
+@COND_GTK2_FALSE@@COND_GUI_TRUE@ $(am__objects_40)
src_gtk3_ui_sync_ui_moblin_OBJECTS = \
$(am_src_gtk3_ui_sync_ui_moblin_OBJECTS)
@COND_GTK2_FALSE@@COND_GUI_TRUE@src_gtk3_ui_sync_ui_moblin_DEPENDENCIES = \
-@COND_GTK2_FALSE@@COND_GUI_TRUE@ $(am__DEPENDENCIES_11)
+@COND_GTK2_FALSE@@COND_GUI_TRUE@ $(am__DEPENDENCIES_13)
src_gtk3_ui_sync_ui_moblin_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(src_gtk3_ui_sync_ui_moblin_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
src/backends/sqlite/SQLiteContactSourceRegister.cpp \
src/backends/webdav/WebDAVSourceRegister.cpp \
src/backends/xmlrpc/XMLRPCSyncSourceRegister.cpp
-@COND_CORE_TRUE@am__objects_40 = src/backends/activesync/src_syncevo_dbus_helper-ActiveSyncSourceRegister.$(OBJEXT) \
+@COND_CORE_TRUE@am__objects_41 = src/backends/activesync/src_syncevo_dbus_helper-ActiveSyncSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/addressbook/src_syncevo_dbus_helper-AddressBookSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/akonadi/src_syncevo_dbus_helper-AkonadiSyncSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/evolution/src_syncevo_dbus_helper-EvolutionCalendarSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/sqlite/src_syncevo_dbus_helper-SQLiteContactSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/webdav/src_syncevo_dbus_helper-WebDAVSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/xmlrpc/src_syncevo_dbus_helper-XMLRPCSyncSourceRegister.$(OBJEXT)
-@ENABLE_MODULES_FALSE@am__objects_41 = $(am__objects_40)
-am__objects_42 = $(am__objects_41)
+@ENABLE_MODULES_FALSE@am__objects_42 = $(am__objects_41)
+am__objects_43 = $(am__objects_42)
@COND_DBUS_TRUE@am_src_syncevo_dbus_helper_OBJECTS = \
-@COND_DBUS_TRUE@ $(am__objects_42)
+@COND_DBUS_TRUE@ $(am__objects_43)
@COND_DBUS_TRUE@@ENABLE_UNIT_TESTS_TRUE@nodist_src_syncevo_dbus_helper_OBJECTS = test/src_syncevo_dbus_helper-test.$(OBJEXT)
src_syncevo_dbus_helper_OBJECTS = \
$(am_src_syncevo_dbus_helper_OBJECTS) \
src/backends/sqlite/SQLiteContactSourceRegister.cpp \
src/backends/webdav/WebDAVSourceRegister.cpp \
src/backends/xmlrpc/XMLRPCSyncSourceRegister.cpp
-@COND_CORE_TRUE@am__objects_43 = src/backends/activesync/src_syncevo_dbus_server-ActiveSyncSourceRegister.$(OBJEXT) \
+@COND_CORE_TRUE@am__objects_44 = src/backends/activesync/src_syncevo_dbus_server-ActiveSyncSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/addressbook/src_syncevo_dbus_server-AddressBookSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/akonadi/src_syncevo_dbus_server-AkonadiSyncSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/evolution/src_syncevo_dbus_server-EvolutionCalendarSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/sqlite/src_syncevo_dbus_server-SQLiteContactSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/webdav/src_syncevo_dbus_server-WebDAVSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/xmlrpc/src_syncevo_dbus_server-XMLRPCSyncSourceRegister.$(OBJEXT)
-@ENABLE_MODULES_FALSE@am__objects_44 = $(am__objects_43)
-am__objects_45 = $(am__objects_44)
+@ENABLE_MODULES_FALSE@am__objects_45 = $(am__objects_44)
+am__objects_46 = $(am__objects_45)
@COND_DBUS_TRUE@am_src_syncevo_dbus_server_OBJECTS = \
-@COND_DBUS_TRUE@ $(am__objects_45)
+@COND_DBUS_TRUE@ $(am__objects_46)
@COND_DBUS_TRUE@@ENABLE_UNIT_TESTS_TRUE@nodist_src_syncevo_dbus_server_OBJECTS = test/src_syncevo_dbus_server-test.$(OBJEXT)
src_syncevo_dbus_server_OBJECTS = \
$(am_src_syncevo_dbus_server_OBJECTS) \
src/backends/sqlite/SQLiteContactSourceRegister.cpp \
src/backends/webdav/WebDAVSourceRegister.cpp \
src/backends/xmlrpc/XMLRPCSyncSourceRegister.cpp
-@COND_CORE_TRUE@am__objects_46 = src/backends/activesync/src_syncevo_local_sync-ActiveSyncSourceRegister.$(OBJEXT) \
+@COND_CORE_TRUE@am__objects_47 = src/backends/activesync/src_syncevo_local_sync-ActiveSyncSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/addressbook/src_syncevo_local_sync-AddressBookSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/akonadi/src_syncevo_local_sync-AkonadiSyncSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/evolution/src_syncevo_local_sync-EvolutionCalendarSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/sqlite/src_syncevo_local_sync-SQLiteContactSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/webdav/src_syncevo_local_sync-WebDAVSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/xmlrpc/src_syncevo_local_sync-XMLRPCSyncSourceRegister.$(OBJEXT)
-@ENABLE_MODULES_FALSE@am__objects_47 = $(am__objects_46)
-am__objects_48 = $(am__objects_47)
+@ENABLE_MODULES_FALSE@am__objects_48 = $(am__objects_47)
+am__objects_49 = $(am__objects_48)
am_src_syncevo_local_sync_OBJECTS = \
src/src_syncevo_local_sync-syncevo-local-sync.$(OBJEXT) \
- $(am__objects_48)
+ $(am__objects_49)
@ENABLE_UNIT_TESTS_TRUE@nodist_src_syncevo_local_sync_OBJECTS = test/src_syncevo_local_sync-test.$(OBJEXT)
src_syncevo_local_sync_OBJECTS = $(am_src_syncevo_local_sync_OBJECTS) \
$(nodist_src_syncevo_local_sync_OBJECTS)
src/backends/sqlite/SQLiteContactSourceRegister.cpp \
src/backends/webdav/WebDAVSourceRegister.cpp \
src/backends/xmlrpc/XMLRPCSyncSourceRegister.cpp
-@COND_CORE_TRUE@am__objects_49 = src/backends/activesync/src_syncevolution-ActiveSyncSourceRegister.$(OBJEXT) \
+@COND_CORE_TRUE@am__objects_50 = src/backends/activesync/src_syncevolution-ActiveSyncSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/addressbook/src_syncevolution-AddressBookSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/akonadi/src_syncevolution-AkonadiSyncSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/evolution/src_syncevolution-EvolutionCalendarSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/sqlite/src_syncevolution-SQLiteContactSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/webdav/src_syncevolution-WebDAVSourceRegister.$(OBJEXT) \
@COND_CORE_TRUE@ src/backends/xmlrpc/src_syncevolution-XMLRPCSyncSourceRegister.$(OBJEXT)
-@ENABLE_MODULES_FALSE@am__objects_50 = $(am__objects_49)
-am__objects_51 = $(am__objects_50)
+@ENABLE_MODULES_FALSE@am__objects_51 = $(am__objects_50)
+am__objects_52 = $(am__objects_51)
am_src_syncevolution_OBJECTS = \
src/src_syncevolution-syncevolution.$(OBJEXT) \
- $(am__objects_51)
+ $(am__objects_52)
@ENABLE_UNIT_TESTS_TRUE@nodist_src_syncevolution_OBJECTS = \
@ENABLE_UNIT_TESTS_TRUE@ test/src_syncevolution-test.$(OBJEXT)
src_syncevolution_OBJECTS = $(am_src_syncevolution_OBJECTS) \
$(src_syncevolution_LDFLAGS) $(LDFLAGS) -o $@
am__test_dbus_client_server_SOURCES_DIST = \
test/dbus-client-server.cpp test/test.cpp
-@COND_CORE_TRUE@@COND_DBUS_TRUE@@ENABLE_UNIT_TESTS_TRUE@am__objects_52 = test/test_dbus_client_server-test.$(OBJEXT)
+@COND_CORE_TRUE@@COND_DBUS_TRUE@@ENABLE_UNIT_TESTS_TRUE@am__objects_53 = test/test_dbus_client_server-test.$(OBJEXT)
@COND_CORE_TRUE@@COND_DBUS_TRUE@am_test_dbus_client_server_OBJECTS = test/test_dbus_client_server-dbus-client-server.$(OBJEXT) \
-@COND_CORE_TRUE@@COND_DBUS_TRUE@ $(am__objects_52)
+@COND_CORE_TRUE@@COND_DBUS_TRUE@ $(am__objects_53)
test_dbus_client_server_OBJECTS = \
$(am_test_dbus_client_server_OBJECTS)
test_dbus_client_server_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
STRIP = @STRIP@
SYNCEVOLUTION_CFLAGS = @SYNCEVOLUTION_CFLAGS@
SYNCEVOLUTION_CXXFLAGS = @SYNCEVOLUTION_CXXFLAGS@
-SYNCEVOLUTION_LDADD = @SYNCEVOLUTION_LDADD@ $(am__append_86)
+SYNCEVOLUTION_LDADD = @SYNCEVOLUTION_LDADD@ $(am__append_88)
SYNCEVOLUTION_LIBS = @SYNCEVOLUTION_LIBS@
SYNCEVOLUTION_LOCALEDIR = @SYNCEVOLUTION_LOCALEDIR@
SYNCEVO_DBUS_SERVER_ARGS = @SYNCEVO_DBUS_SERVER_ARGS@
top_srcdir = @top_srcdir@
# clean variables
-CLEANFILES = $(am__append_26) $(src_dbus_interfaces_built_sources) \
- src/dbus/interfaces/.stamp $(NONE) $(am__append_54) \
- $(am__append_59) $(am__append_72) $(am__append_80) \
- $(am__append_84) src/libstdc++.a src/client-test \
+CLEANFILES = $(am__append_28) $(src_dbus_interfaces_built_sources) \
+ src/dbus/interfaces/.stamp $(NONE) $(am__append_56) \
+ $(am__append_61) $(am__append_74) $(am__append_82) \
+ $(am__append_86) src/libstdc++.a src/client-test \
$(CLIENT_LIB_TEST_FILES) src/syncevo-http-server \
src/syncevo-phone-config src/synclog2html \
src/ClientTest.cpp.html src/abort-redirect.log \
README.patched.rst syncevolution.1 README README.html
-DISTCLEANFILES = $(am__append_25) $(am__append_49) $(am__append_60) \
+DISTCLEANFILES = $(am__append_27) $(am__append_51) $(am__append_62) \
src/synccompare src/synthesis-includes/Makefile
-MAINTAINERCLEANFILES = $(am__append_6) $(am__append_58) Makefile.in \
+MAINTAINERCLEANFILES = $(am__append_6) $(am__append_60) Makefile.in \
config.h.in config.guess config.sub configure depcomp \
install-sh ltmain.sh missing mkinstalldirs
-MOSTLYCLEANFILES = $(am__append_33) $(am__append_57)
+MOSTLYCLEANFILES = $(am__append_35) $(am__append_59)
# standard arch dependent pkg-config dir
pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = $(am__append_24) $(am__append_51) $(am__append_62)
+pkgconfig_DATA = $(am__append_26) $(am__append_53) $(am__append_64)
# Install test suite (client-test, test-dbus.py, testpim.py, etc.).
testparentdir = $(libdir)/syncevolution
# Must end in "/test" so that we can use nobase_testparent_DATA=test/...
testdir = $(testparentdir)/test
-test_DATA = $(am__append_104)
+test_DATA = $(am__append_108)
nobase_test_DATA =
-test_SCRIPTS = $(am__append_75) $(am__append_101)
-nobase_testparent_DATA = $(am__append_105)
+test_SCRIPTS = $(am__append_77) $(am__append_105)
+nobase_testparent_DATA = $(am__append_109)
# standard variables with standard prefixes
-dist_doc_DATA = $(am__append_109)
+dist_doc_DATA = $(am__append_113)
dist_noinst_DATA = $(am__append_9) $(am__append_14) \
src/dbus/interfaces/spec-strip-docs.xsl \
src/dbus/interfaces/spec-to-docbook.xsl \
src/dbus/interfaces/syncevo-connection-full.xml \
src/dbus/interfaces/syncevo-server-full.xml \
src/dbus/interfaces/syncevo-session-full.xml \
- src/dbus/interfaces/README $(am__append_50) $(am__append_61) \
- $(am__append_76) $(am__append_77) $(am__append_81) \
+ src/dbus/interfaces/README $(am__append_52) $(am__append_63) \
+ $(am__append_78) $(am__append_79) $(am__append_83) \
src/shlibs.local src/synthesis-includes/Makefile.am \
- src/synthesis-includes/Makefile.in $(am__append_88) \
- $(am__append_98) HACKING LICENSE.txt LICENSE.LGPL-21 \
+ src/synthesis-includes/Makefile.in $(am__append_90) \
+ $(am__append_102) HACKING LICENSE.txt LICENSE.LGPL-21 \
README.rst description autogen.sh Doxyfile po/LINGUAS.README
-dist_pkgdata_DATA = $(am__append_64)
-doc_DATA = $(am__append_47) $(am__append_111)
+dist_pkgdata_DATA = $(am__append_66)
+doc_DATA = $(am__append_49) $(am__append_115)
# generate syntax-highlighted version of ClientTest.cpp for HTML
# version of .log test results
nodist_noinst_DATA = src/ClientTest.cpp.html
lib_LTLIBRARIES = $(am__append_4) $(am__append_10) $(am__append_17) \
- $(am__append_48) $(am__append_55)
-noinst_LTLIBRARIES = $(am__append_5) $(am__append_11) $(am__append_34) \
- $(am__append_63)
+ $(am__append_50) $(am__append_57)
+noinst_LTLIBRARIES = $(am__append_5) $(am__append_11) $(am__append_36) \
+ $(am__append_65)
# helper script for testing
-bin_SCRIPTS = $(am__append_42) src/synclog2html
+bin_SCRIPTS = $(am__append_44) src/synclog2html
dist_noinst_SCRIPTS = build/gen-git-version.sh build/source2html.py \
- $(am__append_30)
-libexec_SCRIPTS = $(am__append_73)
-nodist_bin_SCRIPTS = $(am__append_85) src/syncevo-phone-config
+ $(am__append_32)
+libexec_SCRIPTS = $(am__append_75)
+nodist_bin_SCRIPTS = $(am__append_87) src/syncevo-phone-config
# other
# found in a parent directory. However, these files are needed
# later on during the recursive libsynthesis configure+make.
all_dist_hooks = src_dist_hook dot_dist_hook
-all_install_exec_hooks = $(am__append_102)
-all_uninstall_hooks = $(am__append_103)
+all_install_exec_hooks = $(am__append_106)
+all_uninstall_hooks = $(am__append_107)
# Check that no executable or shared object depends on symbols in
# libraries that it does not link against. Unnecessarily linking
# against libs is okay, that can be caught and fixed by
# -Wl,--as-needed. Depends on dpkg-shlibdeps, skipped if that is
# not available.
-all_local_installchecks = $(am__append_31) $(am__append_43) \
- $(am__append_113) toplevel_link_check
+all_local_installchecks = $(am__append_33) $(am__append_45) \
+ $(am__append_117) toplevel_link_check
+
# These dependencies are intentionally a bit too broad:
# they ensure that all files are in place to *run* client-test.
# Build "html" inside the build dir, using source files
# from the SyncEvolution source directory and (if built)
# the installed client-api.build directory.
-all_phonies = $(am__append_28) $(TEST_FILES_GENERATED) testcase2patch \
+all_phonies = $(am__append_30) $(TEST_FILES_GENERATED) testcase2patch \
src/templates test valgrind checkinstall/dist/$(distdir) \
clean_dist doc clean-html
-BUILT_SOURCES = $(am__append_29) $(src_dbus_interfaces_built_sources) \
- $(am__append_53) $(am__append_56)
+BUILT_SOURCES = $(am__append_31) $(src_dbus_interfaces_built_sources) \
+ $(am__append_55) $(am__append_58)
DIST_SUBDIRS = po
EXTRA_DIST = build/export-foreign-git.sh build/export-gdbus.sh \
build/export-synthesis-xml.sh build/gen-backends-am.sh \
src/dbus/server/pim/test-dbus/db-active/config/syncevolution/pim-manager.ini \
src/dbus/server/pim/test-dbus/simple-sort/config/syncevolution/pim-manager.ini \
src/dbus/server/pim/test-dbus/first-last-sort/config/syncevolution/pim-manager.ini \
- $(am__append_71) src/gtk-ui/ui.xml src/gtk3-ui/ui.xml
-SUBDIRS = $(am__append_1) $(am__append_2) . $(am__append_106)
+ $(am__append_73) src/gtk-ui/ui.xml src/gtk3-ui/ui.xml
+SUBDIRS = $(am__append_1) $(am__append_2) . $(am__append_110)
AUTOMAKE_OPTIONS = subdir-objects
ACLOCAL_AMFLAGS = -I m4 -I m4-repo ${ACLOCAL_FLAGS}
@COND_GIO_GDBUS_FALSE@gdbus_dir = $(top_srcdir)/src/gdbus
@COND_GIO_GDBUS_TRUE@gdbus_dir = $(top_srcdir)/src/gdbusxx
@COND_GIO_GDBUS_FALSE@gdbus_build_dir = src/gdbus
@COND_GIO_GDBUS_TRUE@gdbus_build_dir = src/gdbusxx
-disted_docs = $(am__append_107)
-distbin_docs = $(am__append_108) $(am__append_110)
-man_MANS = $(am__append_112)
+disted_docs = $(am__append_111)
+distbin_docs = $(am__append_112) $(am__append_114)
+man_MANS = $(am__append_116)
src_cppflags = -I$(top_srcdir)/src $(am__append_3) $(am__append_8) \
- $(am__append_13) $(am__append_32) $(am__append_46) \
+ $(am__append_13) $(am__append_34) $(am__append_48) \
-I$(top_srcdir)/src/dbus -I$(top_srcdir)/test -I$(top_srcdir) \
$(BACKEND_CPPFLAGS)
@ENABLE_GNOME_BLUETOOTH_PANEL_TRUE@src_gnome_bluetoothdir = $(GNOMEBLUETOOTH_DIR)/plugins/
# applies to sources in SyncEvolution repository, but not
# the Funambol C++ client library
@COND_CORE_TRUE@src_syncevo_cxxflags = @SYNCEVOLUTION_CXXFLAGS@ \
-@COND_CORE_TRUE@ $(am__append_15) $(am__append_21) \
-@COND_CORE_TRUE@ $(am__append_23)
+@COND_CORE_TRUE@ $(am__append_15) $(am__append_23) \
+@COND_CORE_TRUE@ $(am__append_25)
@COND_CORE_TRUE@src_syncevo_cppflags = @BACKEND_CPPFLAGS@ @GLIB_CFLAGS@ -I$(top_srcdir)/test -I$(gdbus_dir) $(DBUS_CFLAGS) -I$(top_builddir)/src/syncevo -I$(top_srcdir)/src -DSYNCEVO_LIBEXEC=\"$(libexecdir)\" -DSYNCEVO_BACKEND=\"$(BACKENDS_SEARCH_DIRECTORY)\"
# needed in all cases
@COND_CORE_TRUE@src_syncevo_ldadd = @SYNCEVOLUTION_LDADD@ \
@COND_CORE_TRUE@ $(gdbus_build_dir)/libgdbussyncevo.la \
@COND_CORE_TRUE@ $(am__append_16) $(am__append_20) \
-@COND_CORE_TRUE@ $(am__append_22)
+@COND_CORE_TRUE@ $(am__append_22) $(am__append_24)
@COND_CORE_TRUE@src_syncevo_sources = src/syncevo/GeeSupport.h \
@COND_CORE_TRUE@ src/syncevo/GValueSupport.h \
@COND_CORE_TRUE@ src/syncevo/EDSClient.h \
@COND_CORE_TRUE@ src/syncevo/MapSyncSource.cpp \
@COND_CORE_TRUE@ src/syncevo/TrackingSyncSource.h \
@COND_CORE_TRUE@ src/syncevo/TrackingSyncSource.cpp \
-@COND_CORE_TRUE@ $(am__append_18) $(am__append_19)
+@COND_CORE_TRUE@ $(am__append_18) $(am__append_19) \
+@COND_CORE_TRUE@ $(am__append_21)
@COND_CORE_TRUE@src_syncevo_libsyncevolution_includedir = $(includedir)/syncevo
@COND_CORE_TRUE@src_syncevo_libsyncevolution_include_HEADERS = \
@COND_CORE_TRUE@ src/syncevo/declarations.h \
@COND_CORE_TRUE@ @GTHREAD_LIBS@ @GLIB_LIBS@ $(SYNTHESIS_LIBS) \
@COND_CORE_TRUE@ $(PCRECPP_LIBS) $(TRANSPORT_LIBS) @LIBS@ \
@COND_CORE_TRUE@ $(src_syncevo_ldadd) $(DLT_LIBS) $(DBUS_LIBS) \
-@COND_CORE_TRUE@ $(NSS_LIBS) $(am__append_27)
+@COND_CORE_TRUE@ $(NSS_LIBS) $(am__append_29)
@COND_CORE_TRUE@src_syncevo_libsyncevolution_la_CXXFLAGS = \
@COND_CORE_TRUE@ $(PCRECPP_CFLAGS) \
@COND_CORE_TRUE@ $(TRANSPORT_CFLAGS) \
@COND_CORE_TRUE@ src/backends/evolution/EvolutionMemoSource.h \
@COND_CORE_TRUE@ src/backends/evolution/EvolutionCalendarSource.cpp \
@COND_CORE_TRUE@ src/backends/evolution/EvolutionMemoSource.cpp \
-@COND_CORE_TRUE@ $(am__append_35)
+@COND_CORE_TRUE@ $(am__append_37)
@COND_CORE_TRUE@src_backends_evolution_syncebook_src = \
@COND_CORE_TRUE@ src/backends/evolution/EvolutionSyncSource.h \
@COND_CORE_TRUE@ src/backends/evolution/EvolutionSyncSource.cpp \
@COND_CORE_TRUE@src_backends_gnome_platformgnome_la_SOURCES = \
@COND_CORE_TRUE@ src/backends/gnome/GNOMEPlatform.h \
@COND_CORE_TRUE@ src/backends/gnome/GNOMEPlatform.cpp \
-@COND_CORE_TRUE@ $(am__append_36)
+@COND_CORE_TRUE@ $(am__append_38)
@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@src_backends_gnome_backenddir = $(BACKENDS_DIRECTORY)
@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@src_backends_gnome_backend_LTLIBRARIES = $(src_backends_gnome_lib)
@COND_CORE_TRUE@src_backends_gnome_platformgnome_la_LIBADD = $(KEYRING_LIBS) $(SYNCEVOLUTION_LIBS)
@COND_CORE_TRUE@src_backends_goa_providergoa_la_SOURCES = \
@COND_CORE_TRUE@ src/backends/goa/goa.h \
@COND_CORE_TRUE@ src/backends/goa/goa.cpp $(NONE) \
-@COND_CORE_TRUE@ $(am__append_37)
+@COND_CORE_TRUE@ $(am__append_39)
@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@src_backends_goa_backenddir = $(BACKENDS_DIRECTORY)
@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@src_backends_goa_backend_LTLIBRARIES = $(src_backends_goa_lib)
@COND_CORE_TRUE@src_backends_goa_providergoa_la_LIBADD = $(SYNCEVOLUTION_LIBS) $(gdbus_build_dir)/libgdbussyncevo.la $(DBUS_LIBS)
@COND_CORE_TRUE@src_backends_kde_platformkde_la_SOURCES = \
@COND_CORE_TRUE@ src/backends/kde/KDEPlatform.h \
@COND_CORE_TRUE@ src/backends/kde/KDEPlatform.cpp \
-@COND_CORE_TRUE@ $(am__append_38)
+@COND_CORE_TRUE@ $(am__append_40)
@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@src_backends_kde_backenddir = $(BACKENDS_DIRECTORY)
@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@src_backends_kde_backend_LTLIBRARIES = $(src_backends_kde_lib)
@COND_CORE_TRUE@src_backends_kde_platformkde_la_LIBADD = $(KDE_KWALLET_LIBS) $(SYNCEVOLUTION_LIBS)
@COND_CORE_TRUE@ src/backends/signon/accounts/carddav.service-type \
@COND_CORE_TRUE@ $(NONE)
-@COND_CORE_TRUE@src_backends_signon_libs = $(am__append_39) \
-@COND_CORE_TRUE@ $(am__append_40)
+@COND_CORE_TRUE@src_backends_signon_libs = $(am__append_41) \
+@COND_CORE_TRUE@ $(am__append_42)
@COND_CORE_TRUE@src_backends_signon_common_sources = \
@COND_CORE_TRUE@ src/backends/signon/signon.h \
@COND_CORE_TRUE@ src/backends/signon/signon.cpp $(NONE) \
-@COND_CORE_TRUE@ $(am__append_41)
+@COND_CORE_TRUE@ $(am__append_43)
@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@src_backends_signon_backenddir = $(BACKENDS_DIRECTORY)
@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@src_backends_signon_backend_LTLIBRARIES = $(src_backends_signon_libs)
@COND_CORE_TRUE@src_backends_signon_common_libadd = $(SYNCEVOLUTION_LIBS)
@COND_CORE_TRUE@src_backends_webdav_syncdav_la_DEPENDENCIES = src/syncevo/libsyncevolution.la
@COND_CORE_TRUE@WEBDAV_SO_CHECK_FILES = \
@COND_CORE_TRUE@ $(DESTDIR)/$(bindir)/syncevolution \
-@COND_CORE_TRUE@ $(am__append_44)
+@COND_CORE_TRUE@ $(am__append_46)
@COND_CORE_TRUE@src_backends_xmlrpc_lib = src/backends/xmlrpc/syncxmlrpc.la
@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@src_backends_xmlrpc_backenddir = $(BACKENDS_DIRECTORY)
@COND_CORE_TRUE@@ENABLE_MODULES_TRUE@src_backends_xmlrpc_backend_LTLIBRARIES = $(src_backends_xmlrpc_lib)
@COND_DBUS_TRUE@ src/dbus/server/progress-data.cpp \
@COND_DBUS_TRUE@ src/dbus/server/read-operations.cpp \
@COND_DBUS_TRUE@ src/dbus/server/server.cpp \
-@COND_DBUS_TRUE@ src/dbus/server/session.cpp $(am__append_65)
+@COND_DBUS_TRUE@ src/dbus/server/session.cpp $(am__append_67)
@COND_DBUS_TRUE@src_dbus_server_server_h_files = \
@COND_DBUS_TRUE@ $(src_dbus_server_server_cpp_files:.cpp=.h) \
@COND_DBUS_TRUE@ src/dbus/server/notification-backend-base.h \
@COND_DBUS_TRUE@ src/dbus/server/source-progress.h \
@COND_DBUS_TRUE@ src/dbus/server/source-status.h \
@COND_DBUS_TRUE@ src/dbus/server/timeout.h \
-@COND_DBUS_TRUE@ src/dbus/server/timer.h $(am__append_66)
+@COND_DBUS_TRUE@ src/dbus/server/timer.h $(am__append_68)
@COND_DBUS_TRUE@src_dbus_server_libsyncevodbusserver_la_SOURCES = \
@COND_DBUS_TRUE@ $(src_dbus_server_server_h_files) \
@COND_DBUS_TRUE@ $(src_dbus_server_server_cpp_files) \
@COND_DBUS_TRUE@ src/dbus/server/main.cpp
@COND_DBUS_TRUE@nodist_src_dbus_server_libsyncevodbusserver_la_SOURCES = \
-@COND_DBUS_TRUE@ $(am__append_67)
+@COND_DBUS_TRUE@ $(am__append_69)
@COND_DBUS_TRUE@src_dbus_server_libsyncevodbusserver_la_LDFLAGS = \
-@COND_DBUS_TRUE@ $(am__append_68)
+@COND_DBUS_TRUE@ $(am__append_70)
@COND_DBUS_TRUE@src_dbus_server_libsyncevodbusserver_la_LIBADD = \
@COND_DBUS_TRUE@ $(LIBNOTIFY_LIBS) $(MLITE_LIBS) $(DBUS_LIBS) \
-@COND_DBUS_TRUE@ $(PCRECPP_LIBS) $(ICU_LIBS) $(am__append_69)
+@COND_DBUS_TRUE@ $(PCRECPP_LIBS) $(ICU_LIBS) $(am__append_71)
@COND_DBUS_TRUE@src_dbus_server_libsyncevodbusserver_la_CPPFLAGS = -DHAVE_CONFIG_H -DSYNCEVOLUTION_LOCALEDIR=\"${SYNCEVOLUTION_LOCALEDIR}\" -I$(top_srcdir)/src -I$(top_srcdir)/test -I$(top_srcdir) -I$(gdbus_dir) $(BACKEND_CPPFLAGS)
@COND_DBUS_TRUE@src_dbus_server_libsyncevodbusserver_la_CXXFLAGS = \
@COND_DBUS_TRUE@ $(SYNCEVOLUTION_CXXFLAGS) $(CORE_CXXFLAGS) \
@COND_DBUS_TRUE@ $(SYNTHESIS_CFLAGS) $(GLIB_CFLAGS) \
@COND_DBUS_TRUE@ $(DBUS_CFLAGS) $(LIBNOTIFY_CFLAGS) \
@COND_DBUS_TRUE@ $(MLITE_CFLAGS) $(SYNCEVO_WFLAGS) \
-@COND_DBUS_TRUE@ $(ICU_CFLAGS) $(am__append_70)
+@COND_DBUS_TRUE@ $(ICU_CFLAGS) $(am__append_72)
@COND_DBUS_TRUE@src_dbus_server_dbus_helper_cpp_files = \
@COND_DBUS_TRUE@ src/dbus/server/dbus-callbacks.cpp \
@COND_DBUS_TRUE@ src/dbus/server/dbus-sync.cpp \
@COND_DBUS_TRUE@src_dbus_server_autostart_DATA = $(src_dbus_server_desktop)
@COND_DBUS_TRUE@src_dbus_server_service_files_in = \
@COND_DBUS_TRUE@ src/dbus/server/org.syncevolution.service.in \
-@COND_DBUS_TRUE@ $(am__append_74)
+@COND_DBUS_TRUE@ $(am__append_76)
@COND_DBUS_TRUE@src_dbus_server_service_files = $(src_dbus_server_service_files_in:.service.in=.service)
@COND_DBUS_TRUE@src_dbus_server_servicedir = $(DBUS_SERVICES_DIR)
@COND_DBUS_TRUE@src_dbus_server_service_DATA = $(src_dbus_server_service_files)
@COND_GTK2_FALSE@@COND_GUI_TRUE@src_gtk3_ui_sync_ui_moblin_LDADD = $(src_gtk3_ui_sync_ui_LDADD)
@COND_GTK2_FALSE@@COND_GUI_TRUE@src_gtk3_ui_sync_ui_moblin_CFLAGS = $(src_gtk3_ui_sync_ui_CFLAGS)
@COND_GTK2_FALSE@@COND_GUI_TRUE@src_gtk3_ui_sync_ui_moblin_CPPFLAGS = $(src_gtk3_ui_sync_ui_CPPFLAGS) -DUSE_MOBLIN_UX
-SYNCEVOLUTION_DEP = $(am__append_87)
-CORE_SOURCES = $(am__append_89)
+SYNCEVOLUTION_DEP = $(am__append_89)
+CORE_SOURCES = $(am__append_91)
CORE_CXXFLAGS = $(SYNTHESIS_CFLAGS) $(CPPUNIT_CXXFLAGS)
CORE_LDADD = $(SYNCEVOLUTION_LDADD) src/syncevo/libsyncevolution.la $(GLIB_LIBS) $(GTHREAD_LIBS) $(GOBJECT_LIBS) $(LIBS)
CORE_DEP = $(SYNCEVOLUTION_DEP) src/syncevo/libsyncevolution.la $(SYNTHESIS_DEP)
-CORE_LD_FLAGS = -Wl,-uSyncEvolution_Module_Version -Wl,--export-dynamic $(CPPUNIT_LDFLAGS)
+CORE_LD_FLAGS = -Wl,-uSyncEvolution_Module_Version \
+ -Wl,--export-dynamic $(CPPUNIT_LDFLAGS) $(ADDITIONAL_LDFLAGS) \
+ $(am__append_92)
src_syncevolution_SOURCES = \
src/syncevolution.cpp \
$(CORE_SOURCES)
# SYNCEVOLUTION_LDADD will be replaced with libsyncebook.la/libsyncecal.la/libsyncsqlite.la
# if linking statically against them, empty otherwise;
# either way this does not lead to a dependency on those libs - done explicitly
-src_syncevolution_LDADD = $(CORE_LDADD) $(am__append_90)
+src_syncevolution_LDADD = $(CORE_LDADD) $(am__append_93)
src_syncevolution_DEPENDENCIES = $(EXTRA_LTLIBRARIES) $(CORE_DEP) \
- $(am__append_91)
+ $(am__append_94)
src_syncevolution_LDFLAGS = $(PCRECPP_LIBS) $(CORE_LD_FLAGS) $(DBUS_LIBS)
src_syncevolution_CXXFLAGS = $(PCRECPP_CFLAGS) $(SYNCEVOLUTION_CXXFLAGS) $(CORE_CXXFLAGS) $(DBUS_CFLAGS) $(SYNCEVO_WFLAGS)
src_syncevolution_CPPFLAGS = $(src_cppflags) -I$(gdbus_dir)
src_client_test_SOURCES = \
src/client-test-app.cpp \
test/ClientTest.cpp \
+ test/IcalTest.cpp \
test/ClientTest.h \
test/ClientTestAssert.h \
test/client-test-main.cpp \
$(CORE_SOURCES)
-nodist_src_client_test_SOURCES = test/test.cpp $(am__append_96)
+nodist_src_client_test_SOURCES = test/test.cpp $(am__append_100)
# list of test file base files
#
# To pull in those object files, LDFLAGS must contain undef statements
# for the C symbols exported by the macro.
src_client_test_libs = src/syncevo/libsyncevolution.la \
- $(am__append_93)
+ $(am__append_96)
# src/syncevo/libsyncevolution.la -> src/syncevo/.libs/libsyncevolution.a -> -Wl,-u...
src_client_test_undef = $(shell nm $(patsubst %.la,%.a,$(subst /lib,/.libs/lib,$(src_client_test_libs))) | grep funambolAutoRegisterRegistry | sed -e 's/.* /-Wl,-u/' )
src_client_test_CPPFLAGS = -DHAVE_CONFIG_H -DENABLE_INTEGRATION_TESTS -DENABLE_UNIT_TESTS $(src_cppflags) $(QT_CPPFLAGS)
src_client_test_CXXFLAGS = $(filter-out -O2, @CPPUNIT_CXXFLAGS@ $(PCRECPP_CFLAGS) $(SYNCEVOLUTION_CXXFLAGS) $(CORE_CXXFLAGS) $(filter-out -O2 -g -W -Wall, $(QT_CXXFLAGS)) $(SYNCEVO_WFLAGS))
src_client_test_LDFLAGS = @CPPUNIT_LDFLAGS@ $(src_client_test_undef) $(CORE_LD_FLAGS) $(QT_LDFLAGS)
-src_client_test_LDADD = $(src_client_test_libs) $(CORE_LDADD) $(PCRECPP_LIBS) $(SYNTHESIS_ENGINE) $(QT_LIBS)
+src_client_test_LDADD = $(src_client_test_libs) $(CORE_LDADD) \
+ $(PCRECPP_LIBS) $(SYNTHESIS_ENGINE) $(QT_LIBS) \
+ $(am__append_97)
# The binary does not really depend on the test cases, only running it does.
# Listing the dependencies here is done to ensure that one doesn't accidentally
src_client_test_DEPENDENCIES = $(EXTRA_LTLIBRARIES) \
$(src_client_test_libs) $(CORE_DEP) $(CLIENT_LIB_TEST_FILES) \
testcase2patch src/synccompare src/synclog2html src/templates \
- $(am__append_97)
+ $(am__append_101)
@ENABLE_TESTING_TRUE@src_testcasesdir = $(testdir)/testcases
@ENABLE_TESTING_TRUE@dist_src_testcases_DATA = \
@ENABLE_TESTING_TRUE@ src/testcases/local.png \
src_abort_redirect_DEPENDENCIES = all
@COND_CORE_TRUE@@COND_DBUS_TRUE@test_dbus_client_server_SOURCES = \
@COND_CORE_TRUE@@COND_DBUS_TRUE@ test/dbus-client-server.cpp \
-@COND_CORE_TRUE@@COND_DBUS_TRUE@ $(am__append_100)
+@COND_CORE_TRUE@@COND_DBUS_TRUE@ $(am__append_104)
@COND_CORE_TRUE@@COND_DBUS_TRUE@test_dbus_client_server_CPPFLAGS = -I$(gdbus_dir) -I$(top_srcdir)/src
@COND_CORE_TRUE@@COND_DBUS_TRUE@test_dbus_client_server_CXXFLAGS = $(CPPUNIT_CXXFLAGS) $(SYNCEVOLUTION_CXXFLAGS) $(BACKEND_CPPFLAGS) $(DBUS_CFLAGS) $(GLIB_CFLAGS) $(GOBJECT_CFLAGS)
@COND_CORE_TRUE@@COND_DBUS_TRUE@test_dbus_client_server_LDFLAGS = $(CPPUNIT_LDFLAGS)
# Some exceptions for the link check above (= symbol may be used without linking).
# SySync_ConsolePrintf is expected by libsmltk and has to be provided by caller.
LINK_CHECK_ALLOWED = -e xxxxxxxx -e \
- 'SySync_ConsolePrintf.*libsmltk.so' $(am__append_114)
+ 'SySync_ConsolePrintf.*libsmltk.so' $(am__append_118)
@COND_CROSS_COMPILING_FALSE@RUN_SYNCEVOLUTION_CHECK = die if $$?; return $$buffer;
# Be strict about running 'syncevolution' only when not doing
src/syncevo/src_syncevo_libsyncevolution_la-icalstrdup.lo: \
src/syncevo/$(am__dirstamp) \
src/syncevo/$(DEPDIR)/$(am__dirstamp)
+src/syncevo/src_syncevo_libsyncevolution_la-icaltz-util.lo: \
+ src/syncevo/$(am__dirstamp) \
+ src/syncevo/$(DEPDIR)/$(am__dirstamp)
src/syncevo/src_syncevo_libsyncevolution_la-ObexTransportAgent.lo: \
src/syncevo/$(am__dirstamp) \
src/syncevo/$(DEPDIR)/$(am__dirstamp)
src/$(DEPDIR)/$(am__dirstamp)
test/src_client_test-ClientTest.$(OBJEXT): test/$(am__dirstamp) \
test/$(DEPDIR)/$(am__dirstamp)
+test/src_client_test-IcalTest.$(OBJEXT): test/$(am__dirstamp) \
+ test/$(DEPDIR)/$(am__dirstamp)
test/src_client_test-client-test-main.$(OBJEXT): test/$(am__dirstamp) \
test/$(DEPDIR)/$(am__dirstamp)
src/backends/activesync/src_client_test-ActiveSyncSourceRegister.$(OBJEXT): \
-rm -f src/syncevo/src_syncevo_libsyncevolution_la-eds_abi_wrapper.lo
-rm -f src/syncevo/src_syncevo_libsyncevolution_la-icalstrdup.$(OBJEXT)
-rm -f src/syncevo/src_syncevo_libsyncevolution_la-icalstrdup.lo
+ -rm -f src/syncevo/src_syncevo_libsyncevolution_la-icaltz-util.$(OBJEXT)
+ -rm -f src/syncevo/src_syncevo_libsyncevolution_la-icaltz-util.lo
-rm -f src/syncevo/src_syncevo_libsyncevolution_la-lcs.$(OBJEXT)
-rm -f src/syncevo/src_syncevo_libsyncevolution_la-lcs.lo
-rm -f src/syncevo/src_syncevo_libsyncevolution_la-util.$(OBJEXT)
-rm -f src/syncevo/src_syncevo_libsyncevolution_la-util.lo
-rm -f test/src_abort_redirect-abort-redirect.$(OBJEXT)
-rm -f test/src_client_test-ClientTest.$(OBJEXT)
+ -rm -f test/src_client_test-IcalTest.$(OBJEXT)
-rm -f test/src_client_test-client-test-main.$(OBJEXT)
-rm -f test/src_client_test-test.$(OBJEXT)
-rm -f test/src_syncevo_dbus_helper-test.$(OBJEXT)
@AMDEP_TRUE@@am__include@ @am__quote@src/syncevo/$(DEPDIR)/src_syncevo_libsyncevolution_la-UserInterface.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/syncevo/$(DEPDIR)/src_syncevo_libsyncevolution_la-eds_abi_wrapper.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/syncevo/$(DEPDIR)/src_syncevo_libsyncevolution_la-icalstrdup.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/syncevo/$(DEPDIR)/src_syncevo_libsyncevolution_la-icaltz-util.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/syncevo/$(DEPDIR)/src_syncevo_libsyncevolution_la-lcs.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/syncevo/$(DEPDIR)/src_syncevo_libsyncevolution_la-util.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/src_abort_redirect-abort-redirect.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/src_client_test-ClientTest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/src_client_test-IcalTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/src_client_test-client-test-main.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/src_client_test-test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/src_syncevo_dbus_helper-test.Po@am__quote@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_syncevo_libsyncevolution_la_CPPFLAGS) $(CPPFLAGS) $(src_syncevo_libsyncevolution_la_CFLAGS) $(CFLAGS) -c -o src/syncevo/src_syncevo_libsyncevolution_la-icalstrdup.lo `test -f 'src/syncevo/icalstrdup.c' || echo '$(srcdir)/'`src/syncevo/icalstrdup.c
+src/syncevo/src_syncevo_libsyncevolution_la-icaltz-util.lo: src/syncevo/icaltz-util.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_syncevo_libsyncevolution_la_CPPFLAGS) $(CPPFLAGS) $(src_syncevo_libsyncevolution_la_CFLAGS) $(CFLAGS) -MT src/syncevo/src_syncevo_libsyncevolution_la-icaltz-util.lo -MD -MP -MF src/syncevo/$(DEPDIR)/src_syncevo_libsyncevolution_la-icaltz-util.Tpo -c -o src/syncevo/src_syncevo_libsyncevolution_la-icaltz-util.lo `test -f 'src/syncevo/icaltz-util.c' || echo '$(srcdir)/'`src/syncevo/icaltz-util.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/syncevo/$(DEPDIR)/src_syncevo_libsyncevolution_la-icaltz-util.Tpo src/syncevo/$(DEPDIR)/src_syncevo_libsyncevolution_la-icaltz-util.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/syncevo/icaltz-util.c' object='src/syncevo/src_syncevo_libsyncevolution_la-icaltz-util.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_syncevo_libsyncevolution_la_CPPFLAGS) $(CPPFLAGS) $(src_syncevo_libsyncevolution_la_CFLAGS) $(CFLAGS) -c -o src/syncevo/src_syncevo_libsyncevolution_la-icaltz-util.lo `test -f 'src/syncevo/icaltz-util.c' || echo '$(srcdir)/'`src/syncevo/icaltz-util.c
+
src/syncevo/src_syncevo_libsyncevolution_la-SyncEvolutionXML.lo: src/syncevo/SyncEvolutionXML.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_syncevo_libsyncevolution_la_CPPFLAGS) $(CPPFLAGS) $(src_syncevo_libsyncevolution_la_CFLAGS) $(CFLAGS) -MT src/syncevo/src_syncevo_libsyncevolution_la-SyncEvolutionXML.lo -MD -MP -MF src/syncevo/$(DEPDIR)/src_syncevo_libsyncevolution_la-SyncEvolutionXML.Tpo -c -o src/syncevo/src_syncevo_libsyncevolution_la-SyncEvolutionXML.lo `test -f 'src/syncevo/SyncEvolutionXML.c' || echo '$(srcdir)/'`src/syncevo/SyncEvolutionXML.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/syncevo/$(DEPDIR)/src_syncevo_libsyncevolution_la-SyncEvolutionXML.Tpo src/syncevo/$(DEPDIR)/src_syncevo_libsyncevolution_la-SyncEvolutionXML.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_test_CPPFLAGS) $(CPPFLAGS) $(src_client_test_CXXFLAGS) $(CXXFLAGS) -c -o test/src_client_test-ClientTest.obj `if test -f 'test/ClientTest.cpp'; then $(CYGPATH_W) 'test/ClientTest.cpp'; else $(CYGPATH_W) '$(srcdir)/test/ClientTest.cpp'; fi`
+test/src_client_test-IcalTest.o: test/IcalTest.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_test_CPPFLAGS) $(CPPFLAGS) $(src_client_test_CXXFLAGS) $(CXXFLAGS) -MT test/src_client_test-IcalTest.o -MD -MP -MF test/$(DEPDIR)/src_client_test-IcalTest.Tpo -c -o test/src_client_test-IcalTest.o `test -f 'test/IcalTest.cpp' || echo '$(srcdir)/'`test/IcalTest.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) test/$(DEPDIR)/src_client_test-IcalTest.Tpo test/$(DEPDIR)/src_client_test-IcalTest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='test/IcalTest.cpp' object='test/src_client_test-IcalTest.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_test_CPPFLAGS) $(CPPFLAGS) $(src_client_test_CXXFLAGS) $(CXXFLAGS) -c -o test/src_client_test-IcalTest.o `test -f 'test/IcalTest.cpp' || echo '$(srcdir)/'`test/IcalTest.cpp
+
+test/src_client_test-IcalTest.obj: test/IcalTest.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_test_CPPFLAGS) $(CPPFLAGS) $(src_client_test_CXXFLAGS) $(CXXFLAGS) -MT test/src_client_test-IcalTest.obj -MD -MP -MF test/$(DEPDIR)/src_client_test-IcalTest.Tpo -c -o test/src_client_test-IcalTest.obj `if test -f 'test/IcalTest.cpp'; then $(CYGPATH_W) 'test/IcalTest.cpp'; else $(CYGPATH_W) '$(srcdir)/test/IcalTest.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) test/$(DEPDIR)/src_client_test-IcalTest.Tpo test/$(DEPDIR)/src_client_test-IcalTest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='test/IcalTest.cpp' object='test/src_client_test-IcalTest.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_test_CPPFLAGS) $(CPPFLAGS) $(src_client_test_CXXFLAGS) $(CXXFLAGS) -c -o test/src_client_test-IcalTest.obj `if test -f 'test/IcalTest.cpp'; then $(CYGPATH_W) 'test/IcalTest.cpp'; else $(CYGPATH_W) '$(srcdir)/test/IcalTest.cpp'; fi`
+
test/src_client_test-client-test-main.o: test/client-test-main.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_test_CPPFLAGS) $(CPPFLAGS) $(src_client_test_CXXFLAGS) $(CXXFLAGS) -MT test/src_client_test-client-test-main.o -MD -MP -MF test/$(DEPDIR)/src_client_test-client-test-main.Tpo -c -o test/src_client_test-client-test-main.o `test -f 'test/client-test-main.cpp' || echo '$(srcdir)/'`test/client-test-main.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) test/$(DEPDIR)/src_client_test-client-test-main.Tpo test/$(DEPDIR)/src_client_test-client-test-main.Po
echo 'A git checkout is required to generate a ChangeLog.' >&2; \
fi
@ENABLE_EVOLUTION_COMPATIBILITY_TRUE@toplevel_so_check:
-@ENABLE_EVOLUTION_COMPATIBILITY_TRUE@ for i in `find $(DESTDIR)/$(libdir)/syncevolution $(DESTDIR)/$(libdir)/libsyncevo* $(DESTDIR)/$(libdir)/libsynthesis* -name *.so | grep -v -2.so` $(DESTDIR)/$(bindir)/syncevolution; \
+@ENABLE_EVOLUTION_COMPATIBILITY_TRUE@ for i in `find $(DESTDIR)/$(libdir)/syncevolution $(DESTDIR)/$(libdir)/libsyncevo* $(DESTDIR)/$(libdir)/libsynthesis* -name *.so | grep -v -e -[0-9].so` $(DESTDIR)/$(bindir)/syncevolution; \
@ENABLE_EVOLUTION_COMPATIBILITY_TRUE@ do \
@ENABLE_EVOLUTION_COMPATIBILITY_TRUE@ if objdump -T -C $$i | grep -v :: | grep '\*UND\*' | sort | grep -v -w ical_strdup | grep -e ical -e " e_"; then \
@ENABLE_EVOLUTION_COMPATIBILITY_TRUE@ echo "$$i should not depend on EDS, libical or libbluetooth"; \
+SyncEvolution 1.4 -> 1.4.1, 31.03.2014
+======================================
+
+The first bug fix release in the 1.4 series addresses some issues which
+occurred on some systems.
+
+Details:
+
+* EDS: only load one backend plugin of each kind
+
+ SyncEvolution was meant to load the syncecal or syncebook shared object
+ which uses the most recent libraries (libical, libecal/libebook) on
+ the system and then stop loooking for alternatives. Due to a string
+ handling bug the check for already backends always found nothing,
+ leading to multiple conflicting backends loaded on some systems (for
+ example, those with libical0 and libical1 installed).
+
+ If that happened, the backend became unusable.
+
+* ical: workaround for libical 1.0 builtin timezone change
+
+ libical 1.0 started to return VTIMEZONE definitions with multiple
+ absolute transition times instead of RRULEs. This causes problems when
+ exchanging data with peers (see
+ https://sourceforge.net/p/freeassociation/bugs/95/).
+
+ In SyncEvolution, this affected sending an event using New Zealand
+ time in vCalendar 1.0 format to a phone, because the internal,
+ out-dated definition of the time zone in libsynthesis was used as
+ fallback when loading RRULE-based timezone definitions from libical
+ failed (see "[SyncEvolution] Some events showing wrong time on
+ phone"). It might also affect exchanging data with CalDAV peers (not
+ tested).
+
+ The workaround is to include the original code from libical.
+
+* dbus-session.sh: create XDG_RUNTIME_DIR
+
+ More recent distros (for example, Ubuntu Saucy) rely on
+ XDG_RUNTIME_DIR. Each time dbus-session.sh runs, it must
+ ensure that the runtime dir exists and is empty.
+
+ This was a problem when trying to run activesyncd + SyncEvolution
+ on a headless Ubuntu Saucy server (see FDO #76273).
+
+* Akonadi: support KDE Notes, enhanced "database" check
+
+ The KDE Notes resources store items under a different MIME type than the one
+ used in AKonadi (see "[Kde-pim] note format"). SyncEvolution use the same type
+ as Akonadi and thus did not find existing KDE Notes resources.
+
+ To support both while KDE and Akonadi transition to the same type,
+ SyncEvolution now looks for notes resources using both MIME types and accepts
+ both kinds of items when reading. When writing, SyncEvolution picks the MIME
+ type that is supported by the resource, which hopefully avoids confusing the
+ KDE app using the resource (untested).
+
+ As a positive side effect, the "database" value used for opening a resource is
+ now checked more thoroughly. Non-existent resources and the type mismatches
+ like pointing a "kde-contacts" backend to a calendar resource are now detected
+ early.
+
+* Akonadi: ensure that UID is set (FDO #74342)
+
+ Akonadi resources do not enforce iCalendar 2.0 semantic like
+ "each VEVENT must have a UID" (see "[Kde-pim] iCalendar semantic").
+ When receiving an event from a peer which itself does not enforce
+ that semantic (Funambol, vCalendar 1.0 based phones), then we
+ need to generate a UID, otherwise KOrganizer will ignore the
+ imported event.
+
+* Akonadi: avoid threading problem in HTTP server mode (FDO #75672)
+
+ When used as storage in a server, Akonadi got called in a background thread
+ that gets created to handle slow initialization of sources and preventing
+ ensuing timeouts in HTTP clients (probably not needed for Akonadi itself,
+ but may still be useful when combining it with other sources).
+
+ Akonadi cannot be used like that, leading to false "Akonadi not running"
+ errors or (if one got past that check) failing item operations.
+
+* autotools: Add QtCore include path to KDEPIM_CFLAGS (FDO #75670)
+
+ This fixes an issue where configure fails to find Akonadi when
+ test programs do not compile because QString is not found.
+
+* Enhanced testing again: faster execution, less false negatives
+ under load. Re-enabled testing of Akonadi.
+
+
SyncEvolution 1.3.2 -> 1.4, 16.02.2014
======================================
------------------------------------------------
:Manual section: 1
-:Version: 1.4
-:Date: 2014-02-16
+:Version: 1.4.1
+:Date: 2014-03-31
SYNOPSIS
/* "SyncML DevInf DevType" */
#undef DEVICE_TYPE
+/* use libical's icaltzutil_get_zone_directory() */
+#undef DISABLE_ICALTZUTIL_GET_ZONE_DIRECTORY
+
/* "DLT app ID for syncevo-dbus-helper" */
#undef DLT_SYNCEVO_DBUS_HELPER_ID
/* libical in use */
#undef ENABLE_ICAL
+/* use internal icaltz-util.c */
+#undef ENABLE_ICALTZ_UTIL
+
/* enable integration tests inside the final library */
#undef ENABLE_INTEGRATION_TESTS
/* define if the Boost::Locale library is available */
#undef HAVE_BOOST_LOCALE
+/* Define to 1 if you have the <byteswap.h> header file. */
+#undef HAVE_BYTESWAP_H
+
/* Define to 1 if you have the `dcgettext' function. */
#undef HAVE_DCGETTEXT
/* evolution-dataserver available */
#undef HAVE_EDS
+/* Define to 1 if you have the <endian.h> header file. */
+#undef HAVE_ENDIAN_H
+
/* Define to 1 if you have the <execinfo.h> header file. */
#undef HAVE_EXECINFO_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
+/* Define to 1 if you have the <sys/endian.h> header file. */
+#undef HAVE_SYS_ENDIAN_H
+
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for syncevolution 1.4.
+# Generated by GNU Autoconf 2.69 for syncevolution 1.4.1.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
# Identity of this package.
PACKAGE_NAME='syncevolution'
PACKAGE_TARNAME='syncevolution'
-PACKAGE_VERSION='1.4'
-PACKAGE_STRING='syncevolution 1.4'
+PACKAGE_VERSION='1.4.1'
+PACKAGE_STRING='syncevolution 1.4.1'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
CPPUNIT_CXXFLAGS
CPPUNIT_CONFIG
MODIFY_SYNCCOMPARE
+ENABLE_ICALTZ_UTIL_FALSE
+ENABLE_ICALTZ_UTIL_TRUE
SYNCEVO_WFLAGS
BOOST_LDFLAGS
BOOST_CPPFLAGS
enable_integration_tests
enable_static_cxx
enable_evolution_compatibility
+enable_internal_icaltz
enable_developer_mode
enable_maemo
with_ca_certificates
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures syncevolution 1.4 to adapt to many kinds of systems.
+\`configure' configures syncevolution 1.4.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of syncevolution 1.4:";;
+ short | recursive ) echo "Configuration of syncevolution 1.4.1:";;
esac
cat <<\_ACEOF
libical.so.0/1 enum differences are worked around
(allows patching resulting executables to use either
of these two)
+ --disable-internal-icaltz
+ libical 1.0 updated its system zone data parsing
+ code so that it produces VTIMEZONEs which are
+ unsuitable for syncing. SyncEvolution ships with a
+ copy of the older code and uses it by default.
--enable-developer-mode The dynamic loadble backend libraries is loaded from
current build directory instead of the standard
library path
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-syncevolution configure 1.4
+syncevolution configure 1.4.1
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by syncevolution $as_me 1.4, which was
+It was created by syncevolution $as_me 1.4.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
-
# Minimum version of libsynthesis as defined in its
# configure script and thus .pc files:
# Define the identity of the package.
PACKAGE='syncevolution'
- VERSION='1.4'
+ VERSION='1.4.1'
cat >>confdefs.h <<_ACEOF
fi
+# Check whether --enable-internal-icaltz was given.
+if test "${enable_internal_icaltz+set}" = set; then :
+ enableval=$enable_internal_icaltz; enable_icaltz_util="$enableval"
+ test "$enable_icaltz_util" = "yes" || test "$enable_icaltz_util" = "no" || as_fn_error $? "invalid value of --disable-internal-icaltz: $enableval" "$LINENO" 5
+else
+ enable_icaltz_util="yes"
+fi
+
+if test "$enable_icaltz_util" = "yes"; then
+
+$as_echo "#define ENABLE_ICALTZ_UTIL 1" >>confdefs.h
+
+
+$as_echo "#define DISABLE_ICALTZUTIL_GET_ZONE_DIRECTORY 1" >>confdefs.h
+
+fi
+ if test "$enable_icaltz_util" = "yes"; then
+ ENABLE_ICALTZ_UTIL_TRUE=
+ ENABLE_ICALTZ_UTIL_FALSE='#'
+else
+ ENABLE_ICALTZ_UTIL_TRUE='#'
+ ENABLE_ICALTZ_UTIL_FALSE=
+fi
+
+
# Check whether --enable-developer-mode was given.
if test "${enable_developer_mode+set}" = set; then :
enableval=$enable_developer_mode; enable_developer_mode="$enableval"
done
+# For icaltz-util.c
+for ac_header in byteswap.h endian.h sys/endian.h unistd.h stdint.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
# cppunit-config is used even when both unit tests and integration tests are disabled.
# Extract the first word of "cppunit-config", so it can be a program name with args.
set dummy cppunit-config; ac_word=$2
if ! test "$KDEPIM_CFLAGS"; then
KDEPIM_CFLAGS="-I`kde4-config --path include` -I`kde4-config --path include`/KDE"
if test "$QMAKE"; then
- KDEPIM_CFLAGS="$KDEPIM_CFLAGS -I`$QMAKE -query QT_INSTALL_HEADERS`"
+ KDEPIM_CFLAGS="$KDEPIM_CFLAGS -I`$QMAKE -query QT_INSTALL_HEADERS` -I`$QMAKE -query QT_INSTALL_HEADERS`/QtCore"
fi
fi
if ! test "$KDEPIM_LIBS"; then
BACKEND_CPPFLAGS="$BACKEND_CPPFLAGS $GLIB_CFLAGS $GTHREAD_CFLAGS $GOBJECT_CFLAGS"
fi
-if test "$need_ical" = "yes"; then
+if test "$need_ical" = "yes" || test "$enable_icaltz_util" = "yes"; then
pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBICAL" >&5
$as_echo "yes" >&6; }
true
fi
+fi
+
+if test "$need_ical" = "yes"; then
$as_echo "#define ENABLE_ICAL 1" >>confdefs.h
fi
-
# Check for Qt if some backend needs it.
if test "$need_qt_modules"; then
echo "$as_me: this is autotroll.m4 serial 5" >&5
as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${ENABLE_ICALTZ_UTIL_TRUE}" && test -z "${ENABLE_ICALTZ_UTIL_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_ICALTZ_UTIL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${ENABLE_UNIT_TESTS_TRUE}" && test -z "${ENABLE_UNIT_TESTS_FALSE}"; then
as_fn_error $? "conditional \"ENABLE_UNIT_TESTS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by syncevolution $as_me 1.4, which was
+This file was extended by syncevolution $as_me 1.4.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-syncevolution config.status 1.4
+syncevolution config.status 1.4.1
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
#
# Starting with the 1.1 release cycle, the rpm-style
# .99 pseudo-version number is used to mark a pre-release.
-AC_INIT([syncevolution], [m4_esyscmd([build/gen-git-version.sh 1.4])])
+AC_INIT([syncevolution], [m4_esyscmd([build/gen-git-version.sh 1.4.1])])
# STABLE_VERSION=1.0.1+
AC_SUBST(STABLE_VERSION)
[build executables which only call Evolution via dlopen/dlsym: this avoids all hard dependencies on EDS shared objects, but might lead to crashes when their ABI changes; use --enable-evolution-compatibility=ical to enable a weaker mode where linking is done normally and only libical.so.0/1 enum differences are worked around (allows patching resulting executables to use either of these two)]),
enable_evolution_compatibility="$enableval", enable_evolution_compatibility="no")
+AC_ARG_ENABLE(internal-icaltz,
+ AS_HELP_STRING([--disable-internal-icaltz],
+ [libical 1.0 updated its system zone data parsing code so that it produces VTIMEZONEs which are unsuitable for syncing. SyncEvolution ships with a copy of the older code and uses it by default.]),
+ [enable_icaltz_util="$enableval"
+ test "$enable_icaltz_util" = "yes" || test "$enable_icaltz_util" = "no" || AC_ERROR([invalid value of --disable-internal-icaltz: $enableval])],
+ enable_icaltz_util="yes")
+if test "$enable_icaltz_util" = "yes"; then
+ AC_DEFINE(ENABLE_ICALTZ_UTIL, [1], [use internal icaltz-util.c])
+ AC_DEFINE(DISABLE_ICALTZUTIL_GET_ZONE_DIRECTORY, [1], [use libical's icaltzutil_get_zone_directory()])
+fi
+AM_CONDITIONAL([ENABLE_ICALTZ_UTIL], [test "$enable_icaltz_util" = "yes"])
+
AC_ARG_ENABLE(developer-mode,
AS_HELP_STRING([--enable-developer-mode],
[The dynamic loadble backend libraries is loaded from current build directory instead of the standard library path]),
AC_CHECK_HEADERS(signal.h dlfcn.h)
+# For icaltz-util.c
+AC_CHECK_HEADERS(byteswap.h endian.h sys/endian.h unistd.h stdint.h)
+
# cppunit-config is used even when both unit tests and integration tests are disabled.
AC_PATH_PROG([CPPUNIT_CONFIG], [cppunit-config], [no])
BACKEND_CPPFLAGS="$BACKEND_CPPFLAGS $GLIB_CFLAGS $GTHREAD_CFLAGS $GOBJECT_CFLAGS"
fi
-dnl use libical if and only if required by some backend
-if test "$need_ical" = "yes"; then
+dnl check for libical if needed by backend or icaltz-util.
+if test "$need_ical" = "yes" || test "$enable_icaltz_util" = "yes"; then
PKG_CHECK_MODULES(LIBICAL, libical,
[true],
[PKG_CHECK_MODULES(LIBICAL, libecal-1.2)])
+fi
+
+dnl Use libical in eds_abi_wrapper if and only if required by some backend.
+if test "$need_ical" = "yes"; then
AC_DEFINE(ENABLE_ICAL, 1, [libical in use])
fi
AM_CONDITIONAL([ENABLE_ICAL], [test "$need_ical" = "yes"])
-
# Check for Qt if some backend needs it.
if test "$need_qt_modules"; then
AT_WITH_QT([-gui $need_qt_modules],
virtual void updateConfig(ClientTestConfig &config) const
{
config.m_type = "kde-calendar";
+ // Looks like iCalendar file resource in Akonadi 1.11.0 does
+ // not actually enforce iCalendar 2.0 semantic. It allows
+ // updating of events with no UID
+ // (testLinkedItemsInsertBothUpdateChildNoIDs)
+ // and fails to detect double-adds (testInsertTwice).
+ // TODO: this should better be fixed.
+ config.m_sourceKnowsItemSemantic = false;
}
} iCal20Test;
virtual void updateConfig(ClientTestConfig &config) const
{
config.m_type = "kde-tasks";
+ // See above.
+ config.m_sourceKnowsItemSemantic = false;
}
} iTodo20Test;
#include <Akonadi/Control>
#include <kurl.h>
+#include <syncevo/util.h>
+
+#include <boost/lambda/lambda.hpp>
+#include <boost/lambda/bind.hpp>
+#include <boost/bind.hpp>
+
#include <QtCore/QDebug>
SE_BEGIN_CXX
AkonadiSyncSource::AkonadiSyncSource(const char *submime,
const SyncSourceParams ¶ms)
: TrackingSyncSource(params)
- , m_subMime(submime)
{
+ m_mimeTypes = QString(submime).split(",", QString::SkipEmptyParts);
}
AkonadiSyncSource::~AkonadiSyncSource()
bool AkonadiSyncSource::isEmpty()
{
+ if (!GRunIsMain()) {
+ bool result;
+ GRunInMain(boost::lambda::var(result) = boost::lambda::bind(&AkonadiSyncSource::isEmpty, this));
+ return result;
+ }
+
//To Check if the respective collection is Empty, without actually loading the collections
std::auto_ptr<CollectionStatisticsJob> statisticsJob(DisableAutoDelete(new CollectionStatisticsJob(m_collection)));
if (!statisticsJob->exec()) {
void AkonadiSyncSource::start()
{
- // Start The Akonadi Server if not already Running.
+ if (!GRunIsMain()) {
+ GRunInMain(boost::bind(&AkonadiSyncSource::start, this));
+ return;
+ }
+
+ // Check for Akonadi server.
if (!Akonadi::ServerManager::isRunning()) {
// Don't try to start it. A normal KDE user should have it already
// running. Users of other desktop systems probably don't want it
SyncSource::Databases AkonadiSyncSource::getDatabases()
{
+ if (!GRunIsMain()) {
+ Databases result;
+ GRunInMain(boost::lambda::var(result) = boost::lambda::bind(&AkonadiSyncSource::getDatabases, this));
+ return result;
+ }
+
start();
Databases res;
- QStringList mimeTypes;
- mimeTypes << m_subMime.c_str();
// Insert databases which match the "type" of the source, including a user-visible
// description and a database IDs. Exactly one of the databases should be marked
// as the default one used by the source.
std::auto_ptr<CollectionFetchJob> fetchJob(DisableAutoDelete(new CollectionFetchJob(Collection::root(),
CollectionFetchJob::Recursive)));
- fetchJob->fetchScope().setContentMimeTypes(mimeTypes);
+ fetchJob->fetchScope().setContentMimeTypes(m_mimeTypes);
if (!fetchJob->exec()) {
throwError("cannot list collections");
void AkonadiSyncSource::open()
{
+ if (!GRunIsMain()) {
+ GRunInMain(boost::bind(&AkonadiSyncSource::open, this));
+ return;
+ }
+
start();
// the "evolutionsource" property, empty for default,
}
m_collection = Collection::fromUrl(KUrl(id.c_str()));
+
+ // Verify that the collection exists and ensure that
+ // m_collection.contentMimeTypes() returns valid information. The
+ // collection constructed so far only contains the collection ID.
+ std::auto_ptr<CollectionFetchJob> fetchJob(DisableAutoDelete(new CollectionFetchJob(m_collection,
+ CollectionFetchJob::Base)));
+ if (!fetchJob->exec()) {
+ throwError(StringPrintf("cannot fetch collection %s", id.c_str()));
+ }
+ Collection::List collections = fetchJob->collections();
+ if (collections.isEmpty()) {
+ throwError(StringPrintf("collection %s not found", id.c_str()));
+ }
+ m_collection = collections.front();
+
+ m_contentMimeType = "";
+ QStringList collectionMimeTypes = m_collection.contentMimeTypes();
+ foreach (const QString &mimeType, m_mimeTypes) {
+ if (collectionMimeTypes.contains(mimeType)) {
+ m_contentMimeType = mimeType;
+ break;
+ }
+ }
+ if (m_contentMimeType.isEmpty()) {
+ throwError(StringPrintf("Resource %s cannot store items of type(s) %s. It can only store %s.",
+ id.c_str(),
+ m_mimeTypes.join(",").toUtf8().constData(),
+ collectionMimeTypes.join(",").toUtf8().constData()));
+ }
}
void AkonadiSyncSource::listAllItems(SyncSourceRevisions::RevisionMap_t &revisions)
{
+ if (!GRunIsMain()) {
+ GRunInMain(boost::bind(&AkonadiSyncSource::listAllItems, this, boost::ref(revisions)));
+ return;
+ }
+
// copy all local IDs and the corresponding revision
std::auto_ptr<ItemFetchJob> fetchJob(DisableAutoDelete(new ItemFetchJob(m_collection)));
-
if (!fetchJob->exec()) {
throwError("listing items");
}
BOOST_FOREACH (const Item &item, fetchJob->items()) {
// Filter out items which don't have the right type (for example, VTODO when
// syncing events)
- if (item.mimeType() == m_subMime.c_str()) {
+ if (m_mimeTypes.contains(item.mimeType())) {
revisions[QByteArray::number(item.id()).constData()] =
QByteArray::number(item.revision()).constData();
}
TrackingSyncSource::InsertItemResult AkonadiSyncSource::insertItem(const std::string &luid, const std::string &data, bool raw)
{
+ if (!GRunIsMain()) {
+ InsertItemResult result;
+ GRunInMain(boost::lambda::var(result) = boost::lambda::bind(&AkonadiSyncSource::insertItem, this, boost::cref(luid), boost::cref(data), raw));
+ return result;
+ }
+
Item item;
if (luid.empty()) {
- item.setMimeType(m_subMime.c_str());
+ item.setMimeType(m_mimeTypes.front());
item.setPayloadFromData(QByteArray(data.c_str()));
std::auto_ptr<ItemCreateJob> createJob(DisableAutoDelete(new ItemCreateJob(item, m_collection)));
if (!createJob->exec()) {
void AkonadiSyncSource::removeItem(const string &luid)
{
+ if (!GRunIsMain()) {
+ GRunInMain(boost::bind(&AkonadiSyncSource::removeItem, this, boost::cref(luid)));
+ return;
+ }
+
Entity::Id syncItemId = QByteArray(luid.c_str()).toLongLong();
// Delete the item from our collection
void AkonadiSyncSource::readItem(const std::string &luid, std::string &data, bool raw)
{
+ if (!GRunIsMain()) {
+ GRunInMain(boost::bind(&AkonadiSyncSource::readItem, this, boost::cref(luid), boost::ref(data), raw));
+ return;
+ }
+
Entity::Id syncItemId = QByteArray(luid.c_str()).toLongLong();
std::auto_ptr<ItemFetchJob> fetchJob(DisableAutoDelete(new ItemFetchJob(Item(syncItemId))));
void start();
protected:
Akonadi::Collection m_collection;
- const std::string m_subMime;
+
+ /**
+ * MIME types(s) of items, from submime constructor parameter.
+ * Only one format is supported, but it may have different aliases (for example,
+ * application/x-vnd.kde.notes == application/x-vnd.akonadi.note).
+ */
+ QStringList m_mimeTypes;
+
+ /**
+ * The actual type to be used inside the collection. Set after opening
+ * the collection.
+ */
+ QString m_contentMimeType;
};
class AkonadiContactSource : public AkonadiSyncSource
QString toSynthesis(QString data);
public:
- AkonadiMemoSource(const SyncSourceParams ¶ms)
- : AkonadiSyncSource("text/x-vnd.akonadi.note", params)
+ AkonadiMemoSource(const SyncSourceParams ¶ms) :
+ AkonadiSyncSource("text/x-vnd.akonadi.note,application/x-vnd.kde.notes", params)
{
}
if ! test "$KDEPIM_CFLAGS"; then
KDEPIM_CFLAGS="-I`kde4-config --path include` -I`kde4-config --path include`/KDE"
if test "$QMAKE"; then
- KDEPIM_CFLAGS="$KDEPIM_CFLAGS -I`$QMAKE -query QT_INSTALL_HEADERS`"
+ KDEPIM_CFLAGS="$KDEPIM_CFLAGS -I`$QMAKE -query QT_INSTALL_HEADERS` -I`$QMAKE -query QT_INSTALL_HEADERS`/QtCore"
fi
fi
if ! test "$KDEPIM_LIBS"; then
#define INCL_GDBUS_CXX_BRIDGE
#include "gdbus-cxx.h"
+#include <stdint.h>
#include <gio/gio.h>
#include <map>
CORE_CXXFLAGS = $(SYNTHESIS_CFLAGS) $(CPPUNIT_CXXFLAGS)
CORE_LDADD = $(SYNCEVOLUTION_LDADD) src/syncevo/libsyncevolution.la $(GLIB_LIBS) $(GTHREAD_LIBS) $(GOBJECT_LIBS) $(LIBS)
CORE_DEP = $(SYNCEVOLUTION_DEP) src/syncevo/libsyncevolution.la $(SYNTHESIS_DEP)
-CORE_LD_FLAGS = -Wl,-uSyncEvolution_Module_Version -Wl,--export-dynamic $(CPPUNIT_LDFLAGS)
+CORE_LD_FLAGS = -Wl,-uSyncEvolution_Module_Version -Wl,--export-dynamic $(CPPUNIT_LDFLAGS) $(ADDITIONAL_LDFLAGS)
+
+if ENABLE_ICALTZ_UTIL
+# Force inclusion of our own icaltz-util.o into binaries even though
+# we do not call the icaltzutil_fetch_timezone directly ourself.
+# That way it is there if or when libical needs it.
+CORE_LD_FLAGS += -Wl,-usyncevo_fetch_timezone
+endif
# put link to static c++ library into current directory, needed if compiling with --enable-static-c++
src/libstdc++.a :
src_client_test_SOURCES = \
src/client-test-app.cpp \
test/ClientTest.cpp \
+ test/IcalTest.cpp \
test/ClientTest.h \
test/ClientTestAssert.h \
test/client-test-main.cpp \
src_client_test_CXXFLAGS = $(filter-out -O2, @CPPUNIT_CXXFLAGS@ $(PCRECPP_CFLAGS) $(SYNCEVOLUTION_CXXFLAGS) $(CORE_CXXFLAGS) $(filter-out -O2 -g -W -Wall, $(QT_CXXFLAGS)) $(SYNCEVO_WFLAGS))
src_client_test_LDFLAGS = @CPPUNIT_LDFLAGS@ $(src_client_test_undef) $(CORE_LD_FLAGS) $(QT_LDFLAGS)
src_client_test_LDADD = $(src_client_test_libs) $(CORE_LDADD) $(PCRECPP_LIBS) $(SYNTHESIS_ENGINE) $(QT_LIBS)
+if !ENABLE_EVOLUTION_COMPATIBILITY
+src_client_test_LDADD += $(LIBICAL_LIBS)
+endif
+
# These dependencies are intentionally a bit too broad:
# they ensure that all files are in place to *run* client-test.
#endif
#include <boost/bind.hpp>
+#include <boost/lambda/bind.hpp>
#include <set>
#include <string.h>
* Called by additional threads. Returns when check()
* returned false.
*/
- void blockOnCheck(const boost::function<bool ()> &check);
+ void blockOnCheck(const boost::function<bool ()> &check, bool checkFirst);
};
void PendingChecks::runChecks()
}
}
-void PendingChecks::blockOnCheck(const boost::function<bool ()> &check)
+void PendingChecks::blockOnCheck(const boost::function<bool ()> &check, bool checkFirst)
{
DynMutex::Guard guard = m_mutex.lock();
// When we get here, the conditions for returning may already have
// been met. Check before sleeping. If we need to continue, then
// holding the mutex ensures that the main thread will run the
// check on the next iteration.
- if (check()) {
+ if (!checkFirst || check()) {
m_checks.insert(&check);
+ if (!checkFirst) {
+ // Must wake up the main thread from its g_main_context_iteration.
+ g_main_context_wakeup(g_main_context_default());
+ }
do {
m_cond.wait(m_mutex);
} while (m_checks.find(&check) != m_checks.end());
}
}
-void GRunWhile(const boost::function<bool ()> &check)
+void GRunWhile(const boost::function<bool ()> &check, bool checkFirst)
{
static PendingChecks checks;
if (g_main_context_is_owner(g_main_context_default())) {
}
} else {
// Transfer check into main thread.
- checks.blockOnCheck(check);
+ checks.blockOnCheck(check, checkFirst);
}
}
+static std::string NoThrow(const boost::function<void ()> &action) throw ()
+{
+ try {
+ action();
+ } catch (...) {
+ //
+ std::string explanation;
+ Exception::handle(explanation, HANDLE_EXCEPTION_NO_ERROR);
+ return explanation;
+ }
+ return "";
+}
+
+void GRunInMain(const boost::function<void ()> &action)
+{
+ std::string explanation;
+
+ // Wrap in NoThrow, then rethrow exception in current thread if there was a problem.
+ GRunWhile((boost::lambda::var(explanation) = boost::lambda::bind(NoThrow, action), false), false);
+ if (!explanation.empty()) {
+ Exception::tryRethrow(explanation, true);
+ }
+}
+
+bool GRunIsMain()
+{
+ // This works because SyncContext::initMain() permanently acquires
+ // the main context in the main thread.
+ return g_main_context_is_owner(g_main_context_default());
+}
+
#ifdef ENABLE_UNIT_TESTS
class GLibTest : public CppUnit::TestFixture {
GRunWhile(! boost::lambda::var(done)); \
} while (false); \
-
-/**
- * Process events in the default context while the callback returns
- * true.
- *
- * This must be used instead of g_main_context_iterate() by code which
- * may get called in other threads. In that case the check is
- * transferred to the main thread which does the actual event
- * processing. g_main_context_iterate() would just block because we
- * register the main thread as permanent owner of the default context,
- * or would suffer from race conditions if we didn't.
- *
- * The main thread must also be running GRunWhile().
- *
- * Exceptions in the check code are fatal and should be avoided.
- */
-void GRunWhile(const boost::function<bool ()> &check);
-
#endif // HAVE_GLIB
SE_END_CXX
static const char *LogfileBasename = "syncevolution-log";
+static std::string RealPath(const std::string &path)
+{
+ std::string buffer;
+ char *newPath = realpath(path.c_str(), NULL);
+ if (newPath) {
+ buffer = newPath;
+ free(newPath);
+ return buffer;
+ } else {
+ return path;
+ }
+}
+
+
SyncContext::SyncContext()
{
init();
return;
}
+ // Resolve symbolic links in path now, in case that they change later
+ // while the session runs. Relies on being allowed to pass NULL. If that's
+ // not allowed, we ignore the error and continue to use the known path.
+ errno = 0;
+ m_logdir = RealPath(m_logdir);
+ SE_LOG_DEBUG(NULL, "log path -> %s, %s",
+ m_logdir.c_str(),
+ errno ? strerror(errno) : "<okay>");
+
// the config name has been normalized
string peer = m_client.getConfigName();
m_path = "";
} else {
setLogdir(path);
+ SE_LOG_DEBUG(NULL, "checking log dir %s", m_logdir.c_str());
if (mode == SESSION_CREATE) {
// create unique directory name in the given directory
time_t ts = time(NULL);
}
}
m_logfile = m_path + "/" + LogfileBasename + ".html";
+ SE_LOG_DEBUG(NULL, "logfile: %s", m_logfile.c_str());
}
// update log level of default logger and our own replacement
}
/** sets a fixed directory for database files without redirecting logging */
- void setPath(const string &path) { m_path = path; }
+ void setPath(const string &path) { m_path = RealPath(path); SE_LOG_DEBUG(NULL, "setPath(%s) -> %s", path.c_str(), m_path.c_str()); }
// return log directory, empty if not enabled
const string &getLogdir() {
string logdir = getLogDir();
ReadDir dirs(logdir);
BOOST_FOREACH(const string &dir, dirs) {
- sessions.push_back(logdir + "/" + dir);
+ sessions.push_back(RealPath(logdir + "/" + dir));
}
sort(sessions.begin(), sessions.end());
return sessions;
std::string modname;
size_t offset = basename.rfind('-');
if (offset != basename.npos) {
- modname = basename.substr(offset);
+ modname = basename.substr(0, offset);
} else {
modname = basename;
}
]]></macro>
<macro name="CALENDAR_BEFOREWRITE_SCRIPT"><![CDATA[
+ if (UID == EMPTY) { UID = newuid(); }
+
// set UTC time of generation for iCalendar 2.0 DTSTAMP
DGENERATED = NOW();
// ensure that there is a DMODIFIED = LAST-MODIFIED property,
#define EDS_ABI_WRAPPER_NO_REDEFINE 1
#include <syncevo/eds_abi_wrapper.h>
#include <syncevo/SyncContext.h>
+#include <syncevo/util.h>
#include <string>
#include <sstream>
using namespace std;
namespace {
-std::string lookupDebug, lookupInfo;
+static std::string &getLookupDebug() { static std::string lookupDebug; return lookupDebug; }
+static std::string &getLookupInfo() { static std::string lookupInfo; return lookupInfo; }
}
const char *symname = NULL;
while (funcptr) {
symname = va_arg(ap, const char *);
- *funcptr = dlsym(dlhandle, symname);
+ // Don't overwrite address already found earlier. Needed
+ // for icaltimezone_get_component(), which may be
+ // overridden by ourselves.
if (!*funcptr) {
- debug << symname << " not found" << std::endl;
- allfound = false;
+ *funcptr = dlsym(dlhandle, symname);
+ if (!*funcptr) {
+ debug << symname << " not found" << std::endl;
+ allfound = false;
+ }
}
funcptr = va_arg(ap, void **);
}
}
}
- lookupInfo += info.str();
- lookupDebug += info.str();
- lookupDebug += debug.str();
+ getLookupInfo() += info.str();
+ getLookupDebug() += info.str();
+ getLookupDebug() += debug.str();
return dlhandle;
}
initialized = true;
}
+ // Bind icaltimezone_get_component() to the version found (or not found,
+ // if internal-icaltz not configured) in our own executable.
+ void *get = dlsym(RTLD_DEFAULT, "icaltimezone_get_component");
+ getLookupDebug() += SyncEvo::StringPrintf("icaltimezone_get_component = %p", get);
+#if defined(ENABLE_ECAL) || defined(ENABLE_ICAL)
+ EDSAbiWrapperSingleton.icaltimezone_get_component = (icalcomponent *(*)(icaltimezone *))get;
+#endif
+
# ifdef HAVE_EDS
edshandle =
findSymbols("libedataserver-1.2.so", 7, 16,
&EDSAbiWrapperSingleton.icalcomponent_get_summary, "icalcomponent_get_summary", \
&EDSAbiWrapperSingleton.icalcomponent_get_uid, "icalcomponent_get_uid", \
&EDSAbiWrapperSingleton.icalcomponent_get_dtstart, "icalcomponent_get_dtstart", \
+ &EDSAbiWrapperSingleton.icalcomponent_set_dtstart, "icalcomponent_set_dtstart", \
&EDSAbiWrapperSingleton.icalcomponent_isa, "icalcomponent_isa", \
&EDSAbiWrapperSingleton.icalcomponent_new_clone, "icalcomponent_new_clone", \
&EDSAbiWrapperSingleton.icalcomponent_new_from_string, "icalcomponent_new_from_string", \
&EDSAbiWrapperSingleton.icaltimezone_get_component, "icaltimezone_get_component", \
&EDSAbiWrapperSingleton.icaltimezone_get_tzid, "icaltimezone_get_tzid", \
&EDSAbiWrapperSingleton.icaltimezone_new, "icaltimezone_new", \
- &EDSAbiWrapperSingleton.icaltimezone_set_component, "icaltimezone_set_component",
+ &EDSAbiWrapperSingleton.icaltimezone_set_component, "icaltimezone_set_component", \
+ &EDSAbiWrapperSingleton.icaltimezone_get_location, "icaltimezone_get_location", \
+ &EDSAbiWrapperSingleton.ical_tzid_prefix, "ical_tzid_prefix", \
+ &EDSAbiWrapperSingleton.icalerror_set_errno, "icalerror_set_errno", \
+ &EDSAbiWrapperSingleton.icalproperty_new_dtstart, "icalproperty_new_dtstart", \
+ &EDSAbiWrapperSingleton.icalproperty_new_rrule, "icalproperty_new_rrule", \
+ &EDSAbiWrapperSingleton.icalproperty_new_tzid, "icalproperty_new_tzid", \
+ &EDSAbiWrapperSingleton.icalproperty_new_tzname, "icalproperty_new_tzname", \
+ &EDSAbiWrapperSingleton.icalproperty_new_tzoffsetfrom, "icalproperty_new_tzoffsetfrom", \
+ &EDSAbiWrapperSingleton.icalproperty_new_tzoffsetto, "icalproperty_new_tzoffsetto", \
+ &EDSAbiWrapperSingleton.icalproperty_new_x, "icalproperty_new_x", \
+ &EDSAbiWrapperSingleton.icalproperty_set_x_name, "icalproperty_set_x_name", \
+ &EDSAbiWrapperSingleton.icalrecur_iterator_free, "icalrecur_iterator_free", \
+ &EDSAbiWrapperSingleton.icalrecur_iterator_new, "icalrecur_iterator_new", \
+ &EDSAbiWrapperSingleton.icalrecur_iterator_next, "icalrecur_iterator_next", \
+ &EDSAbiWrapperSingleton.icalrecurrencetype_clear, "icalrecurrencetype_clear", \
+ &EDSAbiWrapperSingleton.icaltime_day_of_week, "icaltime_day_of_week", \
+ &EDSAbiWrapperSingleton.icaltime_days_in_month, "icaltime_days_in_month", \
+ &EDSAbiWrapperSingleton.icaltzutil_get_zone_directory, "icaltzutil_get_zone_directory", \
+
// icalparameter_new_scheduleagent was added in libical.so.1. We
// use it only to detect the libical 1.0 ABI. This works because
initialized = true;
}
+ // Bind icaltimezone_get_component() and
+ // icaltzutil_fetch_timezone() to the version found (or not found,
+ // if not enabled) in our own executable. Without this, the
+ // dynamic linker on Ubuntu Saucy and Trusty prefers the versions
+ // from libical once it is loaded.
+ void *fetch = dlsym(RTLD_DEFAULT, "icaltzutil_fetch_timezone");
+ void *get = dlsym(RTLD_DEFAULT, "icaltimezone_get_component");
+ getLookupDebug() += SyncEvo::StringPrintf("icaltzutil_fetch_timezone = %p\n", fetch);
+ getLookupDebug() += SyncEvo::StringPrintf("icaltimezone_get_component = %p", get);
+
static const char *soname = "libical.so.1";
void *dlhandle = dlopen(soname, RTLD_GLOBAL|RTLD_LAZY);
if (dlhandle) {
- lookupInfo += "using ";
- lookupInfo += soname;
- lookupInfo += "\n";
+ getLookupInfo() += "using ";
+ getLookupInfo() += soname;
+ getLookupInfo() += "\n";
EDSAbiHaveIcal1 = 1;
dlclose(dlhandle);
}
}
#endif // EVOLUTION_COMPATIBILITY
-extern "C" const char *EDSAbiWrapperInfo() { EDSAbiWrapperInit(); return lookupInfo.c_str(); }
-extern "C" const char *EDSAbiWrapperDebug() { EDSAbiWrapperInit(); return lookupDebug.c_str(); }
+extern "C" const char *EDSAbiWrapperInfo() { EDSAbiWrapperInit(); return getLookupInfo().c_str(); }
+extern "C" const char *EDSAbiWrapperDebug() { EDSAbiWrapperInit(); return getLookupDebug().c_str(); }
#ifdef ENABLE_DBUS_TIMEOUT_HACK
/**
const char* (*icalcomponent_get_summary) (icalcomponent* comp);
const char* (*icalcomponent_get_uid) (icalcomponent* comp);
struct icaltimetype (*icalcomponent_get_dtstart)(icalcomponent* comp);
+ void (*icalcomponent_set_dtstart)(icalcomponent* comp, struct icaltimetype v);
icalcomponent_kind (*icalcomponent_isa) (const icalcomponent* component);
icalcomponent* (*icalcomponent_new_clone) (icalcomponent* component);
icalcomponent* (*icalcomponent_new_from_string) (char* str);
const char* (*icalproperty_get_value_as_string)(const icalproperty* prop);
const char* (*icalproperty_get_x_name)(icalproperty* prop);
icalproperty* (*icalproperty_new_from_string)(const char* str);
+ icalproperty* (*icalproperty_new_dtstart)(struct icaltimetype v);
+ icalproperty* (*icalproperty_new_rrule)(struct icalrecurrencetype v);
+ icalproperty* (*icalproperty_new_tzid)(const char* v);
+ icalproperty* (*icalproperty_new_tzname)(const char* v);
+ icalproperty* (*icalproperty_new_tzoffsetfrom)(int v);
+ icalproperty* (*icalproperty_new_tzoffsetto)(int v);
+ icalproperty* (*icalproperty_new_x)(const char* v);
+ void (*icalproperty_set_x_name)(icalproperty* prop, const char* name);
+
+ void (*icalrecur_iterator_free)(icalrecur_iterator*);
+ icalrecur_iterator* (*icalrecur_iterator_new)(struct icalrecurrencetype rule, struct icaltimetype dtstart);
+ struct icaltimetype (*icalrecur_iterator_next)(icalrecur_iterator*);
+
+ void (*icalrecurrencetype_clear)(struct icalrecurrencetype *r);
+ int (*icaltime_day_of_week)(const struct icaltimetype t);
+ int (*icaltime_days_in_month)(const int month, const int year);
int (*icaltime_is_null_time)(const struct icaltimetype t);
int (*icaltime_is_utc)(const struct icaltimetype t);
char* (*icaltimezone_get_tzid) (icaltimezone *zone);
icaltimezone *(*icaltimezone_new) (void);
int (*icaltimezone_set_component) (icaltimezone *zone, icalcomponent *comp);
+ const char* (*icaltimezone_get_location) (icaltimezone *zone);
+
+ void (*icalerror_set_errno)(icalerrorenum x);
+ const char *(*icaltzutil_get_zone_directory)(void);
+ const char **ical_tzid_prefix;
// Optional, added in libical.so.1. Can't be called be like this,
// we merely check for the method to detect the ABI.
# define icalcomponent_get_summary EDSAbiWrapperSingleton.icalcomponent_get_summary
# define icalcomponent_get_uid EDSAbiWrapperSingleton.icalcomponent_get_uid
# define icalcomponent_get_dtstart EDSAbiWrapperSingleton.icalcomponent_get_dtstart
+# define icalcomponent_set_dtstart EDSAbiWrapperSingleton.icalcomponent_set_dtstart
# define icalcomponent_isa EDSAbiWrapperSingleton.icalcomponent_isa
# define icalcomponent_new_clone EDSAbiWrapperSingleton.icalcomponent_new_clone
# define icalcomponent_new_from_string EDSAbiWrapperSingleton.icalcomponent_new_from_string
# define icaltimezone_get_tzid EDSAbiWrapperSingleton.icaltimezone_get_tzid
# define icaltimezone_new EDSAbiWrapperSingleton.icaltimezone_new
# define icaltimezone_set_component EDSAbiWrapperSingleton.icaltimezone_set_component
+# define icaltimezone_get_location EDSAbiWrapperSingleton.icaltimezone_get_location
+
+# define ical_tzid_prefix (*EDSAbiWrapperSingleton.ical_tzid_prefix)
+# define icalerror_set_errno EDSAbiWrapperSingleton.icalerror_set_errno
+# define icalproperty_new_dtstart EDSAbiWrapperSingleton.icalproperty_new_dtstart
+# define icalproperty_new_rrule EDSAbiWrapperSingleton.icalproperty_new_rrule
+# define icalproperty_new_tzid EDSAbiWrapperSingleton.icalproperty_new_tzid
+# define icalproperty_new_tzname EDSAbiWrapperSingleton.icalproperty_new_tzname
+# define icalproperty_new_tzoffsetfrom EDSAbiWrapperSingleton.icalproperty_new_tzoffsetfrom
+# define icalproperty_new_tzoffsetto EDSAbiWrapperSingleton.icalproperty_new_tzoffsetto
+# define icalproperty_new_x EDSAbiWrapperSingleton.icalproperty_new_x
+# define icalproperty_set_x_name EDSAbiWrapperSingleton.icalproperty_set_x_name
+# define icalrecur_iterator_free EDSAbiWrapperSingleton.icalrecur_iterator_free
+# define icalrecur_iterator_new EDSAbiWrapperSingleton.icalrecur_iterator_new
+# define icalrecur_iterator_next EDSAbiWrapperSingleton.icalrecur_iterator_next
+# define icalrecurrencetype_clear EDSAbiWrapperSingleton.icalrecurrencetype_clear
+# define icaltime_day_of_week EDSAbiWrapperSingleton.icaltime_day_of_week
+# define icaltime_days_in_month EDSAbiWrapperSingleton.icaltime_days_in_month
+# define icaltzutil_get_zone_directory EDSAbiWrapperSingleton.icaltzutil_get_zone_directory
+
# endif /* ENABLE_ICAL */
# ifdef ENABLE_BLUETOOTH
# define sdp_close EDSAbiWrapperSingleton.sdp_close
--- /dev/null
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Authors :
+ * Chenthill Palanisamy <pchenthill@novell.com>
+ *
+ * Copyright 2007, Novell, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU Lesser General Public
+ * License as published by the Free Software Foundation.
+ *
+ * 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/*
+ * Compile with
+ * gcc -c -Wall -DDISABLE_ICALTZUTIL_GET_ZONE_DIRECTORY -DICALTZ_UTIL_MAIN -DHAVE_UNISTD_H -DHAVE_ENDIAN_H -DHAVE_BYTESWAP_H $(pkg-config --cflags --libs libical) -o icaltz-util icaltz-util.c
+ * to get an utility which will print the VTIMEZONE definition of
+ * a certain location, for example "Europe/Berlin".
+ *
+ * With -DDISABLE_ICALTZUTIL_GET_ZONE_DIRECTORY the
+ * icaltzutil_get_zone_directory() from libical will be used.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <string.h>
+
+#ifdef ICALTZ_UTIL_MAIN
+#include <stdio.h>
+#endif
+
+#ifdef EVOLUTION_ICAL_COMPATIBILITY
+# include "eds_abi_wrapper.h"
+# else
+# include <libical/icaltimezone.h>
+#endif
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#if defined(sun) && defined(__SVR4)
+#include <sys/types.h>
+#include <sys/byteorder.h>
+#else
+# ifdef HAVE_BYTESWAP_H
+# include <byteswap.h>
+# endif
+# ifdef HAVE_ENDIAN_H
+# include <endian.h>
+# else
+# ifdef HAVE_SYS_ENDIAN_H
+# include <sys/endian.h>
+# ifdef bswap32
+# define bswap_32 bswap32
+# else
+# define bswap_32 swap32
+# endif
+# endif
+# endif
+#endif
+
+#ifdef _MSC_VER
+#if !defined(HAVE_BYTESWAP_H) && !defined(HAVE_SYS_ENDIAN_H) && !defined(HAVE_ENDIAN_H)
+#define bswap_16(x) (((x) << 8) & 0xff00) | (((x) >> 8 ) & 0xff)
+#define bswap_32(x) (((x) << 24) & 0xff000000) \
+ | (((x) << 8) & 0xff0000) \
+ | (((x) >> 8) & 0xff00) \
+ | (((x) >> 24) & 0xff )
+#define bswap_64(x) ((((x) & 0xff00000000000000ull) >> 56) \
+ | (((x) & 0x00ff000000000000ull) >> 40) \
+ | (((x) & 0x0000ff0000000000ull) >> 24) \
+ | (((x) & 0x000000ff00000000ull) >> 8) \
+ | (((x) & 0x00000000ff000000ull) << 8) \
+ | (((x) & 0x0000000000ff0000ull) << 24) \
+ | (((x) & 0x000000000000ff00ull) << 40) \
+ | (((x) & 0x00000000000000ffull) << 56))
+#endif
+#include <io.h>
+#endif
+
+#if defined(__APPLE__)
+#define bswap_16(x) (((x) << 8) & 0xff00) | (((x) >> 8 ) & 0xff)
+#define bswap_32 __builtin_bswap32
+#define bswap_64 __builtin_bswap64
+#endif
+
+#ifndef PATH_MAX
+#define PATH_MAX 512
+#endif
+
+#ifndef F_OK
+#define F_OK 0
+#endif
+
+#ifndef R_OK
+#define R_OK 4
+#endif
+
+#include <limits.h>
+#include <time.h>
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <libical/icalerror.h>
+#include "icaltz-util.h"
+
+typedef struct
+{
+ char ttisgmtcnt [4];
+ char ttisstdcnt[4];
+ char leapcnt[4];
+ char timecnt[4];
+ char typecnt[4];
+ char charcnt[4];
+} tzinfo;
+
+static int r_pos [] = {1, 2, 3, -2, -1};
+
+#ifndef DISABLE_ICALTZUTIL_GET_ZONE_DIRECTORY
+static char *search_paths [] = {"/usr/share/zoneinfo","/usr/lib/zoneinfo","/etc/zoneinfo","/usr/share/lib/zoneinfo"};
+static char *zdir = NULL;
+#endif
+
+#define NUM_SEARCH_PATHS (sizeof (search_paths)/ sizeof (search_paths [0]))
+#define EFREAD(buf,size,num,fs) \
+ if (fread (buf, size, num, fs) == 0 && ferror (fs)) {\
+ icalerror_set_errno (ICAL_FILE_ERROR); \
+ goto error; \
+ } \
+
+typedef struct
+{
+ long int gmtoff;
+ unsigned char isdst;
+ unsigned int abbr;
+ unsigned char isstd;
+ unsigned char isgmt;
+ char *zname;
+
+} ttinfo;
+
+typedef struct
+{
+ time_t transition;
+ long int change;
+} leap;
+
+#ifndef EVOLUTION_ICAL_COMPATIBILITY
+extern const char *ical_tzid_prefix;
+#endif
+
+static int
+decode (const void *ptr)
+{
+#if defined(sun) && defined(__SVR4)
+ if (sizeof (int) == 4)
+#ifdef _BIG_ENDIAN
+ return *(const int *) ptr;
+#else
+ return BSWAP_32 (*(const int *) ptr);
+#endif
+#else
+ if ((BYTE_ORDER == BIG_ENDIAN) && sizeof (int) == 4)
+ return *(const int *) ptr;
+ else if (BYTE_ORDER == LITTLE_ENDIAN && sizeof (int) == 4)
+ return bswap_32 (*(const int *) ptr);
+#endif
+ else
+ {
+ const unsigned char *p = ptr;
+ int result = *p & (1 << (CHAR_BIT - 1)) ? ~0 : 0;
+
+ result = (result << 8) | *p++;
+ result = (result << 8) | *p++;
+ result = (result << 8) | *p++;
+ result = (result << 8) | *p++;
+
+ return result;
+ }
+}
+
+static char *
+zname_from_stridx (char *str, long int idx)
+{
+ int i = 0;
+ char *ret;
+ size_t size;
+
+ i = idx;
+
+ while (str [i] != '\0')
+ i++;
+
+ size = i - idx;
+ str += idx;
+ ret = (char *) malloc (size + 1);
+ ret = strncpy (ret, str, size);
+ ret [size] = '\0';
+
+ return ret;
+}
+
+static void
+find_transidx (time_t *transitions, ttinfo *types, int *trans_idx, long int num_trans, int *stdidx, int *dstidx)
+{
+ time_t now, year_start;
+ int i, found = 0;
+ struct icaltimetype itime;
+
+ now = time (NULL);
+ itime = icaltime_from_timet (now, 0);
+ itime.month = itime.day = 1;
+ itime.hour = itime.minute = itime.second = 0;
+ year_start = icaltime_as_timet(itime);
+
+ /* Set this by default */
+ *stdidx = (num_trans - 1);
+
+ for (i = (num_trans - 1); i >= 0; --i)
+ if (year_start < transitions [i]) {
+ int idx;
+ found = 1;
+ idx = trans_idx [i];
+ (types [idx].isdst) ? (*dstidx = i) : (*stdidx = i);
+ }
+
+ /* If the transition found is the last among the list, prepare to use the last two transtions.
+ * Using this will most likely throw the DTSTART of the resulting component off by 1 or 2 days
+ * but it would set right by the adjustment made.
+ * NOTE: We need to use the last two transitions only because there is no data for the future
+ * transitions.
+ */
+ if (found && (*dstidx == -1)) {
+ *dstidx = ((*stdidx) - 1);
+ }
+
+ return;
+}
+
+#ifndef DISABLE_ICALTZUTIL_GET_ZONE_DIRECTORY
+static void
+set_zonedir (void)
+{
+ char file_path[PATH_MAX];
+ const char *fname = ZONES_TAB_SYSTEM_FILENAME;
+ int i;
+
+ for (i = 0;i < NUM_SEARCH_PATHS; i++) {
+ sprintf (file_path, "%s/%s", search_paths [i], fname);
+ if (!access (file_path, F_OK|R_OK)) {
+ zdir = search_paths [i];
+ break;
+ }
+ }
+}
+
+
+const char *
+icaltzutil_get_zone_directory (void)
+{
+ if (!zdir)
+ set_zonedir ();
+
+ return zdir;
+}
+#endif
+
+/* Calculate the relative position of the week in a month from a date */
+static int
+calculate_pos (icaltimetype icaltime)
+{
+ int pos;
+
+ pos = (icaltime.day -1) / 7;
+
+ /* Check if pos 3 is the last occurence of the week day in the month */
+ if (pos == 3 && ((icaltime.day + 7) > icaltime_days_in_month (icaltime.month, icaltime.year)))
+ pos = 4;
+
+ return r_pos [pos];
+}
+
+static void
+adjust_dtstart_day_to_rrule (icalcomponent *comp, struct icalrecurrencetype rule)
+{
+ time_t now, year_start;
+ struct icaltimetype start, comp_start, iter_start, itime;
+ icalrecur_iterator *iter;
+
+ now = time (NULL);
+ itime = icaltime_from_timet (now, 0);
+ itime.month = itime.day = 1;
+ itime.hour = itime.minute = itime.second = 0;
+ year_start = icaltime_as_timet(itime);
+
+ comp_start = icalcomponent_get_dtstart (comp);
+ start = icaltime_from_timet (year_start, 0);
+
+ iter = icalrecur_iterator_new (rule, start);
+ iter_start = icalrecur_iterator_next (iter);
+ icalrecur_iterator_free (iter);
+
+ if (iter_start.day != comp_start.day) {
+ comp_start.day = iter_start.day;
+ icalcomponent_set_dtstart (comp, comp_start);
+ }
+}
+
+icalcomponent*
+icaltzutil_fetch_timezone (const char *location)
+{
+ int ret = 0;
+ FILE *f;
+ tzinfo type_cnts;
+ unsigned int i, num_trans, num_types = 0, num_chars, num_leaps, num_isstd, num_isgmt;
+ time_t *transitions = NULL;
+ time_t trans;
+ int *trans_idx = NULL, dstidx = -1, stdidx = -1, pos, sign, zidx, zp_idx;
+ ttinfo *types = NULL;
+ char *znames = NULL, *full_path, *tzid, *r_trans, *temp = NULL;
+ leap *leaps = NULL;
+ icalcomponent *tz_comp = NULL, *dst_comp = NULL, *std_comp = NULL;
+ icalproperty *icalprop;
+ icaltimetype dtstart, icaltime;
+ struct icalrecurrencetype ical_recur;
+ const char *basedir;
+
+ /* if (!location) return NULL; */
+
+ basedir = icaltzutil_get_zone_directory();
+ if (!basedir) {
+ icalerror_set_errno (ICAL_FILE_ERROR);
+ return NULL;
+ }
+
+ full_path = (char *) malloc (strlen (basedir) + strlen (location) + 2);
+ sprintf (full_path,"%s/%s",basedir, location);
+
+ if ((f = fopen (full_path, "rb")) == 0) {
+ icalerror_set_errno (ICAL_FILE_ERROR);
+ free (full_path);
+ return NULL;
+ }
+
+ if ((ret = fseek (f, 20, SEEK_SET)) != 0) {
+ icalerror_set_errno (ICAL_FILE_ERROR);
+ goto error;
+ }
+
+ EFREAD(&type_cnts, 24, 1, f);
+
+ num_isgmt = decode (type_cnts.ttisgmtcnt);
+ num_leaps = decode (type_cnts.leapcnt);
+ num_chars = decode (type_cnts.charcnt);
+ num_trans = decode (type_cnts.timecnt);
+ num_isstd = decode (type_cnts.ttisstdcnt);
+ num_types = decode (type_cnts.typecnt);
+
+ transitions = calloc (num_trans, sizeof (time_t));
+ temp = calloc (num_trans, 4);
+ r_trans = temp;
+ EFREAD(r_trans, 4, num_trans, f);
+
+ if (num_trans) {
+ trans_idx = calloc (num_trans, sizeof (int));
+ for (i = 0; i < num_trans; i++) {
+ trans_idx [i] = fgetc (f);
+ transitions [i] = decode (r_trans);
+ r_trans += 4;
+ }
+ }
+
+ free (temp);
+ temp = NULL;
+
+ types = calloc (num_types, sizeof (ttinfo));
+ for (i = 0; i < num_types; i++) {
+ unsigned char a [4];
+ int c;
+
+ EFREAD(a, 4, 1, f);
+ c = fgetc (f);
+ types [i].isdst = c;
+ if((c = fgetc (f)) < 0) {
+ c = 0;
+ break;
+ }
+ types [i].abbr = c;
+ types [i].gmtoff = decode (a);
+ }
+
+ znames = (char *) malloc (num_chars);
+ EFREAD(znames, num_chars, 1, f);
+
+ /* We got all the information which we need */
+
+ leaps = calloc (num_leaps, sizeof (leap));
+ for (i = 0; i < num_leaps; i++) {
+ char c [4];
+
+ EFREAD (c, 4, 1, f);
+ leaps [i].transition = decode (c);
+
+ EFREAD (c, 4, 1, f);
+ leaps [i].change = decode (c);
+ }
+
+ for (i = 0; i < num_isstd; ++i) {
+ int c = getc (f);
+ types [i].isstd = c != 0;
+ }
+
+ while (i < num_types)
+ types [i++].isstd = 0;
+
+ for (i = 0; i < num_isgmt; ++i) {
+ int c = getc (f);
+ types [i].isgmt = c != 0;
+ }
+
+ while (i < num_types)
+ types [i++].isgmt = 0;
+
+ /* Read all the contents now */
+
+ for (i = 0; i < num_types; i++)
+ types [i].zname = zname_from_stridx (znames, types [i].abbr);
+
+ if (num_trans != 0)
+ find_transidx (transitions, types, trans_idx, num_trans, &stdidx, &dstidx);
+ else
+ stdidx = 0;
+
+ tz_comp = icalcomponent_new (ICAL_VTIMEZONE_COMPONENT);
+
+ /* Add tzid property */
+ tzid = (char *) malloc (strlen (ical_tzid_prefix) + strlen (location) + 8);
+ sprintf (tzid, "%sTzfile/%s", ical_tzid_prefix, location);
+ icalprop = icalproperty_new_tzid (tzid);
+ icalcomponent_add_property (tz_comp, icalprop);
+ free (tzid);
+
+ icalprop = icalproperty_new_x (location);
+ icalproperty_set_x_name (icalprop, "X-LIC-LOCATION");
+ icalcomponent_add_property (tz_comp, icalprop);
+
+ if (stdidx != -1) {
+ if (num_trans != 0)
+ zidx = trans_idx [stdidx];
+ else
+ zidx = 0;
+
+ std_comp = icalcomponent_new (ICAL_XSTANDARD_COMPONENT);
+ icalprop = icalproperty_new_tzname (types [zidx].zname);
+ icalcomponent_add_property (std_comp, icalprop);
+
+ if (dstidx != -1)
+ zp_idx = trans_idx [stdidx-1];
+ else
+ zp_idx = zidx;
+ /* DTSTART localtime uses TZOFFSETFROM UTC offset */
+ if (num_trans != 0)
+ trans = transitions [stdidx] + types [zp_idx].gmtoff;
+ else
+ trans = types [zp_idx].gmtoff;
+ icaltime = icaltime_from_timet (trans, 0);
+ dtstart = icaltime;
+ dtstart.year = 1970;
+ dtstart.minute = dtstart.second = 0;
+ icalprop = icalproperty_new_dtstart (dtstart);
+ icalcomponent_add_property (std_comp, icalprop);
+
+ /* If DST changes are present use RRULE */
+ if (dstidx != -1) {
+ icalrecurrencetype_clear (&ical_recur);
+ ical_recur.freq = ICAL_YEARLY_RECURRENCE;
+ ical_recur.by_month [0] = icaltime.month;
+ pos = calculate_pos (icaltime);
+ pos < 0 ? (sign = -1): (sign = 1);
+ ical_recur.by_day [0] = sign * ((abs (pos) * 8) + icaltime_day_of_week (icaltime));
+ icalprop = icalproperty_new_rrule (ical_recur);
+ icalcomponent_add_property (std_comp, icalprop);
+
+ adjust_dtstart_day_to_rrule (std_comp, ical_recur);
+ }
+ icalprop = icalproperty_new_tzoffsetfrom (types [zp_idx].gmtoff);
+ icalcomponent_add_property (std_comp, icalprop);
+
+ icalprop = icalproperty_new_tzoffsetto (types [zidx].gmtoff);
+ icalcomponent_add_property (std_comp, icalprop);
+
+ icalcomponent_add_component (tz_comp, std_comp);
+ } else
+ icalerror_set_errno (ICAL_MALFORMEDDATA_ERROR);
+
+ if (dstidx != -1) {
+ zidx = trans_idx [dstidx];
+ zp_idx = trans_idx [dstidx-1];
+ dst_comp = icalcomponent_new (ICAL_XDAYLIGHT_COMPONENT);
+ icalprop = icalproperty_new_tzname (types [zidx].zname);
+ icalcomponent_add_property (dst_comp, icalprop);
+
+ /* DTSTART localtime uses TZOFFSETFROM UTC offset */
+ if (num_trans != 0)
+ trans = transitions [dstidx] + types [zp_idx].gmtoff;
+ else
+ trans = types [zp_idx].gmtoff;
+ icaltime = icaltime_from_timet (trans, 0);
+ dtstart = icaltime;
+ dtstart.year = 1970;
+ dtstart.minute = dtstart.second = 0;
+ icalprop = icalproperty_new_dtstart (dtstart);
+ icalcomponent_add_property (dst_comp, icalprop);
+
+ icalrecurrencetype_clear (&ical_recur);
+ ical_recur.freq = ICAL_YEARLY_RECURRENCE;
+ ical_recur.by_month [0] = icaltime.month;
+ pos = calculate_pos (icaltime);
+ pos < 0 ? (sign = -1): (sign = 1);
+ ical_recur.by_day [0] = sign * ((abs (pos) * 8) + icaltime_day_of_week (icaltime));
+ icalprop = icalproperty_new_rrule (ical_recur);
+ icalcomponent_add_property (dst_comp, icalprop);
+
+ adjust_dtstart_day_to_rrule (dst_comp, ical_recur);
+
+ icalprop = icalproperty_new_tzoffsetfrom (types [zp_idx].gmtoff);
+ icalcomponent_add_property (dst_comp, icalprop);
+
+ icalprop = icalproperty_new_tzoffsetto (types [zidx].gmtoff);
+ icalcomponent_add_property (dst_comp, icalprop);
+
+ icalcomponent_add_component (tz_comp, dst_comp);
+ }
+
+error:
+ if (f)
+ fclose (f);
+
+ if (transitions)
+ free (transitions);
+ if (trans_idx)
+ free (trans_idx);
+ if (types) {
+ for (i = 0; i < num_types; i++)
+ if (types [i].zname)
+ free (types [i].zname);
+ free (types);
+ }
+ if (znames)
+ free (znames);
+ free (full_path);
+ if (leaps)
+ free (leaps);
+ if (temp)
+ free (temp);
+
+ return tz_comp;
+}
+
+/*
+ * What follows is copied and slightly simplified (not thread-safe!)
+ * code from icaltimezone.c.
+ *
+ * This is necessary because otherwise, when libsynthesis.so calls
+ * icaltimezone_get_component(), libical.1.so uses its own builtin
+ * icaltzutil_fetch_timezone(). Apparently it exports that without
+ * looking it up via the dynamic linker itself. Therefore we have to
+ * redirect the original icaltimezone_get_component() call.
+ */
+
+static void
+icaltimezone_load_builtin_timezone (icaltimezone *zone)
+{
+ icalcomponent *subcomp;
+ const char *location;
+
+ /* If the location isn't set, it isn't a builtin timezone. */
+ location = icaltimezone_get_location(zone);
+ if (!location || !location[0])
+ return;
+
+ subcomp = icaltzutil_fetch_timezone (location);
+
+ if (!subcomp) {
+ icalerror_set_errno(ICAL_PARSE_ERROR);
+ return;
+ }
+
+ icaltimezone_set_component(zone, subcomp);
+}
+
+#undef icaltimezone_get_component
+icalcomponent *icaltimezone_get_component(icaltimezone *zone)
+{
+ icalcomponent *comp;
+ /* If this is a floating time, without a timezone, return NULL. */
+ if (!zone)
+ return NULL;
+
+ /*
+ * Without this check, icaltimezone_set_component() in
+ * icaltimezone_load_builtin_timezone() will discard the
+ * already loaded component of builtin timezones and replace
+ * it with the new one, so there is no leak. It's just
+ * inefficient.
+ *
+ * However, this method also gets called for non-internal
+ * timezones which were created from a VTIMEZONE and in
+ * that case not using the existing component is wrong.
+ *
+ * Hack: duplicate the internal _icaltimezone struct (from
+ * icaltimezoneimpl.h).
+ */
+ struct _my_icaltimezone {
+ char *tzid;
+ char *location;
+ char *tznames;
+ double latitude;
+ double longitude;
+ icalcomponent *component;
+ };
+ comp = ((struct _my_icaltimezone *)zone)->component;
+ if (!comp) {
+ icaltimezone_load_builtin_timezone (zone);
+ comp = ((struct _my_icaltimezone *)zone)->component;
+ }
+
+ return comp;
+}
+
+/*
+ * For including the .o file in binaries via -Wl,-usyncevo_fetch_timezone.
+ * We cannot use -Wl,-uicaltzutil_fetch_timezone because that gets satisfied by
+ * libical itself.
+ */
+int syncevo_fetch_timezone;
+
+/*
+ * Avoid lazy resolution of the methods that we export. client-test otherwise
+ * ends up calling the libical version of the methods despite having its own
+ * copy compiled into the executable, at least on Ubuntu Saucy and Trusty.
+ */
+/* void *syncevo_fetch_timezone_p = &icaltzutil_fetch_timezone; */
+/* void *syncevo_get_component_p = &icaltimezone_get_component; */
+
+#ifdef ICALTZ_UTIL_MAIN
+int
+main (int argc, char *argv [])
+{
+ icalcomponent *comp = icaltzutil_fetch_timezone (argv [1]);
+ const char *str = comp ? icalcomponent_as_ical_string(comp) : "no such zone";
+ puts(str);
+ return 0;
+}
+#endif
--- /dev/null
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Authors :
+ * Chenthill Palanisamy <pchenthill@novell.com>
+ *
+ * Copyright 2007, Novell, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU Lesser General Public
+ * License as published by the Free Software Foundation.
+ *
+ * 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 this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef ICALTZUTIL_H
+#define ICALTZUTIL_H
+
+#include <libical/ical.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(sun) && defined(__SVR4)
+#define ZONES_TAB_SYSTEM_FILENAME "tab/zone_sun.tab"
+#else
+#define ZONES_TAB_SYSTEM_FILENAME "zone.tab"
+#endif
+
+#if !defined(EVOLUTION_COMPATIBILITY) || !defined(ENABLE_ICAL)
+const char *icaltzutil_get_zone_directory (void);
+extern const char *ical_tzid_prefix;
+#endif
+icalcomponent *icaltzutil_fetch_timezone (const char *location);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
src/syncevo/icalstrdup.h
endif
+if ENABLE_ICALTZ_UTIL
+src_syncevo_sources += \
+ src/syncevo/icaltz-util.c \
+ src/syncevo/icaltz-util.h
+if !ENABLE_EVOLUTION_COMPATIBILITY
+src_syncevo_ldadd += $(LIBICAL_LIBS)
+endif
+endif
src_syncevo_libsyncevolution_includedir= $(includedir)/syncevo
src_syncevo_libsyncevolution_include_HEADERS = \
#define SE_THROW_EXCEPTION_STATUS(_class, _what, _status) \
throw _class(__FILE__, __LINE__, _what, _status)
+
+// GRunWhile(), GRunInMain(), GRunIsMain() depend on glib support,
+// which pretty much is a hard requirement of SyncEvolution these days.
+// Different implementations would be possible and the APIs do not depend
+// on glib types, therefore they are defined here. The glib implemention
+// is in GLibSupport.cpp.
+
+/**
+ * Process events in the default context while the callback returns
+ * true.
+ *
+ * This must be used instead of g_main_context_iterate() by code which
+ * may get called in other threads. In that case the check is
+ * transferred to the main thread which does the actual event
+ * processing. g_main_context_iterate() would just block because we
+ * register the main thread as permanent owner of the default context,
+ * or would suffer from race conditions if we didn't.
+ *
+ * The main thread must also be running GRunWhile().
+ *
+ * Exceptions in the check code are fatal and should be avoided.
+ *
+ * The check code will be called in the current thread once if checkFirst
+ * is true, otherwise it will only be invoked in the main thread. Use that
+ * latter mode for code which must run in the main thread.
+ */
+void GRunWhile(const boost::function<bool ()> &check, bool checkFirst = true);
+
+/**
+ * Runs the action in the main thread once, then returns. Any
+ * exception thrown by the action will be caught and rethrown in the
+ * calling thread.
+ */
+void GRunInMain(const boost::function<void ()> &action);
+
+/**
+ * True iff the calling thread is handling the main event loop. Can
+ * be used to avoid GRunInMain().
+ */
+bool GRunIsMain();
+
SE_END_CXX
#endif // INCL_SYNCEVOLUTION_UTIL
CLASS:PUBLIC\r
ORGANIZER;CN=Patrick Ohly:MAILTO:Patrick.Ohly@gmx.de\r
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;\r
- RSVP=TRUE;CN=Patrick Ohly;LANGUAGE=en:MAILTO:Patrick.Ohly@gmx.de\r
+ RSVP=TRUE;CN=Patrick Ohly:MAILTO:Patrick.Ohly@gmx.de\r
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;\r
- RSVP=TRUE;LANGUAGE=en:MAILTO:john@bar.com\r
+ RSVP=TRUE:MAILTO:john@bar.com\r
CREATED:20060416T205003Z\r
LAST-MODIFIED:20060416T205003Z\r
END:VEVENT\r
SUMMARY:meeting invitation\r
CLASS:PUBLIC\r
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;\r
- RSVP=TRUE;CN=Patrick Ohly;LANGUAGE=en:MAILTO:Patrick.Ohly@gmx.de\r
+ RSVP=TRUE;CN=Patrick Ohly:MAILTO:Patrick.Ohly@gmx.de\r
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;\r
- RSVP=TRUE;LANGUAGE=en:MAILTO:john@bar.com\r
+ RSVP=TRUE:MAILTO:john@bar.com\r
CREATED:20060416T205003Z\r
LAST-MODIFIED:20060416T205003Z\r
END:VEVENT\r
CLASS:PUBLIC\r
ORGANIZER;CN=Patrick Ohly:MAILTO:Patrick.Ohly@gmx.de\r
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;\r
- RSVP=TRUE;CN=Patrick Ohly;LANGUAGE=en:MAILTO:Patrick.Ohly@gmx.de\r
+ RSVP=TRUE;CN=Patrick Ohly:MAILTO:Patrick.Ohly@gmx.de\r
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;\r
- RSVP=TRUE;LANGUAGE=en:MAILTO:john@bar.com\r
+ RSVP=TRUE:MAILTO:john@bar.com\r
CREATED:20060416T205003Z\r
LAST-MODIFIED:20060416T205003Z\r
END:VEVENT\r
CLASS:PUBLIC\r
ORGANIZER;CN=Patrick Ohly:MAILTO:Patrick.Ohly@gmx.de\r
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;\r
- RSVP=TRUE;CN=Patrick Ohly;LANGUAGE=en:MAILTO:Patrick.Ohly@gmx.de\r
+ RSVP=TRUE;CN=Patrick Ohly:MAILTO:Patrick.Ohly@gmx.de\r
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;\r
- RSVP=TRUE;LANGUAGE=en:MAILTO:john@bar.com\r
+ RSVP=TRUE:MAILTO:john@bar.com\r
CREATED:20060416T205003Z\r
LAST-MODIFIED:20060416T205003Z\r
END:VEVENT\r
CLASS:PUBLIC\r
ORGANIZER;CN=Patrick Ohly:MAILTO:Patrick.Ohly@gmx.de\r
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;\r
- RSVP=TRUE;CN=Patrick Ohly;LANGUAGE=en:MAILTO:Patrick.Ohly@gmx.de\r
+ RSVP=TRUE;CN=Patrick Ohly:MAILTO:Patrick.Ohly@gmx.de\r
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;\r
- RSVP=TRUE;LANGUAGE=en:MAILTO:john@bar.com\r
+ RSVP=TRUE:MAILTO:john@bar.com\r
CREATED:20060416T205003Z\r
LAST-MODIFIED:20060416T205003Z\r
END:VEVENT\r
CLASS:PUBLIC\r
ORGANIZER;CN=Patrick Ohly:MAILTO:Patrick.Ohly@gmx.de\r
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;\r
- RSVP=TRUE;CN=Patrick Ohly;LANGUAGE=en:MAILTO:Patrick.Ohly@gmx.de\r
+ RSVP=TRUE;CN=Patrick Ohly:MAILTO:Patrick.Ohly@gmx.de\r
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;\r
- RSVP=TRUE;LANGUAGE=en:MAILTO:john@bar.com\r
+ RSVP=TRUE:MAILTO:john@bar.com\r
CREATED:20060416T205003Z\r
LAST-MODIFIED:20060416T205003Z\r
END:VEVENT\r
CLASS:PUBLIC\r
ORGANIZER;CN=Patrick Ohly:MAILTO:Patrick.Ohly@gmx.de\r
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;\r
- RSVP=TRUE;CN=Patrick Ohly;LANGUAGE=en:MAILTO:Patrick.Ohly@gmx.de\r
+ RSVP=TRUE;CN=Patrick Ohly:MAILTO:Patrick.Ohly@gmx.de\r
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;\r
- RSVP=TRUE;LANGUAGE=en:MAILTO:john@bar.com\r
+ RSVP=TRUE:MAILTO:john@bar.com\r
CREATED:20060416T205003Z\r
LAST-MODIFIED:20060416T205003Z\r
END:VEVENT\r
ADD_TEST_TO_SUITE(linked, LocalTests, testLinkedItemsChild);
}
ADD_TEST_TO_SUITE(linked, LocalTests, testLinkedItemsParentChild);
- if (items[1].find("RECURRENCE-ID") != items[1].npos) {
+ if (items[1].find("RECURRENCE-ID") != items[1].npos &&
+ config.m_sourceKnowsItemSemantic) {
ADD_TEST_TO_SUITE(linked, LocalTests, testLinkedItemsInsertBothUpdateChildNoIDs);
}
if (config.m_linkedItemsRelaxedSemantic) {
ADD_TEST_TO_SUITE(linked, LocalTests, testLinkedItemsParentUpdate);
if (config.m_linkedItemsRelaxedSemantic) {
ADD_TEST_TO_SUITE(linked, LocalTests, testLinkedItemsUpdateChild);
- if (items[1].find("RECURRENCE-ID") != items[1].npos) {
+ if (items[1].find("RECURRENCE-ID") != items[1].npos &&
+ config.m_sourceKnowsItemSemantic) {
ADD_TEST_TO_SUITE(linked, LocalTests, testLinkedItemsUpdateChildNoIDs);
}
}
--- /dev/null
+/*
+ * Copyright (C) 2005-2009 Patrick Ohly <patrick.ohly@gmx.de>
+ * Copyright (C) 2009 Intel Corporation
+ *
+ * This library 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.1 of the License, or (at your option) version 3.
+ *
+ * This library 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 this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#include "config.h"
+
+#ifdef ENABLE_ICAL
+#include "test.h"
+#include <syncevo/eds_abi_wrapper.h>
+#include <syncevo/icalstrdup.h>
+#include <syncevo/SmartPtr.h>
+
+SE_BEGIN_CXX
+
+class IcalTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(IcalTest);
+ CPPUNIT_TEST(testTimezone);
+ CPPUNIT_TEST_SUITE_END();
+
+protected:
+ /**
+ * Ensures that we get VTIMEZONE with RRULE from libical.
+ *
+ * This only works with libical 1.0 if we successfully
+ * pick up our icaltimezone_get_component() or
+ * libical uses our icaltzutil_fetch_timezone().
+ *
+ * This test uses the function lookup via eds_abi_wrapper.h if that
+ * was enabled, otherwise goes via the static or dynamic linker.
+ *
+ * It only passes if the given timezone has not been loaded by
+ * libical internally yet, because we cannot influence that. Only
+ * direct calls to icaltimezone_get_component() as done by
+ * libsynthesis are caught. This means that "Europe/Paris" must
+ * not be used by, for example, test data used in
+ * Client::Source::eds_event.
+ */
+ void testTimezone()
+ {
+ icaltimezone *zone = icaltimezone_get_builtin_timezone("Europe/Paris");
+ CPPUNIT_ASSERT(zone);
+ icalcomponent *comp = icaltimezone_get_component(zone);
+ CPPUNIT_ASSERT(comp);
+ SyncEvo::eptr<char> str(ical_strdup(icalcomponent_as_ical_string(comp)));
+ CPPUNIT_ASSERT(str);
+ // We are very specific here. This'll work until we change our
+ // code or the zone data from Europe/Paris changes (not likely).
+ CPPUNIT_ASSERT_EQUAL(std::string(str), std::string(
+ "BEGIN:VTIMEZONE\r\n"
+ "TZID:/freeassociation.sourceforge.net/Tzfile/Europe/Paris\r\n"
+ "X-LIC-LOCATION:Europe/Paris\r\n"
+ "BEGIN:STANDARD\r\n"
+ "TZNAME:CET\r\n"
+ "DTSTART:19701026T030000\r\n"
+ "RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10\r\n"
+ "TZOFFSETFROM:+0200\r\n"
+ "TZOFFSETTO:+0100\r\n"
+ "END:STANDARD\r\n"
+ "BEGIN:DAYLIGHT\r\n"
+ "TZNAME:CEST\r\n"
+ "DTSTART:19700330T020000\r\n"
+ "RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3\r\n"
+ "TZOFFSETFROM:+0100\r\n"
+ "TZOFFSETTO:+0200\r\n"
+ "END:DAYLIGHT\r\n"
+ "END:VTIMEZONE\r\n"
+ ));
+ }
+};
+
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(IcalTest, "SyncEvolution" );
+
+SE_END_CXX
+
+#endif // ENABLE_ICAL
# changed.
s/\\N/\\n/g;
+ # Ignore blank lines. Akonadi inserts them.
+ s/\n{2,}/\n/s;
+
# undo line continuation
s/\n\s//gs;
# ignore charset specifications, assume UTF-8
# remove fields which may differ
s/^(PRODID|CREATED|DTSTAMP|LAST-MODIFIED|REV)(;X-VOBJ-FLOATINGTIME-ALLOWED=(TRUE|FALSE))?:.*\r?\n?//gm;
- # remove optional fields
- s/^(METHOD|X-WSS-[A-Z]*|X-WR-[A-Z]*|CALSCALE):.*\r?\n?//gm;
+ # remove optional properties and parameters
+ s/^(METHOD|X-WSS-[A-Z]*|X-WR-[A-Z]*|CALSCALE|X-KDE-ICAL-IMPLEMENTATION-VERSION|X-KDE-KCALCORE-ENABLED):.*\r?\n?//gm;
+ s/^(ATTENDEE[^:]*);X-UID=[^;:]*/$1/mg;
# trailing line break(s) in a DESCRIPTION may or may not be
# removed or added by servers
# VALUE=DURATION is the default behavior
s/^TRIGGER([^\n:]*);VALUE=DURATION/TRIGGER$1/mg;
s/^(TRIGGER.*):(\S*)/$1 . ":" . NormalizeTrigger($2)/mge;
+ # INDIVIDUAL is default for CUTYPE.
+ s/;CUTYPE=INDIVIDUAL([;:])/$1/mg;
+ # Print without quotation marks (probably not save in general, but okay for our test data).
+ s/;CN="([^;]*)"/;CN=$1/g;
}
# Added by EDS >= 2.32, presumably to cache some internal computation.
# for output from this script itself
logger = logging.getLogger("syncevo-http")
+# Timeout for D-Bus method calls. Both synchronous and asynchronous
+# calls have a low (?) default timeout of 60 seconds. We increase that
+# to something which is essentially infinite, to allow more time for
+# processing or interactive debugging.
+timeout=100000
+
class ChainedOpenSSLContextFactory(ssl.DefaultOpenSSLContextFactory):
def __init__(self, privateKeyFileName, certificateChainFileName,
sslmethod = SSL.SSLv3_METHOD):
self.request = None
if self.connection:
try:
- self.connection.Close(False, message)
+ self.connection.Close(False, message, timeout=timeout)
except dbus.exceptions.DBusException, ex:
if ex.get_dbus_name() == "org.freedesktop.DBus.Error.UnknownMethod":
# triggered if connection instance is already gone, hide from user
if final:
logger.debug("closing connection for connection %s session %s", self.conpath, session)
if self.connection:
- self.connection.Close(True, "")
+ self.connection.Close(True, "", timeout=timeout)
self.connection = None
self.destruct(http.GONE, "D-Bus server done")
'config': config,
'URL': url},
True,
- '')
+ '',
+ timeout=timeout)
logger.debug("started new connection %s" % self.conpath)
self.connection = dbus.Interface(Context.bus.get_object('org.syncevolution',
self.conpath),
# feed new data into SyncEvolution and wait for reply
request.content.seek(0, 0)
- self.connection.Process(data, type)
+ self.connection.Process(data, type, timeout=timeout)
SyncMLSession.sessions.append(self)
logger.debug("added new SyncML session %s", self)
request.processingdata = data
request.processingtype = type
if mustprocess:
- self.connection.Process(data, type)
+ self.connection.Process(data, type, timeout=timeout)
def logMessage(self, direction, request, data, type):
if 'plain' in type or "+xml" in type:
else:
root = logging.getLogger()
ch = logging.StreamHandler()
- formatter = logging.Formatter("[%(levelname)s] %(name)s: %(message)s")
+ formatter = logging.Formatter("[%(levelname)s" +
+ (level == logging.DEBUG and " %(asctime)s" or "") +
+ "] %(name)s: %(message)s")
ch.setFormatter(formatter)
root.addHandler(ch)
if level == None:
CLASS:PUBLIC\r
ORGANIZER;CN=Patrick Ohly:MAILTO:Patrick.Ohly@gmx.de\r
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;\r
- RSVP=TRUE;CN=Patrick Ohly;LANGUAGE=en:MAILTO:Patrick.Ohly@gmx.de\r
+ RSVP=TRUE;CN=Patrick Ohly:MAILTO:Patrick.Ohly@gmx.de\r
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;\r
- RSVP=TRUE;LANGUAGE=en:MAILTO:john@bar.com\r
+ RSVP=TRUE:MAILTO:john@bar.com\r
CREATED:20060416T205003Z\r
LAST-MODIFIED:20060416T205003Z\r
END:VEVENT\r