syncevolution/HACKING

203 lines
8.3 KiB
Plaintext

Checking out the Source
-----------------------
SyncEvolution is hosted on estamos.de. Anonymous access is
via
svn checkout http://www.estamos.de/svn/SyncEvolution/trunk
Before using sources checked out from Subversion, invoke "sh
autogen.sh" with appropriate autotools packages installed.
When running the configure script, it will check out the source of a
suitable Funambol client library which will be compiled
automatically. There are configure options for using a precompiled
Funambol client library or non-default sources - see the "funambol"
configure options for details.
For doing development work the recommended configure line is:
configure SYNCEVOLUTION_CXXFLAGS="-Wall -Werror -Wno-unknown-pragmas" \
--enable-unit-tests
In contrast to CXXFLAGS, SYNCEVOLUTION_CXXFLAGS adds these flags only
to the compilation of source files from the SyncEvolution source code
repository, but not the client library. -Wno-unknown-pragmas is
required to avoid warnings triggered by '#pragma }', a trick to
preserve indention after 'extern "C" {' in
/usr/include/evolution-data-server-1.12/libical/
Working with the Code
---------------------
The code follows the code formatting of the Funambol
C++ client library. Just emulate the existing
code when possible.
Exceptions derived from std::exception are used to report
errors, but not in code which is called from inside the client
library because that library does not handle exceptions for compatibility
reasons. In that case special case must be taken to not
forget that an error occurred (EvolutionSyncSource::m_hasFailed).
This is done in in EvolutionSyncSource wrapper functions
which call the real functions which then may throw exceptions.
The EvolutionSyncSource::handleException() function deals with
logging the exception.
SyncEvolution uses the Funambol C++ testing framework (which is
based on the previous SyncEvolution testing). Configure with
--enable-integration-tests and (optionally) --enable-unit-tests,
then run "src/client-test" as described in the C++ client libraries
test/README.txt.
It understands the same environment variables as the C++ client
libraries "client-test", among them:
- CLIENT_TEST_SERVER = chooses config
- CLIENT_TEST_LOG = name of server log file, will be copied and reset
after each sync
- CLIENT_TEST_FAILURES = comma separated list of tests which are allowed
to fail without affecting the return code of the test runner
- CLIENT_TEST_ALARM = number of seconds a single test is allowed to run
before aborting it
- CLIENT_TEST_SOURCES = comma separated list of enabled sources, identified
by their name (ical20, vcard21, vcard30, itodo20, text (= memos))
In addition it supports:
- CLIENT_TEST_EVOLUTION_PREFIX=[name|file://<path>] overrides
the evolutionsource setting in the configuration; if file:// is used
then these database will be created automatically
Here are step-by-step instructions to get started with testing,
using ScheduleWorld as example:
- CLIENT_TEST_SERVER=scheduleworld \
CLIENT_TEST_EVOLUTION_PREFIX=file:///tmp/testing/ \
./client-test -h
=> creates ~/.config/syncevolution/scheduleworld_[12]/ configs
which use data bases under /tmp/testing, then
prints all available tests
- edit ~/.config/syncevolution/scheduleworld_[12]/spds/syncml/config.txt
and enter account data for ScheduleWorld in both configurations;
check that the syncURL is correct
- CLIENT_TEST_SERVER=scheduleworld \
CLIENT_TEST_EVOLUTION_PREFIX=file:///tmp/testing/ \
./client-test Client::Source
=> runs alls tests involving just local operations
- CLIENT_TEST_SERVER=scheduleworld \
CLIENT_TEST_EVOLUTION_PREFIX=file:///tmp/testing/ \
./client-test Client::Sync::vcard30::testCopy
=> runs one test that checks that one contact can
be copied to and from the server using the two
configurations
- CLIENT_TEST_SERVER=scheduleworld \
CLIENT_TEST_EVOLUTION_PREFIX=file:///tmp/testing/ \
./client-test Client::Sync
=> runs all tests which involve the SyncML server;
tests involving just one source are run first,
followed by the same tests with all enabled
sources in two different orders
"make valgrind" runs the same tests inside valgrind
[http://www.valgrind.org]. A suppression file is
used to hide errors inside system libraries which
are not caused by SyncEvolution or Funambol C++
library code. Most likely the suppressions will only
work on Debian GNU/Linux 3.1 ("Sarge") - feel free
to add more for your system.
Building a Release
------------------
- increase version number in configure-pre.in/AM_INIT_AUTOMAKE
- ensure files were updated:
./ChangeLog ./NEWS debian/changelog
To update the ChangeLog file use "./svn2cl.sh". It invokes
svn2cl with the right options.
For prereleases use "old version"+"new prerelease"-1 as
package version. That ensures that package versions are
higher than the old release, but lower than the final
release. Avoid hyphens as part of the release names, i.e.
use "0.7+0.8beta1" instead of "0.7+0.8-beta1".
- make distcheck
- compile binary .tar.gz packages for different Evolution versions;
done automatically by runtests.py on estamos.de (= Debian 3.0), using different Garnome
installations, and with special configure options to ensure maximum
portability (LDFLAGS=-Wl,--as-needed --enable-static-cxx)
- compile .deb for Maemo
- update entries on the web about the release:
http://maemo.org/downloads/product/OS2008/syncevolution/
http://www.estamos.de/blog/wp-admin
http://www.estamos.de/projects/SyncEvolution/Roadmap.html
http://freshmeat.net/projects/syncevolution/
Compiling for Maemo
-------------------
unpack source archive in Scratchbox (for maximum compatibility: use Chinook 4.0
rootstrap; for support of all backends: ensure that the EDS-DBus calendar dev packages
are installed),
DEB_BUILD_OPTIONS=maemo fakeroot dpkg-buildpackage
NOTE: dpkg-buildpackage -rfakeroot does *not* work as it leads to strange problems executing a.out
during the client-src configure.
Maemo EDS-DBus calendar dev packages /etc/apt/source.list:
deb http://maemo.o-hand.com/packages chinook/
Compiling for iPhone
--------------------
Requires iPhone toolchain and a libcurl compiled for the iPhone.
libcurl is ideally configured as small as possible
and statically (to avoid packaging problems):
./configure --prefix=/usr/local/iphone --host=arm-apple-darwin --disable-shared \
--disable-crypto-auth --without-gnutls --without-ssl --without-zlib \
--without-libssh2 --disable-ipv6 --disable-manual --disable-telnet \
--disable-tftp --disable-ldap --disable-file --disable-ftp
manually set HAVE_POSIX_STRERROR_R in lib/config.h
Potential problems with toolchain:
std++ not found: ln -s libstdc++.6.dylib /usr/local/iphone-filesystem/usr/lib/libstdc++.dylib
AddressBook framework must be added to iphone-dev/include/install-headers.sh.in
Compile with curl-config in the PATH:
PATH=/usr/local/iphone/bin/:$PATH ~/projects/SyncEvolution/trunk/configure --host=arm-apple-darwin --with-funambol-src=/home/patrick/projects/native CXXFLAGS=-O0 --disable-ecal --disable-ebook --enable-addressbook --prefix=/usr
PATH=/usr/local/iphone/bin/:$PATH make all
Build a package with:
make distbin BINSUFFIX="iphone"
Compiling for Mac OS X
----------------------
Configuring for development:
<path>/configure --with-funambol-src=<path> \
--enable-addressbook \
SYNCEVOLUTION_CXXFLAGS="-Wall -Werror -Wno-unknown-pragmas" \
LDFLAGS="-framework Addressbook -framework CoreServices" \
CXXFLAGS=-g \
CFLAGS=-g
Compiling final release:
./configure --enable-addressbook \
CXXFLAGS="-O -g -arch i386 -arch ppc" \
CFLAGS="-O -g -arch i386 -arch ppc" \
LDFLAGS="-arch i386 -arch ppc -framework Addressbook -framework CoreServices" \
--disable-dependency-tracking
make BINSUFFIX=mac-os-x distbin
Fine-grained memory checking:
MallocStackLogging=1 MallocStackLoggingNoCompact=1 \
MallocScribble=1 MallocPreScribble=1 MallocGuardEdges=1 \
MallocCheckHeapStart=1 MallocCheckHeapEach=100
Debugging
---------
The following packages contain debug information for
relevant libraries on Ubuntu 7.10:
evolution-data-server-dbg libglib2.0-0-dbg evolution-dbg