Niels Horn's Blog

Random thoughts, tips & tricks about Slackware-Linux, Lego and Star Wars

Getting Zarafa 6.40.2 to work on Slackware

zarafaA few days ago, while working on the update of my SlackBuild for Zarafa version 6.40.1, version 6.40.2 was released. At first I thought of submitting the script using the newest version, but soon found out that it was not that simple… The newest release simply would not build on Slackware… Since I had already spent some time to get 6.40.1 working fine, I decided not to delay the submission more, and finished the script for that version and uploaded the packages to my site.

So now that 6.40.1 was available for Slackware, I decided to get back at the problem and investigate some more.
I found several problems with the newest version, all in the code of the ECTestTools subdirectory. My impression is that the authors were in a bit of a hurry to get 6.40.2 out (that solves some bugs in the previous versions), but forgot the check / alter the test tools. :)

In total I found three problems, which I managed to solve by patching the code (2x) and Makefile (1x).

These were my findings:

Problem1: rectest.cpp:82: error: no matching function for call to 'RecurrenceState::ParseBlob(char*, size_t)'

The ParseBlob function was changed in 6.40.2 but the rectest.cpp file was not altered accordingly. It needs and extra parameter, so I checked the code to see how it was called in other places and patched it like this:

--- zarafa-6.40.2/ECtools/ECTestTools/RecurrenceTest/rectest.cpp        2010-08-30 08:01:44.000000000 -0300
+++ zarafa-6.40.2_patched/ECtools/ECTestTools/RecurrenceTest/rectest.cpp        2010-09-04 13:27:42.000000000 -0300
@@ -79,7 +79,7 @@

     RecurrenceState r;

-    hr = r.ParseBlob((char *)strBin.c_str(), strBin.size());
+    hr = r.ParseBlob((char *)strBin.c_str(), strBin.size(), 0);

     if(hr == hrSuccess) {
         cerr << "Recurrence OK" << std::endl;

Problem 2: mapi2ical.cpp:173: error: no matching function for call to 'MapiToICal::AddMessage(IMessage*&, int)'

This was also caused by a change in the number of parameters, this time in the AddMessage function. Again, I checked the code to understand how this function was called and noticed that in several places it was altered by using std::string() for the extra parameter, so I added this patch:

--- zarafa-6.40.2/ECtools/ECTestTools/ICalTests/mapi2ical.cpp   2010-08-30 08:01:44.000000000 -0300
+++ zarafa-6.40.2_patched/ECtools/ECTestTools/ICalTests/mapi2ical.cpp   2010-09-04 13:55:38.000000000 -0300
@@ -170,7 +170,7 @@
                        goto next;

-               hr = lpMapiToICal->AddMessage(lpMessage, 0);
+               hr = lpMapiToICal->AddMessage(lpMessage, std::string(), 0);
                if (hr != hrSuccess) {
                        cerr << "-- broken message!" << stringify(hr, 1) << endl;
                        goto next;

Problem 3: ../../../libicalmapi/.libs/libicalmapi.so: undefined reference to `RecurrenceState::ParseBlob(char*, unsigned int, unsigned int)' (plus several other similar messages)

This one was a bit more complicated to trace, but I found out that some files had changed position in the source tree and I managed to solve this in the Makefile.in that is used by ./configure to create the Makefile:

--- zarafa-6.40.2/ECtools/ECTestTools/ICalTests/Makefile.in     2010-08-30 04:31:48.000000000 -0300
+++ zarafa-6.40.2_patched/ECtools/ECTestTools/ICalTests/Makefile.in     2010-09-04 15:09:39.000000000 -0300
@@ -272,6 +272,7 @@
        ${top_builddir}/common/libcommon_mapi.la \
        ${top_builddir}/common/libcommon_util.la \
        ${top_builddir}/libicalmapi/libicalmapi.la \
+       ${top_builddir}/libfreebusy/libfreebusy.la \
        $(PROG_LIBS) $(ICAL_LIBS)

 mapi2ical_SOURCES = mapi2ical.cpp

After applying this patch the SlackBuild completed without problems!
I posted these patches on the Zarafa forum as well so I hope that the author will fix it for the next official release.

I'm testing the resulting binaries on my server, and if they continue running without problems for a few days, I'll submit the new script and upload the new packages to my site.

update: The patch can be downloaded here and the packages are available on my site.

Bookmark and Share

This entry was posted on Sunday, September 5th, 2010 at 2:04 and is filed under Patches, Slackware, zarafa. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

2 Responses to “Getting Zarafa 6.40.2 to work on Slackware”

  1. dtk Says:

    Hey Niels,
    thx for this great write-up! Really made my day (compiled 6.40.2 on my ARM plug). It’s nice to read professional, straight forward explanations ;)

    Thanks for going through the trouble of hunting those errors down (especially the last one *nightmare* -.-) and writing about it. Was of great help to me!

    Since you mentioned you posted your patches on the zarafa forum, I hope you don’t mind me referencing your instructions in the thread in said forum I highjacked to document my progress on compiling on ARM[0].

    Kudos
    dtk

    __________
    [0]http://forums.zarafa.com/viewtopic.php?f=9&t=2706&p=25340#p25339

  2. Niels Horn Says:

    Hi,

    Nice to know you managed to build it on an ARM plug. I have a SheevaPlug myself, but use it for other things.

    Thanks for the feedback!

    Niels

Leave a Reply



XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

It may take some time for your comment to appear, it is not necessary to submit it again.