# Generated by configure. Do no edit.
+2010-12-20 Patrick Ohly <patrick.ohly@intel.com>
+
+ * configure-pre.in:
+
+ bumped version to 1.1.0.99.1
+
+2010-12-20 Patrick Ohly <patrick.ohly@intel.com>
+
+ * NEWS:
+
+ NEWS: updated for 1.1.0.99.1
+
+2010-12-15 Jussi Kukkonen <jku@linux.intel.com>
+
+ * src/dbus/interfaces/syncevo-server-full.xml:
+ * src/dbus/interfaces/syncevo-session-full.xml:
+ * src/dbus/syncevo-server.c:
+ * src/gtk-ui/sync-config-widget.c:
+ * src/gtk-ui/sync-ui.c:
+
+ gtk-ui: Use "no-sync" flag on non syncing StartSession
+
+2010-12-15 Jussi Kukkonen <jku@linux.intel.com>
+
+ * src/dbus/syncevo-session.c:
+ * src/dbus/syncevo-session.h:
+
+ dbus client wrapper: add GetConfigName
+
+2010-11-11 Jussi Kukkonen <jku@linux.intel.com>
+
+ * src/dbus/syncevo-server.c:
+ * src/dbus/syncevo-server.h:
+ * src/gtk-ui/sync-ui.c:
+
+ gtk-ui: Update GetPresence handlers to match current API
+
+2010-11-11 Jussi Kukkonen <jku@linux.intel.com>
+
+ * src/gtk-ui/sync-ui.c:
+
+ gtk-ui: match config names insensitively
+
+2010-11-11 Jussi Kukkonen <jku@linux.intel.com>
+
+ * src/gtk-ui/sync-ui.c:
+
+ gtk-ui: Use hyphen instead of underscore in signal names
+
+2010-12-15 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/backends/evolution/EvolutionCalendarSource.cpp:
+
+ Evolution Calendar: work around delayed update in EDS CalDAV
+ backend (BMC #10265)
+
+2010-12-14 Patrick Ohly <patrick.ohly@intel.com>
+
+ * README.rst:
+ * src/syncevo/Cmdline.cpp:
+ * src/syncevo/SyncConfig.cpp:
+ * src/templates/servers/ScheduleWorld.ini:
+
+ ScheduleWorld: disabled configuration, replaced in examples
+
+2010-12-13 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/configs/remoterules/server/00_sony_ericsson.xml:
+
+ Sony Ericsson: enable conversion to absolute alarm times (BMC
+ #10092)
+
+2010-12-13 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/configs/scripting/11calendar.xml:
+ * test/testcases/ical20-alarms-2010-12-31.ics:
+
+ vCalendar 1.0: convert absolute alarm back to relative (BMC
+ #11233)
+
+2010-12-07 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/README.mobical:
+
+ Mobical.net: nightly tests do not complete when preventSlowSync
+ is active
+
+2010-12-06 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/client-test-app.cpp:
+
+ client-test: avoid potential test failure in testTwoWaySync due
+ to preventSlowSync
+
+2010-11-28 David Bremner <bremner@debian.org>
+
+ * src/syncevo/util.cpp:
+
+ util.cpp/relToAbs(): Have realpath allocate its own buffer.
+
+2010-12-06 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo-dbus-server.cpp:
+
+ syncevo-dbus-server: deal with libnotify 0.7.0 API change (BMC
+ #10453)
+
+2010-12-01 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/synccompare.pl:
+
+ synccompare: work around Perl bug
+
+2010-11-30 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/client-test-main.cpp:
+
+ client-test: SYNCEVOLUTION_DEBUG disables creation of .log files
+
+2010-11-26 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/synccompare.pl:
+
+ synccompare: normalize directory
+
+2010-11-26 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/backends/qtcontacts/QtContactsSource.cpp:
+
+ QtContacts: fixed error message
+
+2010-11-26 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/backends/kcalextended/KCalExtendedSource.cpp:
+
+ KCalExtended: evolutionsource=<notebook name> was broken
+
+2010-11-16 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/configs/remoterules/00_syncevolution.xml:
+
+ slow sync strategy: allow client and server updates for
+ SyncEvolution clients
+
+2010-11-16 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/SyncSource.cpp:
+
+ slow sync strategy: try harder to avoid duplicates
+
+2010-11-15 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/configs/datatypes/10calendar-fieldlist.xml:
+
+ calendar profile: choose better merge strategy for URL property
+
+2010-10-29 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/SyncContext.cpp:
+
+ SYNCEVOLUTION_DEBUG: print DEBUG messages during sync if set
+
+2010-10-08 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/synccompare.pl:
+
+ synccompare: relax TZID simplification
+
+2010-10-08 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/client-test-main.cpp:
+
+ client-test: increase log level when SYNCEVOLUTION_DEBUG is set
+
+2010-10-07 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/ClientTest.cpp:
+
+ Revert "testing: avoid DTSTAMP issue in KCalExtended"
+
+2010-08-01 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/SyncContext.cpp:
+
+ SyncContext: avoid crash in sort() with LogDir as binary
+ predicate
+
+2010-10-05 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevolution.cpp:
+
+ command line: increase log level when SYNCEVOLUTION_DEBUG is set
+
2010-11-01 Patrick Ohly <patrick.ohly@intel.com>
* src/syncevo/FileConfigTree.cpp:
+SyncEvolution 1.1 -> 1.1.1, xxxxxxxxxx
+======================================
+
+Maintenance release, in particular improving syncing with phones.
+There was a bug that could cause all kinds of weird behavior after
+a failed sync with a phone, so updating is highly recommended.
+
+* Synthesis engine: fixed a corruption issue in internal meta data which
+ caused duplicates and other problems in a pretty indeterminstic way;
+ apparently caused by failed syncs (BMC #10358, #11044).
+
+* Synthesis engine: recurrence rules with end date now sent correctly to phones (BMC #11241).
+
+ The RRULE property was not encoded correctly previously during the
+ iCalendar 2.0 -> vCalendar 1.0 conversion. Events with recurrence count
+ were okay. Probably also affected SyncML servers without iCalendar 2.0
+ support.
+
+* Synthesis engine: fixed broken time zone information when sending to phone;
+ previously that broke sending calendar updates to Nokia phones (BMC #9600).
+
+ iCalendar 2.0 time zone definitions imported from libical were not
+ encoded correctly in vCalendar 1.0 items as sent to phones. Nokia
+ phones accepted such data when part of a new event, but rejected
+ updates of it.
+
+* ScheduleWorld: disable configuration template because service has shut down.
+
+ The template is only hidden from the GTK sync-ui, but remains in SyncEvolution
+ for the time being because it is referenced in several places.
+
+* GTK sync-ui: workaround for "Sync Now" button not reacting to online
+ status changed (BMC #9949).
+
+* Changed slow sync handling. Some users have complained about getting
+ duplicated contacts (BMC #10081). The exact reason is not known (no
+ useful logs provided yet), but it might be due to using "duplicate"
+ as resolution strategy during slow syncs.
+
+ This caused slightly different contacts to be duplicated instead of
+ merging the two copies, reasoning that "no data loss" is better than
+ "duplicates". This release switches to a mode where the engine
+ tries harder to avoid duplicates by merging data if modification
+ time stamps are available for contacts (usually they are). When fields
+ differ, the more recent data is kept.
+
+* convert absolute alarm back to relative (BMC #11233)
+
+ Experiments show that at least Nokia phones (and thus perhaps also
+ Mobical.com) interpret a fixed alarm as "repeat alarm with the same
+ relative offset as on first occurrence". The same transformation to
+ relative alarm times is applied whenever the transformation to
+ absolute alarm is enabled for a peer.
+
+* Sony Ericsson: enable conversion to absolute alarm times (BMC #10092)
+
+ Like Nokia and Mobical.net, Sony Ericsson phones also seem to be unable
+ to deal with relative alarm times - verified with t700.
+
+* Sony Ericsson C510: workaround for SyncML violation
+
+ The phone does not sent identifiers for the target database;
+ using the source identifier as fallback allows a sync to
+ run.
+
+* Fixed a regression affecting users who had created a config
+ with SyncEvolution < 1.0. Using the config worked once, then
+ failed with "No configuration for ... found". Users must
+ manually remove the empty "peers" directory inside their
+ affected configuration, the fix only makes configs without that
+ directory usable again (BMC #9381).
+
+* Removed obsolete workaround for older mKCal calendar storage.
+* Fixed error message in QtContacts backend.
+* Same SYNCEVOLUTION_DEBUG code as in master branch.
+* Some updates to synccompare, including a workaround for a Perl
+ bug seen on Debian Testing with Perl 5.10.1-16 (Perl panic).
+* Fix compilation of syncevo-dbus-server with libnotify 0.7.0 (BMC #10453).
+* Fixed compilation on Debian GNU/Hurd (no MAX_PATH, Mac OS X confusion).
+
+
SyncEvolution 1.0.1 -> 1.1, 26.10.2010
======================================
------------------------------------------------
:Manual section: 1
-:Version: 1.1+20101101+SE+8e5f8df+SYSYNC+2a247a4
-:Date: 2010-11-01
+:Version: 1.1.0.99.1
+:Date: 2010-12-21
SYNOPSIS
========
are executed.
Starting with SyncEvolution 1.0, <config> strings can have different
-meanings. Typically, a simple string like `scheduleworld` refers to
+meanings. Typically, a simple string like `memotoo` refers to
the configuration for that peer, as it did in previous releases. A
peer is either a SyncML server (the traditional usage of
SyncEvolution) or a client (the new feature in 1.0).
When different peers are meant to synchronize different local
databases, then different contexts have to be used when setting up the
peers by appending a context name after the `at` sign, as in
-`scheduleworld2@other-context`. Later on, if `scheduleworld2` is
+`memotoo2@other-context`. Later on, if `memotoo2` is
unique, the `@other-context` suffix becomes optional.
Sometimes it is also useful to change configuration options of a
of the template configurations (see --template option). When
creating a new configuration and listing sources explicitly on the
command line, only those sources will be set to active in the new
- configuration, i.e. `syncevolution -c scheduleworld addressbook`
- followed by `syncevolution scheduleworld` will only synchronize the
+ configuration, i.e. `syncevolution -c memotoo addressbook`
+ followed by `syncevolution memotoo` will only synchronize the
address book. The other sources are created in a disabled state.
When modifying an existing configuration and sources are specified,
then the source properties of only those sources are modified.
for known SyncML peers. Defaults to the <config> name, so --template
only has to be specified when creating multiple different configurations
for the same peer, or when using a template that is named differently
- than the peer. `default` is an alias for `scheduleworld` and can be
+ than the peer. `default` is an alias for `memotoo` and can be
used as the starting point for servers which do not have a built-in
template.
syncevolution --template ?
-Create a new configuration, using the existing ScheduleWorld template::
+Create a new configuration, using the existing Memotoo template::
syncevolution --configure \
--sync-property "username=123456" \
--sync-property "password=!@#ABcd1234" \
- scheduleworld
+ memotoo
Note that putting passwords into the command line, even for
short-lived processes as the one above, is a security risk in shared
Review configuration::
- syncevolution --print-config scheduleworld
+ syncevolution --print-config memotoo
Synchronize all sources::
- syncevolution scheduleworld
+ syncevolution memotoo
Deactivate all sources::
syncevolution --configure \
--source-property sync=none \
- scheduleworld
+ memotoo
Activate address book synchronization again, using the --sync shortcut::
syncevolution --configure \
--sync two-way \
- scheduleworld addressbook
+ memotoo addressbook
Change the password for a configuration::
syncevolution --configure \
--sync-property password=foo \
- scheduleworld
+ memotoo
Set up another configuration for under a different account, using
the same default databases as above::
syncevolution --configure \
--sync-property username=joe \
--sync-property password=foo \
- --template scheduleworld \
- scheduleworld_joe
+ --template memotoo \
+ memotoo_joe
Set up another configuration using the same account, but different
local databases (can be used to simulate synchronizing between two
--sync-property "username=123456" \
--sync-property "password=!@#ABcd1234" \
--source-property sync=none \
- scheduleworld@other
+ memotoo@other
syncevolution --configure \
--source-property evolutionsource=<name of other address book> \
syncevolution --configure \
--source-property sync=two-way \
- scheduleworld@other addressbook
+ memotoo@other addressbook
- syncevolution scheduleworld
- syncevolution scheduleworld@other
+ syncevolution memotoo
+ syncevolution memotoo@other
Migrate a configuration from the <= 0.7 format to the current one
and/or updates the configuration so that it looks like configurations
created anew with the current syncevolution::
- syncevolution --migrate scheduleworld
+ syncevolution --migrate memotoo
NOTES
the same applies to other data sources.
How the server stores the items depends on its implementation and
-configuration. In the default Funambol server installation, contacts
-and calendar items are converted into an internal format, but at
-least for contacts it preserves most of the properties used by
-Evolution whereas iCalendar 2.0 items are not preserved properly
-up to and including Funambol 8.0. ScheduleWorld uses the same format
-as Evolution for calendars and tasks and thus requires no conversion.
-
-To check which data is preserved, one can use this procedure
-(described for contacts, but works the same way for calendars and
-tasks):
+configuration. To check which data is preserved, one can use this
+procedure (described for contacts, but works the same way for
+calendars and tasks):
1. synchronize the address book with the server
2. create a new address book in Evolution and view it in Evolution
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.6: http://docutils.sourceforge.net/" />
<title>SyncEvolution</title>
-<meta name="date" content="2010-11-01" />
+<meta name="date" content="2010-12-21" />
<style type="text/css">
/*
<tr class="field"><th class="docinfo-name">Manual section:</th><td class="field-body">1</td>
</tr>
<tr><th class="docinfo-name">Version:</th>
-<td>1.1+20101101+SE+8e5f8df+SYSYNC+2a247a4</td></tr>
+<td>1.1.0.99.1</td></tr>
<tr><th class="docinfo-name">Date:</th>
-<td>2010-11-01</td></tr>
+<td>2010-12-21</td></tr>
</tbody>
</table>
<div class="section" id="synopsis">
peer. Depending on which parameters are given, different operations
are executed.</p>
<p>Starting with SyncEvolution 1.0, <config> strings can have different
-meanings. Typically, a simple string like <cite>scheduleworld</cite> refers to
+meanings. Typically, a simple string like <cite>memotoo</cite> refers to
the configuration for that peer, as it did in previous releases. A
peer is either a SyncML server (the traditional usage of
SyncEvolution) or a client (the new feature in 1.0).</p>
<p>When different peers are meant to synchronize different local
databases, then different contexts have to be used when setting up the
peers by appending a context name after the <cite>at</cite> sign, as in
-<cite>scheduleworld2@other-context</cite>. Later on, if <cite>scheduleworld2</cite> is
+<cite>memotoo2@other-context</cite>. Later on, if <cite>memotoo2</cite> is
unique, the <cite>@other-context</cite> suffix becomes optional.</p>
<p>Sometimes it is also useful to change configuration options of a
context, without modifying a specific peer. This can be done by using
of the template configurations (see --template option). When
creating a new configuration and listing sources explicitly on the
command line, only those sources will be set to active in the new
-configuration, i.e. <cite>syncevolution -c scheduleworld addressbook</cite>
-followed by <cite>syncevolution scheduleworld</cite> will only synchronize the
+configuration, i.e. <cite>syncevolution -c memotoo addressbook</cite>
+followed by <cite>syncevolution memotoo</cite> will only synchronize the
address book. The other sources are created in a disabled state.
When modifying an existing configuration and sources are specified,
then the source properties of only those sources are modified.</dd>
for known SyncML peers. Defaults to the <config> name, so --template
only has to be specified when creating multiple different configurations
for the same peer, or when using a template that is named differently
-than the peer. <cite>default</cite> is an alias for <cite>scheduleworld</cite> and can be
+than the peer. <cite>default</cite> is an alias for <cite>memotoo</cite> and can be
used as the starting point for servers which do not have a built-in
template.</p>
<p>A pseudo-random device ID is generated automatically. Therefore setting
<pre class="literal-block">
syncevolution --template ?
</pre>
-<p>Create a new configuration, using the existing ScheduleWorld template:</p>
+<p>Create a new configuration, using the existing Memotoo template:</p>
<pre class="literal-block">
syncevolution --configure \
--sync-property "username=123456" \
--sync-property "password=!@#ABcd1234" \
- scheduleworld
+ memotoo
</pre>
<p>Note that putting passwords into the command line, even for
short-lived processes as the one above, is a security risk in shared
</pre>
<p>Review configuration:</p>
<pre class="literal-block">
-syncevolution --print-config scheduleworld
+syncevolution --print-config memotoo
</pre>
<p>Synchronize all sources:</p>
<pre class="literal-block">
-syncevolution scheduleworld
+syncevolution memotoo
</pre>
<p>Deactivate all sources:</p>
<pre class="literal-block">
syncevolution --configure \
--source-property sync=none \
- scheduleworld
+ memotoo
</pre>
<p>Activate address book synchronization again, using the --sync shortcut:</p>
<pre class="literal-block">
syncevolution --configure \
--sync two-way \
- scheduleworld addressbook
+ memotoo addressbook
</pre>
<p>Change the password for a configuration:</p>
<pre class="literal-block">
syncevolution --configure \
--sync-property password=foo \
- scheduleworld
+ memotoo
</pre>
<p>Set up another configuration for under a different account, using
the same default databases as above:</p>
syncevolution --configure \
--sync-property username=joe \
--sync-property password=foo \
- --template scheduleworld \
- scheduleworld_joe
+ --template memotoo \
+ memotoo_joe
</pre>
<p>Set up another configuration using the same account, but different
local databases (can be used to simulate synchronizing between two
--sync-property "username=123456" \
--sync-property "password=!@#ABcd1234" \
--source-property sync=none \
- scheduleworld@other
+ memotoo@other
syncevolution --configure \
--source-property evolutionsource=<name of other address book> \
syncevolution --configure \
--source-property sync=two-way \
- scheduleworld@other addressbook
+ memotoo@other addressbook
-syncevolution scheduleworld
-syncevolution scheduleworld@other
+syncevolution memotoo
+syncevolution memotoo@other
</pre>
<p>Migrate a configuration from the <= 0.7 format to the current one
and/or updates the configuration so that it looks like configurations
created anew with the current syncevolution:</p>
<pre class="literal-block">
-syncevolution --migrate scheduleworld
+syncevolution --migrate memotoo
</pre>
</div>
<div class="section" id="notes">
the same applies to other data sources.</p>
</div>
<p>How the server stores the items depends on its implementation and
-configuration. In the default Funambol server installation, contacts
-and calendar items are converted into an internal format, but at
-least for contacts it preserves most of the properties used by
-Evolution whereas iCalendar 2.0 items are not preserved properly
-up to and including Funambol 8.0. ScheduleWorld uses the same format
-as Evolution for calendars and tasks and thus requires no conversion.</p>
-<p>To check which data is preserved, one can use this procedure
-(described for contacts, but works the same way for calendars and
-tasks):</p>
+configuration. To check which data is preserved, one can use this
+procedure (described for contacts, but works the same way for
+calendars and tasks):</p>
<ol class="arabic simple">
<li>synchronize the address book with the server</li>
<li>create a new address book in Evolution and view it in Evolution
are executed.
Starting with SyncEvolution 1.0, <config> strings can have different
-meanings. Typically, a simple string like `scheduleworld` refers to
+meanings. Typically, a simple string like `memotoo` refers to
the configuration for that peer, as it did in previous releases. A
peer is either a SyncML server (the traditional usage of
SyncEvolution) or a client (the new feature in 1.0).
When different peers are meant to synchronize different local
databases, then different contexts have to be used when setting up the
peers by appending a context name after the `at` sign, as in
-`scheduleworld2@other-context`. Later on, if `scheduleworld2` is
+`memotoo2@other-context`. Later on, if `memotoo2` is
unique, the `@other-context` suffix becomes optional.
Sometimes it is also useful to change configuration options of a
of the template configurations (see --template option). When
creating a new configuration and listing sources explicitly on the
command line, only those sources will be set to active in the new
- configuration, i.e. `syncevolution -c scheduleworld addressbook`
- followed by `syncevolution scheduleworld` will only synchronize the
+ configuration, i.e. `syncevolution -c memotoo addressbook`
+ followed by `syncevolution memotoo` will only synchronize the
address book. The other sources are created in a disabled state.
When modifying an existing configuration and sources are specified,
then the source properties of only those sources are modified.
for known SyncML peers. Defaults to the <config> name, so --template
only has to be specified when creating multiple different configurations
for the same peer, or when using a template that is named differently
- than the peer. `default` is an alias for `scheduleworld` and can be
+ than the peer. `default` is an alias for `memotoo` and can be
used as the starting point for servers which do not have a built-in
template.
syncevolution --template ?
-Create a new configuration, using the existing ScheduleWorld template::
+Create a new configuration, using the existing Memotoo template::
syncevolution --configure \
--sync-property "username=123456" \
--sync-property "password=!@#ABcd1234" \
- scheduleworld
+ memotoo
Note that putting passwords into the command line, even for
short-lived processes as the one above, is a security risk in shared
Review configuration::
- syncevolution --print-config scheduleworld
+ syncevolution --print-config memotoo
Synchronize all sources::
- syncevolution scheduleworld
+ syncevolution memotoo
Deactivate all sources::
syncevolution --configure \
--source-property sync=none \
- scheduleworld
+ memotoo
Activate address book synchronization again, using the --sync shortcut::
syncevolution --configure \
--sync two-way \
- scheduleworld addressbook
+ memotoo addressbook
Change the password for a configuration::
syncevolution --configure \
--sync-property password=foo \
- scheduleworld
+ memotoo
Set up another configuration for under a different account, using
the same default databases as above::
syncevolution --configure \
--sync-property username=joe \
--sync-property password=foo \
- --template scheduleworld \
- scheduleworld_joe
+ --template memotoo \
+ memotoo_joe
Set up another configuration using the same account, but different
local databases (can be used to simulate synchronizing between two
--sync-property "username=123456" \
--sync-property "password=!@#ABcd1234" \
--source-property sync=none \
- scheduleworld@other
+ memotoo@other
syncevolution --configure \
--source-property evolutionsource=<name of other address book> \
syncevolution --configure \
--source-property sync=two-way \
- scheduleworld@other addressbook
+ memotoo@other addressbook
- syncevolution scheduleworld
- syncevolution scheduleworld@other
+ syncevolution memotoo
+ syncevolution memotoo@other
Migrate a configuration from the <= 0.7 format to the current one
and/or updates the configuration so that it looks like configurations
created anew with the current syncevolution::
- syncevolution --migrate scheduleworld
+ syncevolution --migrate memotoo
NOTES
the same applies to other data sources.
How the server stores the items depends on its implementation and
-configuration. In the default Funambol server installation, contacts
-and calendar items are converted into an internal format, but at
-least for contacts it preserves most of the properties used by
-Evolution whereas iCalendar 2.0 items are not preserved properly
-up to and including Funambol 8.0. ScheduleWorld uses the same format
-as Evolution for calendars and tasks and thus requires no conversion.
-
-To check which data is preserved, one can use this procedure
-(described for contacts, but works the same way for calendars and
-tasks):
+configuration. To check which data is preserved, one can use this
+procedure (described for contacts, but works the same way for
+calendars and tasks):
1. synchronize the address book with the server
2. create a new address book in Evolution and view it in Evolution
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for syncevolution 1.1+20101101+SE+8e5f8df+SYSYNC+2a247a4.
+# Generated by GNU Autoconf 2.61 for syncevolution 1.1.0.99.1.
#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# Identity of this package.
PACKAGE_NAME='syncevolution'
PACKAGE_TARNAME='syncevolution'
-PACKAGE_VERSION='1.1+20101101+SE+8e5f8df+SYSYNC+2a247a4'
-PACKAGE_STRING='syncevolution 1.1+20101101+SE+8e5f8df+SYSYNC+2a247a4'
+PACKAGE_VERSION='1.1.0.99.1'
+PACKAGE_STRING='syncevolution 1.1.0.99.1'
PACKAGE_BUGREPORT=''
# Factoring default headers for most tests.
# 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.1+20101101+SE+8e5f8df+SYSYNC+2a247a4 to adapt to many kinds of systems.
+\`configure' configures syncevolution 1.1.0.99.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.1+20101101+SE+8e5f8df+SYSYNC+2a247a4:";;
+ short | recursive ) echo "Configuration of syncevolution 1.1.0.99.1:";;
esac
cat <<\_ACEOF
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-syncevolution configure 1.1+20101101+SE+8e5f8df+SYSYNC+2a247a4
+syncevolution configure 1.1.0.99.1
generated by GNU Autoconf 2.61
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
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.1+20101101+SE+8e5f8df+SYSYNC+2a247a4, which was
+It was created by syncevolution $as_me 1.1.0.99.1, which was
generated by GNU Autoconf 2.61. Invocation command line was
$ $0 $@
# Define the identity of the package.
PACKAGE='syncevolution'
- VERSION='1.1+20101101+SE+8e5f8df+SYSYNC+2a247a4'
+ VERSION='1.1.0.99.1'
cat >>confdefs.h <<_ACEOF
# 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.1+20101101+SE+8e5f8df+SYSYNC+2a247a4, which was
+This file was extended by syncevolution $as_me 1.1.0.99.1, which was
generated by GNU Autoconf 2.61. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-syncevolution config.status 1.1+20101101+SE+8e5f8df+SYSYNC+2a247a4
+syncevolution config.status 1.1.0.99.1
configured by $0, generated by GNU Autoconf 2.61,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
#
# Starting with the 1.1 release cycle, the rpm-style
# .99 pseudo-version number is used to mark a pre-release.
-AC_INIT([syncevolution], [1.1])
+AC_INIT([syncevolution], [1.1.0.99.1])
# STABLE_VERSION=1.0.1+
AC_SUBST(STABLE_VERSION)
#
# Starting with the 1.1 release cycle, the rpm-style
# .99 pseudo-version number is used to mark a pre-release.
-AC_INIT([syncevolution], [1.1+20101101+SE+8e5f8df+SYSYNC+2a247a4])
+AC_INIT([syncevolution], [1.1.0.99.1])
# STABLE_VERSION=1.0.1+
AC_SUBST(STABLE_VERSION)
ESource *source = findSource(sources, id);
bool onlyIfExists = true;
bool created = false;
- if (!source) {
- // might have been special "<<system>>" or "<<default>>", try that and
- // creating address book from file:// URI before giving up
- if ((id.empty() || id == "<<system>>") && m_newSystem) {
- m_calendar.set(m_newSystem(), (string("system ") + m_typeName).c_str());
- } else if (!id.compare(0, 7, "file://")) {
- m_calendar.set(e_cal_new_from_uri(id.c_str(), m_type), (string("creating ") + m_typeName).c_str());
+
+ // Open twice. This solves an issue where Evolution's CalDAV
+ // backend only updates its local cache *after* a sync (= while
+ // closing the calendar?), instead of doing it *before* a sync (in
+ // e_cal_open()).
+ //
+ // This workaround is applied to *all* backends because there might
+ // be others with similar problems and for local storage it is
+ // a reasonably cheap operation (so no harm there).
+ for (int retries = 0; retries < 2; retries++) {
+ if (!source) {
+ // might have been special "<<system>>" or "<<default>>", try that and
+ // creating address book from file:// URI before giving up
+ if ((id.empty() || id == "<<system>>") && m_newSystem) {
+ m_calendar.set(m_newSystem(), (string("system ") + m_typeName).c_str());
+ } else if (!id.compare(0, 7, "file://")) {
+ m_calendar.set(e_cal_new_from_uri(id.c_str(), m_type), (string("creating ") + m_typeName).c_str());
+ } else {
+ throwError(string("not found: '") + id + "'");
+ }
+ created = true;
+ onlyIfExists = false;
} else {
- throwError(string("not found: '") + id + "'");
+ m_calendar.set(e_cal_new(source, m_type), m_typeName.c_str());
}
- created = true;
- onlyIfExists = false;
- } else {
- m_calendar.set(e_cal_new(source, m_type), m_typeName.c_str());
- }
- e_cal_set_auth_func(m_calendar, eCalAuthFunc, this);
+ e_cal_set_auth_func(m_calendar, eCalAuthFunc, this);
- if (!e_cal_open(m_calendar, onlyIfExists, &gerror)) {
- if (created) {
- // opening newly created address books often failed, perhaps that also applies to calendars - try again
- g_clear_error(&gerror);
- sleep(5);
- if (!e_cal_open(m_calendar, onlyIfExists, &gerror)) {
+ if (!e_cal_open(m_calendar, onlyIfExists, &gerror)) {
+ if (created) {
+ // opening newly created address books often failed, perhaps that also applies to calendars - try again
+ g_clear_error(&gerror);
+ sleep(5);
+ if (!e_cal_open(m_calendar, onlyIfExists, &gerror)) {
+ throwError(string("opening ") + m_typeName, gerror );
+ }
+ } else {
throwError(string("opening ") + m_typeName, gerror );
}
- } else {
- throwError(string("opening ") + m_typeName, gerror );
}
}
if (!m_data->m_storage->open()) {
throwError("failed to open storage");
}
- if (!m_data->m_storage->load()) {
- throwError("failed to load calendar");
- }
mKCal::Notebook::Ptr defaultNotebook = m_data->m_storage->defaultNotebook();
if (!defaultNotebook) {
throwError("no default Notebook");
}
m_data->m_notebookUID = notebook->uid();
}
+
+ // we are not currently using partial loading because there were
+ // issues with it (BMC #6061); the load() calls elsewhere in this
+ // file are commented out
+ if (!m_data->m_storage->load()) {
+ throwError("failed to load calendar");
+ }
}
bool KCalExtendedSource::isEmpty()
checkError(op, req);
} else {
list<string> res;
- foreach (int index, errors) {
+ foreach (int index, errors.keys()) {
res.push_back(StringPrintf("entry #%d failed with error %d", index, errors[index]));
}
m_parent->throwError(StringPrintf("%s: failed with error %d, ", op, req.error()) +
setWBXML(m_options.m_isWBXML, true);
setRetryDuration(m_options.m_retryDuration, true);
setRetryInterval(m_options.m_retryInterval, true);
+ if (m_options.m_syncMode == SYNC_TWO_WAY &&
+ m_options.m_checkReport.syncMode == SYNC_NONE) {
+ // For this test, any kind of final sync mode is
+ // acceptable. Disable slow sync prevention
+ // temporarily. The check for the requested sync
+ // mode is perhaps too conservative, but in
+ // practice the only test where slow sync
+ // prevention caused a test failure was
+ // Client::Sync::vcard30::testTwoWaySync after
+ // some other failed test, so let's be conservative...
+ setPreventSlowSync(false);
+ }
SyncContext::prepare();
}
<arg type="s" name="config" direction="in">
<doc:doc><doc:summary>name of configuration to be created or used in session</doc:summary></doc:doc>
</arg>
- <arg type="a(s)" name="flags" direction="in">
+ <arg type="as" name="flags" direction="in">
<doc:doc><doc:summary>optional flags</doc:summary></doc:doc>
</arg>
<arg type="o" name="session" direction="out">
Get the session flags set with Server.StartSessionWithFlags().
</doc:description>
</doc:doc>
- <arg type="a(s)" name="flags" direction="out">
+ <arg type="as" name="flags" direction="out">
<doc:doc><doc:summary>session flags</doc:summary></doc:doc>
</arg>
</method>
data);
}
+void
+syncevo_server_start_no_sync_session (SyncevoServer *syncevo,
+ const char *config_name,
+ SyncevoServerStartSessionCb callback,
+ gpointer userdata)
+{
+ ServerAsyncData *data;
+ SyncevoServerPrivate *priv;
+ char *flags[2] = {"no-sync", NULL};
+
+ priv = GET_PRIVATE (syncevo);
+
+ data = server_async_data_new (syncevo, G_CALLBACK (callback), userdata);
+
+ if (!priv->proxy && !syncevo_server_get_new_proxy (syncevo)) {
+ if (callback) {
+ g_idle_add ((GSourceFunc)start_session_error, data);
+ }
+ return;
+ }
+
+ org_syncevolution_Server_start_session_with_flags_async
+ (priv->proxy,
+ config_name,
+ flags,
+ (org_syncevolution_Server_start_session_reply) start_session_callback,
+ data);
+}
+
static void
get_sessions_callback (SyncevoServer *syncevo,
SyncevoSessions *sessions,
static void
check_presence_callback (SyncevoServer *syncevo,
char *status,
- char *transport,
+ char **transports,
GError *error,
ServerAsyncData *data)
{
if (data->callback) {
(*(SyncevoServerGetPresenceCb)data->callback) (data->server,
status,
- transport,
+ transports,
error,
data->userdata);
}
typedef void (*SyncevoServerGetPresenceCb) (SyncevoServer *syncevo,
char *status,
- char *transport,
+ char **transports,
GError *error,
gpointer userdata);
void syncevo_server_get_presence (SyncevoServer *syncevo,
}
static void
+get_config_name_callback (DBusGProxy *proxy,
+ char *name,
+ GError *error,
+ SessionAsyncData *data)
+{
+ if (data->callback) {
+ (*(SyncevoSessionGetConfigNameCb)data->callback) (data->session,
+ name,
+ error,
+ data->userdata);
+ }
+ session_async_data_free (data);
+}
+
+void
+syncevo_session_get_config_name (SyncevoSession *session,
+ SyncevoSessionGetConfigNameCb callback,
+ gpointer userdata)
+{
+ SessionAsyncData *data;
+ SyncevoSessionPrivate *priv;
+
+ priv = GET_PRIVATE (session);
+
+ data = session_async_data_new (session, G_CALLBACK (callback), userdata);
+
+ if (!priv->proxy) {
+ if (callback) {
+ g_idle_add ((GSourceFunc)generic_error, data);
+ }
+ return;
+ }
+
+ org_syncevolution_Session_get_config_name_async
+ (priv->proxy,
+ (org_syncevolution_Session_get_config_name_reply) get_config_name_callback,
+ data);
+}
+
+static void
get_config_callback (DBusGProxy *proxy,
SyncevoConfig *configuration,
GError *error,
GError *error,
gpointer userdata);
+typedef void (*SyncevoSessionGetConfigNameCb) (SyncevoSession *session,
+ char *name,
+ GError *error,
+ gpointer userdata);
+void syncevo_session_get_config_name (SyncevoSession *session,
+ SyncevoSessionGetConfigNameCb callback,
+ gpointer userdata);
+
typedef void (*SyncevoSessionGetConfigCb) (SyncevoSession *session,
SyncevoConfig *config,
GError *error,
sync_config_widget_set_name (data->widget, name);
g_free (name);
- syncevo_server_start_session (data->widget->server,
+ syncevo_server_start_no_sync_session (data->widget->server,
data->widget->config_name,
(SyncevoServerStartSessionCb)start_session_for_config_write_cb,
data);
data->widget = self;
data->delete = FALSE;
data->temporary = FALSE;
- syncevo_server_start_session (self->server,
+ syncevo_server_start_no_sync_session (self->server,
self->config_name,
(SyncevoServerStartSessionCb)start_session_for_config_write_cb,
data);
data->delete = FALSE;
data->temporary = FALSE;
data->basename = g_strdup (self->config_name);
- syncevo_server_start_session (self->server,
+ syncevo_server_start_no_sync_session (self->server,
self->config_name,
(SyncevoServerStartSessionCb)start_session_for_config_write_cb,
data);
data->delete = TRUE;
data->temporary = FALSE;
- syncevo_server_start_session (self->server,
+ syncevo_server_start_no_sync_session (self->server,
self->config_name,
(SyncevoServerStartSessionCb)start_session_for_config_write_cb,
data);
data->temporary = TRUE;
data->widgets = source_widgets_ref (widgets);
- syncevo_server_start_session (self->server,
+ syncevo_server_start_no_sync_session (self->server,
self->config_name,
(SyncevoServerStartSessionCb)start_session_for_config_write_cb,
data);
static void update_service_ui (app_data *data);
static void setup_new_service_clicked (GtkButton *btn, app_data *data);
static gboolean source_config_update_widget (source_config *source);
-static void get_presence_cb (SyncevoServer *server, char *status, char *transport,
+static void get_presence_cb (SyncevoServer *server, char *status, char **transport,
GError *error, app_data *data);
static void get_reports_cb (SyncevoServer *server, SyncevoReports *reports,
GError *error, app_data *data);
op_data->data = data;
op_data->operation = OP_SAVE;
op_data->started = FALSE;
- syncevo_server_start_session (data->server,
+ syncevo_server_start_no_sync_session (data->server,
data->current_service->name,
(SyncevoServerStartSessionCb)start_session_cb,
op_data);
static void
get_presence_cb (SyncevoServer *server,
char *status,
- char *transport,
+ char **transports,
GError *error,
app_data *data)
{
set_online_status (data, strcmp (status, "") == 0);
}
g_free (status);
- g_free (transport);
+ g_strfreev (transports);
}
static void
{
if (data->current_service &&
config_name && status &&
- strcmp (data->current_service->name, config_name) == 0) {
+ g_strcasecmp (data->current_service->name, config_name) == 0) {
set_online_status (data, strcmp (status, "") == 0);
}
G_CALLBACK (server_shutdown_cb), data);
g_signal_connect (data->server, "session-changed",
G_CALLBACK (server_session_changed_cb), data);
- g_signal_connect (data->server, "presence_changed",
+ g_signal_connect (data->server, "presence-changed",
G_CALLBACK (server_presence_changed_cb), data);
- g_signal_connect (data->server, "templates_changed",
+ g_signal_connect (data->server, "templates-changed",
G_CALLBACK (server_templates_changed_cb), data);
g_signal_connect (data->server, "info-request",
G_CALLBACK (info_request_cb), data);
notify_notification_clear_actions(m_notification);
notify_notification_close(m_notification, NULL);
}
+#if !defined(NOTIFY_CHECK_VERSION)
m_notification = notify_notification_new(summary, body, NULL, NULL);
+#else // NOTIFY_CHECK_VERSION(0,7,0) is redundant, because 0.7.0 introduced NOTIFY_CHECK_VERSION
+ m_notification = notify_notification_new(summary, body, NULL);
+#endif
//if actions are not supported, don't add actions
//An example is Ubuntu Notify OSD. It uses an alert box
//instead of a bubble when a notification is appended with actions.
"peers/scheduleworld/config.ini:# SSLVerifyHost = 1\n"
"peers/scheduleworld/config.ini:WebURL = http://www.scheduleworld.com\n"
"peers/scheduleworld/config.ini:# IconURI = \n"
- "peers/scheduleworld/config.ini:ConsumerReady = 1\n"
+ "peers/scheduleworld/config.ini:# ConsumerReady = 0\n"
"peers/scheduleworld/sources/addressbook/.internal.ini:# adminData = \n"
"peers/scheduleworld/sources/addressbook/.internal.ini:# synthesisID = 0\n"
"spds/syncml/config.txt:# SSLVerifyHost = 1\n"
"spds/syncml/config.txt:WebURL = http://www.scheduleworld.com\n"
"spds/syncml/config.txt:# IconURI = \n"
- "spds/syncml/config.txt:ConsumerReady = 1\n"
+ "spds/syncml/config.txt:# ConsumerReady = 0\n"
"spds/sources/addressbook/config.txt:sync = two-way\n"
"spds/sources/addressbook/config.txt:type = addressbook:text/vcard\n"
"spds/sources/addressbook/config.txt:# evolutionsource = \n"
"WebURL = http://my.funambol.com");
boost::replace_first(config,
+ "# ConsumerReady = 0",
+ "ConsumerReady = 1");
+
+ boost::replace_first(config,
"# enableWBXML = 1",
"enableWBXML = 0");
"WebURL = http://www.synthesis.ch");
boost::replace_first(config,
- "ConsumerReady = 1",
- "# ConsumerReady = 0");
-
- boost::replace_first(config,
"addressbook/config.ini:uri = card3",
"addressbook/config.ini:uri = contacts");
boost::replace_all(config,
boost::iequals(server, "default")) {
config->setSyncURL("http://sync.scheduleworld.com/funambol/ds");
config->setWebURL("http://www.scheduleworld.com");
- config->setConsumerReady(true);
+ // ScheduleWorld was shut down end of November 2010.
+ // Completely removing all traces of it from SyncEvolution
+ // source code is too intrusive for the time being, so
+ // just disable it in the UI.
+ // config->setConsumerReady(false);
source = config->getSyncSourceConfig("addressbook");
source->setURI("card3");
source->setSourceType("addressbook:text/vcard");
#include <boost/foreach.hpp>
#include <boost/algorithm/string/split.hpp>
#include <boost/bind.hpp>
+#include <boost/utility.hpp>
#include <sys/stat.h>
#include <sys/wait.h>
{
}
+/**
+ * Utility code for parsing and comparing
+ * log dir names. Also a binary predicate for
+ * sorting them.
+ */
+class LogDirNames {
+public:
+ // internal prefix for backup directory name: "SyncEvolution-"
+ static const char* const DIR_PREFIX;
+
+ /**
+ * Compare two directory by its creation time encoded
+ * in the directory name sort them in ascending order
+ */
+ bool operator() (const string &str1, const string &str2) {
+ string iDirPath1, iStr1;
+ string iDirPath2, iStr2;
+ parseLogDir(str1, iDirPath1, iStr1);
+ parseLogDir(str2, iDirPath2, iStr2);
+ string dirPrefix1, peerName1, dateTime1;
+ parseDirName(iStr1, dirPrefix1, peerName1, dateTime1);
+ string dirPrefix2, peerName2, dateTime2;
+ parseDirName(iStr2, dirPrefix2, peerName2, dateTime2);
+ return dateTime1 < dateTime2;
+ }
+
+ /**
+ * extract backup directory name from a full backup path
+ * for example, a full path "/home/xxx/.cache/syncevolution/default/funambol-2009-12-08-14-05"
+ * is parsed as "/home/xxx/.cache/syncevolution/default" and "funambol-2009-12-08-14-05"
+ */
+ static void parseLogDir(const string &fullpath, string &dirPath, string &dirName) {
+ string iFullpath = boost::trim_right_copy_if(fullpath, boost::is_any_of("/"));
+ size_t off = iFullpath.find_last_of('/');
+ if(off != iFullpath.npos) {
+ dirPath = iFullpath.substr(0, off);
+ dirName = iFullpath.substr(off+1);
+ } else {
+ dirPath = "";
+ dirName = iFullpath;
+ }
+ }
+
+ // escape '-' and '_' for peer name
+ static string escapePeer(const string &prefix) {
+ string escaped = prefix;
+ boost::replace_all(escaped, "_", "__");
+ boost::replace_all(escaped, "-", "_+");
+ return escaped;
+ }
+
+ // un-escape '_+' and '__' for peer name
+ static string unescapePeer(const string &escaped) {
+ string prefix = escaped;
+ boost::replace_all(prefix, "_+", "-");
+ boost::replace_all(prefix, "__", "_");
+ return prefix;
+ }
+
+ /**
+ * parse a directory name into dirPrefix(empty or DIR_PREFIX), peerName, dateTime.
+ * peerName must be unescaped by the caller to get the real string.
+ * If directory name is in the format of '[DIR_PREFIX]-peer[@context]-year-month-day-hour-min'
+ * then parsing is sucessful and these 3 strings are correctly set and true is returned.
+ * Otherwise, false is returned.
+ * Here we don't check whether the dir name is matching peer name
+ */
+ static bool parseDirName(const string &dir, string &dirPrefix, string &config, string &dateTime) {
+ string iDir = dir;
+ if (!boost::starts_with(iDir, DIR_PREFIX)) {
+ dirPrefix = "";
+ } else {
+ dirPrefix = DIR_PREFIX;
+ boost::erase_first(iDir, DIR_PREFIX);
+ }
+ size_t off = iDir.find('-');
+ if (off != iDir.npos) {
+ config = iDir.substr(0, off);
+ dateTime = iDir.substr(off);
+ // m_prefix doesn't contain peer name or it equals with dirPrefix plus peerName
+ return checkDirName(dateTime);
+ }
+ return false;
+ }
+
+ // check the dir name is conforming to what format we write
+ static bool checkDirName(const string& value) {
+ const char* str = value.c_str();
+ /** need check whether string after prefix is a valid date-time we wrote, format
+ * should be -YYYY-MM-DD-HH-MM and optional sequence number */
+ static char table[] = {'-','9','9','9','9', //year
+ '-','1','9', //month
+ '-','3','9', //date
+ '-','2','9', //hour
+ '-','5','9' //minute
+ };
+ for(size_t i = 0; i < sizeof(table)/sizeof(table[0]) && *str; i++,str++) {
+ switch(table[i]) {
+ case '-':
+ if(*str != '-')
+ return false;
+ break;
+ case '1':
+ if(*str < '0' || *str > '1')
+ return false;
+ break;
+ case '2':
+ if(*str < '0' || *str > '2')
+ return false;
+ break;
+ case '3':
+ if(*str < '0' || *str > '3')
+ return false;
+ break;
+ case '5':
+ if(*str < '0' || *str > '5')
+ return false;
+ break;
+ case '9':
+ if(*str < '0' || *str > '9')
+ return false;
+ break;
+ default:
+ return false;
+ };
+ }
+ return true;
+ }
+};
// this class owns the logging directory and is responsible
// for redirecting output at the start and end of sync (even
// in case of exceptions thrown!)
-class LogDir : public LoggerBase {
+class LogDir : public LoggerBase, private boost::noncopyable, private LogDirNames {
SyncContext &m_client;
Logger &m_parentLogger; /**< the logger which was active before we started to intercept messages */
string m_logdir; /**< configured backup root dir */
bool m_readonly; /**< m_info is not to be written to */
SyncReport *m_report; /**< record start/end times here */
- // internal prefix for backup directory name: "SyncEvolution-"
- static const char* const DIR_PREFIX;
-
public:
LogDir(SyncContext &client) : m_client(client), m_parentLogger(LoggerBase::instance()), m_info(NULL), m_readonly(false), m_report(NULL)
{
level = INFO;
break;
default:
- if (m_logfile.empty()) {
- // no log file: print all information to the console
+ if (m_logfile.empty() || getenv("SYNCEVOLUTION_DEBUG")) {
+ // no log file or user wants to see everything:
+ // print all information to the console
level = DEBUG;
} else {
// have log file: avoid excessive output to the console,
}
/**
- * Compare two directory by its creation time encoded in the directory name
- * sort them in ascending order
- */
- bool operator()(const string &str1, const string &str2) {
- string iDirPath1, iStr1;
- string iDirPath2, iStr2;
- parseLogDir(str1, iDirPath1, iStr1);
- parseLogDir(str2, iDirPath2, iStr2);
- string dirPrefix1, peerName1, dateTime1;
- parseDirName(iStr1, dirPrefix1, peerName1, dateTime1);
- string dirPrefix2, peerName2, dateTime2;
- parseDirName(iStr2, dirPrefix2, peerName2, dateTime2);
- return dateTime1 < dateTime2;
- }
-
- /**
* Compare two database dumps just based on their inodes.
* @return true if inodes differ
*/
{}
};
- /**
- * extract backup directory name from a full backup path
- * for example, a full path "/home/xxx/.cache/syncevolution/default/funambol-2009-12-08-14-05"
- * is parsed as "/home/xxx/.cache/syncevolution/default" and "funambol-2009-12-08-14-05"
- */
- static void parseLogDir(const string &fullpath, string &dirPath, string &dirName) {
- string iFullpath = boost::trim_right_copy_if(fullpath, boost::is_any_of("/"));
- size_t off = iFullpath.find_last_of('/');
- if(off != iFullpath.npos) {
- dirPath = iFullpath.substr(0, off);
- dirName = iFullpath.substr(off+1);
- } else {
- dirPath = "";
- dirName = iFullpath;
- }
- }
-
- // escape '-' and '_' for peer name
- static string escapePeer(const string &prefix) {
- string escaped = prefix;
- boost::replace_all(escaped, "_", "__");
- boost::replace_all(escaped, "-", "_+");
- return escaped;
- }
-
- // un-escape '_+' and '__' for peer name
- static string unescapePeer(const string &escaped) {
- string prefix = escaped;
- boost::replace_all(prefix, "_+", "-");
- boost::replace_all(prefix, "__", "_");
- return prefix;
- }
-
- /**
- * parse a directory name into dirPrefix(empty or DIR_PREFIX), peerName, dateTime.
- * peerName must be unescaped by the caller to get the real string.
- * If directory name is in the format of '[DIR_PREFIX]-peer[@context]-year-month-day-hour-min'
- * then parsing is sucessful and these 3 strings are correctly set and true is returned.
- * Otherwise, false is returned.
- * Here we don't check whether the dir name is matching peer name
- */
- static bool parseDirName(const string &dir, string &dirPrefix, string &config, string &dateTime) {
- string iDir = dir;
- if (!boost::starts_with(iDir, DIR_PREFIX)) {
- dirPrefix = "";
- } else {
- dirPrefix = DIR_PREFIX;
- boost::erase_first(iDir, DIR_PREFIX);
- }
- size_t off = iDir.find('-');
- if (off != iDir.npos) {
- config = iDir.substr(0, off);
- dateTime = iDir.substr(off);
- // m_prefix doesn't contain peer name or it equals with dirPrefix plus peerName
- return checkDirName(dateTime);
- }
- return false;
- }
-
/**
* Find all entries in a given directory, return as sorted array of full paths in ascending order.
* If m_prefix doesn't contain peer name information, then all log dirs for different peers in the
// sort vector in ascending order
// if no peer name
if(peerName.empty()){
- sort(dirs.begin(), dirs.end(), *this);
+ sort(dirs.begin(), dirs.end(), LogDirNames());
} else {
sort(dirs.begin(), dirs.end());
}
}
- // check the dir name is conforming to what format we write
- static bool checkDirName(const string& value) {
- const char* str = value.c_str();
- /** need check whether string after prefix is a valid date-time we wrote, format
- * should be -YYYY-MM-DD-HH-MM and optional sequence number */
- static char table[] = {'-','9','9','9','9', //year
- '-','1','9', //month
- '-','3','9', //date
- '-','2','9', //hour
- '-','5','9' //minute
- };
- for(size_t i = 0; i < sizeof(table)/sizeof(table[0]) && *str; i++,str++) {
- switch(table[i]) {
- case '-':
- if(*str != '-')
- return false;
- break;
- case '1':
- if(*str < '0' || *str > '1')
- return false;
- break;
- case '2':
- if(*str < '0' || *str > '2')
- return false;
- break;
- case '3':
- if(*str < '0' || *str > '3')
- return false;
- break;
- case '5':
- if(*str < '0' || *str > '5')
- return false;
- break;
- case '9':
- if(*str < '0' || *str > '9')
- return false;
- break;
- default:
- return false;
- };
- }
- return true;
- }
-
// store time stamp in session info
void writeTimestamp(const string &key, time_t val, bool flush = true) {
if (m_info) {
}
};
-const char* const LogDir::DIR_PREFIX = "SyncEvolution-";
+const char* const LogDirNames::DIR_PREFIX = "SyncEvolution-";
/**
* This class owns the sync sources. For historic reasons (required
" -->\n"
" <conflictstrategy>newer-wins</conflictstrategy>\n"
"\n"
- " <!-- on slowsync: duplicate items that are not fully equal\n"
- " You can set this to 'newer-wins' as well to avoid\n"
- " duplicates as much as possible\n"
+ " <!-- on slowsync: do not duplicate items even if not fully equal\n"
+ " You can set this to 'duplicate' to avoid possible data loss\n"
+ " resulting from merging\n"
" -->\n"
- " <slowsyncstrategy>duplicate</slowsyncstrategy>\n"
+ " <slowsyncstrategy>newer-wins</slowsyncstrategy>\n"
"\n"
" <!-- text db plugin is designed for UTF-8, make sure data is passed as UTF-8 (and not the ISO-8859-1 default) -->\n"
" <datacharset>UTF-8</datacharset>\n"
<field name="SUMMARY" type="multiline" compare="always"/>
<field name="DESCRIPTION" type="multiline" compare="slowsync" merge="lines"/>
<field name="LOCATION" type="multiline" compare="slowsync" merge="lines"/>
- <field name="URL" type="url" compare="conflict"/>
+ <field name="URL" type="url" compare="conflict" merge="fillempty"/>
<!-- recurrence rule block, fields must be in that order, including
DTSTART as last field !! -->
<model>SyncEvolution</model>
<include rule="HAVE-EVOLUTION-UI-SLOT"/>
+ <!-- Merging between SyncEvolution instances is expected to work
+ well, so allow the engine to update items on both
+ sides also in the "non-first" slow sync case.
+
+ This is turned off by default for other clients
+ because small changes would propagate to other
+ clients of the server. Hopefully with SyncEvolution as
+ client we'll have not much such changes. -->
+ <updateclientinslowsync>yes</updateclientinslowsync>
+ <updateserverinslowsync>yes</updateserverinslowsync>
</remoterule>
--- /dev/null
+ <remoterule name="SonyEricsson">
+ <!-- defaults for *all* Sony Ericsson phones; can be overridden for
+specific models later on -->
+ <manufacturer>SonyEricsson</manufacturer>
+ <finalrule>no</finalrule>
+
+ <!-- At least the Sony Ericsson T700 is only able to deal with alarm
+times in UTC,
+ but rejects relative times. BMC #10091 -->
+ <rulescript><![CDATA[
+ alarmTimeToUTC = TRUE;
+ ]]></rulescript>
+ </remoterule>
}
}
+ // Transform absolute alarm time back to relative time (mirrors the code in
+ // VCALENDAR_OUTGOING_SCRIPT, see also BMC #11233). This applies to all
+ // events, recurring or not, if the "alarmTimeToUTC" workaround is applied.
+ // With a peer which cannot distinguish between absolute and relative
+ // alarms we better treat all alarms as relative, because that is presented
+ // more nicely to the user on the local side.
+ if (ITEMDATATYPE()=="vCalendar10" &&
+ ALARM_TIME!=EMPTY &&
+ !ISDURATION(ALARM_TIME) &&
+ SESSIONVAR("alarmTimeToUTC")) {
+ ALARM_TIME = ALARM_TIME - DTSTART;
+ }
+
// - shape attendees (and make sure ATTENDEES[] is assigned even for empty email addresses)
i=0;
while(i<SIZE(ATTENDEES) || i<SIZE(ATTENDEE_CNS)) {
}
// for 'ALARM_TIME', convert duration time to UTC time
- // This workaround is for Mobical.net can't understand duration time
+ // This workaround is for Mobical.net which can't understand duration time.
+ // Also used with phones. The interpretation at least by Nokia
+ // is that the absolute alarm time repeats together with the
+ // event (BMC #11233). VCALENDAR_INCOMING_SCRIPT has the
+ // corresponding transformation back (important for recurring events).
if (SESSIONVAR("alarmTimeToUTC") && ITEMDATATYPE()=="vCalendar10"
&& ALARM_TIME!=EMPTY && ISDURATION(ALARM_TIME)) {
TIMESTAMP ts;
bool relToAbs(string &path)
{
- char buffer[PATH_MAX+1];
- if (realpath(path.c_str(), buffer)) {
+ char *buffer;
+ if ((buffer = realpath(path.c_str(), NULL)) != NULL) {
path = buffer;
+ free(buffer);
return true;
} else {
return false;
free(exe);
try {
+ if (getenv("SYNCEVOLUTION_DEBUG")) {
+ LoggerBase::instance().setLevel(Logger::DEBUG);
+ }
+
/*
* don't log errors to cerr: LogRedirect cannot distinguish
* between our valid error messages and noise from other
# Generated by configure. Do no edit.
-# git revision 2a247a4a9752d939eb68d2d629ddb8d988fccc89
-# git tag libsynthesis_3.4.0.6+syncevolution-1-1
+# git revision 31f90cff28d24a5f31579039597ccfc5a534288a
+# git tag libsynthesis_3.4.0.6+syncevolution-1-1-0-99-1
+
+2010-12-16 Lukas Zeller <luz@plan44.ch>
+
+ * src/sysync/localengineds.cpp:
+
+ engine: server case: fixed bad bug that could mess up tempGUIDs.
+ These must be cleared when first <Sync> is received.
+
+2010-12-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/sysync/localengineds.cpp:
+
+ temporary ID mapping: flag unexpected state as real errors
+
+2010-12-15 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/platform_adapters/linux/platform_timezones.cpp:
+
+ Linux time zones: use TZID=<location> instead of
+ TZID=/softwarestudio.org/Tzfile/<location>
+
+2010-12-14 Lukas Zeller <luz@synthesis.ch>
+
+ * src/sysync/mimedirprofile.cpp:
+
+ engine: prevent generating invalid recurrence end specifications
+ in vCalendar 1.0 RRULE (date-only not allowed, must be date+time)
+
+2010-12-14 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/sysync/mimedirprofile.cpp:
+
+ Revert "vCalendar 1.0: avoid RRULE end date without time"
+
+2010-12-14 Patrick Ohly <patrick.ohly@intel.com>
+
+ * configure.in:
+ * src/Makefile.am.in:
+
+ autotools: fix compilation with old libtool 1.5.22 on CentOS 5.5
+
+2010-12-13 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/sysync/mimedirprofile.cpp:
+
+ vCalendar 1.0: avoid RRULE end date without time
+
+2010-12-12 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/sysync/vtimezone.cpp:
+
+ vtimezone: retain original TZID in imported definitions
+
+2010-12-12 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/platform_adapters/linux/platform_timezones.cpp:
+ * src/sysync/timezones.h:
+ * src/sysync/vtimezone.cpp:
+ * src/sysync/vtimezone.h:
+
+ vtimezones: explicitly store std and dst TZNAME
+
+2010-12-10 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/sysync/localengineds.cpp:
+
+ maximum UID size: avoid redundant tempUID->localUID mappings
+
+2010-12-08 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/DB_interfaces/api_db/pluginapids.cpp:
+ * src/sysync/localengineds.cpp:
+
+ temporary IDs: avoid reusing existing ID
+
+2010-12-06 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncml_tk/src/sml/mgr/all/mgrinstancemgr.c:
+
+ SyncML Toolkit: fixed memory leak in case of error
+
+2010-12-06 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/sysync/syncsession.cpp:
+
+ sync session: handle empty Target URI
+
+2010-11-28 David Bremner <bremner@unb.ca>
+
+ * src/Targets/ReleasedProducts/SDK/target_options.h:
+
+ improve detection of MacOS X, to avoid confusion on other Mach
+ systems
+
+2010-08-24 Lukas Zeller <luz@synthesis.ch>
+
+ * src/sysync/multifielditemtype.cpp:
+ * src/sysync/syncitem.cpp:
+ * src/sysync/syncitem.h:
+
+ engine: added new compare mode for fields: "scripted"
2010-10-19 Patrick Ohly <patrick.ohly@intel.com>
PATH_SEPARATOR = @PATH_SEPARATOR@
PCRE_CFLAGS = @PCRE_CFLAGS@
PCRE_LIBS = @PCRE_LIBS@
+PIC_CXXFLAGS = @PIC_CXXFLAGS@
PKG_CONFIG = @PKG_CONFIG@
RANLIB = @RANLIB@
SED = @SED@
FFLAGS
ac_ct_F77
LIBTOOL
+PIC_CXXFLAGS
COND_DOXYGEN_TRUE
COND_DOXYGEN_FALSE
PKG_CONFIG
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 4856 "configure"' > conftest.$ac_ext
+ echo '#line 4857 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7436: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7437: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:7440: \$? = $ac_status" >&5
+ echo "$as_me:7441: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7726: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7727: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:7730: \$? = $ac_status" >&5
+ echo "$as_me:7731: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7830: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7831: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:7834: \$? = $ac_status" >&5
+ echo "$as_me:7835: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 10207 "configure"
+#line 10208 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 10307 "configure"
+#line 10308 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:12708: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:12709: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:12712: \$? = $ac_status" >&5
+ echo "$as_me:12713: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:12812: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:12813: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:12816: \$? = $ac_status" >&5
+ echo "$as_me:12817: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14410: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14411: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:14414: \$? = $ac_status" >&5
+ echo "$as_me:14415: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14514: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14515: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:14518: \$? = $ac_status" >&5
+ echo "$as_me:14519: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:16734: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16735: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:16738: \$? = $ac_status" >&5
+ echo "$as_me:16739: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17024: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:17025: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:17028: \$? = $ac_status" >&5
+ echo "$as_me:17029: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17128: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:17129: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:17132: \$? = $ac_status" >&5
+ echo "$as_me:17133: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
+PIC_CXXFLAGS="$lt_prog_compiler_pic_CXX"
+
+
# Check whether --enable-debug-logs was given.
if test "${enable_debug_logs+set}" = set; then
enableval=$enable_debug_logs; enable_debug_logs="$enableval"
FFLAGS!$FFLAGS$ac_delim
ac_ct_F77!$ac_ct_F77$ac_delim
LIBTOOL!$LIBTOOL$ac_delim
+PIC_CXXFLAGS!$PIC_CXXFLAGS$ac_delim
COND_DOXYGEN_TRUE!$COND_DOXYGEN_TRUE$ac_delim
COND_DOXYGEN_FALSE!$COND_DOXYGEN_FALSE$ac_delim
PKG_CONFIG!$PKG_CONFIG$ac_delim
LTLIBOBJS!$LTLIBOBJS$ac_delim
_ACEOF
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 28; then
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 29; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
AC_PROG_MAKE_SET
AM_PROG_CC_C_O
+dnl Extract PIC flags from libtool configure for libsynthesissdk.a
+dnl (makes assumptions about libtool var naming!). Some versions
+dnl of libtool use PIC mode automatically for static libraries,
+dnl others don't (?!). See "[os-libsynthesis] libsynthesissdk.a built without -fPIC".
+PIC_CXXFLAGS="$lt_prog_compiler_pic_CXX"
+AC_SUBST(PIC_CXXFLAGS)
+
AC_ARG_ENABLE(debug-logs,
AS_HELP_STRING([--debug-logs],
[For developers: add links to call location to HTML log files. Depends on Doxygen (for HTML version of source) and g++ (for __PRETTY_FUNCTION__).]),
switch (mapEntry.entrytype) {
#ifdef SYSYNC_SERVER
case mapentry_tempidmap:
- if (IS_SERVER)
- fTempGUIDMap[mapEntry.remoteid]=mapEntry.localid; // tempGUIDs are accessed by remoteID=tempID
+ if (IS_SERVER) {
+ PDEBUGPRINTFX(DBG_DATA,(
+ "fTempGUIDMap: restore mapping from %s to %s",
+ mapEntry.remoteid.c_str(),
+ mapEntry.localid.c_str()
+ ));
+
+ fTempGUIDMap[mapEntry.remoteid]=mapEntry.localid; // tempGUIDs are accessed by remoteID=tempID
+ }
break;
#endif
#ifdef SYSYNC_CLIENT
endif
libsynthesissdk_la_LDFLAGS = -static
+libsynthesissdk_la_CFLAGS = $(PIC_CXXFLAGS)
+libsynthesissdk_la_CXXFLAGS = $(PIC_CXXFLAGS)
libsynthesissdk_la_SOURCES = synthesis/SDK_support.h synthesis/SDK_util.h synthesis/UI_util.h synthesis/admindata.h synthesis/blobs.h synthesis/dataconversion.h synthesis/dbitem.h synthesis/engine_defs.h synthesis/enginemodulebase.h synthesis/enginemodulebridge.h synthesis/generic_types.h synthesis/lineartime.h synthesis/prefix_file.h synthesis/san.h synthesis/stringutil.h synthesis/syerror.h synthesis/sync_dbapi.h synthesis/sync_dbapidef.h synthesis/sync_declarations.h synthesis/sync_include.h synthesis/sync_uiapi.h synthesis/syncexception.h synthesis/sysync_b64.h synthesis/sysync_md5.h synthesis/sysync_utils.h synthesis/timeutil.h
if COND_STATIC
libsynthesissdk_la_SOURCES += sysync_SDK/Sources/UI_util.cpp sysync_SDK/Sources/enginemodulebridge.cpp sysync_SDK/Sources/san.cpp sysync_SDK/Sources/timeutil.cpp
-I$(srcdir)/syncml_tk/src/sml/mgr/inc/
libsynthesisstubs_la_LDFLAGS = -static
+libsynthesisstubs_la_CFLAGS = $(libsynthesissdk_la_CXXFLAGS)
+libsynthesisstubs_la_CXXFLAGS = $(libsynthesissdk_la_CXXFLAGS)
libsynthesisstubs_la_SOURCES = sysync_SDK/Sources/enginestubs.c
libsynthesisstubs_la_CPPFLAGS = $(libsynthesissdk_la_CPPFLAGS)
endif
libsynthesissdk_la_LDFLAGS = -static
+libsynthesissdk_la_CFLAGS = $(PIC_CXXFLAGS)
+libsynthesissdk_la_CXXFLAGS = $(PIC_CXXFLAGS)
libsynthesissdk_la_SOURCES = @LIBSYNTHESISSDK_HEADERS@
if COND_STATIC
libsynthesissdk_la_SOURCES += @LIBSYNTHESISSDK_SOURCES_SDK_ONLY@
-I$(srcdir)/syncml_tk/src/sml/mgr/inc/
libsynthesisstubs_la_LDFLAGS = -static
+libsynthesisstubs_la_CFLAGS = $(libsynthesissdk_la_CXXFLAGS)
+libsynthesisstubs_la_CXXFLAGS = $(libsynthesissdk_la_CXXFLAGS)
libsynthesisstubs_la_SOURCES = sysync_SDK/Sources/enginestubs.c
libsynthesisstubs_la_CPPFLAGS = $(libsynthesissdk_la_CPPFLAGS)
am_libsynthesissdk_la_OBJECTS = $(am__objects_2) $(am__objects_3)
libsynthesissdk_la_OBJECTS = $(am_libsynthesissdk_la_OBJECTS)
libsynthesissdk_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
- $(CXXFLAGS) $(libsynthesissdk_la_LDFLAGS) $(LDFLAGS) -o $@
+ $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+ $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) \
+ $(libsynthesissdk_la_LDFLAGS) $(LDFLAGS) -o $@
libsynthesisstubs_la_LIBADD =
am_libsynthesisstubs_la_OBJECTS = libsynthesisstubs_la-enginestubs.lo
libsynthesisstubs_la_OBJECTS = $(am_libsynthesisstubs_la_OBJECTS)
libsynthesisstubs_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libsynthesisstubs_la_CFLAGS) $(CFLAGS) \
$(libsynthesisstubs_la_LDFLAGS) $(LDFLAGS) -o $@
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/../../depcomp
PATH_SEPARATOR = @PATH_SEPARATOR@
PCRE_CFLAGS = @PCRE_CFLAGS@
PCRE_LIBS = @PCRE_LIBS@
+PIC_CXXFLAGS = @PIC_CXXFLAGS@
PKG_CONFIG = @PKG_CONFIG@
RANLIB = @RANLIB@
SED = @SED@
@COND_XMLPARSE_TRUE@ expat/xmltok/xmltok_impl.h
libsynthesissdk_la_LDFLAGS = -static
+libsynthesissdk_la_CFLAGS = $(PIC_CXXFLAGS)
+libsynthesissdk_la_CXXFLAGS = $(PIC_CXXFLAGS)
libsynthesissdk_la_SOURCES = synthesis/SDK_support.h \
synthesis/SDK_util.h synthesis/UI_util.h synthesis/admindata.h \
synthesis/blobs.h synthesis/dataconversion.h \
-I$(srcdir)/syncml_tk/src/sml/mgr/inc/
libsynthesisstubs_la_LDFLAGS = -static
+libsynthesisstubs_la_CFLAGS = $(libsynthesissdk_la_CXXFLAGS)
+libsynthesisstubs_la_CXXFLAGS = $(libsynthesissdk_la_CXXFLAGS)
libsynthesisstubs_la_SOURCES = sysync_SDK/Sources/enginestubs.c
libsynthesisstubs_la_CPPFLAGS = $(libsynthesissdk_la_CPPFLAGS)
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesis_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesis_la_CFLAGS) $(CFLAGS) -c -o libsynthesis_la-xmltok.lo `test -f 'expat/xmltok/xmltok.c' || echo '$(srcdir)/'`expat/xmltok/xmltok.c
libsynthesissdk_la-SDK_util.lo: sysync_SDK/Sources/SDK_util.c
-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsynthesissdk_la-SDK_util.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-SDK_util.Tpo -c -o libsynthesissdk_la-SDK_util.lo `test -f 'sysync_SDK/Sources/SDK_util.c' || echo '$(srcdir)/'`sysync_SDK/Sources/SDK_util.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CFLAGS) $(CFLAGS) -MT libsynthesissdk_la-SDK_util.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-SDK_util.Tpo -c -o libsynthesissdk_la-SDK_util.lo `test -f 'sysync_SDK/Sources/SDK_util.c' || echo '$(srcdir)/'`sysync_SDK/Sources/SDK_util.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libsynthesissdk_la-SDK_util.Tpo $(DEPDIR)/libsynthesissdk_la-SDK_util.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sysync_SDK/Sources/SDK_util.c' object='libsynthesissdk_la-SDK_util.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsynthesissdk_la-SDK_util.lo `test -f 'sysync_SDK/Sources/SDK_util.c' || echo '$(srcdir)/'`sysync_SDK/Sources/SDK_util.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CFLAGS) $(CFLAGS) -c -o libsynthesissdk_la-SDK_util.lo `test -f 'sysync_SDK/Sources/SDK_util.c' || echo '$(srcdir)/'`sysync_SDK/Sources/SDK_util.c
libsynthesisstubs_la-enginestubs.lo: sysync_SDK/Sources/enginestubs.c
-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesisstubs_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsynthesisstubs_la-enginestubs.lo -MD -MP -MF $(DEPDIR)/libsynthesisstubs_la-enginestubs.Tpo -c -o libsynthesisstubs_la-enginestubs.lo `test -f 'sysync_SDK/Sources/enginestubs.c' || echo '$(srcdir)/'`sysync_SDK/Sources/enginestubs.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesisstubs_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesisstubs_la_CFLAGS) $(CFLAGS) -MT libsynthesisstubs_la-enginestubs.lo -MD -MP -MF $(DEPDIR)/libsynthesisstubs_la-enginestubs.Tpo -c -o libsynthesisstubs_la-enginestubs.lo `test -f 'sysync_SDK/Sources/enginestubs.c' || echo '$(srcdir)/'`sysync_SDK/Sources/enginestubs.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libsynthesisstubs_la-enginestubs.Tpo $(DEPDIR)/libsynthesisstubs_la-enginestubs.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sysync_SDK/Sources/enginestubs.c' object='libsynthesisstubs_la-enginestubs.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesisstubs_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsynthesisstubs_la-enginestubs.lo `test -f 'sysync_SDK/Sources/enginestubs.c' || echo '$(srcdir)/'`sysync_SDK/Sources/enginestubs.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesisstubs_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesisstubs_la_CFLAGS) $(CFLAGS) -c -o libsynthesisstubs_la-enginestubs.lo `test -f 'sysync_SDK/Sources/enginestubs.c' || echo '$(srcdir)/'`sysync_SDK/Sources/enginestubs.c
.cpp.o:
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesis_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesis_la_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesis_la-sysync_utils.lo `test -f 'sysync_SDK/Sources/sysync_utils.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/sysync_utils.cpp
libsynthesissdk_la-UI_util.lo: sysync_SDK/Sources/UI_util.cpp
-@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-UI_util.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-UI_util.Tpo -c -o libsynthesissdk_la-UI_util.lo `test -f 'sysync_SDK/Sources/UI_util.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/UI_util.cpp
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-UI_util.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-UI_util.Tpo -c -o libsynthesissdk_la-UI_util.lo `test -f 'sysync_SDK/Sources/UI_util.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/UI_util.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libsynthesissdk_la-UI_util.Tpo $(DEPDIR)/libsynthesissdk_la-UI_util.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sysync_SDK/Sources/UI_util.cpp' object='libsynthesissdk_la-UI_util.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-UI_util.lo `test -f 'sysync_SDK/Sources/UI_util.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/UI_util.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-UI_util.lo `test -f 'sysync_SDK/Sources/UI_util.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/UI_util.cpp
libsynthesissdk_la-enginemodulebridge.lo: sysync_SDK/Sources/enginemodulebridge.cpp
-@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-enginemodulebridge.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-enginemodulebridge.Tpo -c -o libsynthesissdk_la-enginemodulebridge.lo `test -f 'sysync_SDK/Sources/enginemodulebridge.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/enginemodulebridge.cpp
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-enginemodulebridge.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-enginemodulebridge.Tpo -c -o libsynthesissdk_la-enginemodulebridge.lo `test -f 'sysync_SDK/Sources/enginemodulebridge.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/enginemodulebridge.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libsynthesissdk_la-enginemodulebridge.Tpo $(DEPDIR)/libsynthesissdk_la-enginemodulebridge.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sysync_SDK/Sources/enginemodulebridge.cpp' object='libsynthesissdk_la-enginemodulebridge.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-enginemodulebridge.lo `test -f 'sysync_SDK/Sources/enginemodulebridge.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/enginemodulebridge.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-enginemodulebridge.lo `test -f 'sysync_SDK/Sources/enginemodulebridge.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/enginemodulebridge.cpp
libsynthesissdk_la-san.lo: sysync_SDK/Sources/san.cpp
-@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-san.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-san.Tpo -c -o libsynthesissdk_la-san.lo `test -f 'sysync_SDK/Sources/san.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/san.cpp
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-san.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-san.Tpo -c -o libsynthesissdk_la-san.lo `test -f 'sysync_SDK/Sources/san.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/san.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libsynthesissdk_la-san.Tpo $(DEPDIR)/libsynthesissdk_la-san.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sysync_SDK/Sources/san.cpp' object='libsynthesissdk_la-san.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-san.lo `test -f 'sysync_SDK/Sources/san.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/san.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-san.lo `test -f 'sysync_SDK/Sources/san.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/san.cpp
libsynthesissdk_la-timeutil.lo: sysync_SDK/Sources/timeutil.cpp
-@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-timeutil.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-timeutil.Tpo -c -o libsynthesissdk_la-timeutil.lo `test -f 'sysync_SDK/Sources/timeutil.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/timeutil.cpp
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-timeutil.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-timeutil.Tpo -c -o libsynthesissdk_la-timeutil.lo `test -f 'sysync_SDK/Sources/timeutil.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/timeutil.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libsynthesissdk_la-timeutil.Tpo $(DEPDIR)/libsynthesissdk_la-timeutil.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sysync_SDK/Sources/timeutil.cpp' object='libsynthesissdk_la-timeutil.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-timeutil.lo `test -f 'sysync_SDK/Sources/timeutil.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/timeutil.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-timeutil.lo `test -f 'sysync_SDK/Sources/timeutil.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/timeutil.cpp
libsynthesissdk_la-SDK_support.lo: sysync_SDK/Sources/SDK_support.cpp
-@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-SDK_support.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-SDK_support.Tpo -c -o libsynthesissdk_la-SDK_support.lo `test -f 'sysync_SDK/Sources/SDK_support.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/SDK_support.cpp
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-SDK_support.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-SDK_support.Tpo -c -o libsynthesissdk_la-SDK_support.lo `test -f 'sysync_SDK/Sources/SDK_support.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/SDK_support.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libsynthesissdk_la-SDK_support.Tpo $(DEPDIR)/libsynthesissdk_la-SDK_support.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sysync_SDK/Sources/SDK_support.cpp' object='libsynthesissdk_la-SDK_support.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-SDK_support.lo `test -f 'sysync_SDK/Sources/SDK_support.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/SDK_support.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-SDK_support.lo `test -f 'sysync_SDK/Sources/SDK_support.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/SDK_support.cpp
libsynthesissdk_la-blobs.lo: sysync_SDK/Sources/blobs.cpp
-@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-blobs.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-blobs.Tpo -c -o libsynthesissdk_la-blobs.lo `test -f 'sysync_SDK/Sources/blobs.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/blobs.cpp
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-blobs.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-blobs.Tpo -c -o libsynthesissdk_la-blobs.lo `test -f 'sysync_SDK/Sources/blobs.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/blobs.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libsynthesissdk_la-blobs.Tpo $(DEPDIR)/libsynthesissdk_la-blobs.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sysync_SDK/Sources/blobs.cpp' object='libsynthesissdk_la-blobs.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-blobs.lo `test -f 'sysync_SDK/Sources/blobs.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/blobs.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-blobs.lo `test -f 'sysync_SDK/Sources/blobs.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/blobs.cpp
libsynthesissdk_la-enginemodulebase.lo: sysync_SDK/Sources/enginemodulebase.cpp
-@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-enginemodulebase.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-enginemodulebase.Tpo -c -o libsynthesissdk_la-enginemodulebase.lo `test -f 'sysync_SDK/Sources/enginemodulebase.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/enginemodulebase.cpp
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-enginemodulebase.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-enginemodulebase.Tpo -c -o libsynthesissdk_la-enginemodulebase.lo `test -f 'sysync_SDK/Sources/enginemodulebase.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/enginemodulebase.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libsynthesissdk_la-enginemodulebase.Tpo $(DEPDIR)/libsynthesissdk_la-enginemodulebase.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sysync_SDK/Sources/enginemodulebase.cpp' object='libsynthesissdk_la-enginemodulebase.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-enginemodulebase.lo `test -f 'sysync_SDK/Sources/enginemodulebase.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/enginemodulebase.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-enginemodulebase.lo `test -f 'sysync_SDK/Sources/enginemodulebase.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/enginemodulebase.cpp
libsynthesissdk_la-lineartime.lo: sysync_SDK/Sources/lineartime.cpp
-@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-lineartime.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-lineartime.Tpo -c -o libsynthesissdk_la-lineartime.lo `test -f 'sysync_SDK/Sources/lineartime.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/lineartime.cpp
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-lineartime.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-lineartime.Tpo -c -o libsynthesissdk_la-lineartime.lo `test -f 'sysync_SDK/Sources/lineartime.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/lineartime.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libsynthesissdk_la-lineartime.Tpo $(DEPDIR)/libsynthesissdk_la-lineartime.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sysync_SDK/Sources/lineartime.cpp' object='libsynthesissdk_la-lineartime.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-lineartime.lo `test -f 'sysync_SDK/Sources/lineartime.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/lineartime.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-lineartime.lo `test -f 'sysync_SDK/Sources/lineartime.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/lineartime.cpp
libsynthesissdk_la-stringutil.lo: sysync_SDK/Sources/stringutil.cpp
-@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-stringutil.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-stringutil.Tpo -c -o libsynthesissdk_la-stringutil.lo `test -f 'sysync_SDK/Sources/stringutil.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/stringutil.cpp
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-stringutil.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-stringutil.Tpo -c -o libsynthesissdk_la-stringutil.lo `test -f 'sysync_SDK/Sources/stringutil.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/stringutil.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libsynthesissdk_la-stringutil.Tpo $(DEPDIR)/libsynthesissdk_la-stringutil.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sysync_SDK/Sources/stringutil.cpp' object='libsynthesissdk_la-stringutil.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-stringutil.lo `test -f 'sysync_SDK/Sources/stringutil.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/stringutil.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-stringutil.lo `test -f 'sysync_SDK/Sources/stringutil.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/stringutil.cpp
libsynthesissdk_la-syncexception.lo: sysync_SDK/Sources/syncexception.cpp
-@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-syncexception.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-syncexception.Tpo -c -o libsynthesissdk_la-syncexception.lo `test -f 'sysync_SDK/Sources/syncexception.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/syncexception.cpp
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-syncexception.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-syncexception.Tpo -c -o libsynthesissdk_la-syncexception.lo `test -f 'sysync_SDK/Sources/syncexception.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/syncexception.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libsynthesissdk_la-syncexception.Tpo $(DEPDIR)/libsynthesissdk_la-syncexception.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sysync_SDK/Sources/syncexception.cpp' object='libsynthesissdk_la-syncexception.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-syncexception.lo `test -f 'sysync_SDK/Sources/syncexception.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/syncexception.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-syncexception.lo `test -f 'sysync_SDK/Sources/syncexception.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/syncexception.cpp
libsynthesissdk_la-sysync_b64.lo: sysync_SDK/Sources/sysync_b64.cpp
-@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-sysync_b64.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-sysync_b64.Tpo -c -o libsynthesissdk_la-sysync_b64.lo `test -f 'sysync_SDK/Sources/sysync_b64.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/sysync_b64.cpp
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-sysync_b64.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-sysync_b64.Tpo -c -o libsynthesissdk_la-sysync_b64.lo `test -f 'sysync_SDK/Sources/sysync_b64.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/sysync_b64.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libsynthesissdk_la-sysync_b64.Tpo $(DEPDIR)/libsynthesissdk_la-sysync_b64.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sysync_SDK/Sources/sysync_b64.cpp' object='libsynthesissdk_la-sysync_b64.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-sysync_b64.lo `test -f 'sysync_SDK/Sources/sysync_b64.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/sysync_b64.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-sysync_b64.lo `test -f 'sysync_SDK/Sources/sysync_b64.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/sysync_b64.cpp
libsynthesissdk_la-sysync_md5.lo: sysync_SDK/Sources/sysync_md5.cpp
-@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-sysync_md5.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-sysync_md5.Tpo -c -o libsynthesissdk_la-sysync_md5.lo `test -f 'sysync_SDK/Sources/sysync_md5.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/sysync_md5.cpp
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-sysync_md5.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-sysync_md5.Tpo -c -o libsynthesissdk_la-sysync_md5.lo `test -f 'sysync_SDK/Sources/sysync_md5.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/sysync_md5.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libsynthesissdk_la-sysync_md5.Tpo $(DEPDIR)/libsynthesissdk_la-sysync_md5.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sysync_SDK/Sources/sysync_md5.cpp' object='libsynthesissdk_la-sysync_md5.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-sysync_md5.lo `test -f 'sysync_SDK/Sources/sysync_md5.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/sysync_md5.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-sysync_md5.lo `test -f 'sysync_SDK/Sources/sysync_md5.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/sysync_md5.cpp
libsynthesissdk_la-sysync_utils.lo: sysync_SDK/Sources/sysync_utils.cpp
-@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-sysync_utils.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-sysync_utils.Tpo -c -o libsynthesissdk_la-sysync_utils.lo `test -f 'sysync_SDK/Sources/sysync_utils.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/sysync_utils.cpp
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -MT libsynthesissdk_la-sysync_utils.lo -MD -MP -MF $(DEPDIR)/libsynthesissdk_la-sysync_utils.Tpo -c -o libsynthesissdk_la-sysync_utils.lo `test -f 'sysync_SDK/Sources/sysync_utils.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/sysync_utils.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libsynthesissdk_la-sysync_utils.Tpo $(DEPDIR)/libsynthesissdk_la-sysync_utils.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sysync_SDK/Sources/sysync_utils.cpp' object='libsynthesissdk_la-sysync_utils.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-sysync_utils.lo `test -f 'sysync_SDK/Sources/sysync_utils.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/sysync_utils.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsynthesissdk_la_CPPFLAGS) $(CPPFLAGS) $(libsynthesissdk_la_CXXFLAGS) $(CXXFLAGS) -c -o libsynthesissdk_la-sysync_utils.lo `test -f 'sysync_SDK/Sources/sysync_utils.cpp' || echo '$(srcdir)/'`sysync_SDK/Sources/sysync_utils.cpp
mostlyclean-libtool:
-rm -f *.lo
/* - find out target platform */
-#ifdef __MACH__
+#if defined (__MACH__) && defined(__APPLE__)
#define MACOSX
#else
#if defined __MWERKS__ || defined _MSC_VER
continue;
PLOGDEBUGPUTSX(aGZones->getDbgLogger, DBG_PARSE+DBG_EXOTIC, vtimezone);
tz_entry t;
- string dstName, stdName;
if (VTIMEZONEtoTZEntry(
vtimezone,
t,
- stdName,
- dstName,
#ifdef SYDEBUG
aGZones->getDbgLogger
#endif
(off = t.name.find('/', 1)) != t.name.npos &&
(off = t.name.find('/', off + 1)) != t.name.npos) {
t.location = t.name.substr(off + 1);
+ // also use that simplified location as TZID (shorter,
+ // some (broken) storages like the N900 calendar can only
+ // handle such shortened TZIDs while correct storages
+ // should be able to handle both)
+ t.name = t.location;
}
aGZones->tzP.push_back(t);
}
#include "liblock.h"
#include "wsm.h"
#include "mgr.h"
+#include <xltenc.h>
smlLibFree(pInfo->workspaceState);
#endif
if (pInfo->encoderState)
- smlLibFree(pInfo->encoderState);
+ xltEncReset((XltEncoderPtr_t)pInfo->encoderState);
if (pInfo->decoderState)
- smlLibFree(pInfo->decoderState);
+ xltDecReset((XltDecoderPtr_t)pInfo->decoderState);
if (pInfo->callbacks)
smlLibFree(pInfo->callbacks);
fLastSessionMaps.clear();
#endif
#ifdef SYSYNC_SERVER
+ PDEBUGPRINTFX(DBG_DATA,(
+ "fTempGUIDMap: removing %ld items", (long)fTempGUIDMap.size()
+ ));
fTempGUIDMap.clear();
#endif
for (pos=fTempGUIDMap.begin(); pos!=fTempGUIDMap.end(); pos++) {
if (pos->second == aOldID) {
// update ID
+ PDEBUGPRINTFX(DBG_DATA,(
+ "fTempGUIDMap: updating mapping of %s from %s to %s",
+ pos->first.c_str(),
+ aOldID,
+ aNewID
+ ));
pos->second = aNewID;
break;
}
if (maxguidsize>0) {
if (aLocalID.length()+prefixsize>(uInt32)maxguidsize) { //BCPPB needed unsigned cast
// real GUID is too long, we need to create a temp
+
+ // first check if there is already a mapping for it,
+ // because on-disk storage can only hold one; also
+ // saves space
+ // TODO: implement this more efficiently than this O(N) search
+ for (TStringToStringMap::const_iterator it = fTempGUIDMap.begin();
+ it != fTempGUIDMap.end();
+ ++it) {
+ if (it->second == aLocalID) {
+ // found an existing mapping!
+ PDEBUGPRINTFX(DBG_ERROR,(
+ "fTempGUIDMap: translated realLocalID='%s' to tempLocalID='%s' (reused?!)",
+ aLocalID.c_str(),
+ it->first.c_str()
+ ));
+ aLocalID = it->first;
+ return;
+ }
+ }
+
string tempguid;
- StringObjPrintf(tempguid,"#%ld",(long)fTempGUIDMap.size()+1); // as list only grows, we have unique tempuids for sure
+ long counter = fTempGUIDMap.size(); // as list only grows, we have unique tempuids for sure
+ while (true) {
+ counter++;
+ StringObjPrintf(tempguid,"#%ld",counter);
+ if (fTempGUIDMap.find(tempguid) != fTempGUIDMap.end()) {
+ PDEBUGPRINTFX(DBG_ERROR,(
+ "fTempGUIDMap: '%s' not new?!",
+ tempguid.c_str()
+ ));
+ } else {
+ break;
+ }
+ }
fTempGUIDMap[tempguid]=aLocalID;
PDEBUGPRINTFX(DBG_DATA,(
- "translated realLocalID='%s' to tempLocalID='%s'",
+ "fTempGUIDMap: translated realLocalID='%s' to tempLocalID='%s'",
aLocalID.c_str(),
tempguid.c_str()
));
#ifdef SYSYNC_SERVER
if (IS_SERVER) {
// server case: forget Temp GUID mapping
- fTempGUIDMap.clear(); // forget all previous temp GUID mappings
+ // make sure we are not carrying forward any left-overs. Last sessions's tempGUID mappings that are
+ // needed for "early map" resolution might be loaded by the call to engInitSyncAnchors below.
+ // IMPORTANT NOTE: the tempGUIDs that might get loaded will become invalid as soon as <Sync>
+ // starts - so fTempGUIDMap needs to be cleared again as soon as the first <Sync> command arrives from the client.
+ fTempGUIDMap.clear();
}
#endif
// save remote's next anchor for saving at end of session
startingNow = true; // initiating start now
#ifdef SYSYNC_SERVER
if (IS_SERVER) {
- // - let local datastore (derived DB-specific class) prepare for sync
+ // at this point, all temporary GUIDs become invalid (no "early map" possible any more which might refer to last session's tempGUIDs)
+ fTempGUIDMap.clear(); // forget all previous session's temp GUID mappings
+ // let local datastore (derived DB-specific class) prepare for sync
localstatus sta = changeState(dssta_dataaccessstarted);
if (sta!=LOCERR_OK) {
// abort session (old comment: %%% aborting datastore only does not work, will loop, why? %%%)
case CONVMODE_AUTOENDDATE:
case CONVMODE_AUTODATE: // show date-only as date in iCal 2.0 (mimo_standard), but always as timestamp for vCal 1.0 (mimo_old)
if (fMimeDirMode==mimo_standard) goto timestamp; // use autodate if MIME-DIR format is not vCal 1.0 style
+ // for vCal 1.0 style, always renders as timestamp (as date-only values are not allowed there)
case CONVMODE_TIMESTAMP: // always show as timestamp
// get explictly as timestamp (even if field or field contents is date)
autodate = false; // do not show as date, even if it is a date-only
lineartime_t tzend = until;
// A RRULE with no end extends at least into current time (for tz range update, see below)
if (until==noLinearTime) {
+ // no end, but we still need a range to generate time zones for
tzend = getSession()->getSystemNowAs(TCTX_UTC);
}
+ else {
+ // Treat RR_END similar to CONVMODE_AUTODATE, i.e. prevent rendering a date-only value in mimo_old (which i not correct according to the standard)
+ if (TCTX_IS_DATEONLY(untilcontext) && fMimeDirMode==mimo_old) {
+ // there are no date-only recurrence ends in vCalendar 1.0
+ until = lineartime2dateonlyTime(until)+secondToLinearTimeFactor*SecsPerHour*24-1 ; // make time part 23:5:59.999 of this day
+ untilcontext &= ~TCTX_DATEONLY;
+ }
+ }
// Now do the conversion
bool ok;
if (fMimeDirMode==mimo_old) {
// just do standard compare
return aFirstItem.standardCompareWith(aSecondItem,aEqMode,aDebugShow);
#else
- // if no script use standard merging
+ // if no script use standard comparison
sInt16 cmpres;
string &script = static_cast<TMultiFieldTypeConfig *>(fTypeConfigP)->fCompareScript;
if (script.empty())
// equality mode names
const char * const sysync::compareRelevanceNames[numEQmodes] = {
- "never", // irrelevant, only for fields with really unimportant data (such as REV)
+ "never", // irrelevant, only for fields with really unimportant data (such as REV) - note that this also prevents inclusion in CRC change detection
+ "scripted", // relevant, but actual comparison is done in a script - standard compare loop must not check it
"conflict", // for conflict, all fields that have user data should use at least this
"slowsync", // for slow sync, all fields that must match for identifying records in slow sync
"always", // always relevant, fields that must always match (first-time sync match set)
// equality relevance / mode
typedef enum { // RELEVANCE COMPARE MODE
eqm_none, // not relevant at all (*) compares ALL fields, even not-relevant ones
+ eqm_scripted, // relevant, handled in script n/a
eqm_conflict, // relevant for conflicts only compares all somehow relevant fields for conflict comparison
eqm_slowsync, // relevant for slow sync compares only fields relevant for slow sync
eqm_always, // always relevant (e.g firsttime) compares only always-relevant fields (first time slowsync)
- eqm_nocompare // n/a prevent equality test in compareWith totally
+ eqm_nocompare, // n/a prevent equality test in compareWith totally
+ numEQmodes
} TEqualityMode;
// (*) Note: eqm_none fields will be silently merged in mergeWith(), that is, if no other
// fields are merged, mergeWith will report "nothing merged" even if eqm_none field might
// be modified
-const short numEQmodes = eqm_nocompare-eqm_none+1;
+// Fields with eqm_none will also not be included in CRC calculations for detecting changes.
extern const char * const compareRelevanceNames[numEQmodes];
// search for local datastore first
string cgiOptions;
- // - search for datastore and obtain possible CGI
- fLocalSyncDatastoreP = findLocalDataStoreByURI(SessionRelativeURI(aLocalDatastoreURI),&cgiOptions);
+ // - search for datastore and obtain possible CGI;
+ // fallback to remote datastore URI is for Sony Ericsson C510,
+ // which sends an empty target (= local) URI (also needs
+ // to be done in Alert handling)
+ fLocalSyncDatastoreP = findLocalDataStoreByURI(SessionRelativeURI((!aLocalDatastoreURI ||
+ !aLocalDatastoreURI[0]) ?
+ aRemoteDatastoreURI :
+ aLocalDatastoreURI),&cgiOptions);
if (!fLocalSyncDatastoreP) {
// no such local datastore
return 404;
case 204:
case 205:
// Sync resume alert
- case 225:
+ case 225: {
// Synchronisation initialisation alerts
// - test if context is ok
if (fIncomingState!=psta_init && fIncomingState!=psta_initsync) {
return NULL; // no alert sent back
}
// find requested database by URI
+ const char *target = smlSrcTargLocURIToCharP(aItemP->target);
+ if (!target || !target[0]) {
+ // same fallback for Sony Ericsson C510 as in
+ // TSyncSession::initSync()
+ target = smlSrcTargLocURIToCharP(aItemP->source);
+ }
datastoreP = findLocalDataStoreByURI(
- smlSrcTargLocURIToCharP(aItemP->target), // target as sent from remote
+ target, // target as sent from remote
&optionsCGI, // options, if any
&identifyingTargetURI // identifying part of URI (CGI removed)
);
aStatusCommand.addItem(itemP); // add it to status
}
break;
+ }
case 224 :
// Suspend alert
SuspendSession(514);
class tz_entry {
public:
- std::string name; /**< name, same as TZID in VTIMEZONE, e.g. CET/CEST or /softwarestudio.org/Tzfile/Europe/Berlin */
+ std::string name; /**< name, same as TZID in
+ VTIMEZONE, e.g. CET/CEST or
+ /softwarestudio.org/Tzfile/Europe/Berlin;
+ see also dst/stdName */
+ std::string stdName; /**< optional standard time name, e.g. CEST; must be
+ set if "name" is not a concatenation of
+ standard and daylight name (CET/CEST);
+ the vCalendar 1.0 code relies on that */
+ std::string dstName; /**< used instead of splitting
+ "name" if (and only if)
+ stdName is set; may be empty
+ in zones without daylight
+ saving */
std::string location; /**< location string as used in Olson TZID, e.g. Europe/Berlin */
short bias; /**< minutes difference to UTC (west negative, east positive */
short biasDST; /**< minutes difference to bias (not UTC!) */
bool VTIMEZONEtoTZEntry( const char* aText, // VTIMEZONE string to be parsed
tz_entry &t,
- string &aStdName,
- string &aDstName,
TDebugLogger* aLogP)
{
short dBias; // the full bias for DST
t.dynYear= "CUR";
t.biasDST= 0;
t.bias = 0;
- if (!GetTZInfo( aText,VTZ_STD, t.std, t.bias, aStdName, -1, aLogP )) {
+ t.stdName =
+ t.dstName = "";
+ if (!GetTZInfo( aText,VTZ_STD, t.std, t.bias, t.stdName, -1, aLogP )) {
success = false;
}
// default value if not found (which is treated as success by GetTZInfo)
dBias= t.bias;
- if (!GetTZInfo( aText,VTZ_DST, t.dst, dBias, aDstName, -1, aLogP )) {
+ if (!GetTZInfo( aText,VTZ_DST, t.dst, dBias, t.dstName, -1, aLogP )) {
// unknown failure, better restore default
dBias= t.bias;
success = false;
aContext= tctx_tz_unknown;
tz_entry t;
- string stdName,
- dstName,
- lName;
+ string lName;
timecontext_t lContext;
- if (!VTIMEZONEtoTZEntry( aText, t, stdName, dstName, aLogP )) {
+ if (!VTIMEZONEtoTZEntry( aText, t, aLogP )) {
PLOGDEBUGPRINTFX(aLogP, DBG_PARSE+DBG_ERROR, ("parsing VTIMEZONE failed:\n%s", aText));
}
+ // Telling the caller about the original TZID is necessary because this
+ // code might match that TZID against an existing definition with a different
+ // TZID. Previously it was also necessary when importing the VTIMEZONE, because
+ // the original TZID was overwritten. Now imported definitions retain the
+ // original TZID in t.name.
if (aTzidP) *aTzidP = t.name; // return the original TZID as found, needed to match with TZID occurences in rest of vCalendar
- bool sC= !(stdName=="");
- bool dC= !(dstName=="");
-
- string tName = t.name;
- if (sC || dC) tName = ""; // TZID will be replaced in case of unknown
- if (sC) tName+= stdName;
- if (sC && dC) tName+= "/";
- if (dC) tName+= dstName;
-
bool ok = true;
bool okM= true;
int s,d;
// redundant here, but there is no other way to
// add the entry
string new_name;
- t.name = tName;
+
if (!ok) ok= FoundTZ( t, new_name, aContext, g, true );
if (ok && t.std.wMonth!=0 &&
t.dst.wMonth!=0) {
tz_entry std;
- std.name = stdName;
+ std.name = t.stdName;
std.ident= "s"; // standard
std.bias = t.bias;
FoundTZ( std, lName,lContext, g, true );
tz_entry dst;
- dst.name = dstName;
+ dst.name = t.dstName;
dst.ident= "d"; // daylight saving
dst.bias = t.bias + t.biasDST;
FoundTZ( dst, lName,lContext, g, true );
timecontext_t cc= TCTX_UNKNOWN;
while (FoundTZ( tCopy, s, cc, g, false, cc )) {
- if (s.find( "/",0 )!=string::npos) { // search for a time zone with slash in it
+ // search for a time zone with slash in it (which is
+ // interpreted as separator between dstName and stdName) *or*
+ // one which has dstName and stdName set explicitly;
+ // prefer explicit names over splitting name
+ tz_entry zone;
+ if (GetTZ( cc, zone, g, -1 ) &&
+ !zone.stdName.empty() &&
+ !zone.dstName.empty()) {
+ s = zone.stdName + ";" + zone.dstName;
+ found= true; break;
+ } else if (s.find( "/",0 )!=string::npos) {
+ // Assumption here is that s contains exactly one slash,
+ // otherwise s is not valid for stdName;dstName in vCalendar
+ // 1.0.
+ StringSubst( s, "/", ";" );
found= true; break;
} // if
} // while
if (!found) {
- s = t.name; // create a <x>;<x> string
+ string stdName;
+ if (t.stdName.empty()) {
+ stdName = t.name;
+ } else {
+ stdName = t.stdName;
+ }
+ s = stdName; // create a <x>;<x> string
s+= ";";
- s+= t.name;
+ s+= stdName;
} // if
- } // if
+ } else if (!t.stdName.empty() && !t.dstName.empty()) {
+ // use explicit zone names instead of splitting s
+ s = t.stdName + ";" + t.dstName;
+ } else {
+ StringSubst( s, "/", ";" );
+ }
if (!dDone) dt= DST_Switch( t, t.bias, year, true ); // get the switch time/date for DST
if (!sDone) st= DST_Switch( t, t.bias, year, false ); // get the switch time/date for STD
string stdStr;
TimestampToISO8601Str( stdStr, st, TCTX_UTC );
- StringSubst ( s, "/", ";" );
+ // s must be of the format stdName;dstName here, for example CET;CEST or PST;PDT
aText+= dstStr + ";" + stdStr + ";" + s;
return true;
bool VTIMEZONEtoTZEntry( const char* aText, // VTIMEZONE string to be parsed
tz_entry &t,
- string &aStdName,
- string &aDstName,
TDebugLogger* aLogP);
/*! Convert VTIMEZONE string into internal context value */
=== config.ini ===
syncURL = http://sync.scheduleworld.com/funambol/ds
WebURL = http://www.scheduleworld.com
-ConsumerReady = TRUE
=== sources/addressbook/config.ini ===
type = addressbook:text/vcard
"DTEND:20060406T163000Z\n"
"DTSTART:20060406T160000Z\n"
"UID:1234567890!@#$%^&*()<>@dummy\n"
- // "DTSTAMP:20060406T211449Z\n"
+ "DTSTAMP:20060406T211449Z\n"
"LAST-MODIFIED:20060409T213201\n"
"CREATED:20060409T213201\n"
"LOCATION:my office\n"
"DTEND:20060406T163000Z\n"
"DTSTART:20060406T160000Z\n"
"UID:1234567890!@#$%^&*()<>@dummy\n"
- // "DTSTAMP:20060406T211449Z\n"
+ "DTSTAMP:20060406T211449Z\n"
"LAST-MODIFIED:20060409T213201\n"
"CREATED:20060409T213201\n"
"LOCATION:big meeting room\n"
"DTEND:20060406T163000Z\n"
"DTSTART:20060406T160000Z\n"
"UID:1234567890!@#$%^&*()<>@dummy\n"
- // "DTSTAMP:20060406T211449Z\n"
+ "DTSTAMP:20060406T211449Z\n"
"LAST-MODIFIED:20060409T213201\n"
"CREATED:20060409T213201\n"
"LOCATION:calling from home\n"
"DTEND:20060406T163000Z\n"
"DTSTART:20060406T160000Z\n"
"UID:1234567890!@#$%^&*()<>@dummy\n"
- // "DTSTAMP:20060406T211449Z\n"
+ "DTSTAMP:20060406T211449Z\n"
"LAST-MODIFIED:20060409T213201\n"
"CREATED:20060409T213201\n"
"LOCATION:my office\n"
"METHOD:PUBLISH\n"
"BEGIN:VEVENT\n"
"UID:20080407T193125Z-19554-727-1-50@gollum\n"
- // "DTSTAMP:20080407T193125Z\n"
+ "DTSTAMP:20080407T193125Z\n"
"DTSTART:20080406T090000Z\n"
"DTEND:20080406T093000Z\n"
"TRANSP:OPAQUE\n"
"METHOD:PUBLISH\n"
"BEGIN:VEVENT\n"
"UID:20080407T193125Z-19554-727-1-50@gollum\n"
- // "DTSTAMP:20080407T193125Z\n"
+ "DTSTAMP:20080407T193125Z\n"
"DTSTART:20080413T090000Z\n"
"DTEND:20080413T093000Z\n"
"TRANSP:OPAQUE\n"
"SUMMARY:phone meeting\n"
"DTEND:20060406T163000Z\n"
"DTSTART:20060406T160000Z\n"
- // "DTSTAMP:20060406T211449Z\n"
+ "DTSTAMP:20060406T211449Z\n"
"LOCATION:my office\n"
"DESCRIPTION:let's talk<<REVISION>>\n"
"END:VEVENT\n"
"SUMMARY:meeting on site\n"
"DTEND:20060406T163000Z\n"
"DTSTART:20060406T160000Z\n"
- // "DTSTAMP:20060406T211449Z\n"
+ "DTSTAMP:20060406T211449Z\n"
"LOCATION:big meeting room\n"
"DESCRIPTION:nice to see you\n"
"END:VEVENT\n"
Client::Sync::text::testOneWayFromClient, \
Client::Sync::text::Retry,Client::Sync::text::Suspend, \
+ disable "prevent slow sync"
* Test Profiles Settings
N/A
void startTest (CppUnit::Test *test) {
m_currentTest = test->getName();
std::cerr << m_currentTest;
- string logfile = m_currentTest + ".log";
- simplifyFilename(logfile);
- m_logger.reset(new LoggerStdout(logfile));
- m_logger->setLevel(Logger::DEBUG);
- LoggerBase::pushLogger(m_logger.get());
+ if (!getenv("SYNCEVOLUTION_DEBUG")) {
+ string logfile = m_currentTest + ".log";
+ simplifyFilename(logfile);
+ m_logger.reset(new LoggerStdout(logfile));
+ m_logger->setLevel(Logger::DEBUG);
+ LoggerBase::pushLogger(m_logger.get());
+ }
SE_LOG_DEBUG(NULL, NULL, "*** starting %s ***", m_currentTest.c_str());
m_failures.reset();
m_testFailed = false;
if (!failure.empty()) {
SE_LOG_DEBUG(NULL, NULL, "%s", failure.c_str());
}
- LoggerBase::popLogger();
+ if (&LoggerBase::instance() == m_logger.get()) {
+ LoggerBase::popLogger();
+ }
m_logger.reset();
string logfile = m_currentTest + ".log";
}
runner.eventManager().addListener(&syncListener);
+
+ if (getenv("SYNCEVOLUTION_DEBUG")) {
+ LoggerBase::instance().setLevel(Logger::DEBUG);
+ }
+
try {
// Run the tests.
if (argc <= 1) {
# VTIMEZONE and TZID do not have to be preserved verbatim as long
# as the replacement is still representing the same timezone.
- # Reduce TZIDs which follow the Olson database pseudo-standard
+ # Reduce TZIDs which specify a proper location
# to their location part and strip the VTIMEZONE - makes the
# diff shorter, too.
- s;^BEGIN:VTIMEZONE.*?^TZID:/[^/\n]*/[^/\n]*/(\S+).*^END:VTIMEZONE;BEGIN:VTIMEZONE\nTZID:$1 [...]\nEND:VTIMEZONE;gms;
- s;TZID=/[^/\n]*/[^/\n]*/(.*)$;TZID=$1;gm;
+ my $location = "[^\n]*((?:Africa|America|Antarctica|Arctic|Asia|Atlantic|Australia|Brazil|Canada|Chile|Egypt|Eire|Europe|Hongkong|Iceland|India|Iran|Israel|Jamaica|Japan|Kwajalein|Libya|Mexico|Mideast|Navajo|Pacific|Poland|Portugal|Singapore|Turkey|Zulu)[-a-zA-Z0-9_/]*)";
+ s;^BEGIN:VTIMEZONE.*?^TZID:$location.*^END:VTIMEZONE;BEGIN:VTIMEZONE\n TZID:$1 [...]\nEND:VTIMEZONE;gms;
+ s;TZID=$location;TZID=$1;gm;
# normalize iCalendar 2.0
if (/^BEGIN:(VEVENT|VTODO|VJOURNAL)$/m) {
} else {
open(IN2, "<:utf8", $file2) || die "$file2: $!";
}
- @normal1 = Normalize(join("", <IN1>), $singlewidth);
- @normal2 = Normalize(join("", <IN2>), $singlewidth);
+ my $buf1 = join("", <IN1>);
+ my $buf2 = join("", <IN2>);
+ @normal1 = Normalize($buf1, $singlewidth);
+ @normal2 = Normalize($buf2, $singlewidth);
close(IN1);
close(IN2);
}
# normalize
my $in;
if( $#ARGV >= 0 ) {
- open(IN, "<$ARGV[0]") || die "$ARGV[0]: $!";
+ my $file1 = $ARGV[0];
+ if (-d $file1) {
+ open(IN, "-|:utf8", "find $file1 -type f -print0 | xargs -0 cat") || die "$file1: $!";
+ } else {
+ open(IN, "<:utf8", $file1) || die "$file1: $!";
+ }
$in = *IN{IO};
} else {
$in = *STDIN{IO};
}
- print STDOUT join("\n", Normalize(join("", <$in>), $columns)), "\n";
+ my $buf = join("", <$in>);
+ print STDOUT join("\n", Normalize($buf, $columns)), "\n";
}