summaryrefslogtreecommitdiff
path: root/HACKING
blob: e841f33f6e4b6f8123b4ed94088f35daa866076d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
Checking out the Source
-----------------------

SyncEvolution is hosted at sf.net. If you want to work
on the code, just let me know what your SF account is
and I can provide access to the developers CVS. The
anonymous CVS mirrors the sources automatically, but
sometimes is lacking a bit behind. Before using sources
checked out from CVS, invoke "sh autogen.sh" with
appropriate autotools packages installed.

The most recent version of the Sync4j C++ client library
is available from CVS, checkout the "3x" module from the CVS at
   http://forge.objectweb.org/projects/sync4j
You'll need the files in 3x/client-api/native.

Also note that some of the patches in the
3x/client-api/native/.patches directory might be needed for
SyncEvolution to compile and work correctly. See
3x/client-api/native/README for more information about those patches
and SyncEvolution's NEWS file for some information which client
library is compatible.

The recommended way to make that library available is by
installing it into its own directory with shared libraries disabled:
   configure --prefix=<dir> --disable-shared; make; make install
and then pointing the configure of SyncEvolution towards it:
   configure --with-sync4j=<dir> --disable-shared
Shared versions of the libraries are not recommended at the moment
because the client libraries API is not expected to be stable.

Alternatively SyncEvolution can work with a source snapshot of
the client library directly:
   configure --with-sync4j-src=<dir>
where <dir> points towards the contents of the 3x/client-api/native
directory. This mode is required to generate source distributions
because those are meant to contain a copy of the client library
code.


Working with the Code
---------------------

The code follows the code formatting of the Funambol
Sync4j 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 Sync4j
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.

"make check" in the src directory compiles and runs unit
tests. Those tests were written inside the CppUnit
[http://cppunit.sourceforge.net/cppunit-wiki] framework
and so they (and just they) require that "cppunit-config"
is in the shell search path. Before running them, setup
your Evolution and ~/.sync4j configuration as described
in the README section 'Exchanging Data' (create address
books 'SyncEvolution test #1/2', etc).

Running the test with the environment variable TEST_EVOLUTION_LOG
set to the server's log file ensures that for each
individual sync session both the client and the corresponding
server log are stored in individual files in the src
directory. The filenames are derived from the tests and
the steps executed for each of them.

The basic configuration is chosen via TEST_EVOLUTION_SERVER;
the default is "localhost".

If the server needs a certain delay between syncs, that
can be set via TEST_EVOLUTION_DELAY=<seconds>. The Sync4j
2.3 server needs a delay of around 20 seconds to work
correctly.

When invoking TestEvolution without parameters all 
tests will be run. Otherwise each test listed on the
command line will be run:
   ./TestEvolution ContactSync::testItems \
                   ContactSync::testCopy

For a list of available tests see the TestEvolution.cpp
source code.

"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 Sync4j 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.


CVS
---

Please add your changes to the ChangeLog file. The
Emacs vc-update-change-log = C-x v a command collects
the latest CVS commit messages and adds them automatically.


Building a Release
------------------

- increase version number in configure.in/AM_INIT_AUTOMAKE
- ensure ChangeLog and NEW are up-to-date
- make distcheck
- compile binary packages