More than one summer this year

More than one summer this year

With the application deadline for this year’s Google Summer of Code being over now (and the list of accepted projects to be published soon) I’d like to point those looking to make a bit of money working on Open Source software to another initiative.

Matt’s Bargain Basement Summer Of Code is privately funded which I find quite impressive. Matt is offering bounties for fixing issues in several components of software he is using every day. If you are interested in working on one of the tasks contact him. If you want to discuss some details do so. I can confirm that he is open to suggestions.

The Acid3 fixes that are marked as DONE have be “earned” by Germain, Maksim, Allen and me. As we would have been working on KHTML and KJS anyway we have so far managed to resist to take the money. Maybe I should propose Philip Hazel (author of the Perl Compatible Regular Expressions library PCRE) to get a part of the reward. KDE’s JavaScript engine uses libpcre for its RegExp implementation as do other programs like Exim and Apache. Now, JavaScript regular expressions are based on those from Perl but in differ in some tiny details. In the long run the incompatilities would have made a fork inevitable (like done by Apple for Safari) but we found a better solution at least for now: we approached Phil and he was quick to add a PCRE_JAVASCRIPT_COMPAT mode switch for PCRE 7.7 that changes the Perl behavior in three cases. After enabling this mode in the 4.0 and 4.1 branch this increased KHTML’s Acid3 score by two points as can bee see in these screenshots:

Before
After

Anyone not wanting to wait for his distributor to ship the new version here are the steps to fetch it yourself:

cd /tmp
svn co svn://vcs.exim.org/pcre/code/trunk pcre

As the SVN version of PCRE does not specify .so numbers by itself I changed the libtool version entries in configure.ac to the following which will result in a libpcre.so.3.13.0 library.

m4_define(libpcre_version, [16:0:13])
m4_define(libpcreposix_version, [16:0:13])
m4_define(libpcrecpp_version, [16:0:13])

This was required to give precedence over my system’s 3.12.1 library. To my surprise it got loaded into memory by other KDE libraries already. The resolution of this mistery: libpcre is used by Gnome’s utility library GLib. And as that one is (optionally) pulled in by QtGui most KDE users on X11 systems have it in memory already anyway.

mkdir obj
cd obj
/tmp/pcre/configure --enable-utf8 --prefix /opt/pcre
make
su
make install

To let CMake pick up this new version remove kdelib’s CMakeCache.txt file and set the pkg-config search path

export PKG_CONFIG_PATH=/opt/pcre/lib/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=/opt/pcre/lib:$LD_LIBRARY_PATH

before running cmake and make again.