commit 738d5af3e8229df4dbe958aa9bdc4cd1f782c216 Author: Jean-Francois Dockes Date: Tue May 14 08:12:33 2013 +0200 fixed bug in path translation feature + confusing messages about reindexing missing files diff --git a/.hgignore b/.hgignore new file mode 100644 index 00000000..c421def9 --- /dev/null +++ b/.hgignore @@ -0,0 +1,116 @@ +syntax: glob +*.o +*.dep +*.dep.stamp +*~ +\#* +ptrans +src/Makefile +src/autom4te.cache +src/bincimapmime/alldeps +src/common/alldeps +src/common/autoconfig.h +src/common/rclversion.h +src/config.log +src/config.status +src/desktop/unity-lens-recoll/Makefile +src/desktop/unity-lens-recoll/autom4te.cache +src/desktop/unity-lens-recoll/bin/unity-recoll-daemon +src/desktop/unity-lens-recoll/config.log +src/desktop/unity-lens-recoll/config.status +src/desktop/unity-lens-recoll/data/recoll.lens +src/desktop/unity-lens-recoll/data/unity-lens-recoll.service +src/doc/user/HTML.manifest +src/doc/user/RCL.INDEXING.CONFIG.html +src/doc/user/RCL.INDEXING.EXTATTR.html +src/doc/user/RCL.INDEXING.EXTTAGS.html +src/doc/user/RCL.INDEXING.MONITOR.html +src/doc/user/RCL.INDEXING.PERIODIC.html +src/doc/user/RCL.INDEXING.STORAGE.html +src/doc/user/RCL.INDEXING.WEBQUEUE.html +src/doc/user/RCL.INDEXING.html +src/doc/user/RCL.INSTALL.BUILDING.html +src/doc/user/RCL.INSTALL.CONFIG.html +src/doc/user/RCL.INSTALL.EXTERNAL.html +src/doc/user/RCL.INSTALL.html +src/doc/user/RCL.INTRODUCTION.RECOLL.html +src/doc/user/RCL.INTRODUCTION.SEARCH.html +src/doc/user/RCL.INTRODUCTION.html +src/doc/user/RCL.KICKER-APPLET.html +src/doc/user/RCL.PROGRAM.API.html +src/doc/user/RCL.PROGRAM.FIELDS.html +src/doc/user/RCL.PROGRAM.html +src/doc/user/RCL.SEARCH.ANCHORWILD.html +src/doc/user/RCL.SEARCH.CASEDIAC.html +src/doc/user/RCL.SEARCH.COMMANDLINE.html +src/doc/user/RCL.SEARCH.COMPLEX.html +src/doc/user/RCL.SEARCH.CUSTOM.html +src/doc/user/RCL.SEARCH.DESKTOP.html +src/doc/user/RCL.SEARCH.HISTORY.html +src/doc/user/RCL.SEARCH.KIO.html +src/doc/user/RCL.SEARCH.LANG.html +src/doc/user/RCL.SEARCH.MULTIDB.html +src/doc/user/RCL.SEARCH.PREVIEW.html +src/doc/user/RCL.SEARCH.PTRANS.html +src/doc/user/RCL.SEARCH.RESLIST.html +src/doc/user/RCL.SEARCH.SORT.html +src/doc/user/RCL.SEARCH.TERMEXPLORER.html +src/doc/user/RCL.SEARCH.TIPS.html +src/doc/user/RCL.SEARCH.WILDCARDS.html +src/doc/user/RCL.SEARCH.html +src/doc/user/RCL.SEARCHKCL.html +src/doc/user/RCL.SEARCHKIO.SEARCHABLEDOCS.html +src/doc/user/RCL.SEARCHKIO.html +src/doc/user/index.html +src/doc/user/usermanual-xml.html +src/doc/user/usermanual.aux +src/doc/user/usermanual.html +src/doc/user/usermanual.html-text +src/doc/user/usermanual.log +src/doc/user/usermanual.out +src/doc/user/usermanual.pdf +src/doc/user/usermanual.tex-pdf +src/doc/user/usermanual.tex-pdf-tmp +src/doc/user/usermanual.txt +src/doc/user/usermanual.xml +src/filters/rclexecm.pyc +src/filters/rcllatinclass.pyc +src/index/alldeps +src/index/alldeps.stamp +src/index/recollindex +src/internfile/alldeps +src/kde/kioslave/kio_recoll/builddir +src/lib/alldeps +src/lib/librecoll.a +src/lib/librecoll.so* +src/mk/localdefs +src/mk/sysconf +src/python/recoll/build +src/python/recoll/recoll/__init__.pyc +src/python/recoll/setup.py +src/python/samples/recollgui/rclmain.py +src/python/samples/recollgui/rclmain.pyc +src/qtgui/.moc/* +src/qtgui/.obj/* +src/qtgui/.ui/* +src/qtgui/Makefile +src/qtgui/qrc_recoll.cpp +src/qtgui/recoll +src/qtgui/recoll.app +src/qtgui/recoll.pro +src/query/alldeps +src/query/recollq +src/query/xadump +src/recollinstall +src/sampleconf/rclmon.sh +src/sampleconf/recoll.conf +src/utils/alldeps +tests/config/aspdict.en.rws +tests/config/history +tests/config/idxstatus.txt +tests/config/index.pid +tests/config/missing +tests/config/xapiandb +tests/indexedmimetypes/idxstatus.txt +tests/indexedmimetypes/index.pid +website/usermanual/* diff --git a/packaging/FreeBSD/recoll/Makefile b/packaging/FreeBSD/recoll/Makefile new file mode 100644 index 00000000..a2ecc56d --- /dev/null +++ b/packaging/FreeBSD/recoll/Makefile @@ -0,0 +1,34 @@ +# New ports collection makefile for: recoll +# Date created: 5 December 2005 +# Whom: J.F. Dockes +# +# $FreeBSD: ports/deskutils/recoll/Makefile,v 1.44 2010/10/09 17:52:42 makc Exp $ +# + +PORTNAME= recoll +PORTVERSION= 1.16.2 +CATEGORIES= deskutils +MASTER_SITES= http://www.lesbonscomptes.com/recoll/ + +MAINTAINER= jf@dockes.org +COMMENT= A personal full text search package, based on QT and Xapian + +BUILD_DEPENDS= xapian-core>=1.0.12:${PORTSDIR}/databases/xapian-core +RUN_DEPENDS:= ${BUILD_DEPENDS} + +USE_QT_VER= 4 +QT_COMPONENTS= gui qmake_build uic_build moc_build rcc_build +GNU_CONFIGURE= yes +USE_GMAKE= yes +USE_ICONV= yes +INSTALLS_ICONS= yes +USE_FAM= yes + +MAN1= recoll.1 recollindex.1 +MAN5= recoll.conf.5 + +post-patch: + ${REINPLACE_CMD} -e 's/^CXXFLAGS =/CXXFLAGS ?=/' \ + ${WRKSRC}/mk/localdefs.in + +.include diff --git a/packaging/FreeBSD/recoll/distinfo b/packaging/FreeBSD/recoll/distinfo new file mode 100644 index 00000000..305b0c06 --- /dev/null +++ b/packaging/FreeBSD/recoll/distinfo @@ -0,0 +1,2 @@ +SHA256 (recoll-1.16.2.tar.gz) = f0f29dff2d82ef8541c51963870f31daf28472f3c8822c81c17c346769b77355 +SIZE (recoll-1.16.2.tar.gz) = 1422148 diff --git a/packaging/FreeBSD/recoll/pkg-descr b/packaging/FreeBSD/recoll/pkg-descr new file mode 100644 index 00000000..1aa20b03 --- /dev/null +++ b/packaging/FreeBSD/recoll/pkg-descr @@ -0,0 +1,24 @@ +Recoll is a personal full text search package with a QT graphical +interface. It is based on a very strong backend (Xapian), for which it +provides an easy to use and feature-rich interface. + +Features: + * Free, GPL license. + * QT-based GUI. + * Supports the following document types (and their compressed versions): + - Natively: text, html, OpenOffice files, maildir and mailbox + (Mozilla and Thunderbird mail ok) with attachments, gaim log files. + - With external helpers: pdf (pdftotext), postscript (ghostscript), + msword (antiword), excel, ppt (catdoc), rtf (unrtf), + * Powerful query facilities, with boolean searches, phrases, filter on + file types and directory tree. + * Support for multiple charsets. Internal processing and storage uses + Unicode UTF-8. + * Stemming performed at query time (can switch stemming language after + indexing) + * Easy installation. No database daemon, web server or exotic language + necessary. + * An indexer which runs either as a thread inside the GUI or as an + external, cron'able program. + +WWW: http://www.lesbonscomptes.com/recoll/ diff --git a/packaging/FreeBSD/recoll/pkg-plist b/packaging/FreeBSD/recoll/pkg-plist new file mode 100644 index 00000000..a11a10dd --- /dev/null +++ b/packaging/FreeBSD/recoll/pkg-plist @@ -0,0 +1,99 @@ +bin/recoll +bin/recollindex +share/applications/recoll-searchgui.desktop +share/icons/hicolor/48x48/apps/recoll.png +share/pixmaps/recoll.png +%%DATADIR%%/doc/docbook.css +%%DATADIR%%/doc/usermanual.html +%%DATADIR%%/examples/fields +%%DATADIR%%/examples/mimeconf +%%DATADIR%%/examples/mimemap +%%DATADIR%%/examples/mimeview +%%DATADIR%%/examples/rclmon.sh +%%DATADIR%%/examples/recoll.conf +%%DATADIR%%/filters/hotrecoll.py +%%DATADIR%%/filters/rclabw +%%DATADIR%%/filters/rclaptosidman +%%DATADIR%%/filters/rclaudio +%%DATADIR%%/filters/rclchm +%%DATADIR%%/filters/rcldjvu +%%DATADIR%%/filters/rcldoc +%%DATADIR%%/filters/rcldvi +%%DATADIR%%/filters/rclexecm.py +%%DATADIR%%/filters/rclfb2 +%%DATADIR%%/filters/rclflac +%%DATADIR%%/filters/rclgaim +%%DATADIR%%/filters/rclics +%%DATADIR%%/filters/rclid3 +%%DATADIR%%/filters/rclimg +%%DATADIR%%/filters/rclinfo +%%DATADIR%%/filters/rclkar +%%DATADIR%%/filters/rclkwd +%%DATADIR%%/filters/rcllatinclass.py +%%DATADIR%%/filters/rcllatinstops.zip +%%DATADIR%%/filters/rcllyx +%%DATADIR%%/filters/rclman +%%DATADIR%%/filters/rclnull +%%DATADIR%%/filters/rclogg +%%DATADIR%%/filters/rclopxml +%%DATADIR%%/filters/rclpdf +%%DATADIR%%/filters/rclppt +%%DATADIR%%/filters/rclps +%%DATADIR%%/filters/rclpurple +%%DATADIR%%/filters/rclpython +%%DATADIR%%/filters/rclrar +%%DATADIR%%/filters/rclrtf +%%DATADIR%%/filters/rclscribus +%%DATADIR%%/filters/rclshowinfo +%%DATADIR%%/filters/rclsiduxman +%%DATADIR%%/filters/rclsoff +%%DATADIR%%/filters/rclsvg +%%DATADIR%%/filters/rcltex +%%DATADIR%%/filters/rcltext +%%DATADIR%%/filters/rcluncomp +%%DATADIR%%/filters/rclwar +%%DATADIR%%/filters/rclwpd +%%DATADIR%%/filters/rclxls +%%DATADIR%%/filters/rclzip +%%DATADIR%%/filters/xdg-open +%%DATADIR%%/images/aptosid-book.png +%%DATADIR%%/images/aptosid-manual.png +%%DATADIR%%/images/document.png +%%DATADIR%%/images/drawing.png +%%DATADIR%%/images/folder.png +%%DATADIR%%/images/html.png +%%DATADIR%%/images/image.png +%%DATADIR%%/images/message.png +%%DATADIR%%/images/mozilla_doc.png +%%DATADIR%%/images/pdf.png +%%DATADIR%%/images/pidgin.png +%%DATADIR%%/images/postscript.png +%%DATADIR%%/images/presentation.png +%%DATADIR%%/images/sidux-book.png +%%DATADIR%%/images/source.png +%%DATADIR%%/images/sownd.png +%%DATADIR%%/images/soffice.png +%%DATADIR%%/images/spreadsheet.png +%%DATADIR%%/images/text-x-python.png +%%DATADIR%%/images/txt.png +%%DATADIR%%/images/wordprocessing.png +%%DATADIR%%/translations/recoll_cs.qm +%%DATADIR%%/translations/recoll_fr.qm +%%DATADIR%%/translations/recoll_it.qm +%%DATADIR%%/translations/recoll_lt.qm +%%DATADIR%%/translations/recoll_de.qm +%%DATADIR%%/translations/recoll_uk.qm +%%DATADIR%%/translations/recoll_ru.qm +%%DATADIR%%/translations/recoll_tr.qm +%%DATADIR%%/translations/recoll_xx.qm +@dirrm %%DATADIR%%/doc +@dirrm %%DATADIR%%/examples +@dirrm %%DATADIR%%/filters +@dirrm %%DATADIR%%/images +@dirrm %%DATADIR%%/translations +@dirrm %%DATADIR%% +@dirrmtry share/applications +@dirrmtry share/icons/hicolor/48x48/apps +@dirrmtry share/icons/hicolor/48x48 +@dirrmtry share/icons/hicolor +@dirrmtry share/icons diff --git a/packaging/debian/buildppa.sh b/packaging/debian/buildppa.sh new file mode 100644 index 00000000..13a46de1 --- /dev/null +++ b/packaging/debian/buildppa.sh @@ -0,0 +1,85 @@ +#!/bin/sh +# Packages needed +# sudo apt-get install g++ gnupg dput lintian mini-dinstall yaclc bzr devscripts +# For the kio: (and kdesdk?) +# sudo apt-get install pkg-kde-tools cdbs + +RCLVERS=3304 +LENSVERS=1.18.2.3257 +PPAVERS=2 + +case $RCLVERS in + [23]*) PPANAME=recollexp-ppa;; + 1.14*) PPANAME=recoll-ppa;; + *) PPANAME=recoll15-ppa;; +esac +#PPANAME=recollexp-ppa + +echo "PPA: $PPANAME. Type CR if Ok, else ^C" +read rep + +####### QT4 +debdir=debianrclqt4 +series4="lucid oneiric precise quantal raring" +series4="precise" + +for series in $series4 ; do + rm -rf recoll-${RCLVERS}/debian + cp -rp ${debdir}/ recoll-${RCLVERS}/debian + + if test -f $debdir/control-$series ; then + cp -f -p $debdir/control-$series recoll-${RCLVERS}/debian/control + else + cp -f -p $debdir/control recoll-${RCLVERS}/debian/control + fi + + sed -e s/SERIES/${series}/g \ + -e s/PPAVERS/${PPAVERS}/g \ + < ${debdir}/changelog > recoll-${RCLVERS}/debian/changelog + + (cd recoll-${RCLVERS};debuild -S -sa) || break + + dput $PPANAME recoll_${RCLVERS}-1~ppa${PPAVERS}~${series}1_source.changes +done + +### KIO +seriesk="lucid oneiric precise quantal raring" +seriesk="" + +debdir=debiankio + +for series in $seriesk ; do + + rm -rf recoll-${RCLVERS}/debian + cp -rp ${debdir}/ recoll-${RCLVERS}/debian + + sed -e s/SERIES/$series/g \ + -e s/PPAVERS/${PPAVERS}/g \ + < ${debdir}/changelog > recoll-${RCLVERS}/debian/changelog ; + + (cd recoll-${RCLVERS};debuild -S -sa) || break + + dput $PPANAME kio-recoll_${RCLVERS}-0~ppa${PPAVERS}~${series}1_source.changes + +done + +### Unity Lens +seriesl="oneiric precise quantal raring" +seriesl="" + +debdir=debianunitylens + +for series in $seriesl ; do + + rm -rf recoll-lens-${LENSVERS}/debian + cp -rp ${debdir}/ recoll-lens-${LENSVERS}/debian + + sed -e s/SERIES/$series/g \ + -e s/PPAVERS/${PPAVERS}/g \ + < ${debdir}/changelog > recoll-lens-${LENSVERS}/debian/changelog ; + + (cd recoll-lens-${LENSVERS};debuild -S -sa) || break + + dput $PPANAME recoll-lens_${LENSVERS}-1~ppa${PPAVERS}~${series}1_source.changes + +done diff --git a/packaging/debian/debian/README.Debian b/packaging/debian/debian/README.Debian new file mode 100644 index 00000000..3866c0a6 --- /dev/null +++ b/packaging/debian/debian/README.Debian @@ -0,0 +1,23 @@ +README for Debian +----------------- + + Installing over an older version: 1.18 introduces significant index formats + changes to support optional character case and diacritics sensitivity, and it + will be advisable to reset the index in most cases. This will be best done by + destroying the index directory (rm -rf ~/.recoll/xapiandb). + + If 1.18 is not configured for case and diacritics sensitivity, it is mostly + compatible with 1.17 indexes. + + -- Kartik Mistry Tue, 13 Nov 2012 12:33:00 +0530 + + Installing over an older version: 1.16 is mostly compatible with 1.15 indexes, + except for a few differences for weird terms containing punctuation signs. + Perform a full index pass if installing over an older version. The simplest + way to do this is to quit all recoll programs and just delete the index + directory (rm -rf ~/.recoll/xapiandb), then start recoll or recollindex. + recollindex -z will do the same in most cases. + + Also, using the anchored search feature requires a full reindex. + + -- Kartik Mistry Thu, 22 Sep 2011 21:30:05 +0530 diff --git a/packaging/debian/debian/changelog b/packaging/debian/debian/changelog new file mode 100644 index 00000000..1766cd84 --- /dev/null +++ b/packaging/debian/debian/changelog @@ -0,0 +1,472 @@ +recoll (3153-1.1) experimental; urgency=low + + * local package testing new release build + + -- Jean-Francois Dockes Sun, 30 Dec 2012 12:29:46 +0530 + +recoll (1.18.1-1) experimental; urgency=low + + * New upstream version: + + Please read README.Debian for changes in index db format. + * debian/patches/txtcsvopen.diff: + + Dropped. Merged upstream. + * debian/patches/fix-manpage-typos.patch: + + Added patch to fix manpage typos and groff errors. + * debian/control: + + Added VCS-* fields. + + -- Kartik Mistry Tue, 13 Nov 2012 12:29:46 +0530 + +recoll (1.17.3-2) unstable; urgency=medium + + * debian/rules: + + Call dh_python2 for python-recoll. (Closes: #681586) + * debian/control: + + Added X-Python-Version field for correct Python version dependency. + + -- Kartik Mistry Sat, 14 Jul 2012 20:20:56 +0530 + +recoll (1.17.3-1) unstable; urgency=low + + * New upstream release. + * debian/patches/txtcsvopen.diff: + + Added patch to fix opening of compressed text-files with gnumeric. + (Closes: #674756) + + -- Kartik Mistry Fri, 08 Jun 2012 11:46:57 +0530 + +recoll (1.17.2-1) unstable; urgency=low + + * New upstream release: + + Dropped patches: fix-kFreeBSD-ftbfs.patch, recoll_ionice_getpid.patch. + These are merged with upstream. + + Refreshed patch: fix-python-install.patch. + * debian/rules, debian/control: + + Added hardening support. + * debian/copyright: + + Fixed duplicate Copyright sections. + + -- Kartik Mistry Fri, 18 May 2012 10:59:21 +0530 + +recoll (1.17.1-2) unstable; urgency=low + + * debian/patches: + + fix-kFreeBSD-ftbfs.patch: Added patch to fix FTBFS on kFreeBSD from + upstream (Closes: #667083) + + recoll_ionice_getpid.patch: Added patch to fix FTBFS with gcc-4.7 from + upstream (Closes: #667352) + + -- Kartik Mistry Wed, 04 Apr 2012 12:16:48 +0530 + +recoll (1.17.1-1) unstable; urgency=low + + * New upstream release. + * Enable Python module resulting into new binary: python-recoll. + * debian/control: + + Updated Build-Deps: libqtwebkit-dev, python-all-dev. + + Added python-recoll binary. + + Updated Standards-Version to 3.9.3 + * debian/rules: + + Build Python module by default. + * debian/recoll.menu, debian/python-recoll.install, debian/recoll.install: + + Changes for new binary package. + * debian/copyright: + + Updated to copyright-format 1.0 + + Updated upstream and Debian copyright. + + Fixed unicode.org/copyright.html URL. + + -- Kartik Mistry Tue, 27 Mar 2012 12:15:51 +0530 + +recoll (1.16.2-1) unstable; urgency=low + + * New upstream release. + * debian/copyright: + + Updated as per DEP-5 format, simplying copyright file. + * debian/control: + + Dropped: flac, vorbis-tools and libid3-tools from Suggests, as + python-mutagen handles audio now. + + Dropped: lyx from Suggests, as it will be too heavy for most of users as + discussed with upstream. + * debian/rules: + + Use STRIP variable to strip during install phase. This makes patch + 01_nostrip_final_binaries_437901.diff obsolete, removed this patch. + + -- Kartik Mistry Wed, 09 Nov 2011 20:35:16 +0530 + +recoll (1.16.1-1) unstable; urgency=low + + * New upstream release. + * debian/copyright: + + Added missing GPL-3 URL in debian/* copyright section. + + -- Kartik Mistry Thu, 29 Sep 2011 10:06:54 +0530 + +recoll (1.16.0-1) unstable; urgency=low + + * New upstream release: + + See README.Debian for upgrade note and information. + * debian/copyright: + + Updated as per latest DEP-5 format. + * debian/control: + + Recommends: xdg-utils now. + * debian/rules: + + Added recommends build targets. + + -- Kartik Mistry Thu, 22 Sep 2011 21:30:25 +0530 + +recoll (1.15.9-1) unstable; urgency=low + + * New upstream release: + + Dropped patch 02_recoll_staticfix_626882.diff, merged upstream + + -- Kartik Mistry Wed, 15 Jun 2011 09:20:20 +0530 + +recoll (1.15.8-2) unstable; urgency=low + + * debian/patches/02_recoll_staticfix_626882.diff: + + Added patch to fix segfault in 1.15.8. Patch from Jean-Francois Dockes + (Closes: #626882) + + -- Kartik Mistry Tue, 17 May 2011 09:57:50 +0530 + +recoll (1.15.8-1) unstable; urgency=low + + * New upstream release. + * debian/patches/02_kfreebsd-ftbfs.diff: + + Removed. Merged with upstream. + * debian/control: + + Updated to Standards-Version 3.9.2 (no changes needed) + + -- Kartik Mistry Thu, 12 May 2011 09:47:21 +0530 + +recoll (1.15.7-2) unstable; urgency=low + + * Applied patch 02_kfreebsd-ftbfs.diff from upstream to fix FTBFS + on kFreeBSD-* (Closes: #618796) + * debian/copyright: + + Updated to latest DEP-5 specification + + -- Kartik Mistry Fri, 15 Apr 2011 18:38:54 +0530 + +recoll (1.15.7-1) unstable; urgency=low + + * New upstream release: + + Fixed: Segmentation fault when file type radio button clicked. + (Closes: #617353) + * debian/patches/02_manpage_fix.diff: + + Removed. Merged with upstream. + + -- Kartik Mistry Sun, 13 Mar 2011 09:07:57 +0530 + +recoll (1.15.2-1) unstable; urgency=low + + * Upload to unstable + * New upstream release + * debian/patches: + + Refreshed 01_nostrip_final_binaries_437901.diff + + Added 02_manpage_fix.diff to fix manpage groff issues + + -- Kartik Mistry Tue, 15 Feb 2011 11:25:58 +0530 + +recoll (1.14.4-1) experimental; urgency=low + + * New upstream release + * debian/copyright: + + Updated for DEP-5 format specification + + -- Kartik Mistry Thu, 02 Dec 2010 00:29:06 +0530 + +recoll (1.14.2-1) experimental; urgency=low + + * New upstream release + * debian/control: + + Added xlstproc as Recommends (Closes: #587684) + + Added python-mutagen as Suggests + * debian/patches: + + Refreshed 01_nostrip_final_binaries_437901.diff + + Removed 02_recoll-prepare-for-xapian-1.2.diff, merged with upstream + + -- Kartik Mistry Mon, 27 Sep 2010 17:52:17 +0530 + +recoll (1.13.04-3) unstable; urgency=low + + * Added patch for xapian 1.2 compatibility from Olly Betts + (Closes: #579929) + + -- Kartik Mistry Mon, 03 May 2010 09:47:16 +0530 + +recoll (1.13.04-2) unstable; urgency=low + + * debian/control: + + Added missing packages to Suggests: flac, libid3-tools, lyx, pstotext, + python-chm, untex, vorbis-tools Thanks to Ivan Vilata i Balaguer + (Closes: #578441) + + -- Kartik Mistry Fri, 23 Apr 2010 11:07:00 +0530 + +recoll (1.13.04-1) unstable; urgency=low + + * New upstream release + + -- Kartik Mistry Fri, 16 Apr 2010 10:39:02 +0530 + +recoll (1.13.02-2) unstable; urgency=low + + * debian/control: + + Don't suggest xpdf (Closes: #569333) + * debian/copyright: + + Updated Debian package copyright year + * Removed unused README.source file + + -- Kartik Mistry Fri, 19 Feb 2010 10:42:53 +0530 + +recoll (1.13.02-1) unstable; urgency=low + + * New upstream release + * debian/control: + + Updated to Standards-Version 3.8.4 (no changes needed) + + -- Kartik Mistry Wed, 03 Feb 2010 11:00:53 +0530 + +recoll (1.13.01-1) unstable; urgency=low + + * New upstream release + + Fixed bug that causes field values ignored for Capitalized words and + phrases + + -- Kartik Mistry Fri, 08 Jan 2010 10:09:15 +0530 + +recoll (1.13.00-1) unstable; urgency=low + + * New upstream release + * debian/control: + + Fixed package descriptions, replaced QT->Qt (Closes: #563725) + * debian/patches/01_nostrip_final_binaries_437901.diff: + + Refreshed patch for upstream changes + * Converted package to new source format '3.0 (quilt)' + + -- Kartik Mistry Tue, 05 Jan 2010 23:23:30 +0530 + +recoll (1.12.4-1) unstable; urgency=low + + * New upstream release: + + Fixed FTBFS with binutils-gold (Closes: #556315) + + -- Kartik Mistry Fri, 11 Dec 2009 00:08:37 +0530 + +recoll (1.12.3-1) unstable; urgency=low + + * New upstream release + * debian/control: + + Updated Build-Depends on libqt4-dev as we are building Qt4 ui now + * debian/rules: + + Make sure that we call qmake-qt4 + + -- Kartik Mistry Thu, 29 Oct 2009 22:44:50 +0530 + +recoll (1.12.2-1) unstable; urgency=low + + * New upstream release: + + Dropped patch 02_manpage_fixes.diff, merged with upstream + * Added debian/README.source file to confirm with latest policy + * Removed debian/docs, we are using dh_installdocs in debian/rules + * debian/control: + + Wrapped up Build-Depends + + Depends on quilt, since patch system is using quilt now + + Updated to Standards-Version 3.8.3 + + Updated dependency on libxapian-dev (>= 1.0.15) + * debian/rules: + + Changes for quilt migration + + -- Kartik Mistry Fri, 23 Oct 2009 10:14:05 +0530 + +recoll (1.12.1-1) unstable; urgency=low + + * New upstream release + * debian/control: + + Updated to Standards-Version 3.8.2 (no changes needed) + * debian/copyright: + + [Lintian] Removed licenses URL links to symlink + + -- Kartik Mistry Sat, 27 Jun 2009 20:08:28 +0530 + +recoll (1.12.0-1) unstable; urgency=low + + * New upstream release + * debian/copyright: + + [Lintian] Updated for use of correct copyright symbol © instead of (C) + + Updated Debian packaging copyright year + * debian/rules: + + Used dh_prep instead of deprecated dh_clean -k + * debian/control: + + Updated debhelper dependency to 7 + * debian/patches: + + Dropped 02_gcc-snapshot-missing-headers-fix.dpatch, merged with upstream + + Added patch 02_manpage_fixes.dpatch for groff warnings + + -- Kartik Mistry Sat, 28 Feb 2009 14:33:53 +0530 + +recoll (1.11.0-2) unstable; urgency=low + + * debian/control: + + Added versioned build-dep on libxapian-dev, Thanks to Brad Sawatzky + for catch (Closes: #507473) + + Add libimage-exiftool-perl as Suggests in which I forgot in + previous upload + * debian/changelog: + + Fixed typo from previous upload entry + + -- Kartik Mistry Wed, 03 Dec 2008 15:05:55 +0530 + +recoll (1.11.0-1) unstable; urgency=low + + * New upstream release: + + Remembers missing filters in first run (Closes: #500690) + * debian/control: + + Added libimage-exiftool-perl as Suggests (Closes: #502427) + + Added Python as recommaded due to filters/rclpython script + although, its not necessary as it will be installed only + when Python is present + * debian/patches: + + Refreshed patch for gcc 4.4 FTBFS (Closes: #505376) + * debian/copyright: + + Updated for newly added filter and image files + + -- Kartik Mistry Thu, 13 Nov 2008 21:18:15 +0530 + +recoll (1.10.6-1) unstable; urgency=low + + * New upstream release + + Fixed typo in tooltip in indexing configuration (Closes: #486689) + + Dropped patch 03_manpage_fixes.dpatch, merged with upstream + * debian/control: + + Updated to Standards-Version 3.8.0 (no changes needed) + + Updated my maintainer email address + * debian/copyright: + + Updated my maintainer email address + + Updated license text to proposed license format + + Updated upstream copyright year + + -- Kartik Mistry Thu, 11 Sep 2008 16:06:48 +0530 + +recoll (1.10.2-1) unstable; urgency=low + + * New upstream release + + Updated patch debian/patches/02_gcc-snapshot-missing-headers-fix.dpatch + Some portions are now merged with upstream + * debian/copyright: + + Fixed indentation to 80 characters + + Updated Debian package copyright year + + -- Kartik Mistry Thu, 29 May 2008 23:25:40 +0530 + +recoll (1.10.1-1) unstable; urgency=low + + * New upstream release + + Updated debian/patches/02_gcc-snapshot-missing-headers-fix.dpatch + Some portions are merged with upstream + * debian/control: + + Fixed short description, Thanks to Mohammed Adnène Trojette + + * debian/patches/03_manpage_fixes.dpatch: + + Added patch to fix manpage groff warnings + + -- Kartik Mistry Wed, 27 Feb 2008 18:41:25 +0530 + +recoll (1.10.0-5) unstable; urgency=low + + * debian/patches/02_gcc-snapshot-missing-headers-fix.dpatch: + + Really fixed the FTBFS with gcc-4.3/g++-4.3 (Closes: #455652) + + -- Kartik Mistry Sun, 27 Jan 2008 14:37:53 +0530 + +recoll (1.10.0-4) unstable; urgency=low + + * debian/patches/02_gcc-snapshot-missing-headers-fix.dpatch: + + Updated patch to fix missing include header in qtgui/main.cpp + (Closes: #455652) + * debian/copyright: + + Updated missing license for qtgui/q3richtext_p.h + + Moved other copyright holders for GPL above license + to make it readable + + -- Kartik Mistry Wed, 23 Jan 2008 10:42:20 +0530 + +recoll (1.10.0-3) unstable; urgency=low + + * debian/control: + + Added external helper programs and utilities to Suggests field + (Closes: #441629, #457033) + + -- Kartik Mistry Fri, 28 Dec 2007 08:12:52 +0530 + +recoll (1.10.0-2) unstable; urgency=low + + * debian/control: + + Updated Standards-Version to 3.7.3 + * debian/patches/02_gcc-snapshot-missing-headers-fix.dpatch: + + Added patch to fix compilation with gcc-snapshot due to + missing headers (Closes: #455652) + * debian/rules: + + Fixed clean target + + -- Kartik Mistry Tue, 11 Dec 2007 14:42:47 +0530 + +recoll (1.10.0-1) unstable; urgency=low + + * New upstream release + * debian/control: + + Moved Homepage: entry to control field + + Dropped unnecessary dependency on qt3-dev-tools + + -- Kartik Mistry Wed, 28 Nov 2007 19:54:58 +0530 + +recoll (1.9.0-1) unstable; urgency=low + + * New upstream release + * debian/patches: dropped 02_desktop_entry_fixes.dpatch, merged with + upstream, rewrote 01_nostrip_final_binary_437901.dpatch after upstream + changes + * debian/menu: used Data Management since it is better and appropriate + * debian/copyright: added missing copyright from index/csguess.cpp + + -- Kartik Mistry Wed, 12 Sep 2007 14:05:39 +0530 + +recoll (1.8.2-3) unstable; urgency=low + + * debian/rules: added better clean target, better configure flags, + separated LDFLAGS + * Added dpatch support + * debian/patches/01_nostrip_final_binary_437901.dpatch: added patch to not + strip binary from upstream (Closes: #437901) + * debian/patches/02_desktop_entry_fixes.dpatch: added patch to fix desktop + menu entry according to freedesktop standards + * debian/menu: fixed according to latest menu policy, changed subsection to + Tools from Databases (hint taken from beagle) + * debian/copyright: moved copyright out of license section, adjusted + copyrights portions under proper license + + -- Kartik Mistry Sat, 18 Aug 2007 20:28:49 +0530 + +recoll (1.8.2-2) unstable; urgency=low + + * debian/rules: xapian is dynamically linked now, Thanks to + Jean-Francois Dockes (Closes: #427783) + * Fixed debian/watch file, Thanks to Vincent Fourmond + + -- Kartik Mistry Fri, 08 Jun 2007 10:51:01 +0530 + +recoll (1.8.2-1) unstable; urgency=low + + * New upstream release + * debian/watch: fixed now + * debian/control: fixed long descriptions + + -- Kartik Mistry Tue, 22 May 2007 15:24:54 +0530 + +recoll (1.8.1-1) unstable; urgency=low + + * Initial release (Closes: #422039) + * Based on package prepared by Jean-Francois Dockes + + -- Kartik Mistry Thu, 3 May 2007 12:15:02 +0530 diff --git a/packaging/debian/debian/compat b/packaging/debian/debian/compat new file mode 100644 index 00000000..7ed6ff82 --- /dev/null +++ b/packaging/debian/debian/compat @@ -0,0 +1 @@ +5 diff --git a/packaging/debian/debian/control b/packaging/debian/debian/control new file mode 100644 index 00000000..eb6c23fc --- /dev/null +++ b/packaging/debian/debian/control @@ -0,0 +1,69 @@ +Source: recoll +Section: x11 +Priority: optional +Maintainer: Kartik Mistry +Build-Depends: autotools-dev, + debhelper (>= 7), + hardening-wrapper, + libqt4-dev, + libqtwebkit-dev, + libx11-dev, + libxapian-dev (>= 1.0.15), + libz-dev, + python-all-dev (>= 2.6.6-3~) +Standards-Version: 3.9.3 +X-Python-Version: >= 2.7 +Homepage: http://www.lesbonscomptes.com/recoll +Vcs-Git: git://anonscm.debian.org/collab-maint/recoll.git +Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/recoll.git;a=summary + +Package: recoll +Architecture: any +Depends: ${misc:Depends}, ${shlibs:Depends} +Recommends: aspell, python, xdg-utils, xsltproc +Suggests: antiword, + catdoc, + ghostscript, + libimage-exiftool-perl, + poppler-utils, + pstotext, + python-chm, + python-mutagen, + unrtf, + untex +Description: Personal full text search package with a Qt GUI + This package is a personal full text search package is based on a very strong + backend (Xapian), for which it provides an easy to use and feature-rich + interface. + . + Features: + * Qt-based GUI + * Supports the following document types (and their compressed versions) + - Natively: text, html, OpenOffice files, maildir and mailbox (Mozilla and + IceDove mail) with attachments, pidgin log files + - With external helpers: pdf (pdftotext), postscript (ghostscript), msword + (antiword), excel, ppt (catdoc), rtf (unrtf) + * Powerful query facilities, with boolean searches, phrases, filter on file + types and directory tree + * Support for multiple charsets, Internal processing and storage uses Unicode + UTF-8 + * Stemming performed at query time (can switch stemming language after + indexing) + * Easy installation. No database daemon, web server or exotic language + necessary + * An indexer which runs either as a thread inside the GUI or as an external, + cron'able program + +Package: python-recoll +Architecture: any +Section: python +Depends: recoll (>= ${source:Version}), + ${misc:Depends}, + ${python:Depends}, + ${shlibs:Depends} +Description: Python extension for recoll + Personal full text search package which is based on a very strong backend + (Xapian), for which it provides an easy to use and feature-rich interface. + . + This package provides Python extension module for recoll which can be use to + extend recoll such as an Ubuntu Unity Lens. diff --git a/packaging/debian/debian/copyright b/packaging/debian/debian/copyright new file mode 100644 index 00000000..f5811875 --- /dev/null +++ b/packaging/debian/debian/copyright @@ -0,0 +1,219 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: recoll +Upstream-Contact: Jean-Francois Dockes +Source: http://www.lesbonscomptes.com/recoll/ + +Files: * +Copyright: 2005-2012, Jean-Francois Dockes +License: GPL-2+ + +Files: Binc IMAP project (bincimapmime/*) +Copyright: 2002-2005, Andreas Aardal Hanssen +License: GPL-2+ + +Files: filters/rcl* files index/csguess.cpp internfile/htmlparse.cpp +Copyright: 2000-2004, Mikio Hirabayashi +License: GPL-2+ + +Files: filters/rclpython +Copyright: J\xfcrgen Hermann, Mike Brown, Christopher Arndt + +License: GPL-2+ + +Files: internfile/htmlparse.cpp mh_html.cpp +Copyright: 1999-2001, BrightStation PLC, + 2001, Ananova Ltd, + 2002-2004, Olly Betts. +License: GPL-2+ + +Files: unac/* +Copyright: 2000-2002, Loic Dachary +License: GPL-2+ + +Files: common/* +Copyright: 2004-2005, J.F.Dockes +License: GPL-2+ + +Files: debian/* +Copyright: 2007-2012, Kartik Mistry +License: GPL-2+ + +License: GPL-2+ + This package is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free Software + Foundation; either version 2 of the License, or (at your option) any later + version. + . + This package is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License along with + this package; if not, write to the Free Software Foundation, Inc., 51 Franklin + St, Fifth Floor, Boston, MA 02110-1301 USA + . + On Debian systems, the complete text of the GNU General Public License can be + found in `/usr/share/common-licenses/GPL-2' and + `/usr/share/common-licenses/GPL-3'. + +Files: aspell/* +Copyright: 2001-2002, by Kevin Atkinson +License: LGPL-2+ + +Files: images/text-x-python.png +Copyright: David Vignoni +License: LGPL-2+ + +License: LGPL-2+ + This package is free software; you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) any + later version. + . + This package is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + details. + . + You should have received a copy of the GNU Lesser General Public License along + with this package; if not, write to the Free Software Foundation, Inc., 51 + Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + . + On Debian systems, the complete text of the GNU Lesser General Public License + can be found in `/usr/share/common-licenses/LGPL-2' and + `/usr/share/common-licenses/LGPL-2.1' and `/usr/share/common-licenses/LGPL-3'. + +Files: qtgui/q3richtext_p.h +Copyright: 1992-2007, Trolltech ASA. All rights reserved +License: + This file is part of the Qt3Support module of the Qt Toolkit. + . + This file may be used under the terms of the GNU General Public License + version 2.0 as published by the Free Software Foundation and appearing in the + file LICENSE.GPL included in the packaging of this file. Please review the + following information to ensure GNU General Public Licensing requirements will + be met: http://trolltech.com/products/qt/licenses/licensing/opensource/ + . + If you are unsure which license is appropriate for your use, please review the + following information: + http://trolltech.com/products/qt/licenses/licensing/licensingoverview + or contact the sales department at sales@trolltech.com. + . + In addition, as a special exception, Trolltech gives you certain additional + rights. These rights are described in the Trolltech GPL Exception version 1.0, + which can be found at http://www.trolltech.com/products/qt/gplexception/ + and in the file GPL_EXCEPTION.txt in this package. + . + In addition, as a special exception, Trolltech, as the sole copyright + holder for Qt Designer, grants users of the Qt/Eclipse Integration + plug-in the right for the Qt/Eclipse Integration to link to + functionality provided by Qt Designer and its related libraries. + . + Trolltech reserves all rights not expressly granted herein. + . + Trolltech ASA (c) 2007 + . + This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +Files: common/uproplist.h +Copyright: 1991-2006, Unicode, Inc. +License: + All rights reserved. Distributed under the Terms of Use in + http://www.unicode.org/copyright.html + . + Permission is hereby granted, free of charge, to any person obtaining a copy + of the Unicode data files and any associated documentation (the "Data Files") + or Unicode software and any associated documentation (the "Software") to deal + in the Data Files or Software without restriction, including without + limitation the rights to use, copy, modify, merge, publish, distribute, and/or + sell copies of the Data Files or Software, and to permit persons to whom the + Data Files or Software are furnished to do so, provided that (a) the above + copyright notice(s) and this permission notice appear with all copies of the + Data Files or Software, (b) both the above copyright notice(s) and this + permission notice appear in associated documentation, and (c) there is clear + notice in each modified Data File or in the Software as well as in the + documentation associated with the Data File(s) or Software that the data or + software has been modified. + . + THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD + PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN + THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL + DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE + DATA FILES OR SOFTWARE. + . + Except as contained in this notice, the name of a copyright holder shall not + be used in advertising or otherwise to promote the sale, use or other dealings + in these Data Files or Software without prior written authorization of the + copyright holder. + +Files: utils/md5.* +Copyright: 1991-1992, RSA Data Security, Inc. All rights reserved. +License: + MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm + . + License to copy and use this software is granted provided that it is + identified as the "RSA Data Security, Inc. MD5 Message-Digest Algorithm" in + all material mentioning or referencing this software or this function. + . + License is also granted to make and use derivative works provided that such + works are identified as "derived from the RSA Data Security, Inc. MD5 + Message-Digest Algorithm" in all material mentioning or referencing the + derived work. + . + RSA Data Security, Inc. makes no representations concerning either the + merchantability of this software or the suitability of this software for any + particular purpose. It is provided "as is" without express or implied warranty + of any kind. + . + These notices must be retained in any copies of any part of this documentation + and/or software. + +Files: desktop/xdg-utils-1.0.1/* +Copyright: 2006, Kevin Krammer , + Jeremy White . +License: + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + +Files: index/csguess.cpp +Copyright: 2000-2004, Mikio Hirabayashi +License: LGPL-2.1+ + This file is part of QDBM, Quick Database Manager. + . + QDBM is free software; you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by the + Free Software Foundation; either version 2.1 of the License or any later + version. + . + QDBM is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + . + You should have received a copy of the GNU Lesser General Public License + along with QDBM; if not, write to the Free Software Foundation, Inc., + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + . + On Debian systems, the complete text of the GNU Lesser General Public License + can be found in `/usr/share/common-licenses/LGPL-2.1' and + `/usr/share/common-licenses/LGPL-3'. diff --git a/packaging/debian/debian/patches/fix-python-install.patch b/packaging/debian/debian/patches/fix-python-install.patch new file mode 100644 index 00000000..e025a811 --- /dev/null +++ b/packaging/debian/debian/patches/fix-python-install.patch @@ -0,0 +1,10 @@ +--- a/recollinstall.in ++++ b/recollinstall.in +@@ -149,5 +149,5 @@ + ${datadir}/recoll/translations/recoll_zh.qm || exit 1 + + +-@NOPYTHON@(cd python/recoll;python setup.py install \ +-@NOPYTHON@ --prefix=${REALPREFIX} ${ROOTFORPYTHON} ${OPTSFORPYTHON}) ++#@NOPYTHON@(cd python/recoll;python setup.py install \ ++#@NOPYTHON@ --prefix=${REALPREFIX} ${ROOTFORPYTHON} ${OPTSFORPYTHON}) diff --git a/packaging/debian/debian/patches/series b/packaging/debian/debian/patches/series new file mode 100644 index 00000000..977d94d2 --- /dev/null +++ b/packaging/debian/debian/patches/series @@ -0,0 +1 @@ +fix-python-install.patch diff --git a/packaging/debian/debian/python-recoll.install b/packaging/debian/debian/python-recoll.install new file mode 100644 index 00000000..ca40d507 --- /dev/null +++ b/packaging/debian/debian/python-recoll.install @@ -0,0 +1,2 @@ +usr/lib/python*/*-packages/*.egg-info +usr/lib/python*/*-packages/recoll/* diff --git a/packaging/debian/debian/recoll.install b/packaging/debian/debian/recoll.install new file mode 100644 index 00000000..e423a69c --- /dev/null +++ b/packaging/debian/debian/recoll.install @@ -0,0 +1,12 @@ +usr/bin +usr/lib/recoll +usr/share/applications +usr/share/icons +usr/share/man +usr/share/pixmaps +usr/share/recoll/doc +usr/share/recoll/examples +usr/share/recoll/filters +usr/share/recoll/filters +usr/share/recoll/images +usr/share/recoll/translations diff --git a/packaging/debian/debian/recoll.menu b/packaging/debian/debian/recoll.menu new file mode 100644 index 00000000..f0abea35 --- /dev/null +++ b/packaging/debian/debian/recoll.menu @@ -0,0 +1,2 @@ +?package(recoll):needs="X11" section="Applications/Data Management" \ + title="Personal Search Tool" command="/usr/bin/recoll" diff --git a/packaging/debian/debian/rules b/packaging/debian/debian/rules new file mode 100755 index 00000000..ea4a247a --- /dev/null +++ b/packaging/debian/debian/rules @@ -0,0 +1,80 @@ +#!/usr/bin/make -f + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +export DEB_BUILD_HARDENING=1 + +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) + +CFLAGS = -Wall -g +LDFLAGS = -Wl,-z,defs + +#build qt4 UI only +export QMAKE=qmake-qt4 + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +config.status: configure + dh_testdir + ./configure CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \ + --host=$(DEB_HOST_GNU_TYPE) \ + --build=$(DEB_BUILD_GNU_TYPE) \ + --mandir=\$${prefix}/share/man \ + --prefix=/usr + +build: build-arch build-indep +build-arch: build-stamp +build-indep: build-stamp +build-stamp: config.status + dh_testdir + $(MAKE) + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp config.log + [ ! -f Makefile ] || $(MAKE) distclean + dh_clean Makefile + +install: + dh_testdir + dh_testroot + dh_prep + dh_installdirs + + $(MAKE) STRIP=ls prefix=$(CURDIR)/debian/tmp/usr install + (cd python/recoll; python setup.py install \ + --install-layout=deb \ + --prefix=$(CURDIR)/debian/tmp/usr ) + +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs ChangeLog + dh_installdocs README + dh_installmenu + dh_installman + dh_install --sourcedir=debian/tmp + dh_makeshlibs + dh_python2 + dh_link + dh_strip + dh_compress + dh_fixperms + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary-indep: build install + +binary: binary-indep binary-arch +.PHONY: build build-arch build-indep clean binary-indep binary-arch binary install diff --git a/packaging/debian/debian/source/format b/packaging/debian/debian/source/format new file mode 100644 index 00000000..163aaf8d --- /dev/null +++ b/packaging/debian/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/packaging/debian/debian/watch b/packaging/debian/debian/watch new file mode 100644 index 00000000..e5daae09 --- /dev/null +++ b/packaging/debian/debian/watch @@ -0,0 +1,2 @@ +version=3 +http://www.lesbonscomptes.com/recoll/download.html recoll-(.*)\.tar\.gz diff --git a/packaging/debian/debiankio/changelog b/packaging/debian/debiankio/changelog new file mode 100644 index 00000000..5590d051 --- /dev/null +++ b/packaging/debian/debiankio/changelog @@ -0,0 +1,56 @@ +kio-recoll (1.18.2-0~ppaPPAVERS~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.18.2 + -- Jean-Francois Dockes Mon, 18 Apr 2013 18:05:00 +0100 + +kio-recoll (1.18.1-0~ppaPPAVERS~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.18.1 + -- Jean-Francois Dockes Mon, 05 Nov 2012 13:25:00 +0100 + +kio-recoll (1.17.0-0~ppaPPAVERS~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.17.0 + -- Jean-Francois Dockes Sun, 25 Mar 2012 18:05:00 +0200 + +kio-recoll (1.16.2-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.16.2 + -- Jean-Francois Dockes Mon, 07 Nov 2011 17:57:00 +0200 + +kio-recoll (1.16.1-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.16.1 + -- Jean-Francois Dockes Wed, 28 Sep 2011 15:07:00 +0200 + +kio-recoll (1.16.0-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.16.0 + -- Jean-Francois Dockes Wed, 07 Sep 2011 18:30:00 +0200 + +kio-recoll (1.15.8-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.15.8 + -- Jean-Francois Dockes Mon, 02 May 2011 17:27:00 +0200 + +kio-recoll (1.15.5-0~ppa1~SERIES1) SERIES; urgency=low + * Update to recoll version 1.15.5 + -- Jean-Francois Dockes Fri, 04 Mar 2011 13:54:00 +0200 + +kio-recoll (1.15.2-0~ppa1~SERIES1) SERIES; urgency=low + * Update to recoll version 1.15.2 + -- Jean-Francois Dockes Thu, 15 Feb 2011 08:43:00 +0200 + +kio-recoll (1.15.0-0~ppa1~SERIES1) SERIES; urgency=low + * Update to recoll version 1.15.0 + -- Jean-Francois Dockes Wed, 02 Feb 2011 09:48:00 +0200 + +kio-recoll (1.14.3-0~ppa1~SERIES1) SERIES; urgency=low + * Update to recoll version 1.14.3 + -- Jean-Francois Dockes Thu, 25 Nov 2010 10:25:00 +0200 + +kio-recoll (1.14.2-0~ppa1~SERIES1) SERIES; urgency=low + * Update to recoll version 1.14.2 + -- Jean-Francois Dockes Sat, 25 Sep 2010 09:37:20 +0200 + +kio-recoll (1.13.01-0~ppa4~SERIES1) SERIES; urgency=low + * Update to recoll version 1.13.01 + -- Jean-Francois Dockes Thu, 07 Jan 2010 11:26:00 +0100 + +kio-recoll (1.12.3-0~ppa4~jaunty1) jaunty; urgency=low + * Initial release + -- Jean-Francois Dockes Tue, 24 Nov 2009 08:55:00 +0100 + diff --git a/packaging/debian/debiankio/compat b/packaging/debian/debiankio/compat new file mode 100644 index 00000000..7f8f011e --- /dev/null +++ b/packaging/debian/debiankio/compat @@ -0,0 +1 @@ +7 diff --git a/packaging/debian/debiankio/control b/packaging/debian/debiankio/control new file mode 100644 index 00000000..e3885456 --- /dev/null +++ b/packaging/debian/debiankio/control @@ -0,0 +1,25 @@ +Source: kio-recoll +Section: kde +Priority: extra +Maintainer: Jean-Francois Dockes +Build-Depends: cdbs, cmake, debhelper (>= 7), kdelibs5-dev (>= 4:4.2.2), pkg-kde-tools (>= 0.4.0), libxapian-dev, libz-dev +Standards-Version: 3.8.1 +Homepage: http://www.recoll.org/ + +Package: kio-recoll +Architecture: any +Depends: ${misc:Depends}, ${shlibs:Depends} +Description: A Recoll KIO slave for KDE 4 + A Recoll KIO slave for KDE 4, allows performing a Recoll search by + entering an appropriate URL in a KDE open dialog, or with an HTML-based + interface displayed in Konqueror. + The HTML-based interface is similar to the Recoll GUI QT-based interface, + slightly less powerful. It allows performing a search while staying fully + within the KDE framework: drag and drop from the result list works + normally and you have your normal choice of applications for opening files. + An alternative interface uses a directory view of search results. Due to + limitations in the current KIO slave interface, it is currently not + obviously useful. + The interface is described in more detail inside a help file which you can + access by entering recoll:/ inside the konqueror URL line (this works only + if the recoll KIO slave has been previously installed). diff --git a/packaging/debian/debiankio/copyright b/packaging/debian/debiankio/copyright new file mode 100644 index 00000000..3cb35945 --- /dev/null +++ b/packaging/debian/debiankio/copyright @@ -0,0 +1,113 @@ +This package was debianized by Jean-Francois Dockes on +Wed, 10 Jan 2007 16:04:13 +0100. + +It was downloaded from http://www.recoll.org + +Upstream Author: Jean-Francois Dockes + +Copyright: (C) 2005,2006, Jean-Francois Dockes + +License: + + This package is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + +The Debian packaging is (C) 2007, Jean-Francois Dockes and +is licensed under the GPL, see above. + +Portions of the software are: + +Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL: +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. + +On Debian systems, the complete text of the GNU LGPL +can be found in `/usr/share/common-licenses/LGPL-2'. + + +Copyright 2002-2005 Andreas Aardal Hanssen +Copyright (C) 2000-2004 Mikio Hirabayashi +Copyright 1999,2000,2001 BrightStation PLC +Copyright 2001 Ananova Ltd +Copyright 2002 Olly Betts +Copyright (C) 2000, 2001, 2002 Loic Dachary + - GPL V2 or later, same license text as above + +Copyright (c) 1991-2004 Unicode, Inc. + + COPYRIGHT AND PERMISSION NOTICE + + Copyright 1991-2006 Unicode, Inc. All rights reserved. Distributed under + the Terms of Use in http://www.unicode.org/copyright.html. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of the Unicode data files and any associated documentation (the "Data + Files") or Unicode software and any associated documentation (the + "Software") to deal in the Data Files or Software without restriction, + including without limitation the rights to use, copy, modify, merge, + publish, distribute, and/or sell copies of the Data Files or Software, and + to permit persons to whom the Data Files or Software are furnished to do + so, provided that (a) the above copyright notice(s) and this permission + notice appear with all copies of the Data Files or Software, (b) both the + above copyright notice(s) and this permission notice appear in associated + documentation, and (c) there is clear notice in each modified Data File or + in the Software as well as in the documentation associated with the Data + File(s) or Software that the data or software has been modified. + + THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR + CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THE DATA FILES OR SOFTWARE. + + Except as contained in this notice, the name of a copyright holder shall + not be used in advertising or otherwise to promote the sale, use or other + dealings in these Data Files or Software without prior written + authorization of the copyright holder. + +Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All +/* + * MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm + * + * Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All + * rights reserved. + * + * License to copy and use this software is granted provided that it + * is identified as the "RSA Data Security, Inc. MD5 Message-Digest + * Algorithm" in all material mentioning or referencing this software + * or this function. + * + * License is also granted to make and use derivative works provided + * that such works are identified as "derived from the RSA Data + * Security, Inc. MD5 Message-Digest Algorithm" in all material + * mentioning or referencing the derived work. + * + * RSA Data Security, Inc. makes no representations concerning either + * the merchantability of this software or the suitability of this + * software for any particular purpose. It is provided "as is" + * without express or implied warranty of any kind. + * + * These notices must be retained in any copies of any part of this + * documentation and/or software. + */ diff --git a/packaging/debian/debiankio/dirs b/packaging/debian/debiankio/dirs new file mode 100644 index 00000000..ec620536 --- /dev/null +++ b/packaging/debian/debiankio/dirs @@ -0,0 +1,2 @@ +usr/lib/kde4 +usr/share/kde4/services diff --git a/packaging/debian/debiankio/docs b/packaging/debian/debiankio/docs new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/packaging/debian/debiankio/docs @@ -0,0 +1 @@ + diff --git a/packaging/debian/debiankio/rules b/packaging/debian/debiankio/rules new file mode 100755 index 00000000..8d9a454d --- /dev/null +++ b/packaging/debian/debiankio/rules @@ -0,0 +1,6 @@ +#!/usr/bin/make -f + +include /usr/share/cdbs/1/rules/debhelper.mk +include /usr/share/pkg-kde-tools/makefiles/1/cdbs/kde.mk + +DEB_SRCDIR = kde/kioslave/kio_recoll diff --git a/packaging/debian/debiankio/watch b/packaging/debian/debiankio/watch new file mode 100644 index 00000000..6963245c --- /dev/null +++ b/packaging/debian/debiankio/watch @@ -0,0 +1,4 @@ +version=3 + + +http://www.recoll.org/download.html recoll-(.*)\.tar\.gz diff --git a/packaging/debian/debianrclqt4/changelog b/packaging/debian/debianrclqt4/changelog new file mode 100644 index 00000000..b43ca3cb --- /dev/null +++ b/packaging/debian/debianrclqt4/changelog @@ -0,0 +1,142 @@ +recoll (3304-1~ppaPPAVERS~SERIES1) SERIES; urgency=low + * Pre-1.19.0 test + -- Jean-Francois Dockes Tue, 30 Apr 2013 11:02:00 +0200 + +recoll (1.18.2-1~ppaPPAVERS~SERIES1) SERIES; urgency=low + * Release 1.18.2 + -- Jean-Francois Dockes Mon, 18 Apr 2013 18:02:00 +0200 + +recoll (1.18.1-1~ppaPPAVERS~SERIES1) SERIES; urgency=low + * Release 1.18.1 + -- Jean-Francois Dockes Mon, 05 Nov 2012 11:22:00 +0200 + +recoll (1.17.3-1~ppaPPAVERS~SERIES1) SERIES; urgency=low + * Release 1.17.3 fixes a nasty email indexing crash + -- Jean-Francois Dockes Thu, 23 May 2012 16:22:00 +0200 + +recoll (1.17.2-1~ppaPPAVERS~SERIES1) SERIES; urgency=low + * Release 1.17.2 + -- Jean-Francois Dockes Thu, 17 May 2012 09:27:00 +0200 + +recoll (2696-1~ppaPPAVERS~SERIES1) SERIES; urgency=low + * pre-1.17.2 beta for testing thumbnail issues. + -- Jean-Francois Dockes Mon, 14 May 2012 17:47:00 +0200 + +recoll (1.17.1-1~ppaPPAVERS~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.17.1: unity lens support + -- Jean-Francois Dockes Tue, 27 Mar 2012 16:21:00 +0200 + +recoll (1.17.0-0~ppaPPAVERS~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.17.0 + -- Jean-Francois Dockes Mon, 18 Mar 2012 16:50:00 +0200 + +recoll (1.16.2-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.16.2 + -- Jean-Francois Dockes Mon, 07 Nov 2011 17:50:00 +0200 + +recoll (1.16.1-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.16.1 + -- Jean-Francois Dockes Wed, 28 Sep 2011 15:07:00 +0200 + +recoll (1.16.0-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.16.0 + -- Jean-Francois Dockes Wed, 07 Sep 2011 18:30:00 +0200 + +recoll (1.15.8-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.15.8 + -- Jean-Francois Dockes Mon, 02 May 2011 17:27:00 +0200 + +recoll (1.15.7-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.15.7 + -- Jean-Francois Dockes Thu, 10 Mar 2011 10:54:00 +0200 + +recoll (1.15.5-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.15.5 + -- Jean-Francois Dockes Fri, 04 Mar 2011 13:54:00 +0200 + +recoll (1.15.2-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.15.2 + -- Jean-Francois Dockes Mon, 14 Feb 2011 21:54:00 +0200 + +recoll (1.15.1-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.15.1 (fixes qt 4.4 build issue on karmic) + -- Jean-Francois Dockes Wed, 02 Feb 2011 15:48:00 +0200 + +recoll (1.15.0-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.15.0 + -- Jean-Francois Dockes Wed, 02 Feb 2011 09:48:00 +0200 + +recoll (1.14.3-0~ppa1~SERIES1) SERIES; urgency=low + * Update to release 1.14.3 + -- Jean-Francois Dockes Thu, 25 Nov 2010 10:25:00 +0200 + +recoll (1.14.2-0~ppa1~SERIES1) SERIES; urgency=low + * Update to release 1.14.2 + -- Jean-Francois Dockes Sat, 25 Sep 2010 09:37:20 +0200 + +recoll (1.13.04-0~ppa2~SERIES1) SERIES; urgency=low + * Switch to qt4 on Jaunty. + -- Jean-Francois Dockes Sat, 01 May 2010 12:15:00 +0200 + +recoll (1.13.04-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.13.04 + -- Jean-Francois Dockes Thu, 14 Apr 2010 13:42:00 +0200 + +recoll (1.13.02-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.13.02 + * Imported current goodness from debian maintainer control and rules + files. Thanks to Kartik Mistry + + -- Jean-Francois Dockes Wed, 03 Feb 2010 16:21:00 +0100 + +recoll (1.13.01-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.13.01 + -- Jean-Francois Dockes Thu, 07 Jan 2010 10:52:00 +0100 + +recoll (1.13.00-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.13.00 + -- Jean-Francois Dockes Tue, 05 Jan 2010 09:52:20 +0100 + +recoll (1.12.4-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.12.4 + -- Jean-Francois Dockes Wed, 28 Oct 2009 17:16:20 +0200 + +recoll (1.12.3-0~ppa3~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.12.3 + -- Jean-Francois Dockes Wed, 28 Oct 2009 17:16:20 +0200 + +recoll (1.12.2-0~ppa3~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.12.2 + -- Jean-Francois Dockes Mon, 19 Oct 2009 16:17:46 +0200 + +recoll (1.11.0-0ubuntu1) dapper; urgency=low + * Updated package to recoll version 1.11.0 + -- Jean-Francois Dockes Sun, 19 Oct 2008 09:57:13 +0200 + +recoll (1.10.6-0ubuntu1) dapper; urgency=low + * Updated package to recoll version 1.10.6 + -- Jean-Francois Dockes Fri, 12 Sep 2008 10:14:20 +0200 + +recoll (1.10.4-0ubuntu1) hardy; urgency=low + * Updated package to recoll version 1.10.4 + -- Jean-Francois Dockes Fri, 29 Aug 2008 15:39:40 +0200 + +recoll (1.10.1-0ubuntu1) gutsy; urgency=low + * Updated package to recoll version 1.10.1 + -- Jean-Francois Dockes Fri, 01 Feb 2008 11:30:01 +0100 + +recoll (1.10.0-0ubuntu1) gutsy; urgency=low + * Updated package to recoll version 1.10.0 + -- Jean-Francois Dockes Wed, 11 Nov 2007 15:34:51 +0200 + +recoll (1.9.0-0ubuntu1) gutsy; urgency=low + * Updated package to recoll version 1.9.0 + -- Jean-Francois Dockes Fri, 7 Sep 2007 15:34:51 +0200 + +recoll (1.8.1-0ubuntu1) gutsy; urgency=low + * Updated package to recoll version 1.8.1 + -- Jean-Francois Dockes Wed, 7 Mar 2007 09:08:05 +0100 + +recoll (1.7.5-0ubuntu1) feisty; urgency=low + * Initial release + -- Jean-Francois Dockes Wed, 10 Jan 2007 16:04:13 +0100 diff --git a/packaging/debian/debianrclqt4/compat b/packaging/debian/debianrclqt4/compat new file mode 100644 index 00000000..7ed6ff82 --- /dev/null +++ b/packaging/debian/debianrclqt4/compat @@ -0,0 +1 @@ +5 diff --git a/packaging/debian/debianrclqt4/control b/packaging/debian/debianrclqt4/control new file mode 100644 index 00000000..b3406bed --- /dev/null +++ b/packaging/debian/debianrclqt4/control @@ -0,0 +1,44 @@ +Source: recoll +Section: x11 +Priority: optional +Maintainer: Jean-Francois Dockes +Build-Depends: debhelper (>= 7), + autotools-dev, + libqt4-dev, + libqtwebkit-dev, + libxapian-dev (>= 1.0.15), + libx11-dev, + libz-dev, + python-all-dev (>= 2.6.6-3~) +Standards-Version: 3.9.3 + +Package: recoll +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Recommends: aspell, python, xdg-utils, xsltproc +Suggests: antiword, catdoc, ghostscript, libimage-exiftool-perl, poppler-utils, + pstotext, python-chm, python-mutagen, unrtf, untex +Description: a personal full text search package with a QT GUI + The Recoll personal full text search package is based on a very strong + backend (Xapian), for which it provides an easy to use and feature-rich + interface. + . + Features: + * QT-based GUI. + * Supports the following document types (and their compressed versions): + - Natively: text, html, OpenOffice files, maildir and mailbox + (Mozilla and Thunderbird mail ok) with attachments, gaim log files. + - With external helpers: pdf (pdftotext), postscript (ghostscript), + msword (antiword), excel, ppt (catdoc), rtf (unrtf), + * Powerful query facilities, with boolean searches, phrases, filter on + file types and directory tree. + * Support for multiple charsets. Internal processing and storage uses + Unicode UTF-8. + * Stemming performed at query time (can switch stemming language after + indexing) + * Easy installation. No database daemon, web server or exotic language + necessary. + * An indexer which runs either as a thread inside the GUI or as an + external, cron'able program. + . + Homepage: diff --git a/packaging/debian/debianrclqt4/control-lucid b/packaging/debian/debianrclqt4/control-lucid new file mode 100644 index 00000000..33a1e592 --- /dev/null +++ b/packaging/debian/debianrclqt4/control-lucid @@ -0,0 +1,43 @@ +Source: recoll +Section: x11 +Priority: optional +Maintainer: Jean-Francois Dockes +Build-Depends: debhelper (>= 7), + autotools-dev, + libqt4-dev, + libxapian-dev (>= 1.0.15), + libx11-dev, + libz-dev, + python-dev, + quilt +Standards-Version: 3.8.3 + +Package: recoll +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Recommends: aspell, python, xsltproc +Suggests: antiword, catdoc, ghostscript, libimage-exiftool-perl, poppler-utils, unrtf, python-mutagen +Description: a personal full text search package with a QT GUI + The Recoll personal full text search package is based on a very strong + backend (Xapian), for which it provides an easy to use and feature-rich + interface. + . + Features: + * QT-based GUI. + * Supports the following document types (and their compressed versions): + - Natively: text, html, OpenOffice files, maildir and mailbox + (Mozilla and Thunderbird mail ok) with attachments, gaim log files. + - With external helpers: pdf (pdftotext), postscript (ghostscript), + msword (antiword), excel, ppt (catdoc), rtf (unrtf), + * Powerful query facilities, with boolean searches, phrases, filter on + file types and directory tree. + * Support for multiple charsets. Internal processing and storage uses + Unicode UTF-8. + * Stemming performed at query time (can switch stemming language after + indexing) + * Easy installation. No database daemon, web server or exotic language + necessary. + * An indexer which runs either as a thread inside the GUI or as an + external, cron'able program. + . + Homepage: diff --git a/packaging/debian/debianrclqt4/control-maverick b/packaging/debian/debianrclqt4/control-maverick new file mode 100644 index 00000000..11c159c9 --- /dev/null +++ b/packaging/debian/debianrclqt4/control-maverick @@ -0,0 +1,44 @@ +Source: recoll +Section: x11 +Priority: optional +Maintainer: Jean-Francois Dockes +Build-Depends: debhelper (>= 7), + autotools-dev, + libqt4-dev, + libqtwebkit-dev, + libxapian-dev (>= 1.0.15), + libx11-dev, + libz-dev, + python-dev +Standards-Version: 3.9.3 + +Package: recoll +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Recommends: aspell, python, xdg-utils, xsltproc +Suggests: antiword, catdoc, ghostscript, libimage-exiftool-perl, poppler-utils, + pstotext, python-chm, python-mutagen, unrtf, untex +Description: a personal full text search package with a QT GUI + The Recoll personal full text search package is based on a very strong + backend (Xapian), for which it provides an easy to use and feature-rich + interface. + . + Features: + * QT-based GUI. + * Supports the following document types (and their compressed versions): + - Natively: text, html, OpenOffice files, maildir and mailbox + (Mozilla and Thunderbird mail ok) with attachments, gaim log files. + - With external helpers: pdf (pdftotext), postscript (ghostscript), + msword (antiword), excel, ppt (catdoc), rtf (unrtf), + * Powerful query facilities, with boolean searches, phrases, filter on + file types and directory tree. + * Support for multiple charsets. Internal processing and storage uses + Unicode UTF-8. + * Stemming performed at query time (can switch stemming language after + indexing) + * Easy installation. No database daemon, web server or exotic language + necessary. + * An indexer which runs either as a thread inside the GUI or as an + external, cron'able program. + . + Homepage: diff --git a/packaging/debian/debianrclqt4/copyright b/packaging/debian/debianrclqt4/copyright new file mode 100644 index 00000000..e934b0fd --- /dev/null +++ b/packaging/debian/debianrclqt4/copyright @@ -0,0 +1,219 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: recoll +Upstream-Contact: Jean-Francois Dockes +Source: http://www.lesbonscomptes.com/recoll/ + +Files: * +Copyright: 2005-2012, Jean-Francois Dockes +License: GPL-2+ + +Files: Binc IMAP project (bincimapmime/*) +Copyright: 2002-2005, Andreas Aardal Hanssen +License: GPL-2+ + +Files: filters/rcl* files index/csguess.cpp internfile/htmlparse.cpp +Copyright: 2000-2004, Mikio Hirabayashi +License: GPL-2+ + +Files: filters/rclpython +Copyright: J\xfcrgen Hermann, Mike Brown, Christopher Arndt + +License: GPL-2+ + +Files: internfile/htmlparse.cpp mh_html.cpp +Copyright: 1999-2001, BrightStation PLC +Copyright: 2001, Ananova Ltd +Copyright: 2002-2004, Olly Betts +License: GPL-2+ + +Files: unac/* +Copyright: 2000-2002, Loic Dachary +License: GPL-2+ + +Files: common/* +Copyright: 2004-2005, J.F.Dockes +License: GPL-2+ + +Files: debian/* +Copyright: 2007-2012, Kartik Mistry +License: GPL-2+ + +License: GPL-2+ + This package is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free Software + Foundation; either version 2 of the License, or (at your option) any later + version. + . + This package is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License along with + this package; if not, write to the Free Software Foundation, Inc., 51 Franklin + St, Fifth Floor, Boston, MA 02110-1301 USA + . + On Debian systems, the complete text of the GNU General Public License can be + found in `/usr/share/common-licenses/GPL-2' and + `/usr/share/common-licenses/GPL-3'. + +Files: aspell/* +Copyright: 2001-2002, by Kevin Atkinson +License: LGPL-2+ + +Files: images/text-x-python.png +Copyright: David Vignoni +License: LGPL-2+ + +License: LGPL-2+ + This package is free software; you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) any + later version. + . + This package is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + details. + . + You should have received a copy of the GNU Lesser General Public License along + with this package; if not, write to the Free Software Foundation, Inc., 51 + Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + . + On Debian systems, the complete text of the GNU Lesser General Public License + can be found in `/usr/share/common-licenses/LGPL-2' and + `/usr/share/common-licenses/LGPL-2.1' and `/usr/share/common-licenses/LGPL-3'. + +Files: qtgui/q3richtext_p.h +Copyright: 1992-2007, Trolltech ASA. All rights reserved +License: + This file is part of the Qt3Support module of the Qt Toolkit. + . + This file may be used under the terms of the GNU General Public License + version 2.0 as published by the Free Software Foundation and appearing in the + file LICENSE.GPL included in the packaging of this file. Please review the + following information to ensure GNU General Public Licensing requirements will + be met: http://trolltech.com/products/qt/licenses/licensing/opensource/ + . + If you are unsure which license is appropriate for your use, please review the + following information: + http://trolltech.com/products/qt/licenses/licensing/licensingoverview + or contact the sales department at sales@trolltech.com. + . + In addition, as a special exception, Trolltech gives you certain additional + rights. These rights are described in the Trolltech GPL Exception version 1.0, + which can be found at http://www.trolltech.com/products/qt/gplexception/ and + in the file GPL_EXCEPTION.txt in this package. + . + In addition, as a special exception, Trolltech, as the sole copyright + holder for Qt Designer, grants users of the Qt/Eclipse Integration + plug-in the right for the Qt/Eclipse Integration to link to + functionality provided by Qt Designer and its related libraries. + . + Trolltech reserves all rights not expressly granted herein. + . + Trolltech ASA (c) 2007 + . + This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +Files: common/uproplist.h +Copyright: 1991-2006, Unicode, Inc. +License: + All rights reserved. Distributed under the Terms of Use in + http://www.unicode.org/copyright.html + . + Permission is hereby granted, free of charge, to any person obtaining a copy + of the Unicode data files and any associated documentation (the "Data Files") + or Unicode software and any associated documentation (the "Software") to deal + in the Data Files or Software without restriction, including without + limitation the rights to use, copy, modify, merge, publish, distribute, and/or + sell copies of the Data Files or Software, and to permit persons to whom the + Data Files or Software are furnished to do so, provided that (a) the above + copyright notice(s) and this permission notice appear with all copies of the + Data Files or Software, (b) both the above copyright notice(s) and this + permission notice appear in associated documentation, and (c) there is clear + notice in each modified Data File or in the Software as well as in the + documentation associated with the Data File(s) or Software that the data or + software has been modified. + . + THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD + PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN + THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL + DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE + DATA FILES OR SOFTWARE. + . + Except as contained in this notice, the name of a copyright holder shall not + be used in advertising or otherwise to promote the sale, use or other dealings + in these Data Files or Software without prior written authorization of the + copyright holder. + +Files: utils/md5.* +Copyright: 1991-1992, RSA Data Security, Inc. All rights reserved. +License: + MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm + . + License to copy and use this software is granted provided that it is + identified as the "RSA Data Security, Inc. MD5 Message-Digest Algorithm" in + all material mentioning or referencing this software or this function. + . + License is also granted to make and use derivative works provided that such + works are identified as "derived from the RSA Data Security, Inc. MD5 + Message-Digest Algorithm" in all material mentioning or referencing the + derived work. + . + RSA Data Security, Inc. makes no representations concerning either the + merchantability of this software or the suitability of this software for any + particular purpose. It is provided "as is" without express or implied warranty + of any kind. + . + These notices must be retained in any copies of any part of this documentation + and/or software. + +Files: desktop/xdg-utils-1.0.1/* +Copyright: 2006, Kevin Krammer , + Jeremy White +License: + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + +Files: index/csguess.cpp +Copyright: 2000-2004, Mikio Hirabayashi +License: LGPL-2.1+ + This file is part of QDBM, Quick Database Manager. + . + QDBM is free software; you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by the + Free Software Foundation; either version 2.1 of the License or any later + version. + . + QDBM is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + . + You should have received a copy of the GNU Lesser General Public License + along with QDBM; if not, write to the Free Software Foundation, Inc., + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + . + On Debian systems, the complete text of the GNU Lesser General Public License + can be found in `/usr/share/common-licenses/LGPL-2.1' and + `/usr/share/common-licenses/LGPL-3'. diff --git a/packaging/debian/debianrclqt4/menu b/packaging/debian/debianrclqt4/menu new file mode 100644 index 00000000..405ea82a --- /dev/null +++ b/packaging/debian/debianrclqt4/menu @@ -0,0 +1,2 @@ +?package(recoll):needs="X11" section="Apps/Databases"\ + title="Personal Search Tool" command="/usr/bin/recoll" diff --git a/packaging/debian/debianrclqt4/patches/fix-python-install.patch b/packaging/debian/debianrclqt4/patches/fix-python-install.patch new file mode 100644 index 00000000..4dbd6afd --- /dev/null +++ b/packaging/debian/debianrclqt4/patches/fix-python-install.patch @@ -0,0 +1,15 @@ +Description: Fix python module installation + setup.py --root and --user options interfer with debian wanting a + dist-packages, not site-packages installation for python modules +Author: Jean-Francois Dockes +Last-Update: 2012-03-26 +--- a/recollinstall.in ++++ b/recollinstall.in +@@ -142,5 +142,5 @@ + ${datadir}/recoll/translations/recoll_zh.qm || exit 1 + + +-@NOPYTHON@(cd python/recoll;python setup.py install \ +-@NOPYTHON@ --prefix=${REALPREFIX} ${ROOTFORPYTHON} ${OPTSFORPYTHON}) ++#@NOPYTHON@(cd python/recoll;python setup.py install \ ++#NOPYTHON@ --prefix=${REALPREFIX} ${ROOTFORPYTHON} ${OPTSFORPYTHON}) diff --git a/packaging/debian/debianrclqt4/patches/series b/packaging/debian/debianrclqt4/patches/series new file mode 100644 index 00000000..977d94d2 --- /dev/null +++ b/packaging/debian/debianrclqt4/patches/series @@ -0,0 +1 @@ +fix-python-install.patch diff --git a/packaging/debian/debianrclqt4/recoll.install b/packaging/debian/debianrclqt4/recoll.install new file mode 100644 index 00000000..d3058212 --- /dev/null +++ b/packaging/debian/debianrclqt4/recoll.install @@ -0,0 +1,14 @@ +usr/bin +usr/lib/python*/*-packages/*.egg-info +usr/lib/python*/*-packages/recoll/*.py +usr/lib/python*/*-packages/recoll/*.so +usr/lib/recoll +usr/share/applications +usr/share/icons +usr/share/man +usr/share/pixmaps +usr/share/recoll/doc +usr/share/recoll/examples +usr/share/recoll/filters +usr/share/recoll/images +usr/share/recoll/translations diff --git a/packaging/debian/debianrclqt4/rules b/packaging/debian/debianrclqt4/rules new file mode 100755 index 00000000..49f56e10 --- /dev/null +++ b/packaging/debian/debianrclqt4/rules @@ -0,0 +1,80 @@ +#!/usr/bin/make -f + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) + +CFLAGS = -Wall -g +#LDFLAGS = -Wl,-z,defs + +#build qt4 UI only +export QMAKE=qmake-qt4 + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +config.status: configure + dh_testdir + ./configure CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \ + --host=$(DEB_HOST_GNU_TYPE) \ + --build=$(DEB_BUILD_GNU_TYPE) \ + --mandir=\$${prefix}/share/man \ + --prefix=/usr + +build: build-arch build-indep +build-arch: build-stamp +build-indep: build-stamp +build-stamp: config.status + dh_testdir + $(MAKE) + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp config.log + [ ! -f Makefile ] || $(MAKE) distclean + dh_clean Makefile + +install: + dh_testdir + dh_testroot + dh_prep + dh_installdirs + + $(MAKE) STRIP=ls prefix=$(CURDIR)/debian/tmp/usr install + # Note: the debian rules file uses --prefix instead of --root + # but this ends up generating an error on the ubuntu ppa: + # "Found files in /usr/lib/python2.7/site-packages (must be in + # dist-packages for python2.7)." + (cd python/recoll; python setup.py install \ + --install-layout=deb \ + --root=$(CURDIR)/debian/tmp ) + +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs ChangeLog + dh_installdocs README + dh_installmenu + dh_installman + dh_install --sourcedir=debian/tmp + dh_link + dh_strip + dh_compress + dh_fixperms + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary-indep: build install + +binary: binary-indep binary-arch +.PHONY: build build-arch build-indep clean binary-indep binary-arch binary install diff --git a/packaging/debian/debianrclqt4/source/format b/packaging/debian/debianrclqt4/source/format new file mode 100644 index 00000000..163aaf8d --- /dev/null +++ b/packaging/debian/debianrclqt4/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/packaging/debian/debianrclqt4/watch b/packaging/debian/debianrclqt4/watch new file mode 100644 index 00000000..e707c144 --- /dev/null +++ b/packaging/debian/debianrclqt4/watch @@ -0,0 +1,2 @@ +version=3 +http://www.recoll.org/download.html recoll-(.*)\.tar\.gz diff --git a/packaging/debian/debianunitylens/changelog b/packaging/debian/debianunitylens/changelog new file mode 100644 index 00000000..bdd392d9 --- /dev/null +++ b/packaging/debian/debianunitylens/changelog @@ -0,0 +1,22 @@ +recoll-lens (1.18.2.3257-1~ppaPPAVERS~SERIES1) SERIES; urgency=low + * Updated lens to vers. 1.18.2 + -- Jean-Francois Dockes Mon, 18 Apr 2013 13:31:00 +0100 + +recoll-lens (1.18.1.2997-1~ppaPPAVERS~SERIES1) SERIES; urgency=low + * Updated lens to vers. 1.18.1 + -- Jean-Francois Dockes Mon, 05 Nov 2012 13:31:00 +0100 +recoll-lens (1.17.2.2697-1~ppaPPAVERS~SERIES1) SERIES; urgency=low + * Updated lens to vers. 1.17.1.2697 : display thumbnails when they exist + -- Jean-Francois Dockes Tue, 15 May 2012 13:51:00 +0200 +recoll-lens (1.17.1.2654-1~ppaPPAVERS~SERIES1) SERIES; urgency=low + * Updated lens to vers. 1.17.1.2654 : display/open results for embedded files + -- Jean-Francois Dockes Tue, 27 Mar 2012 16:22:00 +0200 +recoll-lens (1.17.0.2648-1~ppaPPAVERS~SERIES1) SERIES; urgency=low + * Updated lens to vers. 1.17.0.2648 : don't use app shortcut 'a' + -- Jean-Francois Dockes Mon, 26 Mar 2012 22:05:00 +0200 +recoll-lens (1.17.0.2646-1~ppaPPAVERS~SERIES1) SERIES; urgency=low + * Updated lens to vers. 1.17.0.2646 : Unity 5.0/Ubuntu 12.04 compatibility + -- Jean-Francois Dockes Sun, 25 Mar 2012 16:42:00 +0200 +recoll-lens (1.17.0.2645-1~ppaPPAVERS~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.17.0 + -- Jean-Francois Dockes Sun, 25 Mar 2012 16:42:00 +0200 diff --git a/packaging/debian/debianunitylens/compat b/packaging/debian/debianunitylens/compat new file mode 100644 index 00000000..7ed6ff82 --- /dev/null +++ b/packaging/debian/debianunitylens/compat @@ -0,0 +1 @@ +5 diff --git a/packaging/debian/debianunitylens/control b/packaging/debian/debianunitylens/control new file mode 100644 index 00000000..fc556cc6 --- /dev/null +++ b/packaging/debian/debianunitylens/control @@ -0,0 +1,17 @@ +Source: recoll-lens +Section: x11 +Priority: optional +Maintainer: Jean-Francois Dockes +Build-Depends: debhelper (>= 7), + autotools-dev, + recoll, + python +Standards-Version: 3.9.2 + +Package: recoll-lens +Architecture: all +Depends: ${misc:Depends}, python, recoll, unity +Description:Unity Lens for searching the Recoll index. + Allows querying the Recoll index from the Unity Dash, optionally + filtering on file category. +Homepage: http://www.recoll.org diff --git a/packaging/debian/debianunitylens/copyright b/packaging/debian/debianunitylens/copyright new file mode 100644 index 00000000..47810ee9 --- /dev/null +++ b/packaging/debian/debianunitylens/copyright @@ -0,0 +1,20 @@ +This package was debianized by Jean-Francois Dockes on +Sun, 25 Mar 2012 16:31:00 +0200. + +It was downloaded from http://www.recoll.org + +Upstream Author: Jean-Francois Dockes + +Copyright: (C) 2012 Jean-Francois Dockes + +License: GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + +Debian packaging is (C) 2012, Jean-Francois Dockes, same license. + +Derived from Original bliss apps lens by Mikkel Kamstrup Erlandsen: + Copyright 2011, Canonical Ltd + Authored by Mikkel Kamstrup Erlandsen + Distribute under the terms of the GNU General Public License v3 diff --git a/packaging/debian/debianunitylens/docs b/packaging/debian/debianunitylens/docs new file mode 100644 index 00000000..e845566c --- /dev/null +++ b/packaging/debian/debianunitylens/docs @@ -0,0 +1 @@ +README diff --git a/packaging/debian/debianunitylens/rules b/packaging/debian/debianunitylens/rules new file mode 100755 index 00000000..63fef561 --- /dev/null +++ b/packaging/debian/debianunitylens/rules @@ -0,0 +1,51 @@ +#!/usr/bin/make -f + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) + +config.status: configure + dh_testdir + ./configure --host=$(DEB_HOST_GNU_TYPE) \ + --build=$(DEB_BUILD_GNU_TYPE) \ + --mandir=\$${prefix}/share/man \ + --prefix=/usr \ + --sysconfdir=/etc + +build: build-stamp +build-stamp: config.status + dh_testdir + $(MAKE) + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp config.log + [ ! -f Makefile ] || $(MAKE) distclean + dh_clean Makefile + +install: + dh_testdir + dh_testroot + dh_prep + dh_installdirs + $(MAKE) prefix=$(CURDIR)/debian/recoll-lens/usr install + +binary-indep: build install + dh_testdir + dh_testroot + dh_installchangelogs ChangeLog + dh_installdocs README + dh_link + dh_compress + dh_fixperms + dh_installdeb + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep +.PHONY: build clean binary-indep binary-arch binary install diff --git a/packaging/debian/debianunitylens/watch b/packaging/debian/debianunitylens/watch new file mode 100644 index 00000000..708fd568 --- /dev/null +++ b/packaging/debian/debianunitylens/watch @@ -0,0 +1,12 @@ +# Example watch control file for uscan +# Rename this file to "watch" and then you can run the "uscan" command +# to check for upstream updates and more. +# See uscan(1) for format + +# Compulsory line, this is a version 3 file +version=3 + +# Uncomment to examine a Webpage +# +http://www.recoll.org/download.html recoll-lens-(.*)\.tar\.gz + diff --git a/packaging/macports/README.txt b/packaging/macports/README.txt new file mode 100644 index 00000000..90ab3922 --- /dev/null +++ b/packaging/macports/README.txt @@ -0,0 +1,24 @@ +To use/test the port out of the official macports tree: + +- Edit sources.conf /opt/local/etc/macports/sources.conf, and insert a URL + pointing to your local repository before the rsync one: + file:///Users/dockes/projets/fulltext/recoll/packaging/macports + rsync://rsync.macports.org/release/ports [default] + + (inserting before ensures it's used before the macports one) + +- The port should live under category/portname (ie: textproc/ + +- After you create or update your Portfile, use the MacPorts portindex + command in the local repository's directory to create or update the index + of the ports in your local repository. + + %% cd ~/path/to/macports + %% portindex + + Once the local port is added to the PortIndex, it becomes available for + searching or installation as with any other Portfile in the MacPorts + tree + +http://guide.macports.org/#development.local-repositories + diff --git a/packaging/macports/textproc/recoll/Portfile b/packaging/macports/textproc/recoll/Portfile new file mode 100644 index 00000000..475f4316 --- /dev/null +++ b/packaging/macports/textproc/recoll/Portfile @@ -0,0 +1,46 @@ +# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4 +# $Id$ + +PortSystem 1.0 +PortGroup app 1.0 + +name recoll +version 1.18.0 +categories textproc +platforms darwin +license GPL-2+ +maintainers dockes.org:jf openmaintainer + +description Desktop full text search + +long_description Recoll is a desktop search tool based on Xapian + +homepage http://www.recoll.org/ +master_sites ${homepage} + +checksums rmd160 6c7d6be04d1133cb1043241852e171b80b53c1d3 \ + sha256 352a5cd9c6c324c22ee659e8fd088735f99a7707f213369b19faf61983160057 + +depends_lib port:xapian-core \ + port:qt4-mac \ + port:aspell \ + port:libiconv \ + port:zlib + +depends_run port:antiword \ + port:catdoc \ + port:libxslt \ + port:poppler \ + port:unrtf \ + port:unzip + +patchfiles patch-configure.diff \ + patch-sampleconf-mimeview.diff + +configure.args --without-x \ + --disable-x11mon + +build.args CC=${configure.cc} CXX=${configure.cxx} + +# g++-4.2: -E, -S, -save-temps and -M options are not allowed with multiple -arch flags +universal_variant no diff --git a/packaging/macports/textproc/recoll/files/patch-configure.diff b/packaging/macports/textproc/recoll/files/patch-configure.diff new file mode 100644 index 00000000..3f4b3516 --- /dev/null +++ b/packaging/macports/textproc/recoll/files/patch-configure.diff @@ -0,0 +1,12 @@ +diff -r d2ac364b662c src/configure +--- configure Fri Oct 19 16:28:23 2012 +0200 ++++ configure Fri Oct 19 18:49:28 2012 +0200 +@@ -4472,7 +4472,7 @@ + LIBICONV="" + S_LDFLAGS=$LDFLAGS + S_CPPFLAGS=$CPPFLAGS +-for dir in ${libdir} /opt/local/lib /usr/local/lib ;do ++for dir in ${libdir} ;do + CPPFLAGS="$S_CPPFLAGS -I$dir/../include" + + LDFLAGS="$S_LDFLAGS -L$dir" diff --git a/packaging/macports/textproc/recoll/files/patch-sampleconf-mimeview.diff b/packaging/macports/textproc/recoll/files/patch-sampleconf-mimeview.diff new file mode 100644 index 00000000..41b6ca2f --- /dev/null +++ b/packaging/macports/textproc/recoll/files/patch-sampleconf-mimeview.diff @@ -0,0 +1,28 @@ +--- sampleconf/mimeview 2012-10-18 10:47:45.000000000 +0200 ++++ sampleconf/mimeview.mac 2012-10-19 18:46:14.000000000 +0200 +@@ -2,7 +2,8 @@ + + ## ########################################## + # External viewers, launched by the recoll GUI when you click on a result +-# 'edit' link ++# 'Open' link - MAC version ++# On the MAC, we use "open" for everything... + + # Mime types which we should not uncompress if they are found gzipped or + # bzipped because the native viewer knows how to handle. These would be +@@ -16,12 +17,12 @@ + # search string + # - For pages of CHM and EPUB documents where we can choose to open the + # parent document instead of a temporary html file. +-xallexcepts = application/pdf application/postscript application/x-dvi \ +- text/html|gnuinfo text/html|chm text/html|epub ++#xallexcepts = application/pdf application/postscript application/x-dvi \ ++# text/html|gnuinfo text/html|chm text/html|epub + + [view] + # Pseudo entry used if the 'use desktop' preference is set in the GUI +-application/x-all = xdg-open %f ++application/x-all = open %f + + application/epub+zip = ebook-viewer %f + # If you want to open the parent epub document for epub parts instead of diff --git a/packaging/rpm/kio_recoll.spec b/packaging/rpm/kio_recoll.spec new file mode 100644 index 00000000..38626e3e --- /dev/null +++ b/packaging/rpm/kio_recoll.spec @@ -0,0 +1,77 @@ +%define name kio_recoll +%define version 1.17.0 +%define release 0 + +Name: %{name} +Version: %{version} +Release: %{release} + +Summary: KIO slave for the Recoll full text search tool +Source0: http://www.recoll.org/recoll-%{version}.tar.gz +URL: http://www.recoll.org/ +Group: Applications/Databases + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot +License: GPL + +BuildRequires: libkde4-devel zlib-devel xapian-core-devel libuuid-devel +Requires: recoll + +%description +Recoll is a personal full text search package for Linux, FreeBSD and +other Unix systems. It is based on a very strong backend (Xapian), for +which it provides an easy to use, feature-rich, easy administration +interface. + +# --------------------------------------------------------------------------- + +%prep +%setup -q -n recoll-%{version} + +# --------------------------------------------------------------------------- + +%build + +%cmake_kde4 kde/kioslave/kio_recoll +pwd +make %{?_smp_mflags} + +# --------------------------------------------------------------------------- + +%install +rm -rf $RPM_BUILD_ROOT +%makeinstall + +# --------------------------------------------------------------------------- + +%clean +rm -rf $RPM_BUILD_ROOT + +# --------------------------------------------------------------------------- + +%files +%defattr(-,root,root,-) +%{_libdir}/kde4/kio_recoll.so +%{_datadir}/kde4/apps/kio_recoll +%{_datadir}/kde4/apps/kio_recoll/help.html +%{_datadir}/kde4/apps/kio_recoll/welcome.html +%{_datadir}/kde4/services/recoll.protocol +%{_datadir}/kde4/services/recollf.protocol +%if 0%{?suse_version} > 1120 +%dir %{_datadir}/kde4/apps +%dir %{_datadir}/kde4/services +%dir %{_libdir}/kde4 +%endif + +# --------------------------------------------------------------------------- + +%changelog +* Sun Mar 18 2012 Jean-Francois Dockes 1.17.0-0 +- 1.17.0 +* Mon May 02 2011 Jean-Francois Dockes 1.16.2-0 +- 1.16.2 +* Mon May 02 2011 Jean-Francois Dockes 1.15.8-0 +- 1.15.8 +* Sun Mar 06 2011 Jean-Francois Dockes 1.15.5-0 +- Initial spec file for kio + diff --git a/packaging/rpm/recoll.spec b/packaging/rpm/recoll.spec new file mode 100644 index 00000000..b6bbd8ad --- /dev/null +++ b/packaging/rpm/recoll.spec @@ -0,0 +1,136 @@ +%define name recoll +%define version 3152 +%define release 0 + +Name: %{name} +Version: %{version} +Release: %{release} + +Summary: Desktop Full Text Search Tool with a QT Gui +Source0: http://www.recoll.org/%{name}-%{version}.tar.gz +URL: http://www.recoll.org/ +Group: Applications/Databases + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot +License: GPL + +# libxapian-devel or xapian-core-devel? +BuildRequires: libqt4-devel zlib-devel libxapian-devel libuuid-devel python-devel + +%description +Recoll is a personal full text search package for Linux, FreeBSD and +other Unix systems. It is based on a very strong backend (Xapian), for +which it provides an easy to use, feature-rich, easy administration +interface. + +# --------------------------------------------------------------------------- + +%prep +%setup -q + +# --------------------------------------------------------------------------- + +%build + +%configure +make %{?_smp_mflags} + +# --------------------------------------------------------------------------- + +%install +rm -rf $RPM_BUILD_ROOT +%makeinstall +%{__chmod} 0755 $RPM_BUILD_ROOT/%{_libdir}/%{name}/lib%{name}.so.%{version} + +# --------------------------------------------------------------------------- + +%clean +rm -rf $RPM_BUILD_ROOT + +# --------------------------------------------------------------------------- + +%files +%defattr(-,root,root,-) +%{_bindir}/* +%{python_sitearch}/ +%{_libdir}/%{name} +%{_libdir}/%{name}/lib%{name}.so.%{version} +%{_datadir}/%{name} +%{_datadir}/applications/recoll-searchgui.desktop +%{_datadir}/icons/hicolor/48x48/apps/recoll.png +%{_datadir}/pixmaps/recoll.png +%{_mandir}/man1/recoll* +%{_mandir}/man5/recoll* +%if 0%{?suse_version} > 1120 +%dir %{_datadir}/applications +%dir %{_datadir}/pixmaps +%endif +%dir %{_datadir}/icons/hicolor/48x48/apps +%dir %{_datadir}/icons/hicolor/48x48 +%dir %{_datadir}/icons/hicolor + +# --------------------------------------------------------------------------- + +%changelog +* Thu May 17 2012 Jean-Francois Dockes 1.17.2-0 +- Update to release 1.17.2 +* Sun Mar 18 2012 Jean-Francois Dockes 1.17.0-0 +- Update to release 1.17.0 +* Mon Nov 07 2011 Jean-Francois Dockes 1.16.2-0 +- Update to release 1.16.2 +* Mon May 02 2011 Jean-Francois Dockes 1.15.8-0 +- Update to release 1.15.8 +* Fri Mar 04 2011 Jean-Francois Dockes 1.15.5-0 +- Update to release 1.15.2 +* Thu Feb 15 2011 Jean-Francois Dockes 1.15.2-0 +- Update to release 1.15.2 +* Thu Feb 2 2011 Jean-Francois Dockes 1.15.0-0 +- Update to release 1.15.0 +* Thu Oct 28 2010 Jean-Francois Dockes 1.14.3-1 +- Update to release 1.14.3 +* Thu Oct 28 2010 Jean-Francois Dockes 1.14.2-1 +- Rebuilt with a Xapian built with --disable-sse +* Sat Sep 24 2010 Jean-Francois Dockes 1.14.2-0 +- Update to release 1.14.2 +* Thu Apr 14 2010 Jean-Francois Dockes 1.13.04-1 +- Update to release 1.13.04 +* Thu Jan 07 2010 Jean-Francois Dockes 1.13.01-1 +- Update to release 1.13.01 +* Thu Dec 10 2009 Jean-Francois Dockes 1.12.4-1 +- Update to release 1.12.4 +* Wed Oct 28 2009 Jean-Francois Dockes 1.12.3-1 +- Update to release 1.12.3 +* Tue Sep 20 2009 Jean-Francois Dockes 1.12.2-1 +- Update to release 1.12.0 +* Thu Jan 29 2009 Jean-Francois Dockes 1.12.0-1 +- Update to release 1.12.0 +* Mon Oct 13 2008 Jean-Francois Dockes 1.11.0-1 +- Update to release 1.11.0 +* Thu Sep 11 2008 Jean-Francois Dockes 1.10.6-1 +- Update to release 1.10.6 +* Thu May 27 2008 Jean-Francois Dockes 1.10.2-1 +- Update to release 1.10.2 +* Thu Jan 31 2008 Jean-Francois Dockes 1.10.1-1 +- Update to release 1.10.1 +* Wed Nov 21 2007 Jean-Francois Dockes 1.10.0-1 +- Update to release 1.10.0 +* Tue Sep 11 2007 Jean-Francois Dockes 1.9.0-1 +- Update to release 1.9.0 +* Tue Mar 6 2007 Jean-Francois Dockes 1.8.1-1 +- Update to release 1.8.1 +* Mon Jan 15 2007 Jean-Francois Dockes 1.7.5-1 +- Update to release 1.7.5 +* Mon Jan 08 2007 Jean-Francois Dockes 1.7.3-1 +- Update to release 1.7.3 +* Tue Nov 28 2006 Jean-Francois Dockes 1.6.1-1 +- Update to release 1.6.1 +* Mon Oct 2 2006 Jean-Francois Dockes 1.4.3-1 +- Update to release 1.5.3 +* Sun May 7 2006 Jean-Francois Dockes 1.4.3-1 +- Update to release 1.4.3 +* Fri Mar 31 2006 Jean-Francois Dockes 1.3.3-1 +- Update to release 1.3.3 +* Thu Feb 2 2006 Jean-Francois Dockes 1.2.2-1 +- Update to release 1.2.2 +* Thu Jan 10 2006 Jean-Francois Dockes 1.1.0-1 +- Initial packaging diff --git a/packaging/rpm/recollCooker.spec b/packaging/rpm/recollCooker.spec new file mode 100644 index 00000000..9e81496a --- /dev/null +++ b/packaging/rpm/recollCooker.spec @@ -0,0 +1,88 @@ +Summary: Desktop full text search tool with a qt gui +Name: recoll +Version: 1.12.0 +Release: %mkrel 1 +License: GPL +Group: Databases +URL: http://www.recoll.org/ +Source0: http://www.lesbonscomptes.com/recoll/%{name}-%{version}.tar.bz2 +Patch1: %{name}-configure.patch +BuildRequires: libxapian-devel +BuildRequires: libfam-devel +BuildRequires: libqt-devel >= 3.3.7 +BuildRequires: libaspell-devel +Requires: xapian +BuildRoot: %{_tmppath}/%{name}-%{version}--buildroot + +%description +Recoll is a personal full text search tool for Unix/Linux. +It is based on the very strong Xapian backend, for which +it provides an easy to use, feature-rich, easy administration, +QT graphical interface. + +%prep +%setup -q +%patch1 -p0 + +%build +%configure2_5x \ + --with-fam \ + --with-aspell + +%make + +%install +[ "%{buildroot}" != "/" ] && rm -rf %{buildroot} + +%makeinstall_std +desktop-file-install --vendor="" \ + --add-category="X-MandrivaLinux-MoreApplications-Databases" \ + --dir %{buildroot}%{_datadir}/applications %{buildroot}%{_datadir}/applications/* + +%clean +[ "%{buildroot}" != "/" ] && rm -rf %{buildroot} + +%files +%defattr(644,root,root,755) +%doc %{_datadir}/%{name}/doc +%attr(755,root,root) %{_bindir}/%{name}* +%{_datadir}/applications/recoll-searchgui.desktop +%{_datadir}/icons/hicolor/48x48/apps/recoll-searchgui.png +%dir %{_datadir}/%{name} +%dir %{_datadir}/%{name}/examples +%dir %{_datadir}/%{name}/filters +%dir %{_datadir}/%{name}/images +%dir %{_datadir}/%{name}/translations +%{_datadir}/%{name}/examples/mime* +%{_datadir}/%{name}/examples/*.conf +%attr(755,root,root) %{_datadir}/%{name}/examples/rclmon.sh +%attr(755,root,root) %{_datadir}/%{name}/filters/rc* +%{_datadir}/%{name}/filters/xdg-open +%{_datadir}/%{name}/images/*png +%{_mandir}/man1/recoll* +%{_mandir}/man5/recoll* +%{_datadir}/%{name}/translations/*.qm + + +%changelog +* Fri Apr 20 2007 Tomasz Pawel Gajc 1.12.1-1mdv2008.0 ++ Revision: 16093 +- new version +- drop P0 + + + Mandriva + + +* Tue Mar 06 2007 Tomasz Pawel Gajc 1.7.5-2mdv2007.0 ++ Revision: 134128 +- rebuild + +* Tue Jan 30 2007 Tomasz Pawel Gajc 1.7.5-1mdv2007.1 ++ Revision: 115423 +- add patch 1 - fix build on x86_64 +- add patch 0 - fix menu entry +- fix group +- add buildrequires +- set correct bits on files +- Import recoll + diff --git a/packaging/rpm/recollfedora.spec b/packaging/rpm/recollfedora.spec new file mode 100644 index 00000000..005f2d41 --- /dev/null +++ b/packaging/rpm/recollfedora.spec @@ -0,0 +1,93 @@ +Name: recoll +Version: 1.14.3 +Release: 1%{?dist} +Summary: Desktop full text search tool with a qt gui + +Group: Applications/Databases +License: GPL +URL: http://www.recoll.org/ +Source0: http://www.recoll.org/recoll-1.14.3.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +# Not sure how easy it is to find a xapian-core rpm. Will be easier to +# build by hand for many. Run time uses a static link to xapian, doesnt +# depend on libxapian.so +BuildRequires: qt-devel +Requires: qt + +%description +Recoll is a personal full text search package for Linux, FreeBSD and +other Unix systems. It is based on a very strong backend (Xapian), for +which it provides an easy to use, feature-rich, easy administration +interface. + +%prep +%setup -q + +%build +[ -n "$QTDIR" ] || . %{_sysconfdir}/profile.d/qt.sh +%configure +make %{?_smp_mflags} static + +%install +rm -rf $RPM_BUILD_ROOT +%makeinstall + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root,-) +%{_bindir}/* +%{_datadir}/%{name} +%{_datadir}/applications/%{name}-searchgui.desktop +%{_datadir}/icons/hicolor/48x48/apps/%{name}.png +%{_datadir}/pixmaps/%{name}.png +%{_mandir}/man1/recoll* +%{_mandir}/man5/recoll* +%doc + + +%changelog +* Thu Nov 25 2010 Jean-Francois Dockes 1.14.3-1 +- Update to release 1.14.3 +* Sat Sep 24 2010 Jean-Francois Dockes 1.14.2-2 +- Rebuilt with xapian 1.0.21 configured with the -disable-sse flag to avoid the "illegal instruction" problem on older CPUs +* Sat Sep 24 2010 Jean-Francois Dockes 1.14.2-1 +- Update to release 1.14.2 +* Thu Apr 14 2010 Jean-Francois Dockes 1.13.04-1 +- Update to release 1.13.04 +* Thu Jan 07 2010 Jean-Francois Dockes 1.13.01-1 +- Update to release 1.13.01 +* Wed Oct 28 2009 Jean-Francois Dockes 1.12.3-1 +- Update to release 1.12.3 +* Thu Jan 29 2009 Jean-Francois Dockes 1.12.0-1 +- Update to release 1.12.0 +* Mon Oct 13 2008 Jean-Francois Dockes 1.11.0-1 +- Update to release 1.11.0 +* Fri Sep 12 2008 Jean-Francois Dockes 1.10.6-1 +- Update to release 1.10.6 +* Thu May 27 2008 Jean-Francois Dockes 1.10.2-1 +- Update to release 1.10.2 +* Thu Jan 31 2008 Jean-Francois Dockes 1.10.1-1 +- Update to release 1.10.1 +* Wed Nov 21 2007 Jean-Francois Dockes 1.10.0-1 +- Update to release 1.10.0 +* Tue Sep 11 2007 Jean-Francois Dockes 1.9.0-1 +- Update to release 1.9.0 +* Tue Mar 6 2007 Jean-Francois Dockes 1.8.1-1 +- Update to release 1.8.1 +* Mon Jan 15 2007 Jean-Francois Dockes 1.7.5-1 +- Update to release 1.7.5 +* Mon Jan 08 2007 Jean-Francois Dockes 1.7.3-1 +- Update to release 1.7.3 +* Tue Nov 28 2006 Jean-Francois Dockes 1.6.1-1 +- Update to release 1.6.0 +* Mon Nov 20 2006 Jean-Francois Dockes 1.5.11-1 +- Update to release 1.5.11 +* Mon Oct 2 2006 Jean-Francois Dockes 1.5.2-1 +- Update to release 1.5.2 +* Fri Mar 31 2006 Jean-Francois Dockes 1.3.2-1 +- Update to release 1.3.1 +* Wed Feb 1 2006 Jean-Francois Dockes 1.2.0-1 +- Initial packaging diff --git a/packaging/rpm/recollfedora10+.spec b/packaging/rpm/recollfedora10+.spec new file mode 100644 index 00000000..cc5fc7a1 --- /dev/null +++ b/packaging/rpm/recollfedora10+.spec @@ -0,0 +1,185 @@ +Summary: Desktop full text search tool with Qt GUI +Name: recoll +Version: 3151 +Release: 1%{?dist} +Group: Applications/Databases +License: GPLv2+ +URL: http://www.lesbonscomptes.com/recoll/ +Source0: http://www.lesbonscomptes.com/recoll/recoll-%{version}.tar.gz +BuildRequires: qt-devel +BuildRequires: qtwebkit-devel +BuildRequires: python-devel +BuildRequires: zlib-devel +BuildRequires: aspell-devel +BuildRequires: xapian-core-devel +BuildRequires: desktop-file-utils +Requires: xdg-utils +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +%description +Recoll is a personal full text search package for Linux, FreeBSD and +other Unix systems. It is based on a very strong back end (Xapian), for +which it provides an easy to use, feature-rich, easy administration +interface. + +%prep +%setup -q +# remove execute bit +%{__chmod} 0644 utils/{conftree.cpp,conftree.h,debuglog.cpp,debuglog.h} + +%build +export QMAKE=qmake-qt4 +%configure +%{__make} %{?_smp_mflags} + +%install +%{__rm} -rf %{buildroot} +%{__make} install DESTDIR=%{buildroot} STRIP=/bin/true INSTALL='install -p' +%{__chmod} 0755 %{buildroot}/%{_libdir}/%{name}/lib%{name}.so.%{version} + +desktop-file-install --delete-original \ + --dir=%{buildroot}/%{_datadir}/applications \ + %{buildroot}/%{_datadir}/applications/%{name}-searchgui.desktop + +# use /usr/bin/xdg-open +%{__rm} -f %{buildroot}/usr/share/recoll/filters/xdg-open + +%post +touch --no-create %{_datadir}/icons/hicolor +if [ -x %{_bindir}/gtk-update-icon-cache ] ; then + %{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor +fi +if [ -x %{_bindir}/update-desktop-database ] ; then + %{_bindir}/update-desktop-database &> /dev/null +fi +exit 0 + +%postun +touch --no-create %{_datadir}/icons/hicolor +if [ -x %{_bindir}/gtk-update-icon-cache ] ; then + %{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor +fi +if [ -x %{_bindir}/update-desktop-database ] ; then + %{_bindir}/update-desktop-database &> /dev/null +fi +exit 0 + +%clean +%{__rm} -rf %{buildroot} + +%files +%defattr(-, root, root, -) +%doc COPYING ChangeLog README +%{_bindir}/%{name} +%{_bindir}/%{name}index +%{_libdir}/%{name} +%{_libdir}/%{name}/lib%{name}.so.%{version} +%{_datadir}/%{name} +%{_datadir}/applications/%{name}-searchgui.desktop +%{_datadir}/icons/hicolor/48x48/apps/%{name}.png +%{_datadir}/pixmaps/%{name}.png +%{python_sitearch}/Recoll*.egg-info +%{python_sitearch}/recoll/recoll.so +%{python_sitearch}/recoll/rclextract.so +%{python_sitearch}/recoll/__init__.py +%{python_sitearch}/recoll/__init__.pyc +%{_mandir}/man1/%{name}.1* +%{_mandir}/man1/%{name}index.1* +%{_mandir}/man5/%{name}.conf.5* + +%changelog +* Sat Dec 29 2012 J.F. Dockes - 3149 1.19.0 snap +- Snapshot for packaging tests + +* Thu May 17 2012 J.F. Dockes - 1.17.2-1 +- 1.17.2 + +* Sat Mar 31 2012 Terje Rosten - 1.17.1-1 +- 1.17.1 + +* Sun Mar 25 2012 Terje Rosten - 1.17-1 +- 1.17 + +* Tue Feb 28 2012 Fedora Release Engineering - 1.16.2-3 +- Rebuilt for c++ ABI breakage + +* Wed Feb 15 2012 Terje Rosten - 1.16.2-2 +- Add patch to build with gcc 4.7 + +* Wed Feb 01 2012 Terje Rosten - 1.16.2-1 +- 1.16.2 + +* Sat Jan 14 2012 Fedora Release Engineering - 1.16.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Mon Oct 24 2011 Terje Rosten - 1.16.1-2 +- Add patch to fix crash (bz #747472) + +* Tue Oct 18 2011 Terje Rosten - 1.16.1-1 +- 1.16.1 + +* Tue May 24 2011 Terje Rosten - 1.15.8-2 +- add patch from upstream to fix crash. + +* Sun May 08 2011 Terje Rosten - 1.15.8-1 +- 1.15.8 + +* Wed Feb 09 2011 Fedora Release Engineering - 1.14.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Sun Jan 28 2011 Terje Rosten - 1.14.4-1 +- 1.14.4 + +* Mon Nov 15 2010 Terje Rosten - 1.14.2-2 +- Add patch to fix #631704 + +* Sun Nov 7 2010 Terje Rosten - 1.14.2-1 +- 1.14.2 + +* Thu Jul 15 2010 Terje Rosten - 1.13.04-6 +- add patch to build with xapian 1.2 (from J.F. Dockes, thanks) + +* Sat Jul 10 2010 Terje Rosten - 1.13.04-5 +- use system xdg-open +- trim chagenlog + +* Fri Jul 9 2010 Terje Rosten - 1.13.04-4 +- fix some review comments + +* Mon May 10 2010 Terje Rosten - 1.13.04-3 +- use version macro in source url +- don't strip bins, giving non empty debuginfo package +- more explicit file listing +- try to preserve timestamps +- use proper name for spec file +- fix changelog +- license seems to be GPLv2+ +- include some %%doc files +- add buildroot tag +- some source add execute bit set +- explicit enable inotify +- add aspell-devel to bulldreq +- make with _smp_mflags seems to work +- add post scripts +- add patch to build gui with correct flags (ref: 338791) + +* Sun May 9 2010 J.F. Dockes 1.13.04-2 +- bumped the release number to issue new rpms for fc10 + +* Sun May 9 2010 J.F. Dockes 1.13.04 +- updated to recoll release 1.13.04 + +* Fri Feb 12 2010 Terry Duell 1.13.02 +- updated to release 1.13.02 + +* Mon Jan 12 2010 Terry Duell 1.13.01-3 +- updated to fix Fedora desktop-file-install and install icon + +* Sun Jan 10 2010 Jean-Francois Dockes 1.13.01-2 +- updated for recent fedoras: depend on xapian packages, use qt4 + +* Thu Jan 07 2010 Jean-Francois Dockes 1.13.01-1 +- update to release 1.13.01 + +* Wed Feb 1 2006 Jean-Francois Dockes 1.2.0-1 +- initial packaging diff --git a/packaging/rpm/recollmdk.spec b/packaging/rpm/recollmdk.spec new file mode 100644 index 00000000..3b4d1168 --- /dev/null +++ b/packaging/rpm/recollmdk.spec @@ -0,0 +1,130 @@ +%define name recoll +%define version 1.18.1 +%define release %mkrel 1 + +Name: %{name} +Version: %{version} +Release: %{release} + +Summary: Desktop full text search tool with a qt gui +Source0: http://www.recoll.org/%{name}-%{version}.tar.gz +URL: http://www.recoll.org/ +Group: Applications/Databases + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot +License: GPL +BuildRequires: libqt4-devel +BuildRequires: libqtwebkit2.2-devel +BuildRequires: libpython-devel +BuildRequires: libxapian-devel + +%description +Recoll is a personal full text search package for Linux, FreeBSD and +other Unix systems. It is based on a very strong backend (Xapian), for +which it provides an easy to use, feature-rich, easy administration +interface. + +# --------------------------------------------------------------------------- + +%prep +%setup -q + +# --------------------------------------------------------------------------- + +%build +[ -n "$QTDIR" ] || . %{_sysconfdir}/profile.d/60qt4.sh +%configure +make %{?_smp_mflags} + +# --------------------------------------------------------------------------- + +%install +rm -rf $RPM_BUILD_ROOT +%makeinstall + +# --------------------------------------------------------------------------- + +%clean +rm -rf $RPM_BUILD_ROOT + +# --------------------------------------------------------------------------- + +%files +%defattr(-,root,root,-) +%{_bindir}/* +%{_datadir}/applications/recoll-searchgui.desktop +%{_datadir}/icons/hicolor/48x48/apps/recoll.png +%{_datadir}/pixmaps/recoll.png +%{_datadir}/%{name} +%{_mandir}/man1/recoll* +%{_mandir}/man5/recoll* +%{python_sitearch}/Recoll*.egg-info +%{python_sitearch}/recoll.so + +# --------------------------------------------------------------------------- + +%changelog +* Mon Nov 05 2012 Jean-Francois Dockes 1.18.1-1 +- Update to release 1.18.1 +* Thu May 17 2012 Jean-Francois Dockes 1.17.2-1 +- Update to release 1.17.2 +* Mon Nov 07 2011 Jean-Francois Dockes 1.16.2-1 +- Update to release 1.16.2 +* Wed Sep 28 2011 Jean-Francois Dockes 1.16.1-1 +- Update to release 1.16.1 +* Wed Sep 21 2011 Jean-Francois Dockes 1.16.0-1 +- Update to release 1.16.0 +* Tue May 03 2011 Jean-Francois Dockes 1.15.8-1 +- Update to release 1.15.8 +* Fri Mar 04 2011 Jean-Francois Dockes 1.15.5-1 +- Update to release 1.15.5 +* Thu Feb 15 2011 Jean-Francois Dockes 1.15.2-1 +- Update to release 1.15.2 +* Wed Feb 02 2011 Jean-Francois Dockes 1.15.0-1 +- Update to release 1.15.0 +* Thu Nov 25 2010 Jean-Francois Dockes 1.14.3-1 +- Update to release 1.14.2 +* Sat Sep 24 2010 Jean-Francois Dockes 1.14.2-1 +- Update to release 1.14.2 +* Mon Sep 13 2010 Jean-Francois Dockes 1.14.0-1 +- Update to release 1.14.0 +* Thu Apr 14 2010 Jean-Francois Dockes 1.13.04-1 +- Update to release 1.13.01 +* Thu Jan 07 2010 Jean-Francois Dockes 1.13.01-1 +- Update to release 1.13.01 +* Thu Dec 10 2009 Jean-Francois Dockes 1.12.4-1 +- Update to release 1.12.2 +* Mon Oct 19 2009 Jean-Francois Dockes 1.12.2-1 +- Update to release 1.12.2 +* Thu Jan 29 2009 Jean-Francois Dockes 1.12.0-1 +- Update to release 1.12.0 +* Mon Oct 13 2008 Jean-Francois Dockes 1.11.0-1 +- Update to release 1.11.0 +* Thu May 27 2008 Jean-Francois Dockes 1.10.2-1 +- Update to release 1.10.2 +* Thu Jan 31 2008 Jean-Francois Dockes 1.10.1-1 +- Update to release 1.10.1 +* Wed Nov 21 2007 Jean-Francois Dockes 1.10.0-1 +- Update to release 1.10.0 +* Tue Sep 11 2007 Jean-Francois Dockes 1.9.0-1 +- Update to release 1.9.0 +* Tue Mar 6 2007 Jean-Francois Dockes 1.8.1-1 +- Update to release 1.8.1 +* Mon Jan 15 2007 Jean-Francois Dockes 1.7.5-1 +- Update to release 1.7.5 +* Mon Jan 08 2007 Jean-Francois Dockes 1.7.3-1 +- Update to release 1.7.3 +* Tue Nov 28 2006 Jean-Francois Dockes 1.6.1-1 +- Update to release 1.6.1 +* Mon Nov 20 2006 Jean-Francois Dockes 1.5.11-1 +- Update to release 1.5.11 +* Mon Oct 2 2006 Jean-Francois Dockes 1.5.2-1 +- Update to release 1.5.2 +* Sun May 7 2006 Jean-Francois Dockes 1.4.3-1 +- Update to release 1.4.3 +* Fri Mar 31 2006 Jean-Francois Dockes 1.3.3-1 +- Update to release 1.3.3 +* Thu Feb 2 2006 Jean-Francois Dockes 1.2.2-1 +- Update to release 1.2.2 +* Thu Jan 10 2006 Jean-Francois Dockes 1.1.0-1 +- Initial packaging diff --git a/src/COPYING b/src/COPYING new file mode 100644 index 00000000..d60c31a9 --- /dev/null +++ b/src/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/src/ChangeLog b/src/ChangeLog new file mode 100644 index 00000000..dd186d2d --- /dev/null +++ b/src/ChangeLog @@ -0,0 +1,10552 @@ +2010-02-02 15:33 +0100 Jean-Francois Dockes (d11da0283f03 [tip]) + + * src/common/textsplit.cpp, src/common/textsplit.h, + src/query/plaintorich.cpp, src/query/recollq.cpp, + src/query/wasatorcl.cpp, src/rcldb/rcldb.cpp, + src/rcldb/searchdata.cpp, src/rcldb/stoplist.cpp, + src/rcldb/stoplist.h: + cosmetics: use derived class for actual splitter instead of callback + +2010-02-02 10:24 +0100 Jean-Francois Dockes (a8caf709bcd3) + + * src/qt4gui/rclmain.ui, src/qtgui/rclmain.ui, + src/qtgui/rclmain_w.cpp: + QT GUI: define accelerators for res list page movements + +2010-02-02 08:20 +0100 Jean-Francois Dockes (ec31e285a553) + + * src/qtgui/reslist.cpp, src/query/reslistpager.h: + Qt GUI: ensure that new page size is taken into account ASAP (no + need for restarting app) + +2010-02-01 17:51 +0100 Jean-Francois Dockes (db953bb94c7f) + + * src/qt4gui/rclmain.ui, src/qtgui/preview_w.cpp, + src/qtgui/rclmain.ui, src/qtgui/rclmain_w.cpp, + src/qtgui/rclmain_w.h: + QT GUI: add fullscreen mode + +2010-02-01 10:31 +0100 Jean-Francois Dockes (1eda55ae3be9) + + * src/mk/manifest.txt: new file. + * src/excludefile, src/makesrcdist.sh, src/mk/manifest.txt: + Making a source dist: check the new list against old reference + + other checks + +2010-01-31 19:53 +0100 Israel G. Lugo (74d4e25d43c2) + + * src/recollinstall.in: + Install recollq and its manpage when in cmdline mode. Don't install + the recoll.1 manpage when in cmdline mode. + +2010-01-31 19:47 +0100 Jean-Francois Dockes (c88b0ef40512) + + * src/common/autoconfig.h.in: + use 3-arg version of ac_define as the 1-arg one is being obsoleted + +2010-01-31 19:45 +0100 Jean-Francois Dockes (1960435ccb68) + + * src/configure.ac: + Dispense with the x11-monitoring when neither fam nor inotify are + configured + +2010-01-31 19:35 +0100 Jean-Francois Dockes (08e6abfc5fdf) + + * src/configure.ac: + use 3-arg version of ac_define as the 1-arg one is being obsoleted + +2010-01-31 19:34 +0100 Jean-Francois Dockes (c0add9dd8ad4) + + * website/download.html: + none + +2010-01-30 17:47 +0100 Jean-Francois Dockes (5ed138ff2230) + + * src/qtgui/spell_w.cpp, src/qtgui/spell_w.h: + QT GUI: fix small problems in newly native qt4 term expander + +2010-01-30 17:31 +0100 Jean-Francois Dockes (6ecf959a8e01) + + * src/qt4gui/spell.ui: new file. + * src/qt4gui/recollmain.ui: deleted file. + * .hgignore, src/qt4gui/recollmain.ui, src/qt4gui/spell.ui, + src/qt4gui/uifrom3, src/qtgui/spell_w.cpp, src/qtgui/spell_w.h: + QT GUI: converted the qt4 term expander dialog to native qt4 + +2010-01-30 14:09 +0100 Jean-Francois Dockes (df8a91aaff88) + + * src/qt4gui/rclmain.ui: new file. + * .hgignore, src/qt4gui/rclmain.ui, src/qt4gui/uifrom3, + src/qtgui/confgui/confguiindex.h, src/qtgui/rclmain_w.cpp, + src/qtgui/rclmain_w.h: + Qt GUI: made the Qt4 main window native Qt4 (no more use of + Q3MainWindow) + +2010-01-30 08:23 +0100 Jean-Francois Dockes (ed18703563b7) + + * .hgignore, src/ChangeLog, website/BUGS.html, website/devel.html, + website/doc.html, website/download.html, website/index.html.en: + none + +2010-01-30 08:23 +0100 Jean-Francois Dockes (22044a3b2e2c) + + * src/qtgui/rclmain_w.h: + Qt 4.6.1 Uic bug: change qt version test from == to <= as bug still + here in 4.6.2 + +2010-01-30 08:21 +0100 Jean-Francois Dockes (b1cb8c664953) + + * src/common/autoconfig.h.in, src/configure, src/configure.ac, + src/index/recollindex.cpp, src/utils/x11mon.cpp: + Renamed WITHOUT_X11 to DISABLE_X11MON for clarification + +2010-01-30 08:18 +0100 Israel G. Lugo (be03b72e1258) + + * src/configure.ac: + Rename option without-gui to disable-qtgui. New option disable- + x11mon. Separate control of creation of the gui and X11 session + monitoring. + +2010-01-29 19:00 +0100 Jean-Francois Dockes (d95c21312a15) + + * src/kde/kioslave/recoll/CMakeLists.txt: + KIO slave: fixed CMakeList to configure Recoll with --enable-pic + +2010-01-29 17:22 +0100 Jean-Francois Dockes (266941720a99) + + * src/python/README.txt: new file. + * src/configure, src/configure.ac, src/doc/user/usermanual.sgml, + src/lib/Makefile, src/lib/mkMake, src/mk/commondefs, + src/mk/localdefs.in, src/php/00README.txt, src/python/README.txt, + src/python/recoll/setup.py: + Implemented configure --enable-pic flag to build the main lib with + position-independant objects. This avoids having to edit localdefs + by hand to build the new php extension, and voids the need for the + Python module to recompile Recoll source files. + +2010-01-29 15:47 +0100 Jean-Francois Dockes (69c42078b8d3) + + * src/php/00README.txt: new file. + * src/php/00README.txt, src/php/recoll/make.sh, + src/php/recoll/recoll.cpp: + PHP extension by Wenqiang Song : make ready for external use. + - added minimal doc + - fixed build script to work around php/libtool issue + - have the module default to Query Language (instead of AND) + +2010-01-28 18:22 +0100 Jean-Francois Dockes (45e7ec5e16c5) + + * .hgignore, website/usermanual/README-dir.txt: new file. + * packaging/debian/changelog, packaging/debian/compat, + packaging/debian/control, packaging/debian/copyright, + packaging/debian/docs, packaging/debian/menu, + packaging/debian/rules, packaging/debian/watch: deleted file. + * .hgignore, packaging/debian/changelog, packaging/debian/compat, + packaging/debian/control, packaging/debian/copyright, + packaging/debian/docs, packaging/debian/menu, + packaging/debian/rules, packaging/debian/watch, src/makesrcdist.sh, + website/usermanual/README-dir.txt: + svn->mercurial modifications + +2010-01-28 16:13 +0000 convert-repo (e85c82d42126) + + * .hgtags: new file. + * .hgtags: + update tags + +2010-01-26 13:23 +0000 dockes (c0cb63a2702a) + + * last before trial switch to mercurial. really. Yeah + +2010-01-26 13:22 +0000 dockes (c40e044c63dd) + + * tests/chm/chm.sh, tests/chm/chm.txt, tests/ics/ics.sh, + tests/ics/ics.txt, tests/zip/mcKee.zip, tests/zip/zip.sh, + tests/zip/zip.txt, website/download-1.12.html: new file. + * tests/chm/chm.sh, tests/chm/chm.txt, tests/ics/ics.sh, + tests/ics/ics.txt, tests/zip/mcKee.zip, tests/zip/zip.sh, + tests/zip/zip.txt, website/download-1.12.html: + last before trial switch to mercurial. really + +2010-01-26 13:21 +0000 dockes (7918f7073757) + + * website/BUGS.html, website/CHANGES.html, website/download.html, + website/index.html.en, website/index.html.fr: + last before trial switch to mercurial + +2010-01-26 07:06 +0000 dockes (0b5ec08c2ba2) + + * src/INSTALL, src/README: + + +2010-01-26 07:06 +0000 dockes (f6a420527382) + + * src/VERSION: + 1.13.02 + +2010-01-26 06:50 +0000 dockes (b223f221578a [RECOLL_1_13_02]) + + * src/doc/user/usermanual.sgml: + clarified --prefix et al + +2010-01-25 20:43 +0000 dockes (7d69ae778654) + + * src/qt4gui/ui_rclmain.h-4.5: new file. + * src/qt4gui/ui_rclmain.h-4.5, src/qtgui/rclmain_w.h: + use older ui include file under qt 4.6.1, the one its uic generates + is broken + +2010-01-25 11:08 +0000 dockes (e2e5a1dd802d) + + * src/php/recoll/recollq.h: deleted file. + * src/php/recoll/recollq.h: + not used? + +2010-01-25 11:06 +0000 dockes (1683475297c1) + + * src/php/recoll/config.m4, src/php/recoll/make.sh, + src/php/recoll/php_recoll.h, src/php/recoll/recoll.cpp, + src/php/recoll/recollq.h, src/php/sample/shell.php: new file. + * src/php/recoll/config.m4, src/php/recoll/make.sh, + src/php/recoll/php_recoll.h, src/php/recoll/recoll.cpp, + src/php/recoll/recollq.h, src/php/sample/shell.php: + initial import from W. Song + +2010-01-20 07:42 +0000 dockes (4df8ebfbb72d) + + * packaging/rpm/recoll.spec, packaging/rpm/recollfedora.spec, + packaging/rpm/recollfedora10.spec, packaging/rpm/recollmdk.spec: + change mail address + +2010-01-10 10:18 +0000 dockes (1c62f24a5ca4) + + * packaging/rpm/recollfedora.spec: + updated for fc12: depend on xapian-core, use qt4 + +2010-01-07 15:20 +0000 dockes (01eb4176400c) + + * src/query/recollq.cpp: + add option to print abstracts + +2010-01-07 08:42 +0000 dockes (a41bbccff862) + + * src/VERSION: + 1.13.01 + +2010-01-07 08:41 +0000 dockes (dde7b27846ef) + + * src/Makefile.in: + distclean removes rclexecm.pyc + +2010-01-07 08:34 +0000 dockes (324bea9902a4) + + * src/qtgui/main.cpp, src/qtgui/rclmain_w.cpp, src/qtgui/rclmain_w.h, + src/qtgui/ssearch_w.cpp, src/qtgui/ssearch_w.h: + moved initial db open and possible message boxes from main.cpp to + rclmain_w.cpp first post-init job to avoid random crashes apparently + related to the dialogs being created before app.exec(). Exact cause + not certain, but crashes gone... + +2010-01-07 08:29 +0000 dockes (0629e02f12fe) + + * src/rcldb/searchdata.cpp: + field values were not used in case term expansion was not performed + (phrase or capitalized term) + +2010-01-06 13:29 +0000 dockes (e10bbaeefab5) + + * src/kde/kioslave/recoll/htmlif.cpp, src/query/recollq.cpp, + src/query/xadump.cpp: + adapt kio and recollq to the new internfile interface + +2010-01-06 13:06 +0000 dockes (0f2378be2603) + + * src/kde/kioslave/recoll/CMakeLists.txt: + add libz + +2010-01-05 15:00 +0000 dockes (1ca577447878) + + * src/utils/closefrom.cpp, src/utils/fstreewalk.cpp, + src/utils/fstreewalk.h, tests/Maildir/Maildir.txt, + tests/andor/andor.sh, tests/andor/andor.txt, tests/cjk/cjk.sh, + tests/cjk/cjk.txt, tests/mail/mail.txt, tests/msword/msword.txt, + tests/txt/txt.txt, website/download.html: + 1.13 tests txt mods + solaris port (FNM_LEADING_DIR) + +2010-01-05 13:27 +0000 dockes (0ab6a2dfc2c3) + + * website/BUGS.html, website/CHANGES.html, website/copydocs, + website/credits.html, website/download.html, website/features.html, + website/index.html.en, website/index.html.fr: + web update for 1.13 + +2010-01-05 07:14 +0000 dockes (cb08729afcd2) + + * src/INSTALL, src/README: + + +2010-01-05 07:14 +0000 dockes (a1ba9ba640f7) + + * src/VERSION, src/common/rclconfig.cpp, src/doc/man/recoll.conf.5, + src/doc/user/usermanual.sgml: + 1.13.00: fixed doc ortographic typos + +2009-12-31 08:20 +0000 dockes (c2ae39772161) + + * src/INSTALL, src/README: + + +2009-12-31 08:15 +0000 dockes (851e5b82f3d5) + + * src/VERSION: + 1.13.0 + +2009-12-31 08:15 +0000 dockes (04512125010e) + + * src/recollinstall.in: + handle --without-gui config inside recollinstall.in + +2009-12-20 14:31 +0000 dockes (2cbda11286c5) + + * src/configure, src/configure.ac: + typo in WIHOUT_X11 + +2009-12-17 20:23 +0000 dockes (95eb8a010525) + + * src/doc/user/usermanual.sgml: + There was an error in the mimemap format in the config exemple + +2009-12-14 10:33 +0000 dockes (1e774739395e) + + * src/INSTALL, src/README: + + +2009-12-14 10:33 +0000 dockes (49cdfe826199) + + * src/ChangeLog: + snapshot du jour + +2009-12-14 10:23 +0000 dockes (437be900fa14) + + * src/doc/user/Makefile, src/doc/user/usermanual.sgml: + add --enable-camelcase doc + fix typo in doc Makefile comment + +2009-12-14 10:10 +0000 dockes (009ed00592fd) + + * src/common/autoconfig.h.in, src/common/textsplit.cpp, src/configure, + src/configure.ac: + add --enable-camelcase option to configure + +2009-12-14 09:46 +0000 dockes (1fabd736d16f) + + * src/doc/user/usermanual.sgml, src/index/fsindexer.cpp: + use : as separator in localfields value before parsing as confsimple + +2009-12-14 09:44 +0000 dockes (2b09276dedc8) + + * src/utils/circache.cpp: + fix pointer casting to make gcc happy + +2009-12-14 09:44 +0000 dockes (4ee0085fa59e) + + * src/sampleconf/fields: + typo: keywords->keyword in prefixes + +2009-12-14 09:43 +0000 dockes (87b2caa6ec9c) + + * src/filters/rclabw, src/filters/rcldjvu, src/filters/rcldoc, + src/filters/rcldvi, src/filters/rclflac, src/filters/rclgaim, + src/filters/rclid3, src/filters/rclkwd, src/filters/rcllyx, + src/filters/rclman, src/filters/rclogg, src/filters/rclopxml, + src/filters/rclpdf, src/filters/rclppt, src/filters/rclps, + src/filters/rclpurple, src/filters/rclrtf, src/filters/rclscribus, + src/filters/rclsiduxman, src/filters/rclsoff, src/filters/rclsvg, + src/filters/rcltex, src/filters/rcltext, src/filters/rclwpd, + src/filters/rclxls, src/filters/recfiltcommon: + iscmd: supplement -x with -d test not a dir + +2009-12-14 07:26 +0000 dockes (b8eceb552b3e) + + * src/INSTALL, src/README: + + +2009-12-14 07:25 +0000 dockes (16dc2e0ed9fa) + + * src/makesrcdist.sh: + + +2009-12-14 07:13 +0000 dockes (e5aae08ee26d) + + * src/Makefile.in: + + +2009-12-14 07:07 +0000 dockes (c66c86594b35) + + * src/VERSION: + + +2009-12-14 07:06 +0000 dockes (7229a431d686) + + * src/makesrcdist.sh: + use different release name for beta versions + +2009-12-13 21:40 +0000 dockes (e0033b00df1e) + + * src/doc/user/usermanual.sgml: + anacron + +2009-12-13 16:16 +0000 dockes (e148cd3f92c1) + + * src/sampleconf/recoll.conf.in: + add localfields example + +2009-12-13 16:13 +0000 dockes (89ebf91076d8) + + * src/common/textsplit.cpp, src/internfile/mh_html.cpp, + src/query/plaintorich.cpp, src/utils/base64.cpp: + small amd64 fixes: 64 bits size_type, signed chars + +2009-12-08 07:43 +0000 dockes (026aa6df356f) + + * src/doc/man/recollindex.1, src/doc/man/recollq.1: + clarify stemming options + +2009-12-08 07:43 +0000 dockes (0c698007055e) + + * src/query/recollq.cpp: + add option -s to select stemming language + +2009-12-08 07:42 +0000 dockes (fcb5bca6adf8) + + * src/rcldb/stemdb.cpp: + traces + +2009-12-07 18:47 +0000 dockes (6631c645c9df) + + * src/index/recollindex.cpp: + use setpriority() to be a nice indexer + +2009-12-07 17:43 +0000 dockes (76128d18110e [RECOLL_1_13_0, RECOLL_20091214, RECOLL_1_13_01, RECOLL_1_13_00]) + + * src/qtgui/preview_w.cpp, src/qtgui/preview_w.h: + reimplemented Q3TextDocument::find() to be like the qt3 version + +2009-12-07 14:32 +0000 dockes (b02171ea3078) + + * src/qtgui/preview_w.cpp: + switch preview qtextedit format back to plain text after loading so + that selections copy plain text not html + +2009-12-07 13:27 +0000 dockes (3d37dc441cc9) + + * src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, src/rcldb/searchdata.cpp: + Term expansion: handle field issues inside rcldb::termmatch, + ensuring that we take the field name into account for all + expansions. Ensures that File Name searches and filename: query + language searches work the same, + overall better consistency + +2009-12-07 13:24 +0000 dockes (fe625ef90a21) + + * src/configure.ac: + Israel G. Lugo: make sure that only one of inotify or FAM gets + enabled, giving priority to inotify. + +2009-11-30 10:04 +0000 dockes (a75cd5af7c71) + + * src/VERSION, src/internfile/mimehandler.cpp, + src/kde/kioslave/recoll/htmlif.cpp, src/qtgui/preview_w.cpp, + src/qtgui/preview_w.h, src/query/plaintorich.cpp, + src/query/plaintorich.h, src/sampleconf/mimeconf: + add
 tag to text/plain translated into qt html to preserve
+	indentation. Removes need for rcltext (which did just this). Allow
+	specifying any text/xxx as internal (allows having specific editor
+	but no filter)
+
+2009-11-30 06:34 +0000  dockes    (c4fdcda7df89)
+
+	* src/index/rclmonrcv.cpp:
+	compile either fam or inotify not both
+
+2009-11-29 15:00 +0000  dockes    (6b9ed9ae0949)
+
+	* src/doc/user/usermanual.sgml:
+	change defaults for big text params
+
+2009-11-29 12:56 +0000  dockes    (a04f5006fe89)
+
+	* src/sampleconf/recoll.conf.in:
+	add new 1.13 variables and defaults
+
+2009-11-28 09:15 +0000  dockes    (4b56c2068545)
+
+	* src/internfile/mh_execm.cpp, src/internfile/mh_text.cpp,
+	src/query/docseqhist.cpp, src/utils/circache.cpp:
+	new glibc missing includes
+
+2009-11-28 08:45 +0000  dockes    (012b4b63e260)
+
+	* src/qtgui/i18n/recoll_de.ts, src/qtgui/i18n/recoll_fr.ts,
+	src/qtgui/i18n/recoll_it.ts, src/qtgui/i18n/recoll_ru.ts,
+	src/qtgui/i18n/recoll_tr.ts, src/qtgui/i18n/recoll_uk.ts,
+	src/qtgui/i18n/recoll_xx.ts:
+	
+
+2009-11-28 08:14 +0000  dockes    (b0e70a20b7f1)
+
+	* src/index/beaglequeue.cpp, src/internfile/mh_text.cpp,
+	src/qtgui/confgui/confguiindex.cpp, src/qtgui/guiutils.cpp:
+	set defaults usedesktoprefs, maxtext 20mb pagesz 1000k webcache 40m
+
+2009-11-28 08:11 +0000  dockes    (ed3a574543f5)
+
+	* src/doc/user/usermanual.sgml:
+	clean-up + documented 1.13 new features
+
+2009-11-28 06:39 +0000  dockes    (c45a690ee533)
+
+	* src/internfile/mh_mbox.cpp:
+	converted iostream to stdio because of mysterious read errors at the
+	last position in the offsets file
+
+2009-11-27 13:23 +0000  dockes    (7fa95cd57200)
+
+	* src/internfile/mh_mail.cpp:
+	add cnf(maildefcharset) to set specific mail default charset (mainly
+	for readpst extracts which are utf-8 but have no charset set)
+
+2009-11-27 13:11 +0000  dockes    (385305ee1820)
+
+	* src/rcldb/rcldb.cpp:
+	loglevel
+
+2009-11-27 13:08 +0000  dockes    (8cc1ab099807)
+
+	* src/internfile/mh_mbox.cpp:
+	include sys/stat
+
+2009-11-27 12:41 +0000  dockes    (c3039d4eab51)
+
+	* src/internfile/Filter.h, src/internfile/internfile.cpp,
+	src/internfile/mh_mbox.cpp, src/internfile/mh_mbox.h,
+	src/internfile/mimehandler.h, src/query/docseqhist.cpp:
+	implemented a cache for mbox message header offsets
+
+2009-11-27 07:07 +0000  dockes    (a1a92e0952dd)
+
+	* src/internfile/mh_mbox.cpp:
+	Support From "bla bla" (quoted) From lines
+
+2009-11-27 07:00 +0000  dockes    (64f09e3ad5a7)
+
+	* src/internfile/internfile.cpp:
+	update test driver
+
+2009-11-26 14:03 +0000  dockes    (023c2a8520de)
+
+	* src/aspell/rclaspell.cpp, src/aspell/rclaspell.h,
+	src/qtgui/reslist.cpp, src/qtgui/reslist.h, src/query/docseq.h,
+	src/query/docseqdb.cpp, src/query/docseqdb.h,
+	src/query/reslistpager.cpp, src/query/reslistpager.h,
+	src/rcldb/rcldb.cpp, src/rcldb/searchdata.cpp,
+	src/rcldb/searchdata.h:
+	suggest alternate spellings if no results
+
+2009-11-26 13:52 +0000  dockes    (4270622aa3e0)
+
+	* src/qtgui/guiutils.cpp:
+	suppressed core dump at exit on unexisting config
+
+2009-11-26 07:17 +0000  dockes    (f02bf2b6ea30)
+
+	* src/rcldb/rcldb.cpp, src/rcldb/rclquery.cpp, src/rcldb/rclquery.h:
+	use only match terms to build doc abstract, not all query terms
+	(might save a little effort)
+
+2009-11-26 07:15 +0000  dockes    (90776b10554c)
+
+	* src/qtgui/rclmain_w.cpp:
+	spell tool must be created even is USE_ASPELL is undefined
+
+2009-11-25 14:37 +0000  dockes    (e3faedd237b8)
+
+	* src/utils/md5.cpp:
+	suppress unused parm warning
+
+2009-11-25 11:07 +0000  dockes    (f8011c9579c8)
+
+	* packaging/debian/debiankio/changelog,
+	packaging/debian/debiankio/compat,
+	packaging/debian/debiankio/control,
+	packaging/debian/debiankio/copyright,
+	packaging/debian/debiankio/dirs, packaging/debian/debiankio/docs,
+	packaging/debian/debiankio/rules, packaging/debian/debiankio/watch,
+	packaging/debian/debianrecoll/changelog,
+	packaging/debian/debianrecoll/compat,
+	packaging/debian/debianrecoll/control,
+	packaging/debian/debianrecoll/copyright,
+	packaging/debian/debianrecoll/docs,
+	packaging/debian/debianrecoll/menu,
+	packaging/debian/debianrecoll/rules,
+	packaging/debian/debianrecoll/watch: new file.
+	* packaging/debian/debiankio/changelog,
+	packaging/debian/debiankio/compat,
+	packaging/debian/debiankio/control,
+	packaging/debian/debiankio/copyright,
+	packaging/debian/debiankio/dirs, packaging/debian/debiankio/docs,
+	packaging/debian/debiankio/rules, packaging/debian/debiankio/watch,
+	packaging/debian/debianrecoll/changelog,
+	packaging/debian/debianrecoll/compat,
+	packaging/debian/debianrecoll/control,
+	packaging/debian/debianrecoll/copyright,
+	packaging/debian/debianrecoll/docs,
+	packaging/debian/debianrecoll/menu,
+	packaging/debian/debianrecoll/rules,
+	packaging/debian/debianrecoll/watch:
+	added debian dir to build kio-recoll
+
+2009-11-24 10:25 +0000  dockes    (87057b6e2cba)
+
+	* src/kde/kioslave/recoll/CMakeLists.txt:
+	execute minimum recoll config inside cmakelists to create rclversion
+	and autoconfig includes
+
+2009-11-24 10:24 +0000  dockes    (a6e854084ffb)
+
+	* src/utils/smallut.h:
+	gcc4
+
+2009-11-23 19:51 +0000  dockes    (42785e498950)
+
+	* src/index/beaglequeue.cpp:
+	store beagle fields before interning the file
+
+2009-11-23 17:38 +0000  dockes    (aaccb7e813a8)
+
+	* src/qtgui/preview_w.cpp:
+	if text is empty, display fields by default
+
+2009-11-23 17:37 +0000  dockes    (129654f22b3c)
+
+	* src/internfile/internfile.cpp:
+	in FileInterner::FileInterner(Rcl::Doc) (query), declare the
+	BeagleQueue static so that the cache persists between FileInterner
+	objects
+
+2009-11-23 17:36 +0000  dockes    (2292efb797b4)
+
+	* src/internfile/internfile.h:
+	comments
+
+2009-11-23 16:12 +0000  dockes    (a7ed9c85c313)
+
+	* src/query/dynconf.cpp, src/query/dynconf.h: new file.
+	* src/query/history.cpp, src/query/history.h: deleted file.
+	* src/lib/Makefile, src/lib/mkMake, src/qtgui/guiutils.cpp,
+	src/qtgui/main.cpp, src/qtgui/preview_w.cpp,
+	src/qtgui/rclmain_w.cpp, src/qtgui/recoll.h,
+	src/query/docseqhist.cpp, src/query/docseqhist.h,
+	src/query/dynconf.cpp, src/query/dynconf.h, src/query/history.cpp,
+	src/query/history.h:
+	revamped history feature to be udi-based while supporting old format
+
+2009-11-23 16:11 +0000  dockes    (8a494a30e71f)
+
+	* src/rcldb/rcldb.cpp:
+	set udi in meta from getDoc(udi)
+
+2009-11-23 16:10 +0000  dockes    (c432dcb83d8f)
+
+	* src/index/beaglequeue.cpp, src/utils/circache.cpp,
+	src/utils/circache.h:
+	Beaglequeue: simplify index from cache now that udi entries are
+	unique in cache
+
+2009-11-22 17:27 +0000  dockes    (112515ddfd1b)
+
+	* src/index/beaglequeue.cpp, src/utils/circache.cpp,
+	src/utils/circache.h:
+	only keep the latest entry for a given udi in the cache
+
+2009-11-22 17:26 +0000  dockes    (c47346e105ac)
+
+	* src/utils/smallut.h:
+	added tempbuf class
+
+2009-11-21 13:36 +0000  dockes    (d497773469db)
+
+	* src/internfile/mimehandler.cpp, src/qtgui/rclmain_w.cpp:
+	allow setting attrs on mimeview defs, factorize some code with
+	mhExecFactory
+
+2009-11-21 13:35 +0000  dockes    (77639dc8a584)
+
+	* src/common/rclconfig.cpp, src/common/rclconfig.h:
+	added valueSplitAttributes() method
+
+2009-11-21 11:18 +0000  dockes    (50c2c8c764bb)
+
+	* src/internfile/mimehandler.cpp:
+	use a confsimple to parse the additional filter attributes
+
+2009-11-21 11:14 +0000  dockes    (ba1b73290998)
+
+	* src/qtgui/guiutils.h:
+	add ipath to default paragraph format
+
+2009-11-18 15:32 +0000  dockes    (132c512aacde)
+
+	* src/kde/kioslave/recoll/CMakeLists.txt:
+	added beaglequeue/circache to kio build because of internfile
+	dependancy
+
+2009-11-18 14:27 +0000  dockes    (d1587dd98290)
+
+	* src/utils/circache.cpp:
+	warning
+
+2009-11-18 14:26 +0000  dockes    (812296ef15d8)
+
+	* src/rcldb/rclquery.cpp:
+	query::getrescnt() would only work once following 1.13 mods (affects
+	python api)
+
+2009-11-18 14:25 +0000  dockes    (cc1924f2d969)
+
+	* src/python/samples/recollq.py:
+	
+
+2009-11-18 14:03 +0000  dockes    (e60f229404a4)
+
+	* src/python/recoll/pyrecoll.cpp:
+	add some casts to avoid kwargs const warnings
+
+2009-11-18 13:46 +0000  dockes    (0e29576743b0)
+
+	* src/index/rclmonrcv.cpp:
+	typo
+
+2009-11-18 12:33 +0000  dockes    (da553b8d1e93)
+
+	* src/filters/rclchm, src/filters/rclexecm.py, src/filters/rclics,
+	src/internfile/mh_execm.cpp, src/internfile/mh_execm.h:
+	handle REFILTERROR in execm
+
+2009-11-18 10:26 +0000  dockes    (f28392bec173)
+
+	* src/internfile/mh_mail.cpp, src/rcldb/rcldb.cpp:
+	mh_mail: use truncate_to_word to avoid cutting an utf8 char. rcldb:
+	logdeb text_to_word errors
+
+2009-11-18 08:24 +0000  dockes    (c9b8704e7ffa)
+
+	* src/index/beaglequeue.cpp, src/mk/FreeBSD:
+	beaglequeue fully functional, small fixes remaining?
+
+2009-11-18 07:57 +0000  dockes    (0f863324690f)
+
+	* src/index/beaglequeue.cpp:
+	ok with compression
+
+2009-11-18 07:46 +0000  dockes    (7925e58ac0d9)
+
+	* src/utils/circache.cpp, src/utils/circache.h:
+	compression works
+
+2009-11-17 14:52 +0000  dockes    (122d9a523dc7)
+
+	* src/utils/circache.cpp, src/utils/circache.h:
+	circache ok
+
+2009-11-16 16:18 +0000  dockes    (88021fc84abd)
+
+	* src/internfile/internfile.cpp:
+	Lack of error checking after have_document() in preview case could
+	lead to looping, and cancellation was not checked to make things
+	worse
+
+2009-11-16 16:16 +0000  dockes    (22e0540453bc)
+
+	* src/configure:
+	--without-gui
+
+2009-11-16 16:12 +0000  dockes    (d3e16fb089de)
+
+	* src/qt4gui/recoll.pro.in:
+	stupid mistake in previous cosmetic change
+
+2009-11-16 16:11 +0000  dockes    (a422d8f6d6fd)
+
+	* src/index/fsindexer.cpp:
+	make very sure ~/.beagle is in the skippedPaths
+
+2009-11-16 16:10 +0000  dockes    (effac8983ab5)
+
+	* src/internfile/mh_mail.cpp:
+	reason msg
+
+2009-11-16 12:50 +0000  dockes    (bfc0df6ab067)
+
+	* src/Makefile.in, src/common/autoconfig.h.in, src/configure.ac,
+	src/index/Makefile, src/mk/localdefs.in, src/utils/x11mon.cpp:
+	add --without-gui configure option
+
+2009-11-15 16:41 +0000  dockes    (81edb2c4cef7)
+
+	* src/index/beaglequeue.cpp, src/index/fsindexer.cpp,
+	src/utils/circache.cpp:
+	catch cancel exceptions cast by internfile()
+
+2009-11-15 14:39 +0000  dockes    (4539869b5761)
+
+	* src/index/fsindexer.h, src/qtgui/rclmain_w.cpp,
+	src/query/reslistpager.cpp, src/rcldb/rcldoc.cpp,
+	src/rcldb/rcldoc.h, src/sampleconf/fields:
+	changed apptag field name to rclaptg
+
+2009-11-15 14:18 +0000  dockes    (b41678f5ad12)
+
+	* src/qt4gui/recoll.pro.in, src/qtgui/recoll.pro.in:
+	add -ldl -lX11 for binutils-gold
+
+2009-11-15 08:38 +0000  dockes    (3801ee9a51c6)
+
+	* src/common/rclconfig.cpp, src/common/rclconfig.h,
+	src/index/fsindexer.cpp, src/index/rclmonrcv.cpp,
+	src/utils/fstreewalk.cpp, src/utils/fstreewalk.h,
+	src/utils/smallut.cpp, src/utils/smallut.h:
+	rationalized how we recompute things on setkeydir. recoll_noindex
+	and skippedNames can now be changed at any point in the tree
+
+2009-11-14 11:34 +0000  dockes    (a922eac98d16)
+
+	* src/index/rclmonprc.cpp:
+	monitor: accumulate mods during 30S before indexing
+
+2009-11-14 10:29 +0000  dockes    (ea134de640e0)
+
+	* src/index/beaglequeue.cpp, src/index/beaglequeue.h,
+	src/index/fsindexer.cpp, src/index/indexer.cpp,
+	src/index/rclmonrcv.cpp, src/index/recollindex.cpp,
+	src/utils/circache.cpp:
+	monitor the beagle queue
+
+2009-11-14 10:25 +0000  dockes    (42421f027b94)
+
+	* src/filters/rclchm, src/filters/rclics, src/filters/rcltext:
+	emit helpernotfound
+
+2009-11-14 08:21 +0000  dockes    (93baac7e87ac)
+
+	* src/index/beaglequeue.cpp, src/index/beaglequeue.h,
+	src/index/fsindexer.cpp, src/index/fsindexer.h,
+	src/index/indexer.cpp, src/index/indexer.h,
+	src/index/recollindex.cpp, src/index/recollindex.h,
+	src/rcldb/rcldb.cpp, src/rcldb/rcldb.h:
+	beaglequeue indexFiles
+
+2009-11-13 13:29 +0000  dockes    (7d0c4d7a917c)
+
+	* src/index/beaglequeue.cpp, src/index/beaglequeue.h,
+	src/internfile/internfile.cpp, src/internfile/internfile.h,
+	src/qtgui/confgui/confguiindex.cpp, src/qtgui/preview_w.cpp,
+	src/qtgui/preview_w.h, src/qtgui/rclmain_w.cpp,
+	src/rcldb/rcldoc.cpp, src/rcldb/rcldoc.h, src/rcldb/rclquery.cpp,
+	src/sampleconf/fields:
+	1st beagle version with index/preview working
+
+2009-11-13 09:08 +0000  dockes    (71f8c28cbeba)
+
+	* src/qtgui/idxthread.cpp:
+	integrate beaglequeueindexer for indexing. Work remains for
+	indexfiles() at least
+
+2009-11-13 09:08 +0000  dockes    (dda5121a7c45)
+
+	* src/utils/circache.cpp, src/utils/circache.h:
+	integrate beaglequeueindexer for indexing. Work remains for
+	indexfiles() at least
+
+2009-11-13 09:07 +0000  dockes    (364d46e16faf)
+
+	* src/index/beaglequeue.cpp, src/index/beaglequeue.h,
+	src/index/fsindexer.cpp, src/index/fsindexer.h,
+	src/index/indexer.cpp, src/index/indexer.h,
+	src/index/recollindex.cpp:
+	integrate beaglequeueindexer for indexing. Work remains for
+	indexfiles() at least
+
+2009-11-13 09:04 +0000  dockes    (7e32466740a7)
+
+	* src/configure.ac:
+	Israel G. Lugo: give priority to the user's PATH when looking for
+	qmake (fixes detecting the wrong qmake when more than one exists).
+
+2009-11-13 09:01 +0000  dockes    (3503bfba6b70)
+
+	* src/rcldb/rcldoc.cpp, src/rcldb/rcldoc.h:
+	make dump const
+
+2009-11-13 09:01 +0000  dockes    (b4c8330037e7)
+
+	* src/lib/Makefile, src/lib/mkMake:
+	add beaglequeue, fsindexer
+
+2009-11-13 08:58 +0000  dockes    (63ee628229e7)
+
+	* src/qtgui/confgui/confgui.cpp, src/qtgui/confgui/confgui.h,
+	src/qtgui/confgui/confguiindex.cpp,
+	src/qtgui/confgui/confguiindex.h:
+	add panel for beaglequeue parameters + arrange so that a checkbox
+	can enable/disable other params
+
+2009-11-13 08:54 +0000  dockes    (5edf24b7552e)
+
+	* src/sampleconf/fields:
+	comments
+
+2009-11-13 08:15 +0000  dockes    (a829fce15458)
+
+	* src/filters/rclchm, src/filters/rclexecm.py, src/filters/rclics,
+	src/filters/rclimg, src/filters/rclzip, src/internfile/mh_execm.cpp:
+	dont use 0-sized doc to mean eof now
+
+2009-11-11 18:09 +0000  dockes    (21b6ba1309c7)
+
+	* src/filters/rclimg:
+	send mimetype
+
+2009-11-11 18:07 +0000  dockes    (7f2a7a7214fb)
+
+	* src/internfile/mh_execm.cpp:
+	set mimetype for the non-ipath case
+
+2009-11-11 07:47 +0000  dockes    (75f9d10cf2f3)
+
+	* src/index/fsindexer.cpp, src/index/fsindexer.h,
+	src/index/indexer.cpp, src/index/indexer.h,
+	src/index/recollindex.cpp:
+	moved common db code from fsindexer to confindexer
+
+2009-11-10 18:11 +0000  dockes    (e079c8ce273f)
+
+	* src/index/beaglequeue.cpp, src/index/beaglequeue.h: new file.
+	* src/index/beaglequeue.cpp, src/index/beaglequeue.h:
+	
+
+2009-11-10 18:10 +0000  dockes    (698e70099ec0)
+
+	* src/index/fsindexer.cpp, src/index/fsindexer.h,
+	src/index/recollindex.h: new file.
+	* src/index/fsindexer.cpp, src/index/fsindexer.h,
+	src/index/indexer.cpp, src/index/indexer.h, src/index/rclmonprc.cpp,
+	src/index/recollindex.cpp, src/index/recollindex.h:
+	dbindexer->fsindexer, split into its own file
+
+2009-11-10 17:42 +0000  dockes    (ccf674432104)
+
+	* src/ChangeLog:
+	
+
+2009-11-10 17:42 +0000  dockes    (065c40b8964d)
+
+	* src/index/recollindex.cpp:
+	small cleanups and add option to call beaglequeue
+
+2009-11-10 17:41 +0000  dockes    (d4ff290d1615)
+
+	* src/index/indexer.cpp:
+	small cleanups and comments
+
+2009-11-10 17:39 +0000  dockes    (00c5f0c09ef9)
+
+	* src/index/indexer.h:
+	comments
+
+2009-11-10 17:38 +0000  dockes    (02b632bcbeca)
+
+	* src/index/rclmonrcv.cpp:
+	remove indexer.h include
+
+2009-11-10 17:38 +0000  dockes    (ba2255ec8b62)
+
+	* src/common/rclinit.h:
+	comment
+
+2009-11-10 17:37 +0000  dockes    (915bf923b8da)
+
+	* src/utils/fstreewalk.cpp, src/utils/fstreewalk.h:
+	add nocanon option
+
+2009-11-10 17:34 +0000  dockes    (29b753cd1f78)
+
+	* src/utils/circache.cpp, src/utils/circache.h:
+	intermediary checkpoint (things work, no index, no compression)
+
+2009-11-10 17:32 +0000  dockes    (16e0d5965055)
+
+	* src/rcldb/rcldb.cpp, src/rcldb/rcldb.h:
+	removed the useless keep_updated flag
+
+2009-11-10 17:31 +0000  dockes    (75878eb08588)
+
+	* src/rcldb/rcldoc.cpp, src/rcldb/rcldoc.h:
+	added dump function
+
+2009-11-10 17:30 +0000  dockes    (35b43d00db47)
+
+	* src/query/recollq.cpp:
+	added explicit flag parameter to Internfile constructeur for helping
+	with beagle queue integration
+
+2009-11-10 17:29 +0000  dockes    (75255bb8d7a0)
+
+	* src/sampleconf/fields:
+	add dc:description as keywords alias
+
+2009-11-10 09:39 +0000  dockes    (ee6104876da9)
+
+	* src/internfile/internfile.cpp, src/internfile/internfile.h,
+	src/kde/kioslave/recoll/htmlif.cpp, src/qtgui/preview_w.cpp:
+	added explicit flag parameter to Internfile constructeur for helping
+	with beagle queue integration
+
+2009-11-09 09:26 +0000  dockes    (7c3c0eed036b)
+
+	* src/utils/circache.cpp, src/utils/circache.h: new file.
+	* src/lib/Makefile, src/lib/mkMake, src/utils/Makefile,
+	src/utils/circache.cpp, src/utils/circache.h:
+	circache
+
+2009-11-09 09:26 +0000  dockes    (877bb76973aa)
+
+	* src/utils/conftree.cpp, src/utils/conftree.h:
+	add some constness
+
+2009-11-06 11:33 +0000  dockes    (944e0b9d1d53)
+
+	* src/internfile/internfile.cpp, src/internfile/internfile.h,
+	src/qtgui/rclmain_w.cpp, src/qtgui/reslist.cpp, src/qtgui/reslist.h,
+	src/query/docseq.h, src/query/docseqdb.cpp, src/query/docseqdb.h,
+	src/query/docseqhist.cpp, src/query/docseqhist.h,
+	src/utils/fileudi.h, src/utils/pathut.cpp, src/utils/pathut.h:
+	allow opening parent/enclosing doc with native editor in reslist
+
+2009-11-06 11:26 +0000  dockes    (1d9a5530d7bf)
+
+	* src/sampleconf/mimeview:
+	added okular as chm viewer
+
+2009-11-04 13:52 +0000  dockes    (226d88ccb6c1)
+
+	* src/qtgui/confgui/confgui.cpp, src/qtgui/confgui/confgui.h,
+	src/qtgui/confgui/confguiindex.cpp:
+	store file names using local8bit qstring conversions
+
+2009-11-04 13:43 +0000  dockes    (b57bd81d3e8e)
+
+	* src/utils/fstreewalk.h:
+	comment
+
+2009-11-04 13:42 +0000  dockes    (2037ae120bcf)
+
+	* src/utils/cancelcheck.h:
+	comment
+
+2009-10-31 09:00 +0000  dockes    (3ad7f6c85ce2)
+
+	* src/internfile/mh_mail.cpp, src/internfile/mh_mail.h:
+	extract msgid + generate abstract at start of txt, excluding headers
+
+2009-10-31 08:59 +0000  dockes    (9e7ae93bd35b)
+
+	* src/utils/mimeparse.cpp:
+	change rfc2047 mail header decoding (=?iso-xx stuff) so that a start
+	of encoding section can be recognized even not after white space
+
+2009-10-30 19:05 +0000  dockes    (eb9ed35f9fe0)
+
+	* src/qtgui/rclmain_w.cpp:
+	allow substituting all doc fields in viewer command line
+
+2009-10-30 19:04 +0000  dockes    (d8065c96ceae)
+
+	* src/qtgui/viewaction.ui:
+	clarify using desktop defs in action choice dialog
+
+2009-10-30 10:16 +0000  dockes    (4a744302db21)
+
+	* src/common/rclconfig.cpp, src/common/rclconfig.h,
+	src/qtgui/rclmain_w.cpp, src/query/reslistpager.cpp,
+	src/sampleconf/fields:
+	Allow setting fields in fs subtree. Use for an application tag used
+	for starting a specialized viewer
+
+2009-10-30 08:59 +0000  dockes    (bdd54ae7a182)
+
+	* src/VERSION, src/common/rclconfig.h, src/index/indexer.cpp,
+	src/index/indexer.h, src/internfile/mimehandler.cpp,
+	src/rcldb/rcldb.cpp, src/rcldb/rclquery.cpp, src/utils/conftree.cpp,
+	src/utils/conftree.h:
+	Allow fields local to a subtree to be set in the configuration
+
+2009-10-30 08:53 +0000  dockes    (aa8c442a67ec)
+
+	* src/configure.ac:
+	use /bin/sh to execute recollinstall instead of making it executable
+
+2009-10-30 08:53 +0000  dockes    (0faf1f6ccf5f)
+
+	* src/Makefile.in, src/configure:
+	use /bin/sh to execute recollinstall instead of making it executable
+
+2009-10-29 18:11 +0000  dockes    (2338d18226f2)
+
+	* src/qtgui/uiprefs.ui:
+	move the use-desktop-preference checkbox close to the choose editors
+	button
+
+2009-10-29 18:10 +0000  dockes    (4b6f29c1e3c3)
+
+	* src/sampleconf/mimeconf:
+	
+
+2009-10-29 18:09 +0000  dockes    (2de2f1804086)
+
+	* src/common/rclconfig.cpp, src/common/rclconfig.h:
+	support wildcard filtering in getConfNames() + implement config
+	checking function in test driver
+
+2009-10-29 18:08 +0000  dockes    (78c287d1d2da)
+
+	* src/utils/conftree.cpp, src/utils/conftree.h:
+	bugfix: if last line ended with backslash, entry was ignored. new
+	function: filter by wildcard expr in getNames()
+
+2009-10-29 13:44 +0000  dockes    (26ae4011727a)
+
+	* src/sampleconf/mimeconf, src/sampleconf/mimemap:
+	chm+comments
+
+2009-10-29 13:34 +0000  dockes    (178273f496f2)
+
+	* src/sampleconf/recoll.conf.in:
+	comment
+
+2009-10-28 13:08 +0000  dockes    (9435a56f1962)
+
+	* src/qtgui/reslist.cpp, src/qtgui/reslist.h:
+	fix signal/slot type mismatch for setSortParams
+
+2009-10-26 13:19 +0000  dockes    (2a369661c70c)
+
+	* src/qtgui/uiprefs_w.cpp:
+	disable app-choosing button when use-desktop-prefs is activated
+
+2009-10-26 11:16 +0000  dockes    (8cdb908a253d)
+
+	* src/qtgui/rclmain_w.cpp:
+	qt4 sometimes doesnt display the status bar if its not created in
+	init
+
+2009-10-26 10:00 +0000  dockes    (758f39788d0c)
+
+	* src/qtgui/rclmain_w.cpp, src/qtgui/rclmain_w.h:
+	arrange to send pageup/down and shift-home to the reslist
+
+2009-10-24 15:02 +0000  dockes    (7d98b5c330c1)
+
+	* src/rcldb/rcldb.cpp, src/rcldb/rcldb_p.h, src/rcldb/rclquery.cpp,
+	src/rcldb/rclquery_p.h:
+	unified retrying for databaseModified errors
+
+2009-10-24 11:00 +0000  dockes    (9d49d2991eed)
+
+	* src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, src/rcldb/rcldb_p.h,
+	src/rcldb/rclquery.cpp:
+	renamed fields for clarity
+
+2009-10-24 06:37 +0000  dockes    (1486d8f630fc)
+
+	* src/filters/rclchm, src/filters/rclics, src/filters/rclzip:
+	cleanup
+
+2009-10-24 06:17 +0000  dockes    (6a8a9821c17c)
+
+	* src/filters/rclexecm.py, src/filters/rclzip:
+	use python zipfile
+
+2009-10-23 16:45 +0000  dockes    (436e03b2f0c1)
+
+	* src/filters/rclchm:
+	comments
+
+2009-10-23 16:03 +0000  dockes    (be653b19dd28)
+
+	* src/filters/rclchm: new file.
+	* src/filters/rclchm:
+	first working
+
+2009-10-23 16:03 +0000  dockes    (99a819213c2a)
+
+	* src/filters/rclzip:
+	comment
+
+2009-10-22 17:28 +0000  dockes    (e5f16d6d23db)
+
+	* src/doc/user/usermanual.sgml:
+	%(fldname) specs
+
+2009-10-22 17:27 +0000  dockes    (3e37f6aac6c5)
+
+	* src/doc/user/docbook.css:
+	new freebsd version
+
+2009-10-22 17:27 +0000  dockes    (1535c07dd8a6)
+
+	* src/sampleconf/mimeconf:
+	ics
+
+2009-10-22 17:16 +0000  dockes    (deaef902d7e3)
+
+	* src/sampleconf/mimeconf:
+	add ics + more programming languages
+
+2009-10-22 17:16 +0000  dockes    (98009bab1e61)
+
+	* src/sampleconf/mimemap:
+	add ics + more programming languages
+
+2009-10-22 17:13 +0000  dockes    (bf9a0c5eeb5c)
+
+	* src/filters/rclics: new file.
+	* src/filters/rclexecm.py, src/filters/rclics:
+	initial support for icalendar splitting
+
+2009-10-22 12:24 +0000  dockes    (f97b91cb8153)
+
+	* src/filters/rclexecm.py: new file.
+	* src/filters/rclexecm.py, src/filters/rclzip:
+	made rclexecm a class in a separate module
+
+2009-10-22 11:58 +0000  dockes    (9361ab690eec)
+
+	* src/filters/rclzip:
+	fully extracted common code
+
+2009-10-21 21:00 +0000  dockes    (39b12da95a76)
+
+	* src/filters/rclzip: new file.
+	* src/filters/rclzip:
+	initial
+
+2009-10-21 20:59 +0000  dockes    (ef17d33ea782)
+
+	* website/download.html:
+	1.12.2
+
+2009-10-21 12:02 +0000  dockes    (2baccf2235b6)
+
+	* src/qtgui/rclmain_w.cpp, src/query/docseqdb.cpp,
+	src/query/docseqdb.h, src/query/reslistpager.cpp,
+	src/query/reslistpager.h, src/utils/Makefile, src/utils/smallut.cpp,
+	src/utils/smallut.h:
+	fix queryBuildAbstract option functionality. Allow substituting
+	%(fieldname) in reslist paragraph format
+
+2009-10-21 12:00 +0000  dockes    (30a02a6bada8)
+
+	* src/internfile/mimehandler.h:
+	warning
+
+2009-10-21 11:58 +0000  dockes    (ebc82bec7704)
+
+	* src/kde/kioslave/recoll/CMakeLists.txt, src/utils/closefrom.cpp:
+	linux
+
+2009-10-21 11:32 +0000  dockes    (1cc979921a0d)
+
+	* src/internfile/mh_text.cpp, src/utils/closefrom.cpp:
+	gcc43+linux compile
+
+2009-10-21 07:48 +0000  dockes    (72168c28c9bb)
+
+	* src/makestaticdist.sh:
+	cleanup .svn directories
+
+2009-10-21 07:24 +0000  dockes    (a550073d34d4)
+
+	* src/makestaticdist.sh:
+	get makestaticdist to work with qt4
+
+2009-10-21 07:15 +0000  dockes    (e44497010880)
+
+	* packaging/debian/changelog, packaging/debian/control,
+	packaging/debian/menu, packaging/debian/rules,
+	packaging/rpm/recollmdk.spec, tests/lyx/lyx.txt:
+	1.12.2 release fixes
+
+2009-10-21 07:15 +0000  dockes    (cecbbb5e3c23)
+
+	* website/pics/mario.png, website/pics/smile.png: new file.
+	* website/mario.png, website/smile.png: deleted file.
+	* website/BUGS.html, website/CHANGES.html, website/devel.html,
+	website/download.html, website/features.html, website/index.html.en,
+	website/index.html.fr, website/mario.png, website/pics/index.html,
+	website/pics/mario.png, website/pics/recoll5-thumb.png,
+	website/pics/recoll5.png, website/pics/smile.png, website/smile.png:
+	1.12.2 release
+
+2009-10-19 16:20 +0000  dockes    (b2a9b0c5fc47)
+
+	* src/lib/Makefile, src/lib/mkMake:
+	add closefrom
+
+2009-10-19 16:19 +0000  dockes    (5b3c0f9438a9)
+
+	* src/README, src/doc/man/recoll.conf.5, src/doc/man/recollindex.1,
+	src/doc/user/usermanual.sgml, src/filters/rclsvg:
+	explict(e)ly errors again
+
+2009-10-19 10:51 +0000  dockes    (70ed5ded2a5e)
+
+	* src/qtgui/uiprefs.ui:
+	move the use-desktop-preference checkbox close to the choose editors
+	button
+
+2009-10-19 07:30 +0000  dockes    (d25d7050d60c)
+
+	* src/rcldb/rcldb.cpp, src/rcldb/rclquery.cpp:
+	catch xapian exceptions in 2 more places.
+
+2009-10-18 07:57 +0000  dockes    (cbcf397757a1)
+
+	* src/qtgui/reslist.cpp:
+	reslist: rightclick popup would not work inside table
+
+2009-10-17 06:38 +0000  dockes    (cb08cd6b282b)
+
+	* src/Makefile.in, src/index/recollindex.cpp, src/qtgui/main.cpp,
+	src/qtgui/rclmain_w.cpp, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h:
+	rclversion.h must not include xapian.h. Replace with
+	Rcl::version_string()
+
+2009-10-15 15:50 +0000  dockes    (6d01b54d3cf5)
+
+	* src/qtgui/preview_w.cpp:
+	compile with qt3
+
+2009-10-15 12:32 +0000  dockes    (749d93d72709)
+
+	* src/index/rclmonprc.cpp:
+	only call x11IsAlive from the main thread
+
+2009-10-15 12:32 +0000  dockes    (7339dd810b4c)
+
+	* src/utils/Makefile, src/utils/conftree.cpp, src/utils/execmd.cpp:
+	small linux include and makefile adjustments
+
+2009-10-14 12:25 +0000  dockes    (4bfcb9f6483a)
+
+	* src/utils/execmd.cpp, src/utils/execmd.h:
+	m_cancelRequest->m_killRequest to avoid confusion with cancelcheck +
+	close descriptors before exec
+
+2009-10-14 12:24 +0000  dockes    (834b841865f0)
+
+	* src/internfile/mh_exec.cpp:
+	no timeout if filtermaxseconds is -1
+
+2009-10-14 12:23 +0000  dockes    (894b94a986c2)
+
+	* src/qtgui/confgui/confguiindex.cpp, src/sampleconf/recoll.conf.in:
+	add filtermaxseconds to config
+
+2009-10-14 12:22 +0000  dockes    (eec367c78b29)
+
+	* src/utils/closefrom.cpp, src/utils/closefrom.h: new file.
+	* src/utils/closefrom.cpp, src/utils/closefrom.h:
+	
+
+2009-10-14 06:21 +0000  dockes    (48782c4d99bd)
+
+	* src/filters/rclimg, src/index/recollindex.cpp,
+	src/internfile/mh_execm.cpp, src/internfile/mh_execm.h,
+	src/sampleconf/mimeconf, src/sampleconf/mimemap,
+	src/utils/execmd.cpp:
+	execm first working zip version
+
+2009-10-13 17:32 +0000  dockes    (ac8388c11bcb)
+
+	* src/utils/idfile.cpp, src/utils/idfile.h:
+	allow working on memory string
+
+2009-10-13 16:37 +0000  dockes    (25cd49e5f3b2)
+
+	* src/internfile/mh_exec.cpp:
+	comments
+
+2009-10-13 12:22 +0000  dockes    (f8f821415451)
+
+	* src/internfile/mh_exec.cpp:
+	handle interrupt requests and set timeout on execs
+
+2009-10-13 12:21 +0000  dockes    (0ec65928f00f)
+
+	* src/utils/execmd.cpp:
+	use process group to control/kill execd processes
+
+2009-10-13 12:20 +0000  dockes    (ad3f88e0578e)
+
+	* src/sampleconf/recoll.conf.in:
+	added loop.ps to skippedFiles
+
+2009-10-12 16:27 +0000  dockes    (2d5321b8e32c)
+
+	* src/common/rclinit.cpp:
+	also block USR1 USR2
+
+2009-10-09 13:58 +0000  dockes    (9ef52b9903d4)
+
+	* src/internfile/mh_execm.cpp, src/internfile/mh_execm.h: new file.
+	* src/filters/rclimg, src/internfile/mh_exec.cpp,
+	src/internfile/mh_exec.h, src/internfile/mh_execm.cpp,
+	src/internfile/mh_execm.h, src/internfile/mimehandler.cpp,
+	src/lib/Makefile, src/lib/mkMake, src/sampleconf/mimeconf:
+	execm persistent filters
+
+2009-10-09 13:57 +0000  dockes    (94243b4ecca6)
+
+	* src/common/textsplit.cpp:
+	process camelCase
+
+2009-10-09 13:34 +0000  dockes    (9129980cfe0e)
+
+	* src/utils/execmd.cpp, src/utils/execmd.h, src/utils/netcon.cpp,
+	src/utils/netcon.h:
+	Execmd: added count parameter to receive(), and new getline()
+	function Netcon: fix receive() to properly handle the case where
+	there is initially data in the line buffer
+
+2009-10-04 13:25 +0000  dockes    (f81cdfd36952)
+
+	* src/utils/readfile.cpp:
+	
+
+2009-10-04 13:24 +0000  dockes    (fe1c983b582e)
+
+	* src/mk/commondefs:
+	remove -I/usr/local/include from commondefs!
+
+2009-09-30 15:53 +0000  dockes    (401a53878320)
+
+	* src/internfile/mh_text.cpp:
+	dont set ipath for the first page in text files to avoid dual
+	records for files under the page size
+
+2009-09-30 15:45 +0000  dockes    (1ce015f48d3a)
+
+	* src/internfile/mh_text.cpp, src/internfile/mh_text.h,
+	src/qtgui/confgui/confguiindex.cpp, src/sampleconf/recoll.conf.in,
+	src/utils/readfile.cpp, src/utils/readfile.h:
+	implemented paged text files
+
+2009-09-29 15:58 +0000  dockes    (b288f2d22754)
+
+	* src/internfile/mh_text.cpp, src/qtgui/confgui/confguiindex.cpp,
+	src/sampleconf/recoll.conf.in:
+	textfilemaxmbs
+
+2009-09-29 15:58 +0000  dockes    (a41ae31020fa)
+
+	* src/utils/execmd.cpp:
+	loglevels
+
+2009-09-29 14:49 +0000  dockes    (89ab6fcd4bef)
+
+	* src/utils/netcon.cpp, src/utils/netcon.h: new file.
+	* src/utils/netcon.cpp, src/utils/netcon.h:
+	
+
+2009-09-29 14:49 +0000  dockes    (254aad5cdd17)
+
+	* src/utils/netcon.cpp, src/utils/netcon.h: deleted file.
+	* src/utils/netcon.cpp, src/utils/netcon.h:
+	
+
+2009-09-29 08:47 +0000  dockes    (302c0dd0dfa0)
+
+	* src/qtgui/preview_w.cpp, src/qtgui/preview_w.h:
+	got rid of the preview tabdata array
+
+2009-09-29 07:48 +0000  dockes    (f65d40e808c6)
+
+	* src/qtgui/preview_w.cpp, src/qtgui/preview_w.h:
+	make print a slot in the editor, not the preview
+
+2009-09-28 18:19 +0000  dockes    (5c03bd6d7d00)
+
+	* src/doc/user/usermanual.sgml, src/qtgui/preview_w.cpp,
+	src/qtgui/preview_w.h:
+	Preview printing
+
+2009-09-28 17:53 +0000  dockes    (564c8022205f)
+
+	* src/utils/execmd.cpp:
+	adjust log levels
+
+2009-09-26 09:30 +0000  dockes    (231f842cfa1a)
+
+	* src/utils/netcon.cpp, src/utils/netcon.h: new file.
+	* src/lib/Makefile, src/lib/mkMake, src/utils/execmd.cpp,
+	src/utils/execmd.h, src/utils/netcon.cpp, src/utils/netcon.h:
+	execmd uses netcon
+
+2009-09-26 09:05 +0000  dockes    (3883518b318e)
+
+	* src/rcldb/rclquery.cpp:
+	dont abort on get_mset exception
+
+2009-08-13 06:34 +0000  dockes    (71e1aa73c37e)
+
+	* src/utils/refcntr.h:
+	add release() method
+
+2009-08-13 06:32 +0000  dockes    (75501a297534)
+
+	* src/index/indexer.cpp, src/internfile/internfile.cpp,
+	src/internfile/internfile.h, src/internfile/mimehandler.cpp,
+	src/internfile/mimehandler.h:
+	xattrs: make them work with non-text files. Use ctime for up to date
+	checks
+
+2009-08-13 06:29 +0000  dockes    (45721e5ace5a)
+
+	* src/common/autoconfig.h.in:
+	allow choosing the "file" command from configure
+
+2009-08-13 06:28 +0000  dockes    (817bbeb36f34)
+
+	* src/qtgui/rclmain_w.cpp:
+	Make sure db is open at all times (caused problems when sorting
+	query started from the command line)
+
+2009-08-13 06:27 +0000  dockes    (05b809bbb7d0)
+
+	* src/qtgui/preview_w.cpp:
+	
+
+2009-08-13 06:26 +0000  dockes    (b5b49b39dc8a)
+
+	* src/configure, src/configure.ac, src/index/mimetype.cpp:
+	allow choosing the "file" command from configure
+
+2009-08-13 06:24 +0000  dockes    (902b5dc99b09)
+
+	* src/ChangeLog:
+	
+
+2009-08-13 06:23 +0000  dockes    (3ee15899a458)
+
+	* src/sampleconf/recoll.conf.in:
+	add indexedmimetypes to sample file
+
+2009-07-02 13:26 +0000  dockes    (a0f0be9546bb)
+
+	* src/filters/rclman:
+	
+
+2009-07-02 10:26 +0000  dockes    (82d09aa4b256)
+
+	* src/index/indexer.cpp, src/qtgui/rclmain_w.cpp:
+	improve periodic indexing status reporting and timer processing
+
+2009-07-02 06:17 +0000  dockes    (b8cdf0ab08a9)
+
+	* src/qtgui/main.cpp, src/rcldb/searchdata.h, src/utils/mimeparse.cpp,
+	src/utils/mimeparse.h:
+	explicitely->explicitly
+
+2009-06-26 09:25 +0000  dockes    (98153ad73366)
+
+	* src/filters/rclman, src/sampleconf/mimemap:
+	improve man page handling
+
+2009-06-22 16:41 +0000  dockes    (5003fe921249)
+
+	* src/qtgui/main.cpp, src/qtgui/rclmain_w.cpp, src/qtgui/rclmain_w.h:
+	moved periodic timer control from main.cpp to rclmain_w.cpp
+
+2009-06-22 15:25 +0000  dockes    (a420554375c5)
+
+	* src/qtgui/idxthread.cpp, src/qtgui/main.cpp,
+	src/qtgui/rclmain_w.cpp:
+	use proper locking/sleeping object for idx thread sync
+
+2009-06-22 08:58 +0000  dockes    (d4fdc68fab47)
+
+	* src/filters/rclman:
+	use groff html output!
+
+2009-06-22 08:57 +0000  dockes    (01a166e9f9e7)
+
+	* src/index/indexer.cpp:
+	debug trace
+
+2009-06-01 06:32 +0000  dockes    (272067257953)
+
+	* src/qtgui/main.cpp:
+	fixed bug in handling remaining arguments as question pieces
+
+2009-05-29 06:28 +0000  dockes    (091488ca1543)
+
+	* src/bincimapmime/convert.h, src/utils/base64.cpp:
+	change strchr() return parameter to const for new libc
+
+2009-05-25 08:59 +0000  dockes    (6231c20d3e23)
+
+	* src/filters/rcllyx:
+	bug report from d.prost: spaces and accents in lyx file names
+
+2009-05-04 08:06 +0000  dockes    (20f1f5746b3e)
+
+	* src/qtgui/guiutils.cpp, src/qtgui/preview_w.h,
+	src/qtgui/spell_w.cpp:
+	gcc44
+
+2009-04-27 11:49 +0000  dockes    (ba8db4a9fcf6)
+
+	* packaging/rpm/recollfedora10.spec: new file.
+	* packaging/rpm/recollfedora10.spec:
+	
+
+2009-04-27 11:42 +0000  dockes    (85e5723e268a)
+
+	* tests/cjk/cjk.txt: new file.
+	* tests/cjk/cjk.txt:
+	
+
+2009-04-27 09:40 +0000  dockes    (a7cf61bb3e6a)
+
+	* website/BUGS.html, website/download.html, website/index.html.en,
+	website/index.html.fr:
+	1.12 release changes
+
+2009-04-27 09:15 +0000  dockes    (eb2d1da3c9ee)
+
+	* website/BUGS.html:
+	
+
+2009-04-27 08:05 +0000  dockes    (c26df870665c)
+
+	* src/utils/md5.cpp, src/utils/readfile.cpp:
+	gcc 4.4 includes fixes
+
+2009-04-27 08:03 +0000  dockes    (5e892d5aa963)
+
+	* src/python/recoll/setup.py:
+	pathhash->fileudi
+
+2009-02-24 18:30 +0000  dockes    (d897d4f128ce)
+
+	* src/qtgui/guiutils.cpp, src/qtgui/guiutils.h,
+	src/qtgui/rclmain_w.cpp, src/qtgui/uiprefs.ui,
+	src/qtgui/uiprefs_w.cpp:
+	implement option to display the catg filter as a toolbar combobox
+
+2009-02-23 07:57 +0000  dockes    (5eb3b91eca18)
+
+	* src/qtgui/i18n/recoll_ru.ts, src/qtgui/i18n/recoll_uk.ts:
+	new ru/uk translations from Michael
+
+2009-02-06 16:49 +0000  dockes    (0946c032bea8)
+
+	* src/utils/refcntr.h:
+	make RefCntr(x*) explicit
+
+2009-02-06 16:48 +0000  dockes    (1f50a0e7a3ac)
+
+	* src/internfile/mimehandler.cpp:
+	comments
+
+2009-02-05 14:35 +0000  dockes    (1eb8b93ed85b)
+
+	* src/utils/execmd.cpp, src/utils/execmd.h:
+	1st execcmd cleanup
+
+2009-01-30 13:27 +0000  dockes    (55d06dfa9b04)
+
+	* src/qtgui/i18n/recoll_de.ts, src/qtgui/i18n/recoll_fr.ts,
+	src/qtgui/i18n/recoll_it.ts, src/qtgui/i18n/recoll_ru.ts,
+	src/qtgui/i18n/recoll_tr.ts, src/qtgui/i18n/recoll_uk.ts,
+	src/qtgui/i18n/recoll_xx.ts, src/qtgui/reslist.cpp:
+	small pbs with reslist translations
+
+2009-01-30 11:43 +0000  dockes    (af28dae4f689)
+
+	* src/INSTALL, src/README:
+	
+
+2009-01-30 11:43 +0000  dockes    (581a47458445 [RECOLL_1_12_0])
+
+	* website/BUGS.html, website/CHANGES.html:
+	1.12.0?
+
+2009-01-30 11:42 +0000  dockes    (fd6cc84e76ce)
+
+	* src/doc/user/usermanual.sgml:
+	1.12 manual
+
+2009-01-30 10:22 +0000  dockes    (f683b3907dd1)
+
+	* src/qtgui/i18n/recoll_de.ts, src/qtgui/i18n/recoll_fr.ts,
+	src/qtgui/i18n/recoll_it.ts, src/qtgui/i18n/recoll_ru.ts,
+	src/qtgui/i18n/recoll_tr.ts, src/qtgui/i18n/recoll_uk.ts,
+	src/qtgui/i18n/recoll_xx.ts:
+	updated message files, translated french
+
+2009-01-29 14:24 +0000  dockes    (f09b8b421535)
+
+	* src/filters/rcltext:
+	simplified rcltext. No need for awk and no assumptions on charset
+
+2009-01-29 11:27 +0000  dockes    (c8b882dea260)
+
+	* src/ChangeLog, website/CHANGES.html, website/doc.html:
+	
+
+2009-01-29 11:04 +0000  dockes    (0bf58162416f)
+
+	* src/VERSION:
+	1.12.0 une
+
+2009-01-29 10:47 +0000  dockes    (40e8e1f2f59b)
+
+	* packaging/debian/changelog, packaging/rpm/recoll.spec,
+	packaging/rpm/recollCooker.spec, packaging/rpm/recollfedora.spec,
+	packaging/rpm/recollmdk.spec:
+	
+
+2009-01-29 10:08 +0000  dockes    (2af56852a361)
+
+	* src/qtgui/main.cpp, src/qtgui/ssearch_w.cpp, src/qtgui/ssearch_w.h:
+	have ssearch install the lang help section when needed
+
+2009-01-28 17:41 +0000  dockes    (8654c9b9d56d)
+
+	* src/qtgui/rclmain_w.cpp, src/qtgui/reslist.cpp:
+	erase history would crash with empty reslist docsource
+
+2009-01-28 17:21 +0000  dockes    (8b56ccfdd91b)
+
+	* src/qtgui/rclmain_w.cpp:
+	fixed status bar messages (were cleared by periodic100 every 100ms)
+
+2009-01-28 17:05 +0000  dockes    (b435cf90abb0)
+
+	* src/qtgui/rclhelp.cpp, src/qtgui/rclhelp.h: new file.
+	* src/qtgui/rclhelp.cpp, src/qtgui/rclhelp.h:
+	F1 context-enhanced help
+
+2009-01-28 16:56 +0000  dockes    (e5410627d9d5)
+
+	* src/qt4gui/recoll.pro.in:
+	F1 context-enhanced help
+
+2009-01-28 16:56 +0000  dockes    (741df5618110)
+
+	* src/qtgui/advsearch_w.cpp, src/qtgui/advsearch_w.h,
+	src/qtgui/main.cpp, src/qtgui/preview_w.cpp,
+	src/qtgui/rclmain_w.cpp, src/qtgui/rclmain_w.h, src/qtgui/recoll.h,
+	src/qtgui/recoll.pro.in, src/qtgui/reslist.cpp,
+	src/qtgui/sort_w.cpp, src/qtgui/spell_w.cpp:
+	F1 context-enhanced help
+
+2009-01-28 14:58 +0000  dockes    (7e804d156dc5)
+
+	* src/qtgui/rclmain_w.cpp:
+	dont encode urls used for starting help browser
+
+2009-01-28 14:22 +0000  dockes    (e696212a674c)
+
+	* src/Makefile.in:
+	add xapian version to version string
+
+2009-01-28 08:45 +0000  dockes    (46251043fd88)
+
+	* src/qtgui/advsearch.ui, src/qtgui/sort.ui, src/qtgui/spell.ui,
+	src/qtgui/uiprefs.ui:
+	avoid setting 0 sizes
+
+2009-01-28 08:40 +0000  dockes    (1c551a065bdd)
+
+	* src/configure, src/configure.ac:
+	allow setting QMAKE in the environment
+
+2009-01-27 18:12 +0000  dockes    (fb41a05985ed)
+
+	* src/utils/pxattr.cpp:
+	
+
+2009-01-27 11:19 +0000  dockes    (3f5897bb4b8d)
+
+	* tests/stemming/stemming.sh, tests/stemming/stemming.txt: new file.
+	* tests/Maildir1/Maildir1.sh, tests/Maildir1/Maildir1.txt,
+	tests/andor/andor.sh, tests/andor/andor.txt,
+	tests/badsuffs/badsuffs.sh, tests/badsuffs/badsuffs.txt,
+	tests/badsuffs1/badsuffs1.sh, tests/badsuffs1/badsuffs1.txt,
+	tests/boolean/boolean.sh, tests/boolean/boolean.txt,
+	tests/cjk/cjk.sh, tests/delete/delete.sh, tests/delete/delete.txt,
+	tests/dirwithblanks/dirwithblanks.sh,
+	tests/dirwithblanks/dirwithblanks.txt, tests/djvu/djvu.sh,
+	tests/djvu/djvu.txt, tests/dvi/dvi.sh, tests/dvi/dvi.txt,
+	tests/empty/empty.sh, tests/empty/empty.txt, tests/html/html.sh,
+	tests/html/html.txt, tests/images/images.sh,
+	tests/images/images.txt, tests/koi8r/koi8r.sh,
+	tests/koi8r/koi8r.txt, tests/lyx/lyx.sh, tests/lyx/lyx.txt,
+	tests/mail/mail.sh, tests/mail/mail.txt, tests/media/media.sh,
+	tests/media/media.txt, tests/msword/msword.sh,
+	tests/msword/msword.txt, tests/notypes/notypes.sh,
+	tests/notypes/notypes.txt, tests/ooff/ooff.sh, tests/ooff/ooff.txt,
+	tests/pdf/pdf.sh, tests/pdf/pdf.txt, tests/postscript/postscript.sh,
+	tests/postscript/postscript.txt, tests/ppt/ppt.sh,
+	tests/ppt/ppt.txt, tests/rfc2231/rfc2231.sh,
+	tests/rfc2231/rfc2231.txt, tests/rtf/rtf.sh, tests/rtf/rtf.txt,
+	tests/runtests.sh, tests/scribus/scribus.sh,
+	tests/scribus/scribus.txt, tests/skipped/skipped.sh,
+	tests/skipped/skipped.txt, tests/special/special.sh,
+	tests/special/special.txt, tests/stemming/stemming.sh,
+	tests/stemming/stemming.txt, tests/txt/txt.sh, tests/txt/txt.txt,
+	tests/utf8/utf8.sh, tests/utf8/utf8.txt, tests/xls/xls.sh,
+	tests/xls/xls.txt:
+	remove recoll query text from compared test outputs
+
+2009-01-27 10:25 +0000  dockes    (57dd90e8b55d)
+
+	* src/common/textsplit.cpp, src/common/textsplit.h:
+	Emit a_b intermediary span when splitting a_b.c
+
+2009-01-26 18:30 +0000  dockes    (e2238061ec9d)
+
+	* src/query/plaintorich.cpp, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h,
+	src/rcldb/searchdata.cpp:
+	modified the time at which we unaccent so that we can do the
+	Capitalized->nostemming test on single words (this had been broken
+	by the change of noac/split order done earlier to get japanese to
+	work)
+
+2009-01-26 18:26 +0000  dockes    (8529cb7d58c7)
+
+	* tests/cjk/cjk.sh:
+	
+
+2009-01-26 17:52 +0000  dockes    (8a5b4971a703)
+
+	* tests/cjk/cjk.sh: new file.
+	* tests/cjk/cjk.sh:
+	
+
+2009-01-26 17:34 +0000  dockes    (e65566ba6690)
+
+	* website/BUGS.html, website/CHANGES.html, website/features.html,
+	website/index.html.en, website/index.html.fr,
+	website/pics/index.html, website/pics/recoll-
+	HTML_search_results.html, website/pics/recoll0.html,
+	website/pics/recoll0.txt, website/pics/recoll1.html,
+	website/pics/recoll2.html, website/pics/recoll3.html,
+	website/pics/recoll4.html, website/pics/recoll5.html,
+	website/pics/recoll_chinese.html:
+	website
+
+2009-01-26 13:29 +0000  dockes    (61198659243f)
+
+	* src/utils/smallut.cpp, src/utils/smallut.h:
+	add overloaded neutchars with different parameters
+
+2009-01-26 13:27 +0000  dockes    (61567bc09eab)
+
+	* src/utils/transcode.cpp:
+	tested and decided against cacheing iconv_open
+
+2009-01-23 15:56 +0000  dockes    (1998b1608eb0)
+
+	* src/ChangeLog, src/qtgui/advsearch_w.cpp, src/qtgui/main.cpp,
+	src/qtgui/rclmain_w.cpp, src/qtgui/recoll.h:
+	temp ckpt: need to test on real unix
+
+2009-01-23 11:07 +0000  dockes    (3631372e04f1)
+
+	* src/qtgui/uiprefs.ui:
+	avoid name duplication
+
+2009-01-23 11:03 +0000  dockes    (0dba2718e1aa)
+
+	* src/qtgui/uiprefs.ui:
+	one button for choosing native editors
+
+2009-01-23 10:38 +0000  dockes    (167a153bcf3c)
+
+	* src/kde/kioslave/recoll/data/searchable.html:
+	simplified javascrip: no ie here!
+
+2009-01-23 09:41 +0000  dockes    (b71166d61782)
+
+	* src/qtgui/rclmain_w.cpp:
+	toLocal8Bit->local8bit
+
+2009-01-23 09:30 +0000  dockes    (c3565b4a7244)
+
+	* src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, src/qtgui/main.cpp,
+	src/qtgui/rclmain_w.cpp, src/qtgui/recoll.h, src/qtgui/uiprefs.ui,
+	src/qtgui/uiprefs_w.cpp, src/qtgui/uiprefs_w.h:
+	use normal text/html ext app for viewing help
+
+2009-01-23 09:27 +0000  dockes    (c025fa3fe99d)
+
+	* src/utils/execmd.cpp, src/utils/execmd.h:
+	accept additional path argument to execmd::which
+
+2009-01-22 14:25 +0000  dockes    (967d5e013a33)
+
+	* src/qtgui/preview_w.cpp, src/qtgui/preview_w.h:
+	allow toggle show text/fields in preview
+
+2009-01-21 16:42 +0000  dockes    (f950b7d75e66)
+
+	* src/internfile/internfile.cpp, src/internfile/internfile.h,
+	src/qtgui/rclmain_w.cpp, src/qtgui/rclmain_w.h,
+	src/qtgui/reslist.cpp, src/qtgui/reslist.h:
+	added saveToFile menu entry to reslist
+
+2009-01-21 13:55 +0000  dockes    (033fe406a666)
+
+	* src/utils/pxattr.cpp, src/utils/pxattr.h: new file.
+	* src/common/autoconfig.h.in, src/common/rclconfig.cpp,
+	src/common/rclconfig.h, src/configure, src/configure.ac,
+	src/internfile/internfile.cpp, src/internfile/mh_exec.h,
+	src/internfile/mh_html.cpp, src/internfile/mh_mail.cpp,
+	src/internfile/mh_mbox.cpp, src/internfile/mh_text.cpp,
+	src/internfile/mh_unknown.h, src/internfile/mimehandler.cpp,
+	src/internfile/mimehandler.h, src/lib/Makefile, src/lib/mkMake,
+	src/sampleconf/fields, src/utils/pxattr.cpp, src/utils/pxattr.h:
+	added optional extended file attributes support
+
+2009-01-21 11:11 +0000  dockes    (f269f00857ec)
+
+	* src/sampleconf/mimeconf:
+	comments
+
+2009-01-21 11:11 +0000  dockes    (fda5a0a6fccb)
+
+	* src/filters/rcldoc:
+	try to use wvWare if present and antiword fails
+
+2009-01-21 10:49 +0000  dockes    (394e160f7032)
+
+	* src/utils/readfile.cpp:
+	initialize the error buffer for gnu strerror_r
+
+2009-01-21 10:24 +0000  dockes    (7580c4ed79ce)
+
+	* src/utils/readfile.cpp:
+	fix errno printing
+
+2009-01-21 10:17 +0000  dockes    (f1dca213efee)
+
+	* src/rcldb/rcldb.cpp:
+	fixed typo that would prevent stopfile use
+
+2009-01-17 14:57 +0000  dockes    (90f03bbd715c)
+
+	* src/doc/man/recoll.conf.5, src/doc/user/usermanual.sgml:
+	added compressedfilemaxkbs
+
+2009-01-17 14:56 +0000  dockes    (78d1dd932d5b)
+
+	* src/internfile/internfile.cpp, src/qtgui/confgui/confguiindex.cpp,
+	src/sampleconf/recoll.conf.in:
+	added compressedfilemaxkbs
+
+2009-01-16 17:40 +0000  dockes    (fcc2539b18b4)
+
+	* src/kde/kioslave/recoll/data/searchable.html:
+	
+
+2009-01-16 16:42 +0000  dockes    (11cc037db8a9)
+
+	* src/kde/kioslave/recoll/00README.txt:
+	
+
+2009-01-16 11:32 +0000  dockes    (baaf38fdbca9)
+
+	* src/kde/kioslave/recoll/00README.txt,
+	src/kde/kioslave/recoll/CMakeLists.txt,
+	src/kde/kioslave/recoll/data/help.html,
+	src/kde/kioslave/recoll/dirif.cpp,
+	src/kde/kioslave/recoll/htmlif.cpp,
+	src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/kde/kioslave/recoll/notes.txt:
+	fixed docs + removed dead code
+
+2009-01-15 17:07 +0000  dockes    (144b35bd64c0)
+
+	* src/filters/rcluncomp, src/internfile/internfile.cpp:
+	fixed handling of decompression errors, which was wrong but not
+	catastrophly so in most cases
+
+2009-01-15 17:05 +0000  dockes    (4b10b961d158)
+
+	* src/qtgui/reslist.cpp:
+	disable printing to tmp file
+
+2009-01-15 14:37 +0000  dockes    (9392e278bb0a)
+
+	* src/query/docseq.h, src/query/filtseq.cpp, src/query/filtseq.h,
+	src/query/sortseq.cpp, src/query/sortseq.h:
+	refactor operations delegated to subsequence by sortseq and filtspec
+	into superclass
+
+2009-01-15 09:47 +0000  dockes    (f02a34f835b4)
+
+	* src/rcldb/rcldb.cpp:
+	removed unused variable
+
+2009-01-15 09:45 +0000  dockes    (2440f3259cd0)
+
+	* src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, src/qtgui/reslist.cpp,
+	src/qtgui/uiprefs_w.cpp:
+	ensure reslist parformat is refreshed after edit (1.11 bug)
+
+2009-01-14 07:52 +0000  dockes    (b3c89a56c9a1)
+
+	* src/qtgui/advsearch.ui, src/qtgui/rclmain_w.cpp,
+	src/qtgui/uiprefs_w.cpp, src/qtgui/uiprefs_w.h,
+	src/qtgui/viewaction.ui, src/qtgui/viewaction_w.cpp,
+	src/qtgui/viewaction_w.h:
+	arrange so that the select action dialog is preselected on the right
+	mime type after missing action
+
+2009-01-13 16:03 +0000  dockes    (2d8517785a8e)
+
+	* src/common/textsplit.cpp:
+	add _ to wordsep/spanglue chars. Add non-ascii test to isCJK for
+	optimization
+
+2009-01-13 16:02 +0000  dockes    (cbfb1f939c9d)
+
+	* src/common/uproplist.h:
+	small fix : remove diaeresis from seps + comments
+
+2009-01-13 08:56 +0000  dockes    (ee8989c89330)
+
+	* src/doc/user/usermanual.sgml:
+	
+
+2009-01-13 08:49 +0000  dockes    (93e74953ed0b)
+
+	* src/doc/user/usermanual.sgml:
+	update version
+
+2009-01-13 08:02 +0000  dockes    (051bf6d49898)
+
+	* src/rcldb/rcldb.h, src/rcldb/rcldb_p.h, src/rcldb/rclquery.h:
+	minor visibility cleanup
+
+2009-01-13 08:01 +0000  dockes    (c550fb351f5f)
+
+	* src/qtgui/ssearchb.ui:
+	fix obsolete tooltip message
+
+2009-01-12 18:31 +0000  dockes    (3cefac6eb52d)
+
+	* src/doc/user/usermanual.sgml:
+	doc: better adv search explanation + duplicates collapsing
+
+2009-01-12 17:50 +0000  dockes    (f8cb21911962)
+
+	* src/qtgui/advsearch_w.cpp, src/qtgui/advsearch_w.h:
+	simplified dialog structure, apparently allowed to get rid of size
+	hacks
+
+2009-01-12 16:42 +0000  dockes    (48ca278dcd42)
+
+	* src/qtgui/advsearch.ui:
+	suppressed unused vbox
+
+2009-01-12 15:55 +0000  dockes    (b5486bd5b85d)
+
+	* src/qtgui/advsearch.ui, src/qtgui/searchclause_w.cpp,
+	src/qtgui/searchclause_w.h:
+	suppressed unused layout in searchClause
+
+2009-01-09 14:56 +0000  dockes    (073523a33ffe)
+
+	* src/internfile/mh_exec.cpp, src/internfile/mh_html.cpp,
+	src/internfile/mh_mail.cpp, src/internfile/mh_text.cpp,
+	src/qtgui/guiutils.cpp, src/qtgui/guiutils.h,
+	src/qtgui/rclmain_w.cpp, src/qtgui/uiprefs.ui,
+	src/qtgui/uiprefs_w.cpp, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h,
+	src/rcldb/rcldoc.cpp, src/rcldb/rcldoc.h, src/rcldb/rclquery.cpp,
+	src/rcldb/rclquery.h:
+	compute md5 checksums for all docs and optionally collapse
+	duplicates in results
+
+2009-01-09 12:23 +0000  dockes    (f89119e58f79)
+
+	* src/qtgui/reslist.cpp:
+	add space/backspace as pager keys for reslist
+
+2009-01-09 12:23 +0000  dockes    (36eb326513d5)
+
+	* src/utils/Makefile, src/utils/md5.cpp, src/utils/md5.h,
+	src/utils/readfile.cpp, src/utils/readfile.h:
+	implement md5 convenience file and string wrappers. Modify readfile
+	to support this
+
+2009-01-09 07:27 +0000  dockes    (de3507d26de4)
+
+	* src/rcldb/pathhash.cpp, src/rcldb/pathhash.h: deleted file.
+	* src/lib/Makefile, src/lib/mkMake, src/rcldb/pathhash.cpp,
+	src/rcldb/pathhash.h, src/rcldb/rcldb.cpp:
+	got rid of pathhash in rcldb, not used since 11.0
+
+2009-01-08 09:55 +0000  dockes    (1fc0cdb06859)
+
+	* src/excludefile:
+	adapt to svn
+
+2009-01-08 09:50 +0000  dockes    (867f1a9f6b02)
+
+	* src/makesrcdist.sh:
+	adapt distrib script to svn
+
+2009-01-08 09:40 +0000  dockes    (33a7fbc42386 [RECOLL_1_12_1exp5])
+
+	* src/VERSION:
+	
+
+2009-01-06 18:48 +0000  dockes    (2e111dad7cba)
+
+	* src/doc/user/bldloop: new file.
+	* packaging/FreeBSD/recoll/Makefile,
+	packaging/FreeBSD/recoll/distinfo, packaging/FreeBSD/recoll/pkg-
+	plist, src/doc/user/bldloop, tests/koi8r/koi8r.sh, tests/shared.sh:
+	*** empty log message ***
+
+2009-01-06 18:40 +0000  dockes    (c82fbe0ee8fc)
+
+	* packaging/debian/changelog, packaging/rpm/recoll.spec,
+	packaging/rpm/recollfedora.spec, packaging/rpm/recollmdk.spec,
+	src/ChangeLog, website/devel.html, website/download.html:
+	*** empty log message ***
+
+2009-01-06 18:40 +0000  dockes    (7ebc18a8b4d7)
+
+	* unac/builder.in, unac/unac.c, unac/unac.h:
+	new unac approach for japanese: dont decompose at all
+
+2009-01-06 17:40 +0000  dockes    (a0b7ed1f2bda)
+
+	* website/xapUpg100.html: new file.
+	* website/BUGS.html, website/BUGS.txt, website/CHANGES.html,
+	website/doc.html, website/download.html, website/index.html.en,
+	website/index.html.fr, website/xapUpg100.html:
+	*** empty log message ***
+
+2009-01-06 17:30 +0000  dockes    (636e0f9f2a77)
+
+	* website/howtos/index.html,
+	website/howtos/prevent_indexing_a_directory/index.html,
+	website/howtos/use_multiple_indexes/index.html,
+	website/pics/piclist.txt, website/pics/recoll-HTML_search_results-
+	thumb.png, website/pics/recoll-HTML_search_results.html,
+	website/pics/recoll-HTML_search_results.png, website/pics/recoll-
+	HTML_search_results.txt, website/pics/recoll0-thumb.png,
+	website/pics/recoll0.html, website/pics/recoll0.png,
+	website/pics/recoll0.txt, website/pics/recoll1-thumb.png,
+	website/pics/recoll1.html, website/pics/recoll1.png,
+	website/pics/recoll1.txt, website/pics/recoll2-thumb.png,
+	website/pics/recoll2.html, website/pics/recoll2.png,
+	website/pics/recoll2.txt, website/pics/recoll3-thumb.png,
+	website/pics/recoll3.html, website/pics/recoll3.png,
+	website/pics/recoll3.txt, website/pics/recoll4-thumb.png,
+	website/pics/recoll4.html, website/pics/recoll4.png,
+	website/pics/recoll4.txt, website/pics/recoll5-thumb.png,
+	website/pics/recoll5.html, website/pics/recoll5.png,
+	website/pics/recoll5.txt, website/pics/recoll_chinese-thumb.png,
+	website/pics/recoll_chinese.html, website/pics/recoll_chinese.png,
+	website/pics/recoll_chinese.txt: new file.
+	* website/howtos/index.html,
+	website/howtos/prevent_indexing_a_directory/index.html,
+	website/howtos/use_multiple_indexes/index.html,
+	website/pics/piclist.txt, website/pics/recoll-HTML_search_results-
+	thumb.png, website/pics/recoll-HTML_search_results.html,
+	website/pics/recoll-HTML_search_results.png, website/pics/recoll-
+	HTML_search_results.txt, website/pics/recoll0-thumb.png,
+	website/pics/recoll0.html, website/pics/recoll0.png,
+	website/pics/recoll0.txt, website/pics/recoll1-thumb.png,
+	website/pics/recoll1.html, website/pics/recoll1.png,
+	website/pics/recoll1.txt, website/pics/recoll2-thumb.png,
+	website/pics/recoll2.html, website/pics/recoll2.png,
+	website/pics/recoll2.txt, website/pics/recoll3-thumb.png,
+	website/pics/recoll3.html, website/pics/recoll3.png,
+	website/pics/recoll3.txt, website/pics/recoll4-thumb.png,
+	website/pics/recoll4.html, website/pics/recoll4.png,
+	website/pics/recoll4.txt, website/pics/recoll5-thumb.png,
+	website/pics/recoll5.html, website/pics/recoll5.png,
+	website/pics/recoll5.txt, website/pics/recoll_chinese-thumb.png,
+	website/pics/recoll_chinese.html, website/pics/recoll_chinese.png,
+	website/pics/recoll_chinese.txt:
+	*** empty log message ***
+
+2008-12-21 13:17 +0000  dockes    (74da01dd27c2)
+
+	* src/unac/unac.c, src/unac/unac.h:
+	new unac approach for japanese: dont decompose at all
+
+2008-12-21 13:05 +0000  dockes    (273dad0916bb)
+
+	* unac/unac_version.h: new file.
+	* unac/unac_version.h:
+	*** empty log message ***
+
+2008-12-19 09:55 +0000  dockes    (1a2dd90e07b4)
+
+	* src/rcldb/rcldb.h, src/rcldb/rclquery.cpp, src/rcldb/searchdata.cpp:
+	getMainConfig not actually needed and possibly harmful
+
+2008-12-19 09:44 +0000  dockes    (3a16629b24f5)
+
+	* src/rcldb/searchdata.cpp, src/unac/unac.c, src/unac/unac.h:
+	dont unaccent japanese + fix bug in unac/split ordering in
+	searchdata
+
+2008-12-19 08:39 +0000  dockes    (b895714a6500)
+
+	* src/python/recoll/setup.py:
+	pyrecoll: port to linux, update
+
+2008-12-18 14:11 +0000  dockes    (33bffc499e78)
+
+	* src/query/xadump.cpp:
+	diag: prevent char combination by inserting spaces
+
+2008-12-18 11:58 +0000  dockes    (a3863a0c1f62)
+
+	* unac/builder.in, unac/unac.c:
+	no going out of the basic plane!
+
+2008-12-18 11:12 +0000  dockes    (ac1315d2a94f)
+
+	* unac/unac.c:
+	added recoll memory allocation checks
+
+2008-12-18 11:05 +0000  dockes    (cfb4210ce7d5)
+
+	* unac/CaseFolding-5.1.0.txt, unac/UnicodeData-5.1.0.txt: new file.
+	* unac/CaseFolding-5.1.0.txt, unac/UnicodeData-5.1.0.txt:
+	*** empty log message ***
+
+2008-12-18 11:04 +0000  dockes    (cc609462a402)
+
+	* unac/builder.in, unac/configure, unac/configure.ac, unac/unac.c,
+	unac/unac.h:
+	use unicode 5.1.0 + dont unaccent katakana/hiragana. Main change in
+	unicode is that letters ae and o with stroke dont decompose anymore
+	into a+e and o+e we may actually want to restore this if it proves a
+	problem
+
+2008-12-17 16:20 +0000  dockes    (65fd4fda84d3)
+
+	* src/rcldb/rcldb.cpp:
+	fix to previous abstract fix
+
+2008-12-17 15:12 +0000  dockes    (9e9e84a23da6)
+
+	* src/qtgui/reslist.cpp:
+	use local hiliter
+
+2008-12-17 14:26 +0000  dockes    (ada853f1e3b8)
+
+	* src/common/Makefile, src/rcldb/rcldb.cpp:
+	fix abstract generation when the match term is a multiword span
+	(esp. for japanese)
+
+2008-12-17 14:26 +0000  dockes    (9705bf172f13)
+
+	* src/rcldb/searchdata.cpp:
+	comment
+
+2008-12-17 08:01 +0000  dockes    (42bc5b3b5abf)
+
+	* src/index/indexer.cpp, src/index/indexer.h,
+	src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/python/recoll/pyrecoll.cpp, src/qtgui/main.cpp,
+	src/query/recollq.cpp, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h:
+	simplified db open by getting rid of the illusion that we could have
+	several writeable dbs per config
+
+2008-12-16 17:43 +0000  dockes    (1d040e634db3 [RECOLL_1_12_1exp4])
+
+	* src/README, src/VERSION,
+	src/kde/kioslave/recoll/data/searchable.html,
+	src/kde/kioslave/recoll/data/welcome.html:
+	*** empty log message ***
+
+2008-12-16 17:30 +0000  dockes    (18f65ef55dd6)
+
+	* src/kde/kioslave/recoll/data/searchable.html:
+	*** empty log message ***
+
+2008-12-16 17:28 +0000  dockes    (e991bdd3d8c7)
+
+	* src/kde/kioslave/recoll/data/searchable.html: new file.
+	* src/kde/kioslave/recoll/data/searchable.html,
+	src/kde/kioslave/recoll/data/welcome.html,
+	src/kde/kioslave/recoll/htmlif.cpp,
+	src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/kde/kioslave/recoll/kio_recoll.h:
+	updated kioslave for small changes in reslistpager after main i/f
+	integration. + javascript to search page
+
+2008-12-16 14:20 +0000  dockes    (7bc14752b5f3)
+
+	* src/qtgui/preview_w.h, src/qtgui/reslist.cpp, src/qtgui/reslist.h,
+	src/query/plaintorich.h, src/query/reslistpager.cpp,
+	src/query/reslistpager.h, src/utils/debuglog.cpp,
+	src/utils/debuglog.h:
+	converted qt reslist to reslistpager
+
+2008-12-16 08:54 +0000  dockes    (c702627139c8)
+
+	* src/query/wasastringtoquery.cpp:
+	OR chain longer than 2 would swallow preceding AND terms
+
+2008-12-15 15:04 +0000  dockes    (62e1b7eaa7b9)
+
+	* src/kde/kioslave/recoll/htmlif.cpp, src/query/reslistpager.cpp:
+	kio: use right ipath for preview
+
+2008-12-15 14:39 +0000  dockes    (30b71a18e961)
+
+	* src/query/xadump.cpp, src/rcldb/searchdata.cpp:
+	make gcc happy
+
+2008-12-15 13:51 +0000  dockes    (f93dda12024f)
+
+	* website/howtos/template.html:
+	*** empty log message ***
+
+2008-12-15 11:20 +0000  dockes    (4a74871e9823)
+
+	* website/howtos/buildindex.sh, website/howtos/fragend.html,
+	website/howtos/fraghead.html, website/howtos/newdir.sh,
+	website/howtos/template.html: new file.
+	* website/BUGS.html, website/BUGS.txt, website/CHANGES.html,
+	website/copydocs, website/download.html,
+	website/howtos/buildindex.sh, website/howtos/fragend.html,
+	website/howtos/fraghead.html, website/howtos/newdir.sh,
+	website/howtos/template.html, website/index.html.en,
+	website/index.html.fr, website/pics/index.html:
+	*** empty log message ***
+
+2008-12-15 09:33 +0000  dockes    (afc0ef4911b2)
+
+	* src/doc/user/usermanual.sgml:
+	more search tips
+
+2008-12-15 09:24 +0000  dockes    (59cd1bdd4d3f)
+
+	* src/rcldb/searchdata.cpp:
+	reorganize code + add boost to phrase element to match boost of
+	original user terms
+
+2008-12-12 11:53 +0000  dockes    (4121cbc09d70)
+
+	* src/common/textsplit.cpp, src/common/textsplit.h,
+	src/rcldb/rcldb.cpp:
+	dont insert space in cjk abstracts
+
+2008-12-12 11:02 +0000  dockes    (37fd1c31af49)
+
+	* src/rcldb/rcldb.cpp:
+	message level
+
+2008-12-12 11:01 +0000  dockes    (d2a8c016d05c)
+
+	* src/qtgui/reslist.cpp:
+	add %i for displaying ipath
+
+2008-12-12 11:00 +0000  dockes    (151d6a590152)
+
+	* src/qtgui/main.cpp:
+	add all extra cmd line args to the question
+
+2008-12-08 17:43 +0000  dockes    (90b62656b326)
+
+	* src/kde/kioslave/recoll/htmlif.cpp:
+	set name as preview title
+
+2008-12-08 17:42 +0000  dockes    (5717c313d23a)
+
+	* src/kde/kioslave/recoll/dirif.cpp:
+	removed a few traces
+
+2008-12-08 14:34 +0000  dockes    (de392f657f81)
+
+	* src/kde/kioslave/recoll/CMakeLists.txt,
+	src/kde/kioslave/recoll/data/help.html,
+	src/kde/kioslave/recoll/htmlif.cpp,
+	src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/kde/kioslave/recoll/kio_recoll.h,
+	src/kde/kioslave/recoll/notes.txt:
+	previews
+
+2008-12-08 11:22 +0000  dockes    (877b674c328c)
+
+	* src/utils/Makefile, src/utils/readfile.cpp:
+	file_to_string: stat+reserve makes faster
+
+2008-12-05 13:15 +0000  dockes    (19ef9198e3d5)
+
+	* src/VERSION:
+	branched maintenance for 1.11 kio devs on main now 1.12
+
+2008-12-05 11:09 +0000  dockes    (b27d4070bbf8)
+
+	* src/common/textsplit.cpp, src/common/textsplit.h,
+	src/common/uproplist.h, src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/qtgui/ssearch_w.cpp, src/query/recollq.cpp,
+	src/query/wasatorcl.cpp, src/rcldb/searchdata.cpp:
+	take care of splitting user string with respect to unicode white
+	space, not only ascii
+
+2008-12-05 07:38 +0000  dockes    (d102970d3aee)
+
+	* src/utils/smallut.h:
+	comment
+
+2008-12-04 12:41 +0000  dockes    (a3f25963b2da [RECOLL_1_11_1exp3])
+
+	* src/kde/kioslave/recoll/recollf.protocol: new file.
+	* src/kde/kioslave/recoll/recollf.protocol:
+	*** empty log message ***
+
+2008-12-04 12:23 +0000  dockes    (adffbb42e449)
+
+	* src/kde/kioslave/recoll/dirif.cpp:
+	kde 4.0 compile
+
+2008-12-04 11:50 +0000  dockes    (fef6cc6c4c97)
+
+	* src/VERSION:
+	*** empty log message ***
+
+2008-12-04 11:49 +0000  dockes    (d1b1a426ddfa)
+
+	* src/kde/kioslave/recoll/data/help.html,
+	src/kde/kioslave/recoll/dirif.cpp,
+	src/kde/kioslave/recoll/htmlif.cpp,
+	src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/kde/kioslave/recoll/kio_recoll.h,
+	src/kde/kioslave/recoll/notes.txt, src/query/reslistpager.cpp,
+	src/query/reslistpager.h, src/rcldb/rcldb.cpp, src/utils/pathut.h:
+	kio_recoll: html/dir switching
+
+2008-12-03 17:04 +0000  dockes    (a762165399a2)
+
+	* src/kde/kioslave/recoll/CMakeLists.txt,
+	src/kde/kioslave/recoll/data/help.html,
+	src/kde/kioslave/recoll/dirif.cpp,
+	src/kde/kioslave/recoll/htmlif.cpp,
+	src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/kde/kioslave/recoll/kio_recoll.h,
+	src/kde/kioslave/recoll/notes.txt:
+	cleaned up virtual tree and url handling. Drag to desktop now works
+	with appropriate name. recollf protocol
+
+2008-12-03 10:02 +0000  dockes    (127dbb400363)
+
+	* src/kde/kioslave/recoll/dirif.cpp:
+	better stat
+
+2008-12-02 13:41 +0000  dockes    (6e55b23fb64f)
+
+	* src/kde/kioslave/recoll/dirif.cpp:
+	*** empty log message ***
+
+2008-12-02 13:38 +0000  dockes    (66b031be3559)
+
+	* src/kde/kioslave/recoll/dirif.cpp:
+	*** empty log message ***
+
+2008-12-02 13:16 +0000  dockes    (619e41b1537b)
+
+	* src/INSTALL, src/README, src/VERSION, src/doc/user/usermanual.sgml:
+	*** empty log message ***
+
+2008-12-02 13:14 +0000  dockes    (fff18d4ea953)
+
+	* src/kde/kioslave/recoll/00README.txt,
+	src/kde/kioslave/recoll/CMakeLists.txt,
+	src/kde/kioslave/recoll/data/welcome.html,
+	src/kde/kioslave/recoll/htmlif.cpp,
+	src/kde/kioslave/recoll/notes.txt, src/query/reslistpager.cpp:
+	kio goes to testing
+
+2008-12-01 18:42 +0000  dockes    (714fdf15621e)
+
+	* src/kde/kioslave/recoll/data/help.html,
+	src/kde/kioslave/recoll/dirif.cpp,
+	src/kde/kioslave/recoll/htmlif.cpp,
+	src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/kde/kioslave/recoll/kio_recoll.h:
+	small cleanups and comments. Still some weirdness
+
+2008-12-01 15:37 +0000  dockes    (8d9ea1f1c645)
+
+	* src/kde/kioslave/recoll/cleancmakestuff.sh:
+	*** empty log message ***
+
+2008-12-01 15:36 +0000  dockes    (8504e2e278dd)
+
+	* src/kde/kioslave/recoll/data/help.html: new file.
+	* src/kde/kioslave/recoll/CMakeLists.txt,
+	src/kde/kioslave/recoll/cleancmakestuff.sh,
+	src/kde/kioslave/recoll/data/help.html,
+	src/kde/kioslave/recoll/data/welcome.html,
+	src/kde/kioslave/recoll/dirif.cpp,
+	src/kde/kioslave/recoll/htmlif.cpp,
+	src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/kde/kioslave/recoll/kio_recoll.h,
+	src/kde/kioslave/recoll/notes.txt:
+	seems to work by re-rerunning search whenever it changes. Still had
+	one crash, needs cleanup
+
+2008-11-28 09:14 +0000  dockes    (ee6a7d32843e)
+
+	* src/kde/kioslave/recoll/recollnolist.protocol: new file.
+	* src/kde/kioslave/recoll/CMakeLists.txt,
+	src/kde/kioslave/recoll/dirif.cpp,
+	src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/kde/kioslave/recoll/kio_recoll.h,
+	src/kde/kioslave/recoll/notes.txt,
+	src/kde/kioslave/recoll/recoll.protocol,
+	src/kde/kioslave/recoll/recollnolist.protocol:
+	ensured compatibility with kde4.0
+
+2008-11-27 17:48 +0000  dockes    (d461029ef29c)
+
+	* src/kde/kioslave/recoll/CMakeLists.txt,
+	src/kde/kioslave/recoll/dirif.cpp,
+	src/kde/kioslave/recoll/htmlif.cpp,
+	src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/kde/kioslave/recoll/kio_recoll.h,
+	src/kde/kioslave/recoll/notes.txt,
+	src/kde/kioslave/recoll/recoll.protocol:
+	bits of dual mode working
+
+2008-11-27 14:05 +0000  dockes    (8cc177e8775a)
+
+	* src/query/reslistpager.cpp:
+	safety check
+
+2008-11-27 13:35 +0000  dockes    (4d28c4942bc1)
+
+	* src/sampleconf/mimeconf:
+	*** empty log message ***
+
+2008-11-27 09:49 +0000  dockes    (394d882caa0c)
+
+	* src/sampleconf/mimeconf:
+	remove obsolete [prefixes] section
+
+2008-11-27 09:39 +0000  dockes    (0ec8260d8d7c)
+
+	* src/doc/user/usermanual.sgml:
+	*** empty log message ***
+
+2008-11-26 15:03 +0000  dockes    (b6a62dc24003)
+
+	* src/kde/kioslave/recoll/cleancmakestuff.sh,
+	src/kde/kioslave/recoll/dirif.cpp,
+	src/kde/kioslave/recoll/htmlif.cpp,
+	src/kde/kioslave/recoll/notes.txt: new file.
+	* src/kde/kioslave/recoll/CMakeLists.txt,
+	src/kde/kioslave/recoll/cleancmakestuff.sh,
+	src/kde/kioslave/recoll/dirif.cpp,
+	src/kde/kioslave/recoll/htmlif.cpp,
+	src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/kde/kioslave/recoll/kio_recoll.h,
+	src/kde/kioslave/recoll/notes.txt,
+	src/kde/kioslave/recoll/recoll.protocol:
+	listdir doesnt work on kde 4.0 because on parent/child assumptions
+	in kdirmodel have to check on kde 4.1
+
+2008-11-24 17:42 +0000  dockes    (9333f13ac4c7)
+
+	* src/VERSION:
+	*** empty log message ***
+
+2008-11-24 17:38 +0000  dockes    (a761936ec65e)
+
+	* src/kde/kioslave/recoll/CMakeLists.txt:
+	check for dlopen
+
+2008-11-24 16:42 +0000  dockes    (0f7e0292212f)
+
+	* src/kde/kioslave/recoll/CMakeLists.txt:
+	have to cc the pic objects, cant use librcl
+
+2008-11-24 15:47 +0000  dockes    (d06dd2891012)
+
+	* src/Makefile.in, src/aspell/Makefile, src/common/Makefile,
+	src/common/autoconfig.h.in, src/common/rclconfig.h, src/configure,
+	src/configure.ac, src/index/Makefile, src/internfile/Makefile,
+	src/lib/Makefile, src/lib/mkMake, src/mk/Darwin, src/mk/FreeBSD,
+	src/mk/OpenBSD, src/mk/SunOS, src/mk/commondefs,
+	src/qt4gui/recoll.pro.in, src/qtgui/recoll.pro.in,
+	src/query/Makefile, src/unac/unac.c, src/utils/pathut.cpp:
+	make it easier to maintain the kio cmake by moving as much stuff as
+	possible to autoconfig.h, merging libmime and librcl etc.
+
+2008-11-24 15:23 +0000  dockes    (7d9add059cc1)
+
+	* src/qtgui/confgui/main.cpp, src/qtgui/guiutils.cpp,
+	src/qtgui/main.cpp, src/qtgui/recoll.h:
+	replace local variable recoll_datadir with access to config
+
+2008-11-24 14:54 +0000  dockes    (7005bf515a0b)
+
+	* src/unac/unac_version.h: new file.
+	* src/unac/unac.c, src/unac/unac_version.h:
+	*** empty log message ***
+
+2008-11-21 16:43 +0000  dockes    (5c4559fa9d49)
+
+	* src/makesrcdist.sh:
+	*** empty log message ***
+
+2008-11-21 16:37 +0000  dockes    (e92347cad84d)
+
+	* src/kde/kioslave/recoll/00README.txt, src/makesrcdist.sh:
+	ccmake cleanup in kio_recoll
+
+2008-11-21 16:02 +0000  dockes    (f691d6ad3333)
+
+	* src/excludefile:
+	*** empty log message ***
+
+2008-11-20 18:00 +0000  dockes    (5063f4280d8d)
+
+	* src/kde/kioslave/recoll/Makefile: deleted file.
+	* src/kde/kioslave/recoll/Makefile:
+	*** empty log message ***
+
+2008-11-20 15:10 +0000  dockes    (dc45badd0c45)
+
+	* src/VERSION:
+	*** empty log message ***
+
+2008-11-20 14:16 +0000  dockes    (c653773059df)
+
+	* src/kde/kioslave/recoll/00README.txt:
+	*** empty log message ***
+
+2008-11-20 13:10 +0000  dockes    (8b5eea7103b5)
+
+	* src/kde/kioslave/recoll/data/welcome.html: new file.
+	* src/kde/kioslave/recoll/00README.txt,
+	src/kde/kioslave/recoll/CMakeLists.txt,
+	src/kde/kioslave/recoll/data/welcome.html,
+	src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/kde/kioslave/recoll/kio_recoll.h, src/query/reslistpager.cpp,
+	src/query/reslistpager.h:
+	kioslave sort of works
+
+2008-11-19 12:28 +0000  dockes    (93e6b483f5c4)
+
+	* src/kde/kioslave/recoll/kio_recoll.cpp:
+	*** empty log message ***
+
+2008-11-19 12:19 +0000  dockes    (9b0d90b61574)
+
+	* src/query/plaintorich.cpp, src/query/plaintorich.h,
+	src/query/reslistpager.cpp, src/query/reslistpager.h: new file.
+	* src/qtgui/plaintorich.cpp, src/qtgui/plaintorich.h: deleted file.
+	* src/lib/Makefile, src/lib/mkMake, src/qt4gui/recoll.pro.in,
+	src/qtgui/plaintorich.cpp, src/qtgui/plaintorich.h,
+	src/qtgui/recoll.pro.in, src/query/plaintorich.cpp,
+	src/query/plaintorich.h, src/query/reslistpager.cpp,
+	src/query/reslistpager.h:
+	moved plaintorich from qtgui/ to query/
+
+2008-11-19 10:06 +0000  dockes    (350dd565c80d)
+
+	* src/qtgui/reslist.cpp, src/utils/smallut.cpp, src/utils/smallut.h:
+	moved code from qtgui to smallut
+
+2008-11-18 13:51 +0000  dockes    (fae04b17c778)
+
+	* src/utils/cancelcheck.h:
+	comment
+
+2008-11-18 13:25 +0000  dockes    (4d54c32dbee7)
+
+	* src/index/csguess.cpp, src/index/mimetype.cpp,
+	src/index/rclmonprc.cpp, src/index/rclmonrcv.cpp,
+	src/query/wasatorcl.cpp:
+	add a few includes for new gcc version
+
+2008-11-18 13:24 +0000  dockes    (9455c0affe0a)
+
+	* src/utils/cancelcheck.h:
+	comments
+
+2008-11-18 10:23 +0000  dockes    (d09d14bf2e24)
+
+	* src/utils/debuglog.h:
+	*** empty log message ***
+
+2008-11-17 14:51 +0000  dockes    (9d4e9515342e)
+
+	* src/kde/kioslave/recoll/CMakeLists.txt,
+	src/kde/kioslave/recoll/Makefile.kde3: new file.
+	* src/kde/kioslave/recoll/CMakeLists.txt,
+	src/kde/kioslave/recoll/Makefile,
+	src/kde/kioslave/recoll/Makefile.kde3,
+	src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/kde/kioslave/recoll/kio_recoll.h:
+	1st kde test. cmake doesnt work need to use buildit script
+
+2008-11-14 15:49 +0000  dockes    (13ca00d869a1)
+
+	* src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/kde/kioslave/recoll/kio_recoll.h:
+	*** empty log message ***
+
+2008-11-13 10:57 +0000  dockes    (5cd3ce5481df)
+
+	* src/kde/kioslave/recoll/00README.txt,
+	src/kde/kioslave/recoll/Makefile,
+	src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/kde/kioslave/recoll/kio_recoll.la, src/query/docseqdb.cpp:
+	got the kio_slave working again
+
+2008-11-08 11:00 +0000  dockes    (81b9fe1d7644)
+
+	* src/qtgui/reslist.cpp:
+	Copy entries in the rght clck menu copy both to selection and
+	clipboard
+
+2008-10-18 07:04 +0000  dockes    (33b4eec42ac8)
+
+	* website/BUGS.html: new file.
+	* website/BUGS.html, website/download.html:
+	*** empty log message ***
+
+2008-10-18 06:51 +0000  dockes    (b885092a2488)
+
+	* website/CHANGES.html: new file.
+	* website/CHANGES.txt: deleted file.
+	* website/BUGS.txt, website/CHANGES.html, website/CHANGES.txt,
+	website/download.html, website/index.html.en, website/index.html.fr:
+	*** empty log message ***
+
+2008-10-15 08:30 +0000  dockes    (6657f5e0f698)
+
+	* src/sampleconf/recoll.conf.in:
+	add .git .hg .bzr to skipped
+
+2008-10-14 07:50 +0000  dockes    (2321044edfb9 [RECOLL_1_11_0])
+
+	* src/rcldb/searchdata.cpp, src/rcldb/searchdata.h,
+	src/utils/refcntr.h:
+	highlighting would not work with cat filt active because ClausSub
+	did not implement getTerms
+
+2008-10-14 06:07 +0000  dockes    (6ecc84bb82aa)
+
+	* src/index/recollindex.cpp:
+	print version in recollindex help
+
+2008-10-13 11:46 +0000  dockes    (1cd1451bbb74)
+
+	* src/excludefile, src/makesrcdist.sh:
+	change in excludefile handling
+
+2008-10-13 11:46 +0000  dockes    (609bbaa80120)
+
+	* src/qtgui/ssearch_w.cpp, src/query/filtseq.cpp:
+	warnings
+
+2008-10-13 11:44 +0000  dockes    (809f8c3eb265)
+
+	* src/qtgui/plaintorich.cpp:
+	compil warn
+
+2008-10-13 08:35 +0000  dockes    (a5d743b90fe8)
+
+	* src/INSTALL, src/README:
+	*** empty log message ***
+
+2008-10-13 08:23 +0000  dockes    (5874f0e6fc82)
+
+	* src/query/recollq.cpp:
+	dont change recollq output, used for tests!
+
+2008-10-13 07:57 +0000  dockes    (bf5637bbe652)
+
+	* src/doc/user/usermanual.sgml, src/qtgui/i18n/recoll_de.ts,
+	src/qtgui/i18n/recoll_fr.ts, src/qtgui/i18n/recoll_it.ts,
+	src/qtgui/i18n/recoll_ru.ts, src/qtgui/i18n/recoll_tr.ts,
+	src/qtgui/i18n/recoll_uk.ts, src/qtgui/i18n/recoll_xx.ts,
+	src/qtgui/rclmain.ui, src/qtgui/rclmain_w.cpp:
+	messages and manual
+
+2008-10-10 08:19 +0000  dockes    (d5a5fb9959b7)
+
+	* src/doc/user/usermanual.sgml:
+	added python api doc
+
+2008-10-10 08:18 +0000  dockes    (4771280faa9c)
+
+	* src/python/recoll/pyrecoll.cpp, src/python/samples/rclmbox.py,
+	src/python/samples/recollqsd.py:
+	fix executesd
+
+2008-10-10 08:05 +0000  dockes    (f613511f9e1a)
+
+	* src/python/recoll/pyrecoll.cpp:
+	add delete purge
+
+2008-10-10 08:04 +0000  dockes    (2547574a0242)
+
+	* src/internfile/internfile.cpp:
+	log levels
+
+2008-10-09 09:36 +0000  dockes    (4fb973a50769)
+
+	* src/python/recoll/pyrecoll.cpp:
+	stemming went from query to searchdata
+
+2008-10-09 09:21 +0000  dockes    (e112c834fca2)
+
+	* src/filters/rclflac, src/filters/rclid3, src/sampleconf/mimeconf:
+	improved mp3/flac filter. use pstotext directly
+
+2008-10-09 09:19 +0000  dockes    (cf2e0559c3d9)
+
+	* src/internfile/mh_exec.cpp, src/internfile/mimehandler.cpp:
+	need to transcode text to utf-8
+
+2008-10-09 09:19 +0000  dockes    (d250c2a0a26f)
+
+	* src/utils/transcode.h:
+	comments
+
+2008-10-09 06:41 +0000  dockes    (721f4b3d08f4)
+
+	* src/filters/rclimg:
+	*** empty log message ***
+
+2008-10-09 06:38 +0000  dockes    (e9d7fde008f9)
+
+	* src/filters/rclimg:
+	*** empty log message ***
+
+2008-10-09 06:31 +0000  dockes    (4b76370655c3)
+
+	* src/filters/rclimg:
+	conform to filter error usual protocol
+
+2008-10-08 16:15 +0000  dockes    (d60a26ce4397)
+
+	* src/common/rclconfig.cpp, src/common/rclconfig.h,
+	src/filters/rcldvi, src/index/indexer.cpp, src/index/indexer.h,
+	src/internfile/internfile.cpp, src/internfile/internfile.h,
+	src/qtgui/rclmain.ui, src/qtgui/rclmain_w.cpp,
+	src/qtgui/rclmain_w.h, src/utils/smallut.cpp, src/utils/smallut.h:
+	added menu to display missing helpers
+
+2008-10-08 16:12 +0000  dockes    (30da9114943c)
+
+	* src/doc/user/usermanual.sgml:
+	*** empty log message ***
+
+2008-10-08 08:27 +0000  dockes    (8a78ee8cc158)
+
+	* src/filters/rclabw, src/filters/rcldjvu, src/filters/rclid3,
+	src/filters/rclkwd, src/filters/rclogg, src/filters/rclopxml,
+	src/filters/rclppt, src/filters/rclsoff, src/filters/rclsvg,
+	src/filters/rclxls, src/sampleconf/fields, src/sampleconf/mimeconf:
+	improved rclid3 and rclogg
+
+2008-10-07 16:19 +0000  dockes    (c922f7984106)
+
+	* src/qtgui/preview_w.cpp:
+	message
+
+2008-10-07 08:07 +0000  dockes    (7e7e59b8a48f)
+
+	* src/doc/user/usermanual.sgml:
+	query language precisions
+
+2008-10-07 06:52 +0000  dockes    (0b46df2d0a1d)
+
+	* src/query/wasatorcl.cpp:
+	*** empty log message ***
+
+2008-10-07 06:44 +0000  dockes    (a6e8f2583e65)
+
+	* src/ChangeLog, src/common/rclconfig.cpp,
+	src/python/recoll/pyrecoll.cpp, src/rcldb/rcldb.cpp,
+	src/rcldb/rclquery.cpp, src/sampleconf/fields:
+	let rclconfig take care of field name lowercasing
+
+2008-10-06 06:22 +0000  dockes    (26eae5316b88)
+
+	* src/internfile/mh_exec.cpp, src/internfile/mh_exec.h,
+	src/internfile/mimehandler.cpp, src/utils/execmd.cpp:
+	Disable filters with missing helpers for the whole indexing pass
+
+2008-10-04 14:26 +0000  dockes    (556c7fa5998c)
+
+	* src/index/indexer.cpp, src/internfile/Filter.h,
+	src/internfile/internfile.cpp, src/internfile/internfile.h,
+	src/internfile/mh_exec.cpp, src/internfile/mh_exec.h,
+	src/internfile/mh_html.h, src/internfile/mh_mail.cpp,
+	src/internfile/mh_mail.h, src/internfile/mh_mbox.cpp,
+	src/internfile/mh_mbox.h, src/internfile/mh_text.h,
+	src/internfile/mh_unknown.h, src/internfile/mimehandler.cpp,
+	src/internfile/mimehandler.h:
+	allow specifying format and charset for ext filters. Cache and reuse
+	filters
+
+2008-10-03 16:02 +0000  dockes    (6f5d875c2923)
+
+	* src/utils/Makefile:
+	*** empty log message ***
+
+2008-10-03 16:02 +0000  dockes    (8d1e930cc9e2)
+
+	* src/qtgui/preview_w.cpp:
+	message
+
+2008-10-03 08:19 +0000  dockes    (cf75be4a88cf)
+
+	* src/common/rclconfig.cpp:
+	*** empty log message ***
+
+2008-10-03 08:09 +0000  dockes    (068bc565bf8b)
+
+	* src/common/rclconfig.cpp, src/qtgui/guiutils.cpp,
+	src/qtgui/guiutils.h, src/qtgui/plaintorich.cpp,
+	src/qtgui/plaintorich.h, src/qtgui/preview_w.cpp,
+	src/qtgui/preview_w.h, src/qtgui/uiprefs.ui,
+	src/qtgui/uiprefs_w.cpp:
+	add option to preview html instead of plain text
+
+2008-10-03 06:23 +0000  dockes    (bd1a6a560e25)
+
+	* src/internfile/internfile.cpp, src/internfile/internfile.h:
+	arrange for setting aside an html version when working for preview
+
+2008-10-03 06:17 +0000  dockes    (b10d8b6906a0)
+
+	* src/internfile/mh_html.cpp, src/internfile/mh_html.h:
+	save transcoded html for preview
+
+2008-10-02 13:30 +0000  dockes    (f469cf040425)
+
+	* src/internfile/mh_exec.cpp, src/internfile/mh_exec.h:
+	comments
+
+2008-09-30 12:38 +0000  dockes    (6ff81f690928)
+
+	* src/index/recollindex.cpp, src/qtgui/confgui/confguiindex.cpp,
+	src/qtgui/idxthread.cpp, src/qtgui/idxthread.h, src/qtgui/main.cpp,
+	src/qtgui/rclmain_w.cpp, src/rcldb/rcldb.cpp, src/rcldb/rcldb_p.h:
+	added index format version checking
+
+2008-09-29 11:33 +0000  dockes    (2691a6abf645)
+
+	* src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/python/recoll/pyrecoll.cpp, src/qtgui/rclmain_w.cpp,
+	src/qtgui/reslist.cpp, src/query/docseq.h, src/query/docseqdb.cpp,
+	src/query/docseqdb.h, src/query/filtseq.cpp, src/query/filtseq.h,
+	src/query/recollq.cpp, src/query/sortseq.cpp, src/query/sortseq.h,
+	src/rcldb/rclquery.cpp, src/rcldb/rclquery.h,
+	src/rcldb/searchdata.cpp, src/rcldb/searchdata.h:
+	move stemlang from RclQuery to SearchData. Allow DocSequences to do
+	the sorting/filtering themselves
+
+2008-09-29 08:59 +0000  dockes    (00bc43d91e91)
+
+	* src/kde/kioslave/recoll/kio_recoll.cpp,
+	src/python/recoll/pyrecoll.cpp, src/qtgui/reslist.cpp,
+	src/query/docseq.cpp, src/query/docseq.h, src/query/docseqdb.cpp,
+	src/query/docseqdb.h, src/query/docseqhist.cpp,
+	src/query/docseqhist.h, src/query/filtseq.cpp, src/query/filtseq.h,
+	src/query/recollq.cpp, src/query/sortseq.cpp, src/query/sortseq.h,
+	src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, src/rcldb/rclquery.cpp,
+	src/rcldb/rclquery.h:
+	doc.pc now only place where relevancy is stored
+
+2008-09-29 07:13 +0000  dockes    (da809a196cc5)
+
+	* src/qtgui/reslist.h:
+	comments
+
+2008-09-29 06:58 +0000  dockes    (dccf6cb38207)
+
+	* src/python/recoll/pyrecoll.cpp, src/query/recollq.cpp,
+	src/rcldb/rclquery.cpp, src/rcldb/rclquery.h,
+	src/rcldb/searchdata.cpp, src/rcldb/searchdata.h:
+	move sort params from searchdata to rclquery
+
+2008-09-28 14:20 +0000  dockes    (0ce1cca8cac2)
+
+	* src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, src/qtgui/rclmain.ui,
+	src/qtgui/rclmain_w.cpp, src/qtgui/rclmain_w.h,
+	src/qtgui/reslist.cpp, src/qtgui/reslist.h, src/qtgui/sort_w.cpp,
+	src/query/filtseq.h, src/query/sortseq.cpp, src/query/sortseq.h,
+	src/sampleconf/mimeconf:
+	1st impl of catg filtering in reslist
+
+2008-09-28 07:40 +0000  dockes    (5e29feefc554)
+
+	* src/query/filtseq.cpp, src/query/filtseq.h: new file.
+	* src/lib/Makefile, src/lib/mkMake, src/qtgui/rclmain_w.cpp,
+	src/qtgui/rclmain_w.h, src/qtgui/reslist.cpp, src/qtgui/reslist.h,
+	src/query/docseq.h, src/query/docseqdb.cpp, src/query/docseqdb.h,
+	src/query/filtseq.cpp, src/query/filtseq.h:
+	rearranged some reslist/rclmain functions + add but not use filtseq
+	code
+
+2008-09-25 09:08 +0000  dockes    (8588b8cc05d1)
+
+	* src/python/samples/rcldlkp.py, src/python/samples/rclmbox.py:
+	*** empty log message ***
+
+2008-09-25 09:07 +0000  dockes    (40e028763fab)
+
+	* src/python/xesam/xesam-recoll-service:
+	arret apres hackfest
+
+2008-09-25 06:17 +0000  dockes    (811009efeb96)
+
+	* src/qtgui/i18n/recoll_fr.ts, src/qtgui/i18n/recoll_it.ts,
+	src/qtgui/i18n/recoll_ru.ts, src/qtgui/i18n/recoll_tr.ts,
+	src/qtgui/i18n/recoll_uk.ts, src/qtgui/i18n/recoll_xx.ts:
+	*** empty log message ***
+
+2008-09-25 06:14 +0000  dockes    (ce29702ab7cc)
+
+	* src/qtgui/i18n/recoll_de.ts, src/qtgui/i18n/recoll_fr.ts:
+	*** empty log message ***
+
+2008-09-25 06:02 +0000  dockes    (a065c833e601)
+
+	* src/qtgui/i18n/recoll_ru.ts, src/qtgui/i18n/recoll_uk.ts:
+	new russian/ukrainian translations
+
+2008-09-25 06:00 +0000  dockes    (ba80af83d32f)
+
+	* src/qtgui/advsearch_w.cpp, src/qtgui/confgui/confguiindex.cpp,
+	src/qtgui/i18n/recoll_de.ts, src/qtgui/i18n/recoll_fr.ts,
+	src/qtgui/i18n/recoll_it.ts, src/qtgui/i18n/recoll_ru.ts,
+	src/qtgui/i18n/recoll_tr.ts, src/qtgui/i18n/recoll_uk.ts,
+	src/qtgui/i18n/recoll_xx.ts, src/qtgui/rclmain_w.cpp,
+	src/qtgui/reslist.cpp, src/qtgui/uiprefs.ui:
+	fixed typos
+
+2008-09-24 06:50 +0000  dockes    (695914bd6d5d)
+
+	* src/kde/recoll_applet/0README.Recoll:
+	*** empty log message ***
+
+2008-09-24 06:44 +0000  dockes    (48bbf0a115cc)
+
+	* src/query/recollq.cpp:
+	command line args must be processed as local 8 bit
+
+2008-09-24 06:34 +0000  dockes    (e90ac2ed62fe)
+
+	* src/doc/user/usermanual.sgml:
+	*** empty log message ***
+
+2008-09-24 05:35 +0000  dockes    (36e2522b06b2)
+
+	* src/qtgui/main.cpp:
+	command line args must be processed as local 8 bit
+
+2008-09-24 05:31 +0000  dockes    (9b420f1d25f8)
+
+	* src/qtgui/main.cpp:
+	command line args must be processed as local 8 bit
+
+2008-09-23 14:32 +0000  dockes    (cd440e5917d3)
+
+	* src/configure, src/configure.ac:
+	use $QMAKE not qmake when checking version
+
+2008-09-16 10:19 +0000  dockes    (2bc72ad13a9b)
+
+	* src/python/recoll/pyrecoll.cpp:
+	fields, indexing i/f
+
+2008-09-16 10:13 +0000  dockes    (ff10e8072c66)
+
+	* src/qtgui/rclmain_w.cpp:
+	have to setkeydir before calling internfile when opening
+
+2008-09-16 08:18 +0000  dockes    (c78945994f7c)
+
+	* src/python/samples/recollqsd.py: new file.
+	* src/common/rclconfig.cpp, src/common/rclconfig.h,
+	src/internfile/internfile.cpp, src/python/recoll/pyrecoll.cpp,
+	src/python/recoll/setup.py, src/python/samples/recollqsd.py,
+	src/python/xesam/xesam-recoll-service, src/query/recollq.cpp,
+	src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, src/rcldb/rcldb_p.h,
+	src/rcldb/rcldoc.cpp, src/rcldb/rcldoc.h, src/rcldb/rclquery.cpp,
+	src/rcldb/rclquery.h, src/rcldb/searchdata.cpp,
+	src/rcldb/searchdata.h, src/sampleconf/fields:
+	general field name handling cleanup + sort facility in rclquery
+
+2008-09-16 08:13 +0000  dockes    (bd4c0f6fd812)
+
+	* src/internfile/mh_mail.cpp:
+	emit field for recipients
+
+2008-09-15 08:03 +0000  dockes    (11ba5592559e)
+
+	* src/sampleconf/fields, src/sampleconf/mimeconf,
+	src/sampleconf/mimemap, src/sampleconf/mimeview:
+	added rcltext/python/purple
+
+2008-09-15 08:02 +0000  dockes    (8af411ff9bf6)
+
+	* src/filters/rclpurple: new file.
+	* src/filters/rclpurple, src/qtgui/mtpics/README,
+	src/utils/base64.cpp, src/utils/smallut.cpp, src/utils/smallut.h,
+	src/utils/transcode.cpp:
+	*** empty log message ***
+
+2008-09-15 07:55 +0000  dockes    (49401228a5ef)
+
+	* src/filters/rclpython, src/qtgui/mtpics/pidgin.png,
+	src/qtgui/mtpics/text-x-python.png: new file.
+	* src/filters/rclpython, src/qtgui/mtpics/pidgin.png,
+	src/qtgui/mtpics/text-x-python.png:
+	*** empty log message ***
+
+2008-09-13 12:56 +0000  dockes    (299644545ca0)
+
+	* src/python/xesam/xesam-recoll-service: new file.
+	* src/python/xesam/xesam-recoll-service:
+	*** empty log message ***
+
+2008-09-12 11:35 +0000  dockes    (5c85f26d124d)
+
+	* src/sampleconf/mimeconf:
+	index c code with the new rcltext generic filter
+
+2008-09-12 11:30 +0000  dockes    (b8277032f494)
+
+	* src/filters/rcltext: new file.
+	* src/filters/rcltext:
+	*** empty log message ***
+
+2008-09-09 12:58 +0000  dockes    (a3afe9b35b57)
+
+	* src/rcldb/rcldb.cpp:
+	debug messages
+
+2008-09-08 16:49 +0000  dockes    (a18ab0c682a4)
+
+	* src/rcldb/rcldoc.cpp, src/sampleconf/fields: new file.
+	* src/common/rclconfig.cpp, src/common/rclconfig.h,
+	src/internfile/internfile.cpp, src/lib/Makefile, src/lib/mkMake,
+	src/python/recoll/pyrecoll.cpp, src/python/samples/recollq.py,
+	src/qtgui/preview_w.cpp, src/qtgui/reslist.cpp, src/query/docseq.h,
+	src/query/docseqdb.cpp, src/query/recollq.cpp, src/rcldb/rcldb.cpp,
+	src/rcldb/rcldoc.cpp, src/rcldb/rcldoc.h, src/recollinstall.in,
+	src/sampleconf/fields:
+	foundation work for configurable stored/indexed fields
+
+2008-09-08 15:47 +0000  dockes    (861e4211280b)
+
+	* src/rcldb/searchdata.h:
+	unused args warning
+
+2008-09-08 15:47 +0000  dockes    (3f6468e20038)
+
+	* src/utils/smallut.cpp:
+	test driver
+
+2008-09-08 15:46 +0000  dockes    (581ee503208b)
+
+	* src/ChangeLog:
+	*** empty log message ***
+
+2008-09-07 07:22 +0000  dockes    (dfe4dd53d0b9)
+
+	* src/Makefile.in, src/qt4gui/uifrom3:
+	cleanup
+
+2008-09-07 07:08 +0000  dockes    (95c2a94321a3)
+
+	* src/Makefile.in:
+	cleaning
+
+2008-09-07 06:43 +0000  dockes    (6294638c2504)
+
+	* src/Makefile.in, src/VERSION, src/mk/localdefs.in:
+	improved cleaning
+
+2008-09-05 11:45 +0000  dockes    (8532ebb84453)
+
+	* src/rcldb/rclquery.cpp:
+	gcc4.3
+
+2008-09-05 10:36 +0000  dockes    (2ada099a7545)
+
+	* src/internfile/internfile.cpp, src/internfile/internfile.h:
+	strimline and restructure the doctree-exploring loop to make it
+	close to understandable
+
+2008-09-05 10:34 +0000  dockes    (404aa368d498)
+
+	* src/rcldb/rcldb.cpp, src/rcldb/rcldb_p.h, src/rcldb/rclquery.cpp:
+	add relevancyrating to the metadata when querying
+
+2008-09-05 10:33 +0000  dockes    (bc0210deda18)
+
+	* src/internfile/myhtmlparse.cpp:
+	accept iso date format (2008-09-05T11:55:32)
+
+2008-09-05 10:26 +0000  dockes    (4b17d6defb3c)
+
+	* src/doc/man/recollindex.1:
+	*** empty log message ***
+
+2008-09-01 20:39 +0000  dockes    (39ff03712b54)
+
+	* src/sampleconf/mimeconf, src/sampleconf/mimeview:
+	openxml types
+
+2008-09-01 17:31 +0000  dockes    (f0fde685acc8)
+
+	* src/filters/rclopxml:
+	sort of works
+
+2008-09-01 17:21 +0000  dockes    (dfd3281994ff)
+
+	* src/filters/rclopxml: new file.
+	* src/filters/rclopxml:
+	almost almost ok excepts outputs some formatting directives for ppt
+
+2008-08-31 15:28 +0000  dockes    (7756d792699d [RECOLL_1_11_1exp1, RECOLL_1_11_1exp2, RECOLL_1_11_1exp])
+
+	* packaging/debian/changelog, packaging/debian/control,
+	packaging/debian/rules:
+	*** empty log message ***
+
+2008-08-30 12:21 +0000  dockes    (60b122f6f4d6)
+
+	* src/rcldb/rcldb.cpp:
+	typo in xfsn len fix
+
+2008-08-30 07:38 +0000  dockes    (d516181ad7a0)
+
+	* src/rcldb/rcldb.cpp:
+	truncate simple file names at max term length
+
+2008-08-30 07:34 +0000  dockes    (59326d99e18d)
+
+	* src/utils/smallut.cpp:
+	utf8truncate
+
+2008-08-30 07:31 +0000  dockes    (8f5c5fba53d1)
+
+	* src/utils/smallut.cpp, src/utils/smallut.h:
+	utf8truncate
+
+2008-08-29 14:12 +0000  dockes    (41c405565cd4)
+
+	* tests/boolean/boolean.sh:
+	or->OR
+
+2008-08-29 13:05 +0000  dockes    (6454f838026e)
+
+	* src/internfile/mh_mbox.cpp:
+	accept weird date format in From lines used by (old?) tbird
+
+2008-08-29 09:51 +0000  dockes    (b830b6d6b04d)
+
+	* src/index/recollindex.cpp:
+	be more informative when monitoring not configured
+
+2008-08-28 15:44 +0000  dockes    (27a9bf47f895)
+
+	* src/python/recoll/pyrecoll.cpp, src/python/samples/rcldlkp.py,
+	src/python/samples/rclmbox.py, src/rcldb/rcldb.cpp,
+	src/sampleconf/mimeview:
+	*** empty log message ***
+
+2008-08-28 15:43 +0000  dockes    (d28eac37bdd9)
+
+	* src/query/wasatorcl.cpp, src/rcldb/searchdata.h:
+	use a refcntr for the sub SearchData
+
+2008-08-28 15:42 +0000  dockes    (417a8f1346df)
+
+	* src/rcldb/searchdata.cpp:
+	ensure that a negative clause is not first or only in list
+
+2008-08-27 12:34 +0000  dockes    (658ca4b955c8)
+
+	* src/python/recoll/pyrecoll.cpp:
+	reorganize+traces
+
+2008-08-27 12:12 +0000  dockes    (37791b8e66aa)
+
+	* src/python/recoll/pyrecoll.cpp:
+	doc
+
+2008-08-26 13:50 +0000  dockes    (af43f86ffe99)
+
+	* src/query/wasastringtoquery.cpp:
+	make AND and OR case-sensitive
+
+2008-08-26 13:47 +0000  dockes    (bda91f767e32)
+
+	* src/query/wasastringtoquery.cpp, src/query/wasastringtoquery.h,
+	src/query/wasatorcl.cpp:
+	try to parse the whole of Xesam user language 0.95
+
+2008-08-26 07:56 +0000  dockes    (6a17726c7e41)
+
+	* src/python/recoll/pyrecoll.cpp, src/python/recoll/setup.py,
+	src/python/samples/rcldlkp.py, src/python/samples/rclmbox.py,
+	src/python/samples/recollq.py:
+	renamed a few things
+
+2008-08-26 07:38 +0000  dockes    (c97de92889e3)
+
+	* src/rcldb/rcldb.cpp, src/rcldb/rcldb.h:
+	copy author back from data record to Doc
+
+2008-08-26 07:36 +0000  dockes    (d6e27e630844)
+
+	* src/python/samples/rcldlkp.py, src/python/samples/rclmbox.py,
+	src/python/samples/recollq.py: new file.
+	* src/python/recoll/pyrecoll.cpp, src/python/recoll/setup.py,
+	src/python/samples/rcldlkp.py, src/python/samples/rclmbox.py,
+	src/python/samples/recollq.py:
+	*** empty log message ***
+
+2008-08-26 07:33 +0000  dockes    (1d6816c32358)
+
+	* src/rcldb/rcldoc.h:
+	comments
+
+2008-08-26 07:33 +0000  dockes    (4e86d4c4f3d9)
+
+	* src/internfile/internfile.cpp, src/internfile/internfile.h,
+	src/qtgui/reslist.cpp:
+	move ipath computations from reslist to internfile
+
+2008-08-26 07:31 +0000  dockes    (b44f4950a084)
+
+	* src/internfile/mh_exec.cpp, src/internfile/mh_exec.h:
+	implement skip_to_document
+
+2008-08-25 16:12 +0000  dockes    (936499917659)
+
+	* src/sampleconf/mimeconf, src/sampleconf/mimemap,
+	src/sampleconf/mimeview:
+	opxml formats
+
+2008-07-30 13:16 +0000  dockes    (0f1387a8a565)
+
+	* src/rcldb/stemdb.cpp:
+	fixed inocuous but nasty bad string value test
+
+2008-07-29 08:25 +0000  dockes    (a7888d48c2a6)
+
+	* src/rcldb/rcldb.h, src/rcldb/rcldoc.h:
+	comments
+
+2008-07-29 06:25 +0000  dockes    (28ebb7cac39d)
+
+	* src/index/indexer.cpp, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h,
+	src/rcldb/rcldb_p.h, src/rcldb/rcldoc.h:
+	use explicit parent udi term instead of Qterm structure to express
+	parent-child relationship
+
+2008-07-28 12:24 +0000  dockes    (5cb926be362f)
+
+	* src/index/indexer.cpp, src/lib/Makefile, src/lib/mkMake,
+	src/query/docseqhist.cpp, src/rcldb/pathhash.cpp,
+	src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, src/rcldb/rcldoc.h,
+	src/utils/Makefile, src/utils/fileudi.cpp:
+	replaced path|ipath with unique doc id in rcldb i/f. Still depends
+	on udi structure for parent/child
+
+2008-07-28 10:20 +0000  dockes    (07bc933efb70)
+
+	* src/utils/fileudi.cpp, src/utils/fileudi.h: new file.
+	* src/utils/fileudi.cpp, src/utils/fileudi.h:
+	*** empty log message ***
+
+2008-07-28 08:42 +0000  dockes    (825cb66f8be3)
+
+	* src/index/indexer.cpp, src/qtgui/uiprefs_w.cpp, src/rcldb/rcldb.cpp,
+	src/rcldb/rcldb.h, src/rcldb/rcldb_p.h, src/rcldb/rcldoc.h,
+	src/utils/base64.h:
+	begin i/f cleanup: opacify doc uptodate sig (size+mtime)
+
+2008-07-04 09:29 +0000  dockes    (6551cb55fa98 [RECOLL_1_10_3])
+
+	* src/qtgui/plaintorich.cpp:
+	turn dbg off
+
+2008-07-01 13:00 +0000  dockes    (19e926f99256)
+
+	* src/ChangeLog, src/VERSION:
+	1.10.3: checkpoint for 1.10 branch maintenance
+
+2008-07-01 12:11 +0000  dockes    (910f409cb0be)
+
+	* src/bincimapmime/convert.h:
+	suppressed a few wasteful string-cstr conversions
+
+2008-07-01 11:57 +0000  dockes    (913963d84bc5)
+
+	* src/bincimapmime/convert.cc, src/bincimapmime/convert.h,
+	src/bincimapmime/mime-parseonlyheader.cc, src/bincimapmime/mime-
+	printheader.cc:
+	suppressed a few wasteful string-cstr conversions
+
+2008-07-01 11:51 +0000  dockes    (54f3a868fb92)
+
+	* src/bincimapmime/address.cc, src/internfile/mh_mail.cpp,
+	src/query/wasastringtoquery.cpp, src/query/xadump.cpp,
+	src/rcldb/rcldb.cpp, src/rcldb/rclquery.cpp, src/rcldb/searchdata.h,
+	src/utils/conftree.cpp, src/utils/conftree.h, src/utils/idfile.cpp,
+	src/utils/mimeparse.cpp, src/utils/pathut.cpp, src/utils/pathut.h,
+	src/utils/smallut.cpp:
+	suppressed a few wasteful string-cstr conversions
+
+2008-07-01 10:29 +0000  dockes    (3e1aa9958af4)
+
+	* src/index/mimetype.cpp, src/index/mimetype.h,
+	src/internfile/mh_mail.cpp:
+	mh_mail now uses mimetype() to try and better identify application
+	/octet-stream
+
+2008-07-01 08:31 +0000  dockes    (3665315a4fdd)
+
+	* src/ChangeLog:
+	*** empty log message ***
+
+2008-07-01 08:31 +0000  dockes    (928e08cb2cc8)
+
+	* src/rcldb/rclquery.cpp, src/rcldb/rclquery.h,
+	src/rcldb/rclquery_p.h:
+	small cleanups and comments
+
+2008-07-01 08:28 +0000  dockes    (e5847d808877)
+
+	* src/rcldb/rcldb.h:
+	comments
+
+2008-07-01 08:27 +0000  dockes    (97cd50050ecf)
+
+	* src/qtgui/plaintorich.cpp, src/qtgui/plaintorich.h,
+	src/qtgui/preview_w.cpp, src/qtgui/preview_w.h,
+	src/qtgui/reslist.cpp:
+	cleaned up plaintorich. Now a proper subclassable class + highlights
+	multiple groups, not just the first
+
+2008-07-01 08:27 +0000  dockes    (3ef1709e5955)
+
+	* src/qtgui/confgui/confguiindex.cpp:
+	typo
+
+2008-07-01 08:26 +0000  dockes    (f6ddabbf59a2)
+
+	* src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, src/utils/pathut.cpp,
+	src/utils/pathut.h:
+	moved printableUrl() to pathut
+
+2008-07-01 08:24 +0000  dockes    (413a8a75c5af)
+
+	* src/python/recoll/pyrecoll.cpp:
+	added abstract i/f
+
+2008-06-17 11:43 +0000  dockes    (009a912c3daf)
+
+	* src/python/recoll/pyrecoll.cpp, src/python/recoll/setup.py:
+	basic functionality ok, more funcs and options needed
+
+2008-06-13 18:23 +0000  dockes    (58a4b54fa103)
+
+	* src/utils/refcntr.h:
+	separated rcldb and rclquery
+
+2008-06-13 18:22 +0000  dockes    (a52ef2510839)
+
+	* src/rcldb/rcldb_p.h, src/rcldb/rclquery.cpp, src/rcldb/rclquery.h,
+	src/rcldb/rclquery_p.h: new file.
+	* src/kde/kioslave/recoll/kio_recoll.cpp, src/lib/Makefile,
+	src/lib/mkMake, src/python/recoll/pyrecoll.cpp,
+	src/python/recoll/setup.py, src/qtgui/main.cpp,
+	src/qtgui/rclmain_w.cpp, src/query/docseq.h, src/query/docseqdb.cpp,
+	src/query/docseqdb.h, src/query/recollq.cpp, src/rcldb/rcldb.cpp,
+	src/rcldb/rcldb.h, src/rcldb/rcldb_p.h, src/rcldb/rclquery.cpp,
+	src/rcldb/rclquery.h, src/rcldb/rclquery_p.h,
+	src/rcldb/searchdata.h, src/utils/pathut.cpp, src/utils/refcntr.h:
+	separated rcldb and rclquery
+
+2008-06-13 18:14 +0000  dockes    (e39af9faad92)
+
+	* src/common/autoconfig.h.in, src/configure, src/configure.ac,
+	src/mk/Darwin, src/mk/FreeBSD, src/mk/Linux, src/mk/OpenBSD:
+	move few things from the mk/sys files to autoconf
+
+2008-06-10 06:30 +0000  dockes    (822b88ae3d1f)
+
+	* src/qtgui/mtpics/License_sidux.txt: new file.
+	* src/qtgui/mtpics/License_sidux.txt:
+	*** empty log message ***
+
+2008-06-09 09:14 +0000  dockes    (c9953f1a54ee)
+
+	* src/filters/rclsiduxman, src/qtgui/mtpics/sidux-book.png: new file.
+	* src/filters/rclsiduxman, src/qtgui/mtpics/sidux-book.png,
+	src/sampleconf/mimeconf, src/sampleconf/mimemap,
+	src/sampleconf/mimeview:
+	sidux manual support
+
+2008-05-27 10:46 +0000  dockes    (2afb8b8ec073)
+
+	* 1.10.2
+
+2008-05-27 10:45 +0000  dockes    (62c7f8ba0eb8)
+
+	* packaging/debian/changelog, packaging/rpm/recoll.spec,
+	packaging/rpm/recollfedora.spec, packaging/rpm/recollmdk.spec,
+	src/python/recoll/pyrecoll.cpp, src/python/recoll/setup.py,
+	website/BUGS.txt, website/CHANGES.txt, website/download.html,
+	website/features.html, website/index.html.en, website/index.html.fr,
+	website/styles/style.css:
+	1.10.2
+
+2008-05-27 06:47 +0000  dockes    (b120e7a059cd [RECOLL_1_10_2])
+
+	* src/README:
+	*** empty log message ***
+
+2008-05-27 06:46 +0000  dockes    (70d9bb153b58)
+
+	* src/VERSION:
+	1.10.2
+
+2008-05-27 06:18 +0000  dockes    (305829599fb1)
+
+	* src/utils/pathut.cpp:
+	suppress warning
+
+2008-05-27 05:40 +0000  dockes    (f611211f012a)
+
+	* src/internfile/internfile.cpp:
+	log message
+
+2008-05-26 09:07 +0000  dockes    (dbb469971d76)
+
+	* src/ChangeLog:
+	*** empty log message ***
+
+2008-05-21 07:21 +0000  dockes    (b1ee79619cca)
+
+	* src/qtgui/advsearch_w.cpp, src/qtgui/confgui/confgui.cpp,
+	src/qtgui/confgui/confgui.h, src/qtgui/preview_w.cpp,
+	src/qtgui/reslist.cpp, src/utils/idfile.cpp:
+	openSuse 11 compile issues
+
+2008-05-20 10:09 +0000  dockes    (f047b0f61753)
+
+	* src/qtgui/advsearch_w.cpp, src/rcldb/rcldb.cpp:
+	*** empty log message ***
+
+2008-05-20 10:09 +0000  dockes    (f2e76fada01c)
+
+	* src/unac/unac.c:
+	make strict gcc happy
+
+2008-05-09 12:34 +0000  dockes    (be08db2c226e)
+
+	* src/python/recoll/pyrecoll.cpp, src/python/recoll/setup.py: new
+	file.
+	* src/python/recoll/pyrecoll.cpp, src/python/recoll/setup.py:
+	*** empty log message ***
+
+2008-05-08 10:00 +0000  dockes    (2ff9f42dc279)
+
+	* src/rcldb/searchdata.h:
+	comments
+
+2008-05-08 09:57 +0000  dockes    (bd6106d7f9ab)
+
+	* src/utils/smallut.cpp, src/utils/smallut.h:
+	*** empty log message ***
+
+2008-05-08 09:31 +0000  dockes    (70f8eab20535)
+
+	* src/ChangeLog:
+	*** empty log message ***
+
+2008-05-07 06:14 +0000  dockes    (f3d36126287d)
+
+	* src/doc/user/usermanual.sgml:
+	*** empty log message ***
+
+2008-05-05 20:31 +0000  dockes    (d271616c4b99)
+
+	* src/doc/user/usermanual.sgml:
+	*** empty log message ***
+
+2008-05-05 20:28 +0000  dockes    (02b1484f3eee)
+
+	* src/doc/user/usermanual.sgml, src/qtgui/guiutils.cpp,
+	src/qtgui/guiutils.h, src/qtgui/preview_w.cpp,
+	src/qtgui/reslist.cpp, src/qtgui/uiprefs.ui,
+	src/qtgui/uiprefs_w.cpp:
+	allow setting query term highlight color in prefs
+
+2008-05-05 16:38 +0000  dockes    (763298305d15)
+
+	* src/qtgui/reslist.cpp:
+	Edit -> Open in links
+
+2008-05-05 13:13 +0000  dockes    (d2fc5c651024)
+
+	* src/bincimapmime/mime-parsefull.cc:
+	part data was sometimes truncated because of bad handling of
+	consecutive mime boundaries. Most common symptom: error in base64
+	decoding
+
+2008-04-18 11:41 +0000  dockes    (32155182993c)
+
+	* src/mk/localdefs.in:
+	get CXXFLAGS from autoconf
+
+2008-04-18 11:39 +0000  dockes    (72073f033a45)
+
+	* src/query/xadump.cpp:
+	xadump would sometimes dump core with -b
+
+2008-04-18 11:38 +0000  dockes    (ef6566c2ac8e)
+
+	* src/qtgui/preview_w.cpp:
+	walking the search terms hits backwards would go forward
+
+2008-04-18 11:37 +0000  dockes    (018890cfdbd7)
+
+	* src/utils/Makefile, src/utils/base64.cpp, src/utils/readfile.cpp:
+	base64 testing code
+
+2008-02-19 08:02 +0000  dockes    (34b45c5acd1c)
+
+	* src/qtgui/main.cpp:
+	make first sort after -q work
+
+2008-02-19 08:02 +0000  dockes    (1293fc15412b)
+
+	* src/qtgui/rclmain_w.cpp:
+	comments+debug
+
+2008-02-19 07:41 +0000  dockes    (efbaeed44ee9)
+
+	* src/rcldb/rcldb.cpp:
+	traces
+
+2008-02-11 10:21 +0000  dockes    (81923201adc7)
+
+	* src/utils/idfile.cpp:
+	hack for Mark B.: allow treating (single-message) mbox files as
+	message/rfc822
+
+2008-02-08 08:37 +0000  dockes    (ddcce838e7d0)
+
+	* src/qtgui/i18n/recoll_de.ts:
+	update by Frank Thieme
+
+2008-02-05 10:45 +0000  dockes    (51a501984fd4)
+
+	* src/sampleconf/mimeconf:
+	*** empty log message ***
+
+2008-02-03 16:24 +0000  dockes    (825bb43d67ca)
+
+	* src/sampleconf/mimeconf, src/sampleconf/mimemap,
+	src/sampleconf/mimeview:
+	rclsvg
+
+2008-02-03 16:05 +0000  dockes    (81794c3a6d9e)
+
+	* src/filters/rclsvg:
+	*** empty log message ***
+
+2008-02-03 16:04 +0000  dockes    (40c35a7fb1bb)
+
+	* src/filters/rclsvg: new file.
+	* src/filters/rclsvg:
+	*** empty log message ***
+
+2008-01-29 10:14 +0000  dockes    (fd74eae7e8b4 [RECOLL_1_10_1])
+
+	* src/README:
+	*** empty log message ***
+
+2008-01-29 10:11 +0000  dockes    (a1fee09bfc3d)
+
+	* src/rcldb/searchdata.h:
+	m_haveWildCards was sometimes not init
+
+2008-01-29 08:41 +0000  dockes    (ebc971754f92)
+
+	* src/ChangeLog:
+	*** empty log message ***
+
+2008-01-24 09:34 +0000  dockes    (301425122a56)
+
+	* src/qtgui/main.cpp:
+	*** empty log message ***
+
+2008-01-17 11:15 +0000  dockes    (af11c991aff3)
+
+	* src/qtgui/idxthread.cpp, src/qtgui/idxthread.h,
+	src/qtgui/rclmain.ui, src/qtgui/rclmain_w.cpp,
+	src/qtgui/rclmain_w.h:
+	allow stopping indexing through menu action
+
+2008-01-17 11:14 +0000  dockes    (4c108ac6227a)
+
+	* src/query/wasastringtoquery.h:
+	comment
+
+2008-01-17 11:13 +0000  dockes    (7b2a9225dbef)
+
+	* src/doc/user/usermanual.sgml:
+	*** empty log message ***
+
+2008-01-16 11:14 +0000  dockes    (ddfe49735bc2)
+
+	* src/query/wasatorcl.cpp, src/rcldb/searchdata.cpp,
+	src/rcldb/searchdata.h:
+	express query language OR chains as rcldb subqueries so that field
+	specs will work inside them
+
+2008-01-16 10:52 +0000  dockes    (6487da12360f)
+
+	* src/ChangeLog, src/doc/user/usermanual.sgml:
+	*** empty log message ***
+
+2008-01-16 08:43 +0000  dockes    (592d1258c5e4)
+
+	* src/rcldb/searchdata.cpp:
+	splitString filename queries
+
+2007-12-20 09:08 +0000  dockes    (e99decc750eb)
+
+	* src/index/indexer.cpp, src/rcldb/rcldb.cpp:
+	ensure that the names of files with filter errors get indexed anyway
+
+2007-12-13 06:58 +0000  dockes    (de422a0df409)
+
+	* src/aspell/rclaspell.cpp, src/bincimapmime/convert.h,
+	src/common/rclconfig.cpp, src/common/rclinit.cpp,
+	src/common/textsplit.cpp, src/common/unacpp.cpp,
+	src/index/csguess.cpp, src/index/indexer.cpp,
+	src/index/rclmonprc.cpp, src/index/rclmonrcv.cpp,
+	src/index/recollindex.cpp, src/internfile/htmlparse.cpp,
+	src/internfile/mh_mail.cpp, src/internfile/mh_mbox.cpp,
+	src/internfile/myhtmlparse.cpp, src/query/docseqhist.cpp,
+	src/query/history.cpp, src/query/recollq.cpp,
+	src/rcldb/pathhash.cpp, src/rcldb/rcldb.cpp, src/utils/base64.cpp,
+	src/utils/conftree.cpp, src/utils/copyfile.cpp,
+	src/utils/fstreewalk.cpp, src/utils/idfile.cpp,
+	src/utils/mimeparse.cpp, src/utils/pathut.cpp,
+	src/utils/readfile.cpp, src/utils/wipedir.cpp:
+	gcc 4 compat, thanks to Kartik Mistry
+
+2007-12-04 10:17 +0000  dockes    (f2bd537aad87)
+
+	* src/qtgui/rclmain_w.cpp:
+	directly open editor action choice dialog when user says so
+
+2007-12-04 10:16 +0000  dockes    (9a289ca30889)
+
+	* src/qtgui/uiprefs_w.cpp, src/utils/utf8iter.cpp:
+	*** empty log message ***
+
+2007-11-25 07:29 +0000  dockes    (3782c85019d4)
+
+	* src/qtgui/i18n/recoll_tr.ts:
+	*** empty log message ***
+
+2007-11-24 16:51 +0000  dockes    (a41099c58ac0)
+
+	* src/qtgui/i18n/recoll_fr.ts:
+	accents
+
+2007-11-24 16:43 +0000  dockes    (eecb572a0935)
+
+	* src/qtgui/confgui/confguiindex.h:
+	make conftoppanelw a q_object for translations to work
+
+2007-11-24 10:41 +0000  dockes    (343184d41f3b)
+
+	* src/qtgui/i18n/recoll_de.ts, src/qtgui/i18n/recoll_fr.ts,
+	src/qtgui/i18n/recoll_it.ts, src/qtgui/i18n/recoll_ru.ts,
+	src/qtgui/i18n/recoll_tr.ts, src/qtgui/i18n/recoll_uk.ts,
+	src/qtgui/i18n/recoll_xx.ts:
+	*** empty log message ***
+
+2007-11-21 16:34 +0000  dockes    (966333a903a9)
+
+	* src/VERSION:
+	*** empty log message ***
+
+2007-11-21 16:34 +0000  dockes    (aed5f0389421)
+
+	* 1.10.0
+
+2007-11-21 16:34 +0000  dockes    (4918fce7a71a)
+
+	* packaging/debian/changelog, packaging/debian/control,
+	packaging/debian/menu, packaging/debian/rules,
+	packaging/rpm/recoll.spec, packaging/rpm/recollfedora.spec,
+	packaging/rpm/recollmdk.spec, tests/shared.sh, website/CHANGES.txt,
+	website/devel.html, website/download.html, website/features.html,
+	website/fr/features.html, website/index.html.en,
+	website/index.html.fr, website/pics/index.html,
+	website/styles/style.css:
+	1.10.0
+
+2007-11-21 14:15 +0000  dockes    (9c57d53ad305 [RECOLL_1_10_0])
+
+	* src/qtgui/confgui/confguiindex.cpp, src/qtgui/main.cpp,
+	src/qtgui/rclmain_w.cpp, src/qtgui/recoll.h:
+	allow opening config gui if no index on first start
+
+2007-11-21 09:42 +0000  dockes    (b1db39055b6d)
+
+	* src/excludefile:
+	*** empty log message ***
+
+2007-11-21 09:34 +0000  dockes    (cca64d1bdb79)
+
+	* src/utils/conftree.cpp:
+	explicitely detect lines beginning with #
+
+2007-11-21 09:00 +0000  dockes    (2cb85a4bd555)
+
+	* src/INSTALL, src/README:
+	*** empty log message ***
+
+2007-11-16 15:20 +0000  dockes    (1f90c7302746)
+
+	* src/doc/user/usermanual.sgml:
+	*** empty log message ***
+
+2007-11-16 14:28 +0000  dockes    (d7f21b7adf20)
+
+	* src/common/rclconfig.cpp, src/common/rclconfig.h,
+	src/internfile/internfile.cpp, src/internfile/mimehandler.cpp,
+	src/internfile/mimehandler.h:
+	indexedmimetypes
+
+2007-11-16 12:21 +0000  dockes    (8221e8f1ce4f)
+
+	* src/query/wasastringtoquery.cpp, src/query/wasatorcl.cpp:
+	very small effort to look like xesam simple query
+
+2007-11-16 07:34 +0000  dockes    (1398d49de21d)
+
+	* src/qtgui/i18n/recoll_de.ts, src/qtgui/i18n/recoll_it.ts,
+	src/qtgui/i18n/recoll_ru.ts, src/qtgui/i18n/recoll_uk.ts:
+	*** empty log message ***
+
+2007-11-16 07:19 +0000  dockes    (eedcef5d56b7)
+
+	* src/qtgui/i18n/recoll_tr.ts:
+	*** empty log message ***
+
+2007-11-15 18:44 +0000  dockes    (99e585288200)
+
+	* src/qtgui/preview_w.cpp:
+	comment
+
+2007-11-15 18:39 +0000  dockes    (1ee213030954)
+
+	* src/qt4gui/q3richtext_p.h: new file.
+	* src/qt4gui/q3richtext_p.h, src/qt4gui/recoll.pro.in:
+	qt4 movetoanchor
+
+2007-11-15 18:39 +0000  dockes    (335db8a5c8cb)
+
+	* src/qtgui/i18n/recoll_it.ts:
+	*** empty log message ***
+
+2007-11-15 18:34 +0000  dockes    (b3bb7b017f2a)
+
+	* src/qtgui/preview_w.cpp, src/qtgui/preview_w.h:
+	moveToAnchor qt4
+
+2007-11-15 18:05 +0000  dockes    (1fe63dd4f268)
+
+	* src/qtgui/plaintorich.cpp, src/qtgui/plaintorich.h,
+	src/qtgui/preview_w.cpp, src/qtgui/preview_w.h,
+	src/qtgui/recoll.pro.in:
+	finally got anchors to work. qt3
+
+2007-11-15 18:05 +0000  dockes    (3158e59fd92e)
+
+	* src/qtgui/reslist.cpp:
+	*** empty log message ***
+
+2007-11-13 18:42 +0000  dockes    (1a7029e2dd4e)
+
+	* src/doc/man/recoll.1:
+	*** empty log message ***
+
+2007-11-13 18:40 +0000  dockes    (a5a94cfbfa7d)
+
+	* src/query/recollq.cpp:
+	keep format constant
+
+2007-11-13 18:40 +0000  dockes    (09f615e1a305)
+
+	* src/doc/user/usermanual.sgml:
+	text
+
+2007-11-13 18:39 +0000  dockes    (ce5a12bb92bd)
+
+	* tests/badsuffs1/badsuffs1.txt, tests/html/html.txt,
+	tests/mail/mail.txt, tests/ooff/ooff.txt, tests/special/special.txt:
+	1.10+small changes in dataset
+
+2007-11-13 15:35 +0000  dockes    (3a8d3f5af0e8)
+
+	* src/ChangeLog:
+	*** empty log message ***
+
+2007-11-13 15:34 +0000  dockes    (d23b6a94f4c0)
+
+	* src/VERSION:
+	1.10.0?
+
+2007-11-13 10:07 +0000  dockes    (f3338fa8cb4e)
+
+	* src/doc/man/recollq.1: new file.
+	* src/doc/man/recollq.1:
+	*** empty log message ***
+
+2007-11-09 18:48 +0000  dockes    (7859ad070bfc)
+
+	* src/qtgui/i18n/recoll_fr.ts:
+	1.9 ?
+
+2007-11-09 18:07 +0000  dockes    (557d4b9ce60a)
+
+	* src/qtgui/i18n/recoll_de.ts, src/qtgui/i18n/recoll_fr.ts,
+	src/qtgui/i18n/recoll_it.ts, src/qtgui/i18n/recoll_ru.ts,
+	src/qtgui/i18n/recoll_tr.ts, src/qtgui/i18n/recoll_uk.ts,
+	src/qtgui/i18n/recoll_xx.ts:
+	*** empty log message ***
+
+2007-11-09 15:56 +0000  dockes    (2c201bdce017)
+
+	* src/filters/rcltex:
+	*** empty log message ***
+
+2007-11-09 15:46 +0000  dockes    (7960c1dd4d0a)
+
+	* src/kde/kioslave/recoll/00README.txt,
+	src/kde/kioslave/recoll/Makefile,
+	src/kde/kioslave/recoll/kio_recoll.cpp:
+	get things to compile with recoll 1.9 and suse + kde 3.5.5
+
+2007-11-09 13:44 +0000  dockes    (6196dbaf0aec)
+
+	* src/sampleconf/mimeview:
+	tex
+
+2007-11-09 11:55 +0000  dockes    (10ce7112596d)
+
+	* src/filters/rcltex: new file.
+	* src/filters/rclmedia: deleted file.
+	* src/filters/rclmedia, src/filters/rcltex, src/sampleconf/mimeconf,
+	src/sampleconf/mimemap:
+	added support for indexing TeX text
+
+2007-11-09 11:54 +0000  dockes    (5a35ec87ecf2)
+
+	* src/filters/rclid3:
+	comments
+
+2007-11-08 09:35 +0000  dockes    (bdde14acf3bd)
+
+	* src/query/recollq.h: new file.
+	* src/lib/Makefile, src/lib/mkMake, src/qtgui/main.cpp,
+	src/qtgui/recoll.pro.in, src/query/Makefile, src/query/recollq.cpp,
+	src/query/recollq.h:
+	allow recoll to be used as a recollq driver
+
+2007-11-08 09:34 +0000  dockes    (06e94674b8e2)
+
+	* src/utils/execmd.cpp:
+	include pthread
+
+2007-11-08 09:34 +0000  dockes    (d6e84478935d)
+
+	* src/rcldb/stemdb.cpp:
+	debug
+
+2007-11-08 09:32 +0000  dockes    (9f3349e7358b)
+
+	* src/qt4gui/recoll.pro.in:
+	turkish
+
+2007-11-08 09:31 +0000  dockes    (cd6b8b7d2a36)
+
+	* src/mk/OpenBSD:
+	*** empty log message ***
+
+2007-11-08 07:54 +0000  dockes    (6e986b6d1e64)
+
+	* src/query/recollq.cpp:
+	add -b option to only output url list
+
+2007-11-06 11:55 +0000  dockes    (2b0e2fc0dd88)
+
+	* src/qtgui/i18n/recoll_tr.ts: new file.
+	* src/qtgui/i18n/recoll_tr.ts:
+	*** empty log message ***
+
+2007-10-27 16:40 +0000  dockes    (e8ac0b8f6c46)
+
+	* src/rcldb/rcldb.cpp:
+	comment
+
+2007-10-27 08:40 +0000  dockes    (2ccaf4ef243e)
+
+	* src/ChangeLog, src/qtgui/i18n/recoll_de.ts,
+	src/qtgui/i18n/recoll_fr.ts, src/qtgui/i18n/recoll_it.ts,
+	src/qtgui/i18n/recoll_ru.ts, src/qtgui/i18n/recoll_uk.ts:
+	*** empty log message ***
+
+2007-10-27 08:40 +0000  dockes    (e647e4592daa)
+
+	* src/filters/rcluncomp:
+	allow uncompressing suffix-less files
+
+2007-10-27 08:40 +0000  dockes    (dc6d97a86685)
+
+	* src/internfile/internfile.cpp:
+	use pcSubst
+
+2007-10-27 08:39 +0000  dockes    (54ba3ef75586)
+
+	* src/rcldb/rcldb.cpp:
+	adjust MatchDecider return type according to xapian version
+
+2007-10-27 07:06 +0000  dockes    (54b798d7fa02)
+
+	* src/qtgui/i18n/recoll_xx.ts:
+	sent to ning
+
+2007-10-26 10:42 +0000  dockes    (acfa4e6c24ba)
+
+	* src/doc/user/usermanual.sgml:
+	index config gui
+
+2007-10-25 15:51 +0000  dockes    (12d12311134a)
+
+	* src/qtgui/confgui/confguiindex.cpp:
+	labels
+
+2007-10-25 15:51 +0000  dockes    (2a1d29582446)
+
+	* src/qtgui/confgui/confgui.cpp:
+	use new style combobox constructor
+
+2007-10-25 15:50 +0000  dockes    (8b45d32c605c)
+
+	* src/internfile/mh_exec.h:
+	cleanup
+
+2007-10-25 08:04 +0000  dockes    (0bf8540b6c22)
+
+	* src/doc/user/usermanual.sgml:
+	*** empty log message ***
+
+2007-10-25 07:27 +0000  dockes    (5d57c38993af)
+
+	* src/query/recollq.cpp, src/query/wasatorcl.cpp:
+	added option to query language for filtering on directory
+
+2007-10-25 07:09 +0000  dockes    (d1adc7006d08)
+
+	* src/rcldb/rcldb.cpp:
+	add filter topdir to query description
+
+2007-10-24 15:38 +0000  dockes    (5f1863c33239)
+
+	* src/rcldb/rcldb.cpp:
+	use a Xapian MatchDecider to filter on dir path
+
+2007-10-24 08:42 +0000  dockes    (2d337545271f)
+
+	* src/rcldb/rcldb.cpp:
+	make filter a xapian::MatchDecider, dont change mechanism
+
+2007-10-19 15:25 +0000  dockes    (935a92d6db39)
+
+	* src/qtgui/ssearch_w.cpp, src/utils/smallut.cpp:
+	consider cr and lf as whitespace when splitting strings
+
+2007-10-19 14:31 +0000  dockes    (bb88b5f4fc25)
+
+	* src/qtgui/confgui/confgui.h, src/qtgui/confgui/confguiindex.cpp:
+	small sizing adjustments
+
+2007-10-18 10:39 +0000  dockes    (f34f0260a62a)
+
+	* src/qtgui/plaintorich.cpp, src/qtgui/plaintorich.h,
+	src/qtgui/preview_w.cpp, src/qtgui/reslist.cpp:
+	let plaintorich do the chunking, easier to make sure we dont confuse
+	textedit by cutting inside a tag
+
+2007-10-18 10:15 +0000  dockes    (7c46f29559fe)
+
+	* src/qtgui/confgui/confguiindex.cpp:
+	qt3
+
+2007-10-17 16:12 +0000  dockes    (41f711edeb0b)
+
+	* src/qtgui/plaintorich.cpp:
+	replaced utf8 cgj with good ole bel
+
+2007-10-17 11:40 +0000  dockes    (102fcc4aa169)
+
+	* src/internfile/mh_mail.cpp, src/internfile/mh_mail.h,
+	src/utils/mimeparse.cpp:
+	text/plain attachments were not transcoded to utf-8
+
+2007-10-17 09:57 +0000  dockes    (dd33128e3a59)
+
+	* src/common/rclconfig.cpp, src/internfile/internfile.cpp:
+	*** empty log message ***
+
+2007-10-15 13:08 +0000  dockes    (0a095e89bfb9)
+
+	* src/kde/recoll_applet/0README.Recoll, src/kde/recoll_applet/AUTHORS,
+	src/kde/recoll_applet/COPYING, src/kde/recoll_applet/ChangeLog,
+	src/kde/recoll_applet/Doxyfile, src/kde/recoll_applet/INSTALL,
+	src/kde/recoll_applet/Makefile.am,
+	src/kde/recoll_applet/Makefile.cvs,
+	src/kde/recoll_applet/Makefile.in, src/kde/recoll_applet/NEWS,
+	src/kde/recoll_applet/README, src/kde/recoll_applet/TODO,
+	src/kde/recoll_applet/acinclude.m4,
+	src/kde/recoll_applet/aclocal.m4,
+	src/kde/recoll_applet/admin/Doxyfile.am,
+	src/kde/recoll_applet/admin/Doxyfile.global,
+	src/kde/recoll_applet/admin/Makefile.common,
+	src/kde/recoll_applet/admin/acinclude.m4.in,
+	src/kde/recoll_applet/admin/am_edit,
+	src/kde/recoll_applet/admin/bcheck.pl,
+	src/kde/recoll_applet/admin/compile,
+	src/kde/recoll_applet/admin/conf.change.pl,
+	src/kde/recoll_applet/admin/config.guess,
+	src/kde/recoll_applet/admin/config.pl,
+	src/kde/recoll_applet/admin/config.sub,
+	src/kde/recoll_applet/admin/configure.in.bot.end,
+	src/kde/recoll_applet/admin/configure.in.min,
+	src/kde/recoll_applet/admin/cvs.sh,
+	src/kde/recoll_applet/admin/debianrules,
+	src/kde/recoll_applet/admin/depcomp,
+	src/kde/recoll_applet/admin/deps.am, src/kde/recoll_applet/admin
+	/detect-autoconf.pl, src/kde/recoll_applet/admin/doxygen.sh,
+	src/kde/recoll_applet/admin/install-sh,
+	src/kde/recoll_applet/admin/libtool.m4.in,
+	src/kde/recoll_applet/admin/ltmain.sh,
+	src/kde/recoll_applet/admin/missing,
+	src/kde/recoll_applet/admin/mkinstalldirs,
+	src/kde/recoll_applet/admin/nmcheck,
+	src/kde/recoll_applet/admin/oldinclude.m4.in,
+	src/kde/recoll_applet/admin/pkg.m4.in,
+	src/kde/recoll_applet/admin/ylwrap,
+	src/kde/recoll_applet/config.h.in, src/kde/recoll_applet/configure,
+	src/kde/recoll_applet/configure.files,
+	src/kde/recoll_applet/configure.in,
+	src/kde/recoll_applet/configure.in.in,
+	src/kde/recoll_applet/doc/Makefile.am,
+	src/kde/recoll_applet/doc/Makefile.in,
+	src/kde/recoll_applet/doc/en/Makefile.am,
+	src/kde/recoll_applet/doc/en/Makefile.in,
+	src/kde/recoll_applet/doc/en/index.docbook,
+	src/kde/recoll_applet/po/Makefile.am,
+	src/kde/recoll_applet/po/Makefile.in,
+	src/kde/recoll_applet/src/Makefile.am,
+	src/kde/recoll_applet/src/Makefile.in,
+	src/kde/recoll_applet/src/kpixmapcombo.cpp,
+	src/kde/recoll_applet/src/kpixmapcombo.h,
+	src/kde/recoll_applet/src/recoll_applet.cpp,
+	src/kde/recoll_applet/src/recoll_applet.desktop,
+	src/kde/recoll_applet/src/recoll_applet.h,
+	src/kde/recoll_applet/src/recoll_applet.lsm,
+	src/kde/recoll_applet/stamp-h.in, src/kde/recoll_applet/subdirs: new
+	file.
+	* src/kde/recoll_applet/0README.Recoll, src/kde/recoll_applet/AUTHORS,
+	src/kde/recoll_applet/COPYING, src/kde/recoll_applet/ChangeLog,
+	src/kde/recoll_applet/Doxyfile, src/kde/recoll_applet/INSTALL,
+	src/kde/recoll_applet/Makefile.am,
+	src/kde/recoll_applet/Makefile.cvs,
+	src/kde/recoll_applet/Makefile.in, src/kde/recoll_applet/NEWS,
+	src/kde/recoll_applet/README, src/kde/recoll_applet/TODO,
+	src/kde/recoll_applet/acinclude.m4,
+	src/kde/recoll_applet/aclocal.m4,
+	src/kde/recoll_applet/admin/Doxyfile.am,
+	src/kde/recoll_applet/admin/Doxyfile.global,
+	src/kde/recoll_applet/admin/Makefile.common,
+	src/kde/recoll_applet/admin/acinclude.m4.in,
+	src/kde/recoll_applet/admin/am_edit,
+	src/kde/recoll_applet/admin/bcheck.pl,
+	src/kde/recoll_applet/admin/compile,
+	src/kde/recoll_applet/admin/conf.change.pl,
+	src/kde/recoll_applet/admin/config.guess,
+	src/kde/recoll_applet/admin/config.pl,
+	src/kde/recoll_applet/admin/config.sub,
+	src/kde/recoll_applet/admin/configure.in.bot.end,
+	src/kde/recoll_applet/admin/configure.in.min,
+	src/kde/recoll_applet/admin/cvs.sh,
+	src/kde/recoll_applet/admin/debianrules,
+	src/kde/recoll_applet/admin/depcomp,
+	src/kde/recoll_applet/admin/deps.am, src/kde/recoll_applet/admin
+	/detect-autoconf.pl, src/kde/recoll_applet/admin/doxygen.sh,
+	src/kde/recoll_applet/admin/install-sh,
+	src/kde/recoll_applet/admin/libtool.m4.in,
+	src/kde/recoll_applet/admin/ltmain.sh,
+	src/kde/recoll_applet/admin/missing,
+	src/kde/recoll_applet/admin/mkinstalldirs,
+	src/kde/recoll_applet/admin/nmcheck,
+	src/kde/recoll_applet/admin/oldinclude.m4.in,
+	src/kde/recoll_applet/admin/pkg.m4.in,
+	src/kde/recoll_applet/admin/ylwrap,
+	src/kde/recoll_applet/config.h.in, src/kde/recoll_applet/configure,
+	src/kde/recoll_applet/configure.files,
+	src/kde/recoll_applet/configure.in,
+	src/kde/recoll_applet/configure.in.in,
+	src/kde/recoll_applet/doc/Makefile.am,
+	src/kde/recoll_applet/doc/Makefile.in,
+	src/kde/recoll_applet/doc/en/Makefile.am,
+	src/kde/recoll_applet/doc/en/Makefile.in,
+	src/kde/recoll_applet/doc/en/index.docbook,
+	src/kde/recoll_applet/po/Makefile.am,
+	src/kde/recoll_applet/po/Makefile.in,
+	src/kde/recoll_applet/src/Makefile.am,
+	src/kde/recoll_applet/src/Makefile.in,
+	src/kde/recoll_applet/src/kpixmapcombo.cpp,
+	src/kde/recoll_applet/src/kpixmapcombo.h,
+	src/kde/recoll_applet/src/recoll_applet.cpp,
+	src/kde/recoll_applet/src/recoll_applet.desktop,
+	src/kde/recoll_applet/src/recoll_applet.h,
+	src/kde/recoll_applet/src/recoll_applet.lsm,
+	src/kde/recoll_applet/stamp-h.in, src/kde/recoll_applet/subdirs:
+	*** empty log message ***
+
+2007-10-14 16:07 +0000  dockes    (aea3ceac265d)
+
+	* src/doc/user/usermanual.sgml:
+	*** empty log message ***
+
+2007-10-09 14:08 +0000  dockes    (008fb8da2cfe)
+
+	* src/qt4gui/recoll.pro.in, src/qtgui/confgui/confguiindex.cpp,
+	src/qtgui/confgui/confguiindex.h, src/qtgui/idxthread.cpp,
+	src/qtgui/rclmain.ui, src/qtgui/rclmain_w.cpp,
+	src/qtgui/rclmain_w.h, src/qtgui/recoll.pro.in:
+	indexing confgui seems to sort of work
+
+2007-10-09 11:08 +0000  dockes    (8e165638db48)
+
+	* src/qtgui/confgui/confgui.cpp, src/qtgui/confgui/confgui.h,
+	src/qtgui/confgui/confguiindex.cpp,
+	src/qtgui/confgui/confguiindex.h, src/qtgui/confgui/conflinkrcl.h,
+	src/qtgui/confgui/main.cpp:
+	*** empty log message ***
+
+2007-10-09 09:43 +0000  dockes    (bda697547b28)
+
+	* src/common/rclconfig.cpp, src/common/rclconfig.h:
+	modified mechanism for confgui updates
+
+2007-10-09 09:40 +0000  dockes    (314568630e50)
+
+	* src/utils/conftree.h:
+	*** empty log message ***
+
+2007-10-07 20:22 +0000  dockes    (a4407de529dc)
+
+	* src/qtgui/confgui/confgui.cpp, src/qtgui/confgui/confguiindex.cpp:
+	*** empty log message ***
+
+2007-10-06 07:44 +0000  dockes    (e12dcaba9422)
+
+	* src/sampleconf/mimeconf:
+	*** empty log message ***
+
+2007-10-06 07:26 +0000  dockes    (8c03c83a6353)
+
+	* src/ChangeLog, src/INSTALL, src/README, src/VERSION:
+	*** empty log message ***
+
+2007-10-06 07:13 +0000  dockes    (80c8e77d75e3)
+
+	* src/qtgui/i18n/recoll_xx.ts: new file.
+	* src/doc/user/usermanual.sgml, src/qtgui/i18n/recoll_xx.ts:
+	*** empty log message ***
+
+2007-10-05 14:00 +0000  dockes    (3f47738c7b7f)
+
+	* src/query/wasatorcl.cpp:
+	add rclcat prefix to query languages + adapt find_applet to use it
+
+2007-10-05 08:03 +0000  dockes    (eb9ae456f872)
+
+	* src/qtgui/main.cpp, src/qtgui/ssearch_w.cpp, src/qtgui/ssearch_w.h:
+	add cmd line option to run query when starting
+
+2007-10-04 12:26 +0000  dockes    (479712bd069b)
+
+	* src/rcldb/searchdata.cpp:
+	when search includes composite spans + other terms, increase slack
+	instead of switching to word split
+
+2007-10-04 12:21 +0000  dockes    (67c23cd41df2)
+
+	* src/common/rclconfig.cpp, src/common/textsplit.cpp,
+	src/common/textsplit.h:
+	make cjk ngramlen configurable
+
+2007-10-04 12:20 +0000  dockes    (e9e128bf43ab)
+
+	* src/index/indexer.cpp:
+	trace
+
+2007-10-03 14:53 +0000  dockes    (b8852ea7a80c)
+
+	* src/internfile/Makefile, src/internfile/mh_mbox.cpp,
+	src/internfile/mh_mbox.h:
+	Improve From_ line detection
+
+2007-10-02 14:25 +0000  dockes    (3379ab8d9013)
+
+	* src/doc/user/docbook.css, src/doc/user/usermanual.sgml:
+	*** empty log message ***
+
+2007-10-02 14:22 +0000  dockes    (29a402a23d12)
+
+	* src/sampleconf/mimeconf, src/sampleconf/mimemap,
+	src/sampleconf/mimeview:
+	a few more image files
+
+2007-10-02 14:00 +0000  dockes    (d0e7241eeb0e)
+
+	* src/filters/rclflac, src/filters/rclogg: new file.
+	* src/filters/rcljpeg: deleted file.
+	* src/filters/rclflac, src/filters/rcljpeg, src/filters/rclogg:
+	*** empty log message ***
+
+2007-10-02 13:56 +0000  dockes    (e180ca729bea)
+
+	* src/filters/rclimg:
+	comments,GPL
+
+2007-10-02 11:39 +0000  dockes    (7777fdc5d30a)
+
+	* src/common/rclconfig.cpp, src/common/textsplit.cpp,
+	src/common/textsplit.h:
+	add flag to disable cjk processing
+
+2007-10-01 17:56 +0000  dockes    (29b1aeb75d23)
+
+	* src/filters/rclimg: new file.
+	* src/filters/rclimg:
+	initial version from Cedric Scott
+
+2007-10-01 15:57 +0000  dockes    (b3aeb47d6a43)
+
+	* src/utils/conftree.cpp:
+	added updates/erase tests
+
+2007-10-01 06:35 +0000  dockes    (b29617933c16)
+
+	* src/qtgui/confgui/confgui.cpp, src/qtgui/confgui/confgui.h,
+	src/qtgui/confgui/confguiindex.cpp, src/qtgui/confgui/main.cpp,
+	src/qtgui/confgui/trconf.pro:
+	qt4 port
+
+2007-10-01 06:19 +0000  dockes    (78068b236681)
+
+	* src/VERSION, src/common/rclconfig.cpp, src/common/rclconfig.h,
+	src/qtgui/confgui/confgui.cpp, src/utils/conftree.cpp,
+	src/utils/conftree.h:
+	config update enabling functions
+
+2007-09-29 09:06 +0000  dockes    (e38c26097ece)
+
+	* src/qtgui/confgui/confgui.cpp, src/qtgui/confgui/confgui.h,
+	src/qtgui/confgui/confguiindex.cpp,
+	src/qtgui/confgui/confguiindex.h, src/qtgui/confgui/conflinkrcl.h,
+	src/qtgui/confgui/main.cpp, src/qtgui/confgui/trconf.pro:
+	*** empty log message ***
+
+2007-09-27 15:47 +0000  dockes    (9ac07bf91591)
+
+	* src/qtgui/confgui/confguiindex.cpp,
+	src/qtgui/confgui/confguiindex.h, src/qtgui/confgui/conflinkrcl.h:
+	new file.
+	* src/qtgui/confgui/confgui.cpp, src/qtgui/confgui/confgui.h,
+	src/qtgui/confgui/confguiindex.cpp,
+	src/qtgui/confgui/confguiindex.h, src/qtgui/confgui/conflinkrcl.h,
+	src/qtgui/confgui/main.cpp, src/qtgui/confgui/trconf.pro:
+	*** empty log message ***
+
+2007-09-27 11:03 +0000  dockes    (436530279a09)
+
+	* src/utils/conftree.h:
+	comment
+
+2007-09-27 11:02 +0000  dockes    (a466c387c485)
+
+	* src/utils/conftree.cpp, src/utils/conftree.h:
+	avoid adding unneeded entries in confstack. fix erase-add resulting
+	in duplicate
+
+2007-09-26 12:16 +0000  dockes    (8e1e4edb4f4a)
+
+	* src/qtgui/confgui/confgui.cpp, src/qtgui/confgui/confgui.h,
+	src/qtgui/confgui/main.cpp, src/qtgui/confgui/trconf.pro: new file.
+	* src/qtgui/confgui/confgui.cpp, src/qtgui/confgui/confgui.h,
+	src/qtgui/confgui/main.cpp, src/qtgui/confgui/trconf.pro:
+	*** empty log message ***
+
+2007-09-22 08:51 +0000  dockes    (8072f3278663)
+
+	* src/common/textsplit.cpp, src/utils/utf8iter.h:
+	include assert.h when needed
+
+2007-09-21 16:45 +0000  dockes    (d85479652341)
+
+	* src/INSTALL, src/README, src/VERSION, src/doc/user/usermanual.sgml,
+	src/qtgui/recoll.pro.in:
+	*** empty log message ***
+
+2007-09-20 12:22 +0000  dockes    (28a9c536ebba)
+
+	* src/common/textsplit.cpp:
+	logs
+
+2007-09-20 08:45 +0000  dockes    (415256bd7508)
+
+	* src/common/textsplit.cpp, src/common/textsplit.h,
+	src/utils/utf8iter.h:
+	initial cjk support
+
+2007-09-20 08:43 +0000  dockes    (66200ff61f31)
+
+	* src/rcldb/searchdata.cpp:
+	comments,formatting
+
+2007-09-20 08:42 +0000  dockes    (750b59dea1e9)
+
+	* src/qtgui/rclmain_w.cpp:
+	restore cursor if cant start query
+
+2007-09-18 20:35 +0000  dockes    (1d01904f2b55)
+
+	* src/common/textsplit.cpp, src/common/textsplit.h:
+	use m_ prefix for members
+
+2007-09-18 20:34 +0000  dockes    (49381b7f40f6)
+
+	* src/qt4gui/recoll.pro.in:
+	add recoll_xx.ts
+
+2007-09-18 07:01 +0000  dockes    (7dea06d57ada)
+
+	* src/qtgui/i18n/recoll_it.ts:
+	changes by Giovanni Cannizzaro
+
+2007-09-11 08:23 +0000  dockes    (615a70a64b94 [RECOLL_1_9_0])
+
+	* src/desktop/recoll-searchgui.desktop:
+	desktop file corrected as per Kartik Mistry patch
+
+2007-09-10 05:44 +0000  dockes    (78b0c9bd47bb)
+
+	* src/qtgui/i18n/recoll_fr.ts:
+	long menu labels cause pbs at least on macosx
+
+2007-09-08 17:26 +0000  dockes    (ef2964b2e49e)
+
+	* src/qtgui/i18n/recoll_de.ts, src/qtgui/i18n/recoll_fr.ts,
+	src/qtgui/i18n/recoll_it.ts, src/qtgui/i18n/recoll_ru.ts,
+	src/qtgui/i18n/recoll_uk.ts:
+	*** empty log message ***
+
+2007-09-08 17:25 +0000  dockes    (000b2b01844d)
+
+	* src/qtgui/guiutils.cpp, src/qtgui/guiutils.h,
+	src/qtgui/preview_w.cpp, src/qtgui/uiprefs.ui,
+	src/qtgui/uiprefs_w.cpp:
+	change hghlight text size limit to configurable value
+
+2007-09-08 17:21 +0000  dockes    (c0ab1e961f0a)
+
+	* src/qtgui/viewaction_w.cpp:
+	added missing space in string
+
+2007-09-08 17:21 +0000  dockes    (f70ce9c4c753)
+
+	* src/qtgui/rclmain.ui, src/qtgui/rclmain_w.cpp:
+	renamed preferencesQuery_PrefsAction to queryPrefsAction
+
+2007-09-08 17:19 +0000  dockes    (17eefeb77500 [RECOLL_1_9_1cjk2, RECOLL_1_9_1cjk1])
+
+	* src/qtgui/plaintorich.cpp:
+	comment
+
+2007-09-08 09:44 +0000  dockes    (8aabe9bc2d85)
+
+	* src/utils/readfile.cpp:
+	small pb in solaris fix
+
+2007-09-08 08:07 +0000  dockes    (4b862559adbb)
+
+	* src/mk/SunOS, src/utils/pathut.cpp, src/utils/readfile.cpp:
+	SunOS 2.8 fixes
+
+2007-09-07 14:58 +0000  dockes    (f0b17af1f5d7)
+
+	* src/configure, src/configure.ac:
+	always add lz to lxapian
+
+2007-09-07 12:39 +0000  dockes    (b10ac30fe130)
+
+	* website/CHANGES.txt:
+	*** empty log message ***
+
+2007-09-07 08:05 +0000  dockes    (f031116372e8)
+
+	* src/rcldb/rcldb.cpp:
+	improve purge error message printing
+
+2007-09-07 08:04 +0000  dockes    (276b259f9ec6)
+
+	* src/qtgui/i18n/recoll_it.ts:
+	new 1.9 translation by C. Rigamont
+
+2007-09-07 08:04 +0000  dockes    (450e1342467c)
+
+	* src/sampleconf/mimemap:
+	fix wordperfect spurious extensions
+
+2007-09-07 08:03 +0000  dockes    (624a100107be [RECOLL_1_9_1cjk])
+
+	* website/BUGS.txt:
+	update xapian near to 1.0.2
+
+2007-09-07 08:03 +0000  dockes    (a0d360caf71e)
+
+	* website/copydocs:
+	to_mac
+
+2007-09-01 19:12 +0000  dockes    (3ebdb5af664f)
+
+	* src/qt4gui/recoll.pro.in, src/qtgui/i18n/recoll_de.ts,
+	src/qtgui/recoll.pro.in:
+	*** empty log message ***
+
+2007-08-31 09:04 +0000  dockes    (32533d0d11d0)
+
+	* src/qtgui/advsearch_w.cpp, src/qtgui/advsearch_w.h:
+	pressing CR in advsearch would run query twice because of start
+	autodefault
+
+2007-08-31 07:23 +0000  dockes    (bb17fa4cfaca)
+
+	* src/qtgui/images/d_firstpage.png, src/qtgui/images/firstpage.png:
+	new file.
+	* src/qtgui/images/d_firstpage.png, src/qtgui/images/firstpage.png:
+	*** empty log message ***
+
+2007-08-30 10:11 +0000  dockes    (c75b5f42b33d)
+
+	* src/INSTALL, src/README, src/qtgui/i18n/recoll_fr.ts,
+	src/qtgui/i18n/recoll_it.ts, src/qtgui/i18n/recoll_ru.ts,
+	src/qtgui/i18n/recoll_uk.ts:
+	*** empty log message ***
+
+2007-08-30 10:00 +0000  dockes    (7c4ccceae2a7)
+
+	* website/BUGS.txt, website/CHANGES.txt, website/download.html,
+	website/features.html:
+	*** empty log message ***
+
+2007-08-30 09:01 +0000  dockes    (687cad7b46de)
+
+	* src/doc/user/usermanual.sgml, src/index/indexer.cpp,
+	src/index/indexer.h, src/index/rclmonrcv.cpp,
+	src/sampleconf/recoll.conf.in, src/utils/fstreewalk.cpp,
+	src/utils/fstreewalk.h:
+	add followLinks option
+
+2007-08-30 08:39 +0000  dockes    (6af3a2216074)
+
+	* src/doc/user/usermanual.sgml:
+	add followLinks option
+
+2007-08-28 08:12 +0000  dockes    (6385c6a9c88e)
+
+	* src/index/indexer.cpp:
+	allow symlinks in topdirs
+
+2007-08-28 08:08 +0000  dockes    (a3df89087437)
+
+	* src/utils/fstreewalk.cpp, src/utils/fstreewalk.h:
+	follow top (entry) symlinks even if nofollow is set
+
+2007-08-28 08:07 +0000  dockes    (19ac4f90b7e7)
+
+	* src/internfile/internfile.cpp:
+	error msg
+
+2007-08-26 13:52 +0000  dockes    (fa08f95a4d95)
+
+	* src/doc/user/usermanual.sgml:
+	add wordperfect ext app info
+
+2007-08-26 13:34 +0000  dockes    (ac877cc2e3ad)
+
+	* src/filters/rclwpd: new file.
+	* src/filters/rclwpd, src/sampleconf/mimeconf, src/sampleconf/mimemap,
+	src/sampleconf/mimeview:
+	added wordperfect support
+
+2007-08-26 13:34 +0000  dockes    (7472abcdbc4a)
+
+	* src/sampleconf/recoll.conf.in:
+	add commented entries for daem*
+
+2007-08-07 08:45 +0000  dockes    (ad6dad566902)
+
+	* src/qtgui/rclmain_w.cpp:
+	*** empty log message ***
+
+2007-08-07 08:42 +0000  dockes    (2040417c73e4)
+
+	* src/qtgui/rclmain_w.cpp, src/qtgui/reslist.cpp:
+	qt3 adjustments
+
+2007-08-07 08:26 +0000  dockes    (55c7dc79c190)
+
+	* src/aspell/rclaspell.cpp, src/sampleconf/recoll.conf.in:
+	*** empty log message ***
+
+2007-08-05 05:55 +0000  dockes    (3acd192c01d1)
+
+	* src/utils/conftree.h:
+	comments
+
+2007-08-05 05:49 +0000  dockes    (afee970ae166)
+
+	* src/utils/conftree.h:
+	*** empty log message ***
+
+2007-08-04 07:22 +0000  dockes    (9afb2050f462)
+
+	* src/utils/conftree.cpp, src/utils/conftree.h:
+	Allow updates in confstacks
+
+2007-08-03 07:50 +0000  dockes    (28ae2e572dcf)
+
+	* src/utils/Makefile, src/utils/conftree.cpp, src/utils/conftree.h:
+	have conftree preserve comments and ordering
+
+2007-08-02 06:33 +0000  dockes    (4da8b2dbcaa6)
+
+	* src/qt4gui/recoll.qrc, src/qtgui/rclmain.ui,
+	src/qtgui/rclmain_w.cpp, src/qtgui/recoll.pro.in,
+	src/qtgui/reslist.cpp, src/qtgui/reslist.h:
+	added gotofirstpage action
+
+2007-08-01 10:04 +0000  dockes    (c91831fab8a0)
+
+	* src/qtgui/guiutils.h, src/qtgui/rclmain_w.cpp,
+	src/qtgui/rclmain_w.h, src/qtgui/ssearch_w.cpp,
+	src/qtgui/uiprefs_w.cpp, src/qtgui/uiprefs_w.h,
+	src/rcldb/stemdb.cpp, src/rcldb/stemdb.h:
+	Allow stem expansion for several (all) stemming languages at a time
+
+2007-08-01 07:55 +0000  dockes    (5d13d87e6e14)
+
+	* src/qtgui/rclmain.ui, src/qtgui/rclmain_w.cpp,
+	src/qtgui/rclmain_w.h, src/qtgui/uiprefs_w.cpp,
+	src/qtgui/uiprefs_w.h:
+	allow setting stemlang from prefs menu
+
+2007-07-20 14:50 +0000  dockes    (573069870fd4)
+
+	* src/configure, src/configure.ac:
+	check for uic3 during qt4 configure
+
+2007-07-20 14:43 +0000  dockes    (32ae47904cca)
+
+	* src/qtgui/preview_w.cpp, src/qtgui/preview_w.h:
+	preview: dont search for anchors if we have none
+
+2007-07-20 14:32 +0000  dockes    (eac614c9a725)
+
+	* src/qtgui/rclmain_w.cpp, src/qtgui/reslist.cpp, src/qtgui/reslist.h:
+	*** empty log message ***
+
+2007-07-20 11:44 +0000  dockes    (6133f68f886f)
+
+	* src/qtgui/rclmain_w.cpp, src/qtgui/rclmain_w.h:
+	factorize previewNext/Prev
+
+2007-07-20 11:38 +0000  dockes    (4dfc3942351a)
+
+	* src/qtgui/preview_w.cpp, src/qtgui/preview_w.h,
+	src/qtgui/rclmain_w.cpp, src/qtgui/rclmain_w.h:
+	more preview window interface cleanup
+
+2007-07-20 10:55 +0000  dockes    (d57bd5e6cb2d)
+
+	* src/qtgui/preview_w.cpp, src/qtgui/preview_w.h,
+	src/qtgui/rclmain_w.cpp:
+	cleaned up preview window interface
+
+2007-07-14 16:53 +0000  dockes    (35087158d61f)
+
+	* src/common/autoconfig.h.in, src/configure, src/configure.ac,
+	src/mk/AIX, src/mk/Darwin, src/mk/Linux, src/mk/SunOS,
+	src/utils/execmd.cpp:
+	handle putenv arg constness in configure
+
+2007-07-13 10:24 +0000  dockes    (98774298901d)
+
+	* src/INSTALL, src/README, src/doc/man/recoll.conf.5,
+	src/qtgui/i18n/recoll_fr.ts, src/qtgui/i18n/recoll_it.ts,
+	src/qtgui/i18n/recoll_ru.ts, src/qtgui/i18n/recoll_uk.ts,
+	website/BUGS.txt, website/CHANGES.txt, website/download.html:
+	*** empty log message ***
+
+2007-07-13 07:17 +0000  dockes    (d2c5a6098bbd)
+
+	* src/doc/user/docbook.css, src/doc/user/usermanual.sgml:
+	1.9 changes
+
+2007-07-13 07:10 +0000  dockes    (2569115962c0)
+
+	* src/qtgui/uiprefs.ui:
+	msg
+
+2007-07-13 07:00 +0000  dockes    (2bd0371b8e12)
+
+	* src/qtgui/plaintorich.cpp:
+	adjust term beacon for better finding ?
+
+2007-07-13 06:31 +0000  dockes    (f7d41e95166c)
+
+	* src/qtgui/preview_w.cpp, src/qtgui/preview_w.h,
+	src/qtgui/rclmain_w.cpp:
+	better handle preview close during load
+
+2007-07-12 17:28 +0000  dockes    (5b6f1204d077)
+
+	* src/rcldb/rcldb.cpp:
+	*** empty log message ***
+
+2007-07-12 17:13 +0000  dockes    (9345d3db5ff2)
+
+	* src/filters/rclpdf:
+	dont use anchored regexps for stripping whitespace, ubuntu mawk
+	ignores the anchor
+
+2007-07-12 13:41 +0000  dockes    (1fb4e582fe5b)
+
+	* src/utils/cancelcheck.h:
+	*** empty log message ***
+
+2007-07-12 10:53 +0000  dockes    (eb352f6c17ae)
+
+	* src/index/rclmonrcv.cpp, src/utils/fstreewalk.cpp,
+	src/utils/fstreewalk.h:
+	monitor: dont add watch on created dir if in skippedXXX
+
+2007-07-12 10:13 +0000  dockes    (d55862505674)
+
+	* src/ChangeLog, src/qtgui/guiutils.cpp, src/qtgui/guiutils.h,
+	src/qtgui/uiprefs.ui, src/qtgui/uiprefs_w.cpp:
+	fix v1.8 default format string if we find it
+
+2007-07-12 08:34 +0000  dockes    (b69b14b67cd2)
+
+	* src/rcldb/rcldb.cpp:
+	use uniform code for Xapian exception catching + catch a few more,
+	esp. databaseModified cases
+
+2007-07-12 08:23 +0000  dockes    (ffe9a12f9237)
+
+	* src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, src/qtgui/reslist.cpp,
+	src/qtgui/uiprefs.ui, src/qtgui/uiprefs_w.cpp:
+	icon now part of paragraph format
+
+2007-07-11 10:05 +0000  dockes    (a8d4da32f304)
+
+	* src/qtgui/reslist.cpp:
+	dont create popup in irrelevant areas
+
+2007-07-10 09:24 +0000  dockes    (993776d69bab)
+
+	* src/sampleconf/recoll.conf.in:
+	idxflushnb default 10
+
+2007-07-10 09:23 +0000  dockes    (e800d4e4d1de)
+
+	* src/doc/man/recollindex.1, src/index/indexer.cpp,
+	src/index/indexer.h, src/index/recollindex.cpp, src/rcldb/rcldb.cpp,
+	src/rcldb/rcldb.h:
+	recollindex -l
+
+2007-07-10 05:44 +0000  dockes    (7247df0336ab)
+
+	* src/sampleconf/recoll.conf.in:
+	*** empty log message ***
+
+2007-07-09 17:21 +0000  dockes    (ef8eddb1b94a)
+
+	* src/doc/user/usermanual.sgml:
+	*** empty log message ***
+
+2007-07-01 06:52 +0000  dockes    (03cb707d9122)
+
+	* src/filters/rclid3: new file.
+	* src/filters/rclid3, src/sampleconf/mimeconf, src/sampleconf/mimemap,
+	src/sampleconf/mimeview:
+	audio tags support improvement: flac+ogg. use FORPREVIEW
+
+2007-06-26 17:07 +0000  dockes    (ec5b66db8aea)
+
+	* src/qtgui/i18n/recoll_de.ts, src/qtgui/i18n/recoll_fr.ts,
+	src/qtgui/i18n/recoll_it.ts, src/qtgui/i18n/recoll_ru.ts,
+	src/qtgui/i18n/recoll_uk.ts:
+	*** empty log message ***
+
+2007-06-26 16:58 +0000  dockes    (34658791397a)
+
+	* *** empty log message ***
+
+2007-06-26 16:58 +0000  dockes    (26a811724423)
+
+	* packaging/rpm/recollCooker.spec, website/fr/features.html,
+	website/mario.png, website/perfs.html, website/smile.png: new file.
+	* packaging/rpm/recollCooker.spec, src/doc/user/usermanual.sgml,
+	website/BUGS.txt, website/CHANGES.txt, website/credits.html,
+	website/doc.html, website/download.html, website/features.html,
+	website/fr/features.html, website/index.html.en,
+	website/index.html.fr, website/mario.png, website/perfs.html,
+	website/rclidxfmt.html, website/smile.png, website/styles/style.css:
+	*** empty log message ***
+
+2007-06-26 16:09 +0000  dockes    (d4a3058d613e)
+
+	* src/internfile/internfile.cpp, src/internfile/internfile.h:
+	comments
+
+2007-06-26 16:08 +0000  dockes    (7115d37ab33d)
+
+	* src/configure, src/configure.ac, src/mk/Darwin,
+	src/qtgui/reslist.cpp, src/recollinstall.in:
+	get things to sort of compile / install on macosx
+
+2007-06-26 15:38 +0000  dockes    (02621fd62ca0)
+
+	* src/ChangeLog: new file.
+	* src/ChangeLog:
+	*** empty log message ***
+
+2007-06-26 11:59 +0000  dockes    (51061217635d)
+
+	* src/excludefile, src/makesrcdist.sh:
+	small mkdist fixes
+
+2007-06-25 18:31 +0000  dockes    (5f173fcd227f)
+
+	* src/INSTALL, src/README:
+	*** empty log message ***
+
+2007-06-25 10:25 +0000  dockes    (048658cd678b)
+
+	* src/rcldb/rcldb.cpp:
+	simplified and hopefully improved abstract generation
+
+2007-06-25 10:13 +0000  dockes    (14ecb9d719e7)
+
+	* src/qtgui/plaintorich.cpp, src/qtgui/plaintorich.h,
+	src/qtgui/reslist.cpp:
+	plaintorich: only setup beacons if needed
+
+2007-06-22 06:14 +0000  dockes    (0584daa67e7c)
+
+	* src/common/rclconfig.cpp, src/common/rclconfig.h,
+	src/query/wasatorcl.cpp, src/rcldb/rcldb.cpp,
+	src/rcldb/searchdata.cpp, src/sampleconf/mimeconf:
+	handle mime: and ext: in qlang
+
+2007-06-21 11:56 +0000  dockes    (e5102468f77e)
+
+	* src/rcldb/rcldb.cpp, src/rcldb/rcldb.h:
+	slightly reorganized Db::close/~Db code
+
+2007-06-21 11:14 +0000  dockes    (e360a50fdaa5)
+
+	* src/common/rclconfig.cpp:
+	beware of unsigneds diffs when comparing to 0 !
+
+2007-06-20 13:16 +0000  dockes    (e515c5541bd4)
+
+	* src/qtgui/preview_w.cpp, src/qtgui/rclmain.ui,
+	src/qtgui/rclmain_w.cpp, src/qtgui/rclmain_w.h,
+	src/query/history.cpp, src/query/history.h:
+	menu entry to reset document history
+
+2007-06-19 16:19 +0000  dockes    (675d2fed7a32)
+
+	* src/qtgui/rclmain_w.cpp, src/qtgui/sort_w.cpp:
+	fix sort state restoration which didnt work
+
+2007-06-19 15:48 +0000  dockes    (36fa1c12d616)
+
+	* src/rcldb/rcldb.cpp:
+	try to better print delete exception messages
+
+2007-06-19 15:47 +0000  dockes    (304862edc545)
+
+	* src/query/xadump.cpp:
+	option X
+
+2007-06-19 15:47 +0000  dockes    (23a728d3cdd7)
+
+	* src/query/recollq.cpp:
+	compile
+
+2007-06-19 12:27 +0000  dockes    (5ee1b5e9168e)
+
+	* src/internfile/internfile.cpp, src/internfile/internfile.h:
+	get test driver to compile
+
+2007-06-19 12:17 +0000  dockes    (8974a52d2baa)
+
+	* src/internfile/htmlparse.h, src/internfile/mh_html.cpp,
+	src/internfile/myhtmlparse.cpp, src/internfile/myhtmlparse.h:
+	renamed the html charset values to stick to omega usage
+
+2007-06-19 10:28 +0000  dockes    (e66870aeadb6)
+
+	* src/internfile/htmlparse.cpp, src/internfile/htmlparse.h,
+	src/internfile/myhtmlparse.cpp, src/internfile/myhtmlparse.h:
+	updated html parser to omega 1.0.1 + moved entity decoder to
+	myhtmlparse to minimize amount of diffs
+
+2007-06-19 08:36 +0000  dockes    (e2533617731d)
+
+	* src/common/rclconfig.cpp, src/common/rclconfig.h,
+	src/internfile/internfile.cpp, src/internfile/mh_html.cpp,
+	src/internfile/myhtmlparse.cpp, src/internfile/myhtmlparse.h,
+	src/qtgui/preview_w.cpp, src/qtgui/reslist.cpp, src/query/docseq.h,
+	src/query/docseqdb.cpp, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h,
+	src/rcldb/rcldoc.h, src/rcldb/searchdata.cpp,
+	src/sampleconf/mimeconf:
+	added open-ended field name handling
+
+2007-06-19 07:52 +0000  dockes    (73ccb629ad66)
+
+	* src/common/autoconfig.h.in, src/configure, src/configure.ac,
+	src/index/csguess.cpp, src/utils/transcode.cpp:
+	added test for iconv parm 2 constness
+
+2007-06-18 13:04 +0000  dockes    (bb1262134776)
+
+	* src/common/rclconfig.cpp, src/common/rclconfig.h,
+	src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, src/rcldb/searchdata.cpp,
+	src/sampleconf/mimeconf:
+	implement dynamic field name to prefix translation, query side
+
+2007-06-15 11:41 +0000  dockes    (5eccc05a2ae7)
+
+	* src/filters/rclabw, src/filters/rclsoff, src/sampleconf/mimeconf,
+	src/sampleconf/mimemap, src/sampleconf/mimeview:
+	added abiword + some oofice cleanup
+
+2007-06-15 09:25 +0000  dockes    (f5b1666a10e6)
+
+	* src/filters/rclabw: new file.
+	* src/filters/rclabw:
+	*** empty log message ***
+
+2007-06-14 08:20 +0000  dockes    (dc698e7b3c84)
+
+	* src/rcldb/rcldb.cpp:
+	removed the "weak" date, not used and not in omega anymore
+
+2007-06-13 17:03 +0000  dockes    (3d509dbc275c)
+
+	* src/qtgui/reslist.cpp:
+	textedit autext sometimes switched to plain at eol?
+
+2007-06-12 13:31 +0000  dockes    (793abec1cee4)
+
+	* src/qtgui/plaintorich.cpp, src/qtgui/preview_w.cpp,
+	src/qtgui/preview_w.h, src/qtgui/rclmain_w.cpp,
+	src/qtgui/reslist.cpp, src/qtgui/reslist.h:
+	somewhat fixed qt4 selection problems
+
+2007-06-12 10:33 +0000  dockes    (261ca6c11087)
+
+	* src/qtgui/ssearch_w.cpp:
+	adjust event handling for qt4, get esc-spc to work
+
+2007-06-12 10:32 +0000  dockes    (97c9f158e297)
+
+	* src/qtgui/plaintorich.cpp:
+	comments
+
+2007-06-12 08:50 +0000  dockes    (28d503078074)
+
+	* src/qtgui/rclmain_w.cpp:
+	*** empty log message ***
+
+2007-06-12 08:46 +0000  dockes    (d3f305e57522)
+
+	* src/query/recollq.cpp:
+	getMainConfig
+
+2007-06-11 08:33 +0000  dockes    (5542196b466a)
+
+	* src/qtgui/rclmain_w.cpp:
+	set busy cursor while search runs
+
+2007-06-11 05:51 +0000  dockes    (bf5090aed2fd)
+
+	* src/Makefile.in:
+	*** empty log message ***
+
+2007-06-11 05:49 +0000  dockes    (9327b736d7ff)
+
+	* src/Makefile.in, src/qt4gui/uifrom3:
+	*** empty log message ***
+
+2007-06-11 05:45 +0000  dockes    (cbb602782461)
+
+	* src/desktop/recoll.png, src/desktop/recoll.xcf: new file.
+	* src/desktop/recoll-searchgui.png, src/desktop/recoll-searchgui.xcf:
+	deleted file.
+	* src/desktop/recoll-searchgui.desktop, src/desktop/recoll-
+	searchgui.png, src/desktop/recoll-searchgui.xcf,
+	src/desktop/recoll.png, src/desktop/recoll.xcf,
+	src/makestaticdist.sh, src/recollinstall.in:
+	icon named recoll.png
+
+2007-06-11 05:38 +0000  dockes    (9268fba2c65c)
+
+	* src/index/indexer.cpp:
+	changed level of missing helpers message
+
+2007-06-10 12:26 +0000  dockes    (f5b6dcd36de0)
+
+	* src/mk/OpenBSD: new file.
+	* src/mk/OpenBSD:
+	*** empty log message ***
+
+2007-06-08 16:47 +0000  dockes    (96f2807957dd)
+
+	* src/common/rclconfig.h, src/index/indexer.cpp,
+	src/index/recollindex.cpp, src/mk/FreeBSD, src/qtgui/main.cpp,
+	src/rcldb/rcldb.cpp, src/rcldb/rcldb.h:
+	added file system usage check
+
+2007-06-08 16:46 +0000  dockes    (0c11deb1a678)
+
+	* src/doc/user/usermanual.sgml:
+	*** empty log message ***
+
+2007-06-08 16:46 +0000  dockes    (4f2c0d45e15b)
+
+	* src/desktop/recoll-searchgui.desktop, src/desktop/recoll-
+	searchgui.png, src/desktop/recoll-searchgui.xcf:
+	new icon
+
+2007-06-08 16:05 +0000  dockes    (6835d2fbb56c)
+
+	* src/rcldb/rcldb.h:
+	comments and ordering
+
+2007-06-08 15:30 +0000  dockes    (aeffac1f3f2d)
+
+	* src/utils/pathut.cpp, src/utils/pathut.h:
+	fsocc
+
+2007-06-08 14:01 +0000  dockes    (7c47d8aae3cc)
+
+	* src/filters/rclkwd: new file.
+	* src/filters/rclkwd, src/sampleconf/mimeview:
+	kword support
+
+2007-06-08 13:51 +0000  dockes    (53a1012a564f)
+
+	* src/filters/rcldjvu, src/filters/rcldoc, src/filters/rcldvi,
+	src/filters/rclgaim, src/filters/rcljpeg, src/filters/rcllyx,
+	src/filters/rclman, src/filters/rclmedia, src/filters/rclpdf,
+	src/filters/rclppt, src/filters/rclps, src/filters/rclrtf,
+	src/filters/rclscribus, src/filters/rclsoff, src/filters/rclxls,
+	src/filters/recfiltcommon, src/sampleconf/mimeconf,
+	src/sampleconf/mimemap:
+	kword support
+
+2007-06-08 12:33 +0000  dockes    (a56bc180327b)
+
+	* src/query/recollq.cpp:
+	added stopfile parameter
+
+2007-06-08 12:32 +0000  dockes    (7b3710f69cd0)
+
+	* src/filters/rcljpeg: new file.
+	* src/filters/rcljpeg, src/sampleconf/mimeconf:
+	rcljpeg
+
+2007-06-08 12:31 +0000  dockes    (0b20447d105e)
+
+	* src/common/rclconfig.cpp:
+	improve message about bad config
+
+2007-06-02 08:30 +0000  dockes    (dfa3e5682035)
+
+	* src/rcldb/Makefile, src/rcldb/stoplist.cpp, src/rcldb/stoplist.h:
+	new file.
+	* src/common/rclconfig.cpp, src/common/rclconfig.h,
+	src/index/indexer.cpp, src/lib/Makefile, src/lib/mkMake,
+	src/qtgui/main.cpp, src/rcldb/Makefile, src/rcldb/rcldb.cpp,
+	src/rcldb/rcldb.h, src/rcldb/searchdata.cpp, src/rcldb/stoplist.cpp,
+	src/rcldb/stoplist.h, src/utils/readfile.cpp, src/utils/readfile.h:
+	minimal experimental stopword functionality
+
+2007-06-01 05:44 +0000  dockes    (b9f3d4b61852)
+
+	* src/qtgui/preview_w.cpp:
+	preview: space and backspace bound to pgdown/pgup
+
+2007-05-30 12:31 +0000  dockes    (105744d9f609)
+
+	* src/index/indexer.cpp, src/internfile/mh_html.cpp,
+	src/internfile/mh_html.h, src/qtgui/plaintorich.cpp,
+	src/query/xadump.cpp, src/utils/transcode.cpp:
+	improve transcode error printing
+
+2007-05-30 12:30 +0000  dockes    (d4fa167018eb)
+
+	* src/doc/user/usermanual.sgml:
+	*** empty log message ***
+
+2007-05-30 12:30 +0000  dockes    (6027fd8afb12)
+
+	* src/rcldb/rcldb.cpp:
+	improve add_document error message printing
+
+2007-05-30 12:29 +0000  dockes    (234dc300c26b)
+
+	* src/qtgui/reslist.cpp, src/qtgui/reslist.h:
+	escape possibly not html-safe text
+
+2007-05-24 09:35 +0000  dockes    (ec684a070c43)
+
+	* src/rcldb/stemdb.cpp:
+	comment
+
+2007-05-24 07:48 +0000  dockes    (deedeff93a6e)
+
+	* src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, src/qtgui/sort_w.cpp,
+	src/qtgui/uiprefs.ui, src/qtgui/uiprefs_w.cpp:
+	optionally remember sorting state between invocations
+
+2007-05-24 07:47 +0000  dockes    (e6bb3bced970)
+
+	* src/configure, src/configure.ac, src/qt4gui/uifrom3:
+	make uifrom3 a makefile
+
+2007-05-23 09:19 +0000  dockes    (4f9ab7436818)
+
+	* src/qtgui/plaintorich.cpp, src/qtgui/plaintorich.h,
+	src/qtgui/preview.ui, src/qtgui/preview_w.cpp,
+	src/qtgui/preview_w.h:
+	in preview window if search line empty look for search terms
+
+2007-05-23 08:29 +0000  dockes    (644c4e20106b)
+
+	* src/internfile/internfile.cpp:
+	*** empty log message ***
+
+2007-05-23 08:28 +0000  dockes    (1927522b5826)
+
+	* src/common/rclinit.cpp, src/utils/execmd.cpp:
+	cant block sigcld globally cause qt needs it
+
+2007-05-22 08:33 +0000  dockes    (2c0d94ae674a)
+
+	* src/internfile/internfile.cpp, src/internfile/mh_html.cpp:
+	let email attachments inherit date and author from parent message
+
+2007-05-22 07:40 +0000  dockes    (fc644359e793)
+
+	* src/index/indexer.cpp, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h:
+	implemented adjustable indexing flush threshold
+
+2007-05-21 14:26 +0000  dockes    (d70d7b6988f0)
+
+	* src/qtgui/rclmain_w.cpp:
+	reopen db for each search during query
+
+2007-05-21 13:30 +0000  dockes    (7f65a405e028)
+
+	* src/common/rclinit.cpp, src/common/rclinit.h,
+	src/index/rclmonprc.cpp, src/index/rclmonrcv.cpp,
+	src/index/recollindex.cpp, src/qtgui/idxthread.cpp,
+	src/qtgui/main.cpp, src/rcldb/rcldb.cpp, src/utils/execmd.cpp,
+	src/utils/execmd.h:
+	make sure signals are only handled by the main thread. Fix bus error
+	on rclmon exit (double delete)
+
+2007-05-21 12:03 +0000  dockes    (7af2d0c361be)
+
+	* src/utils/smallut.h:
+	*** empty log message ***
+
+2007-05-21 09:00 +0000  dockes    (9ee50650bd6f)
+
+	* src/index/indexer.cpp, src/index/rclmonprc.cpp:
+	better handle aspell errors: dont exit from monitor on aux db
+	creation failure, and dont retry forever
+
+2007-05-21 07:24 +0000  dockes    (53f18ed9c2f8)
+
+	* src/VERSION, src/configure, src/configure.ac,
+	src/doc/user/usermanual.sgml, src/qt4gui/uifrom3,
+	src/sampleconf/recoll.conf.in:
+	removed --enable-qt4, rely on qmake output instead
+
+2007-05-21 06:46 +0000  dockes    (d6267bb0e30f)
+
+	* website/BUGS.txt, website/CHANGES.txt, website/devel.html,
+	website/doc.html, website/download.html, website/index.html.en,
+	website/index.html.fr:
+	*** empty log message ***
+
+2007-05-19 07:32 +0000  dockes    (cbbd4158e0a8)
+
+	* website/doc.html: new file.
+	* website/doc.html:
+	*** empty log message ***
+
+2007-05-18 12:05 +0000  dockes    (75610b300ee1 [RECOLL_1_8_2])
+
+	* src/recollinstall.in:
+	qt4 install glitches
+
+2007-05-18 11:16 +0000  dockes    (c9a0be6210be)
+
+	* src/README:
+	*** empty log message ***
+
+2007-05-18 07:49 +0000  dockes    (eaf500145dd5)
+
+	* src/VERSION:
+	1.8.2
+
+2007-05-18 07:49 +0000  dockes    (fc64434e87c0)
+
+	* packaging/debian/changelog, tests/runtests.sh, website/BUGS.txt,
+	website/CHANGES.txt, website/download.html:
+	*** empty log message ***
+
+2007-05-18 07:41 +0000  dockes    (6bec0784b8fd)
+
+	* src/doc/user/usermanual.sgml:
+	doc fix
+
+2007-05-18 07:41 +0000  dockes    (022d354a0a2f)
+
+	* src/sampleconf/recoll.conf.in:
+	add .beagle to stops
+
+2007-05-18 07:41 +0000  dockes    (451a13663a00)
+
+	* src/rcldb/rcldb.cpp, src/rcldb/stemdb.cpp:
+	change method name deprecated in xap 1.0
+
+2007-05-18 07:40 +0000  dockes    (54bfc83a6186)
+
+	* src/query/Makefile:
+	*** empty log message ***
+
+2007-05-18 07:40 +0000  dockes    (ef599af3e2e7)
+
+	* src/configure.ac:
+	use $libdir instead of /usr/lib (64bits machs)
+
+2007-05-16 11:28 +0000  dockes    (2cced3d0aa32)
+
+	* src/qtgui/i18n/recoll_it.ts:
+	*** empty log message ***
+
+2007-04-22 07:36 +0000  dockes    (8628fca949e7)
+
+	* src/qtgui/i18n/recoll_de.ts: new file.
+	* src/qtgui/i18n/recoll_de.ts:
+	*** empty log message ***
+
+2007-03-28 19:30 +0000  dockes    (51c5bdb227cd)
+
+	* website/BUGS.txt, website/download.html, website/index.html.en,
+	website/index.html.fr:
+	*** empty log message ***
+
+2007-03-08 12:24 +0000  dockes    (0efcbb1564f2)
+
+	* packaging/FreeBSD/recoll/Makefile,
+	packaging/FreeBSD/recoll/distinfo:
+	1.8.1
+
+2007-03-08 12:04 +0000  dockes    (813c82bcc951 [RECOLL_1_8_1])
+
+	* packaging/FreeBSD/recoll/Makefile,
+	packaging/FreeBSD/recoll/distinfo, packaging/FreeBSD/recoll/pkg-
+	plist, packaging/debian/changelog, packaging/rpm/recoll.spec,
+	packaging/rpm/recollfedora.spec, packaging/rpm/recollmdk.spec,
+	src/VERSION, src/makestaticdist.sh, website/BUGS.txt,
+	website/CHANGES.txt, website/download.html:
+	version 1.8.1 ?
+
+2007-02-20 09:30 +0000  dockes    (817cdab71c1c [RECOLL_1_8_0])
+
+	* src/recollinstall.in:
+	go back to not using xdg
+
+2007-02-20 07:57 +0000  dockes    (d1f1b31e4a58)
+
+	* website/index.html.en, website/index.html.fr: new file.
+	* website/index.html: deleted file.
+	* packaging/debian/changelog, website/BUGS.txt, website/CHANGES.txt,
+	website/credits.html, website/download.html, website/features.html,
+	website/index.html, website/index.html.en, website/index.html.fr:
+	*** empty log message ***
+
+2007-02-20 07:43 +0000  dockes    (1f4b07f4cb62)
+
+	* src/qtgui/recoll.pro.in:
+	*** empty log message ***
+
+2007-02-20 07:33 +0000  dockes    (dc922603c639)
+
+	* src/qtgui/i18n/recoll_fr.ts, src/qtgui/i18n/recoll_it.ts,
+	src/qtgui/i18n/recoll_ru.ts, src/qtgui/i18n/recoll_uk.ts:
+	*** empty log message ***
+
+2007-02-20 07:19 +0000  dockes    (d6b63dc759cd)
+
+	* src/INSTALL, src/README:
+	*** empty log message ***
+
+2007-02-19 18:15 +0000  dockes    (a1331ff143f7)
+
+	* src/qtgui/preview_w.cpp, src/qtgui/preview_w.h:
+	make shift-arrow in preview work with qt4 and avoid reentrancy while
+	loading a file
+
+2007-02-19 18:14 +0000  dockes    (66c79bcff30e)
+
+	* src/utils/execmd.cpp:
+	block sigcld, it sometimes causes eintrs during the select() call
+
+2007-02-19 18:05 +0000  dockes    (db9e1830a040)
+
+	* src/internfile/internfile.cpp:
+	check file name not empty on return from uncomp exec
+
+2007-02-19 16:28 +0000  dockes    (19982a948347)
+
+	* src/qtgui/spell_w.cpp:
+	stemming language choice was not observed in term explorer
+
+2007-02-19 16:10 +0000  dockes    (26815f6c7ce0)
+
+	* src/qtgui/advsearch_w.cpp, src/qtgui/advsearch_w.h:
+	cleanup ign file types handling/saving
+
+2007-02-14 15:02 +0000  dockes    (714300cb7780)
+
+	* tests/empty/empty.sh, tests/empty/empty.txt, tests/html/html.sh,
+	tests/html/html.txt, tests/images/images.sh,
+	tests/images/images.txt, tests/koi8r/koi8r.sh,
+	tests/koi8r/koi8r.txt, tests/mail/mail.sh, tests/mail/mail.txt,
+	tests/notypes/notypes.sh, tests/notypes/notypes.txt,
+	tests/rfc2231/rfc2231.sh, tests/rfc2231/rfc2231.txt,
+	tests/special/special.sh, tests/special/special.txt,
+	tests/txt/txt.sh, tests/txt/txt.txt, tests/utf8/utf8.sh,
+	tests/utf8/utf8.txt: new file.
+	* tests/empty/empty.sh, tests/empty/empty.txt, tests/html/html.sh,
+	tests/html/html.txt, tests/images/images.sh,
+	tests/images/images.txt, tests/koi8r/koi8r.sh,
+	tests/koi8r/koi8r.txt, tests/lyx/lyx.txt, tests/mail/mail.sh,
+	tests/mail/mail.txt, tests/notypes/notypes.sh,
+	tests/notypes/notypes.txt, tests/rfc2231/rfc2231.sh,
+	tests/rfc2231/rfc2231.txt, tests/special/special.sh,
+	tests/special/special.txt, tests/txt/txt.sh, tests/txt/txt.txt,
+	tests/utf8/utf8.sh, tests/utf8/utf8.txt:
+	*** empty log message ***
+
+2007-02-14 11:52 +0000  dockes    (b3f3859ce5e5)
+
+	* tests/boolean/boolean.sh, tests/boolean/boolean.txt,
+	tests/delete/delete.sh, tests/delete/delete.txt,
+	tests/dirwithblanks/dirwithblanks.sh,
+	tests/dirwithblanks/dirwithblanks.txt, tests/djvu/djvu.sh,
+	tests/djvu/djvu.txt, tests/dvi/dvi.sh, tests/dvi/dvi.txt,
+	tests/lyx/lyx.sh, tests/lyx/lyx.txt, tests/media/media.sh,
+	tests/media/media.txt, tests/msword/msword.sh,
+	tests/msword/msword.txt, tests/ooff/ooff.sh, tests/ooff/ooff.txt,
+	tests/pdf/pdf.sh, tests/pdf/pdf.txt, tests/postscript/postscript.sh,
+	tests/postscript/postscript.txt, tests/ppt/ppt.sh,
+	tests/ppt/ppt.txt, tests/rtf/rtf.sh, tests/rtf/rtf.txt,
+	tests/scribus/scribus.sh, tests/scribus/scribus.txt,
+	tests/xls/xls.sh, tests/xls/xls.txt: new file.
+	* tests/Maildir1/Maildir1.txt, tests/andor/andor.txt,
+	tests/badsuffs1/badsuffs1.txt, tests/boolean/boolean.sh,
+	tests/boolean/boolean.txt, tests/delete/delete.sh,
+	tests/delete/delete.txt, tests/dirwithblanks/dirwithblanks.sh,
+	tests/dirwithblanks/dirwithblanks.txt, tests/djvu/djvu.sh,
+	tests/djvu/djvu.txt, tests/dvi/dvi.sh, tests/dvi/dvi.txt,
+	tests/lyx/lyx.sh, tests/lyx/lyx.txt, tests/media/media.sh,
+	tests/media/media.txt, tests/msword/msword.sh,
+	tests/msword/msword.txt, tests/ooff/ooff.sh, tests/ooff/ooff.txt,
+	tests/pdf/pdf.sh, tests/pdf/pdf.txt, tests/postscript/postscript.sh,
+	tests/postscript/postscript.txt, tests/ppt/ppt.sh,
+	tests/ppt/ppt.txt, tests/rtf/rtf.sh, tests/rtf/rtf.txt,
+	tests/scribus/scribus.sh, tests/scribus/scribus.txt,
+	tests/shared.sh, tests/skipped/skipped.sh,
+	tests/skipped/skipped.txt, tests/xls/xls.sh, tests/xls/xls.txt:
+	*** empty log message ***
+
+2007-02-14 10:10 +0000  dockes    (04c3156fd4dd)
+
+	* src/doc/user/usermanual.sgml, src/makestaticdist.sh,
+	src/qtgui/guiutils.cpp, src/qtgui/guiutils.h,
+	src/qtgui/rclmain_w.cpp, src/qtgui/uiprefs.ui,
+	src/qtgui/uiprefs_w.cpp, src/recollinstall.in,
+	src/sampleconf/mimeview:
+	add user pref to use xdg-open for all document edits
+
+2007-02-14 10:09 +0000  dockes    (7886dd99d419)
+
+	* src/rcldb/rcldb.cpp:
+	during indexing use simple file name as title if this is empty. This
+	allows storing the sfn for subdocs for which the url sfn doesnt make
+	sense as title
+
+2007-02-14 10:08 +0000  dockes    (fb42e10e5a7b)
+
+	* src/query/recollq.cpp:
+	adjust format to help the test set scripts
+
+2007-02-14 08:54 +0000  dockes    (5e02666b38db)
+
+	* src/desktop/xdg-utils-1.0.1/scripts/xdg-open: new file.
+	* src/desktop/xdg-utils-1.0.1/scripts/xdg-open:
+	*** empty log message ***
+
+2007-02-14 08:16 +0000  dockes    (eb0fd52ef15a)
+
+	* tests/Maildir/Maildir.sh, tests/Maildir/Maildir.txt,
+	tests/Maildir1/Maildir1.sh, tests/Maildir1/Maildir1.txt,
+	tests/andor/andor.sh, tests/andor/andor.txt,
+	tests/badsuffs/badsuffs.sh, tests/badsuffs/badsuffs.txt,
+	tests/badsuffs1/badsuffs1.sh, tests/badsuffs1/badsuffs1.txt,
+	tests/runtests.sh, tests/shared.sh, tests/skipped/skipped.sh,
+	tests/skipped/skipped.txt: new file.
+	* tests/Maildir/Maildir.sh, tests/Maildir/Maildir.txt,
+	tests/Maildir1/Maildir1.sh, tests/Maildir1/Maildir1.txt,
+	tests/andor/andor.sh, tests/andor/andor.txt,
+	tests/badsuffs/badsuffs.sh, tests/badsuffs/badsuffs.txt,
+	tests/badsuffs1/badsuffs1.sh, tests/badsuffs1/badsuffs1.txt,
+	tests/runtests.sh, tests/shared.sh, tests/skipped/skipped.sh,
+	tests/skipped/skipped.txt:
+	*** empty log message ***
+
+2007-02-13 10:58 +0000  dockes    (19c29e100995)
+
+	* src/query/wasatorcl.cpp, src/rcldb/searchdata.cpp,
+	src/rcldb/searchdata.h:
+	propagate wasa nostem modifier
+
+2007-02-12 18:16 +0000  dockes    (bf3060f2e259)
+
+	* src/query/wasastringtoquery.cpp, src/query/wasastringtoquery.h:
+	add wasabi modifiers
+
+2007-02-12 18:14 +0000  dockes    (6ae625065d64)
+
+	* src/qtgui/guiutils.cpp:
+	dont set Helvetica as default font
+
+2007-02-08 17:05 +0000  dockes    (f23e18da0362)
+
+	* src/index/indexer.cpp, src/index/indexer.h,
+	src/internfile/internfile.cpp, src/internfile/internfile.h,
+	src/qtgui/preview_w.cpp, src/utils/smallut.cpp, src/utils/smallut.h:
+	improve handling of missing helpers messages
+
+2007-02-08 17:03 +0000  dockes    (f53e952b71cd)
+
+	* src/filters/rcldvi:
+	typos
+
+2007-02-08 12:25 +0000  dockes    (ba982598a66f)
+
+	* src/internfile/internfile.h, src/query/recollq.cpp:
+	clarify temp dir usage in internfile
+
+2007-02-08 09:03 +0000  dockes    (876ec27bd9c0)
+
+	* src/qtgui/reslist.cpp, src/qtgui/uiprefs_w.cpp,
+	src/qtgui/uiprefs_w.h:
+	qt4 compilation glitches
+
+2007-02-07 17:18 +0000  dockes    (2f05854b010a)
+
+	* src/filters/injectcommon.sh, src/filters/recfiltcommon: new file.
+	* src/filters/injectcommon.sh, src/filters/recfiltcommon:
+	*** empty log message ***
+
+2007-02-07 17:17 +0000  dockes    (39e4d9e07461)
+
+	* src/recoll.desktop, src/recoll.png, src/recoll.xcf: deleted file.
+	* src/recoll.desktop, src/recoll.png, src/recoll.xcf,
+	src/recollinstall.in:
+	use xdg scripts to install desktop file and icon
+
+2007-02-07 17:17 +0000  dockes    (3161a2dabc0a)
+
+	* src/common/rclconfig.cpp, src/doc/user/usermanual.sgml:
+	dont autocreate config specified with -c or RECOLL_CONFDIR
+
+2007-02-07 16:31 +0000  dockes    (f89cbedba93f)
+
+	* src/desktop/recoll-searchgui.desktop, src/desktop/recoll-
+	searchgui.png, src/desktop/recoll-searchgui.xcf, src/desktop/xdg-
+	utils-1.0.1/LICENSE, src/desktop/xdg-utils-1.0.1/scripts/xdg-
+	desktop-menu, src/desktop/xdg-utils-1.0.1/scripts/xdg-icon-resource:
+	new file.
+	* src/desktop/recoll-searchgui.desktop, src/desktop/recoll-
+	searchgui.png, src/desktop/recoll-searchgui.xcf, src/desktop/xdg-
+	utils-1.0.1/LICENSE, src/desktop/xdg-utils-1.0.1/scripts/xdg-
+	desktop-menu, src/desktop/xdg-utils-1.0.1/scripts/xdg-icon-resource,
+	src/query/recollq.cpp:
+	*** empty log message ***
+
+2007-02-07 16:31 +0000  dockes    (2494c5157c22)
+
+	* src/aspell/rclaspell.cpp:
+	improve db creation error message
+
+2007-02-07 12:00 +0000  dockes    (3c02ca709886)
+
+	* src/query/recollq.cpp: new file.
+	* src/query/Makefile, src/query/recollq.cpp, src/query/wasatorcl.cpp,
+	src/query/wasatorcl.h:
+	recollq
+
+2007-02-06 18:01 +0000  dockes    (1992c71741c0)
+
+	* src/index/indexer.cpp, src/internfile/internfile.cpp,
+	src/internfile/internfile.h, src/internfile/mh_exec.cpp,
+	src/qtgui/preview_w.cpp:
+	arrange for error info about missing helpers to trickle up to the
+	user
+
+2007-02-06 18:01 +0000  dockes    (d5e12cec5aeb)
+
+	* src/sampleconf/mimeconf, src/sampleconf/mimemap:
+	added config+filter for man pages
+
+2007-02-06 15:08 +0000  dockes    (ef2eef3c33e9)
+
+	* src/filters/rclman: new file.
+	* src/filters/rcldjvu, src/filters/rcldoc, src/filters/rcldvi,
+	src/filters/rclgaim, src/filters/rcllyx, src/filters/rclman,
+	src/filters/rclmedia, src/filters/rclpdf, src/filters/rclppt,
+	src/filters/rclps, src/filters/rclrtf, src/filters/rclscribus,
+	src/filters/rclsoff, src/filters/rclxls:
+	factored out filter script common code
+
+2007-02-06 14:18 +0000  dockes    (7812fc3157a4)
+
+	* src/common/rclconfig.cpp, src/utils/pathut.cpp, src/utils/pathut.h:
+	make sure the -c argument is turned absolute before use
+
+2007-02-06 10:19 +0000  dockes    (243d1fffdfb9)
+
+	* src/qtgui/ssearch_w.cpp:
+	no space in query -> phrase
+
+2007-02-06 10:18 +0000  dockes    (d1b8dd6a7182)
+
+	* src/qtgui/reslist.cpp:
+	try to make sure that the old reslist is cleared while searching
+
+2007-02-06 10:18 +0000  dockes    (24163d1804e5)
+
+	* src/qt4gui/uifrom3:
+	link images/ from qtgui to qt4gui
+
+2007-02-03 16:46 +0000  dockes    (d27849ad572f)
+
+	* website/styles/style.css:
+	*** empty log message ***
+
+2007-02-02 10:27 +0000  dockes    (3c82d463b36c)
+
+	* src/doc/user/usermanual.sgml:
+	add skippedPaths and daemSkippedPaths config variables
+
+2007-02-02 10:12 +0000  dockes    (0232602ba055)
+
+	* src/common/rclconfig.cpp, src/common/rclconfig.h,
+	src/index/indexer.cpp, src/index/rclmonrcv.cpp,
+	src/utils/fstreewalk.cpp:
+	add skippedPaths and daemSkippedPaths config variables
+
+2007-02-02 10:10 +0000  dockes    (12a2a255dedc)
+
+	* src/rcldb/rcldb.cpp, src/rcldb/rcldb.h:
+	sort and uniquify termMatch results out of stem expansion
+
+2007-02-02 10:09 +0000  dockes    (344b11ebced1)
+
+	* src/index/recollindex.cpp:
+	do x11 check between sleeping and starting in recollindex -m
+
+2007-02-02 10:06 +0000  dockes    (3a9bb20130c8)
+
+	* src/doc/user/usermanual-italian.html: new file.
+	* src/doc/user/usermanual-italian.html, src/qtgui/i18n/recoll_it.ts:
+	*** empty log message ***
+
+2007-02-02 10:06 +0000  dockes    (9a6092dbecea)
+
+	* src/lib/Makefile, src/lib/mkMake:
+	fix $(depth) usage for easier kio compilation
+
+2007-02-02 10:05 +0000  dockes    (a645eeae729a)
+
+	* src/doc/user/usermanual.sgml:
+	added config examples
+
+2007-02-02 10:01 +0000  dockes    (a0640e49ab3a)
+
+	* src/recollinstall.in:
+	removed old filter in examples cleanup
+
+2007-02-01 15:01 +0000  dockes    (db53657c868d)
+
+	* src/aspell/rclaspell.cpp, src/mk/localdefs.in:
+	use configure libdir to search for aspell lib (mainly for 64 bits
+	machines)
+
+2007-02-01 12:43 +0000  dockes    (7f3d33405e53)
+
+	* src/kde/kioslave/recoll/Makefile,
+	src/kde/kioslave/recoll/kio_recoll.cpp:
+	fixed kio compilation. Dont know if it works
+
+2007-01-30 11:39 +0000  dockes    (1aa8e8c3d93a)
+
+	* src/filters/rcldjvu, src/filters/rcldoc, src/filters/rcldvi,
+	src/filters/rclpdf, src/filters/rclps, src/filters/rclrtf,
+	src/filters/rclsoff:
+	hide awk BEGIN statements - make debian linda happy
+
+2007-01-29 13:51 +0000  dockes    (f207a83f0617)
+
+	* src/rcldb/searchdata.cpp:
+	more field name synonyms
+
+2007-01-25 15:50 +0000  dockes    (ba53fd450dc5)
+
+	* src/rcldb/searchdata.cpp, src/rcldb/searchdata.h:
+	better wildcards handling. Tuning of user term boosting
+
+2007-01-25 15:47 +0000  dockes    (026e24e9aafc)
+
+	* src/doc/user/usermanual.sgml:
+	*** empty log message ***
+
+2007-01-25 15:47 +0000  dockes    (31cd60d81a3a)
+
+	* src/rcldb/rcldb.cpp:
+	dont explicitely anchor regexp in termMatch
+
+2007-01-25 15:46 +0000  dockes    (8c7afe9df6fb)
+
+	* src/qtgui/ssearch_w.cpp:
+	Dont add auto phrase if there are wildcards
+
+2007-01-25 15:45 +0000  dockes    (d35369f54699)
+
+	* src/query/wasatorcl.cpp:
+	comment
+
+2007-01-25 15:40 +0000  dockes    (2d7b13ebd2c8)
+
+	* src/common/textsplit.cpp:
+	[] are also wildcard chars
+
+2007-01-25 12:04 +0000  dockes    (27310036f46c)
+
+	* src/qtgui/i18n/recoll_it.ts:
+	*** empty log message ***
+
+2007-01-25 08:27 +0000  dockes    (876d5192bdde)
+
+	* src/qtgui/i18n/recoll_it.ts: new file.
+	* src/qtgui/i18n/recoll_it.ts:
+	*** empty log message ***
+
+2007-01-24 12:40 +0000  dockes    (dd470677dbf2)
+
+	* src/qtgui/guiutils.cpp:
+	make AND the initial default for ssearch
+
+2007-01-24 11:20 +0000  dockes    (623c6533e0f0)
+
+	* src/qtgui/uiprefs.ui, src/qtgui/viewaction.ui:
+	change MyDialog and Form1 dialog captions
+
+2007-01-24 11:15 +0000  dockes    (9dc93d749ea8)
+
+	* src/filters/rclscribus:
+	transate \r to 
(for older scribus files) + +2007-01-24 11:00 +0000 dockes (7ea73b206760) + + * src/sampleconf/mimeconf, src/sampleconf/mimemap: + scribus scd files + +2007-01-23 07:23 +0000 dockes (0f9e96c72d1c) + + * src/filters/rcllyx: + *** empty log message *** + +2007-01-23 07:22 +0000 dockes (5fc9550be90c) + + * src/filters/rcllyx: + *** empty log message *** + +2007-01-23 07:16 +0000 dockes (55734c5d16c2) + + * src/filters/rcllyx: + *** empty log message *** + +2007-01-23 07:14 +0000 dockes (dafabbcdaf1a) + + * src/sampleconf/mimeconf, src/sampleconf/mimemap, + src/sampleconf/mimeview: + lyx filter + +2007-01-23 07:14 +0000 dockes (d5ac3c0cf64f) + + * src/filters/rcllyx: new file. + * src/filters/rcllyx: + lyx filter + +2007-01-22 16:34 +0000 dockes (e76e39a890d0) + + * src/sampleconf/mimeconf, src/sampleconf/mimemap: + added scribus support + +2007-01-22 16:32 +0000 dockes (0b142f40e0c7) + + * src/filters/rclscribus: new file. + * src/filters/rclscribus: + added scribus support + +2007-01-21 16:41 +0000 dockes (8e06e0f7914e) + + * src/filters/rclsoff: + fix shell syntax for debian + +2007-01-19 15:22 +0000 dockes (084098d57a50) + + * src/qtgui/plaintorich.cpp, src/qtgui/plaintorich.h, + src/qtgui/preview_w.cpp, src/qtgui/preview_w.h, + src/qtgui/rclmain_w.cpp, src/qtgui/reslist.cpp, src/qtgui/reslist.h, + src/query/docseq.h, src/query/docseqdb.cpp, src/query/docseqdb.h, + src/query/docseqhist.h, src/query/sortseq.cpp, src/query/sortseq.h: + try to limit the places which use Rcl:: stuff + +2007-01-19 15:19 +0000 dockes (1d1bdf98f176) + + * src/rcldb/stemdb.cpp: + make sure that both the user term and the stem are in the expanded + list + +2007-01-19 10:32 +0000 dockes (757f49c23d93) + + * src/query/docseqdb.cpp, src/query/docseqdb.h, + src/query/docseqhist.cpp, src/query/docseqhist.h: new file. + * src/lib/Makefile, src/lib/mkMake, src/qtgui/rclmain_w.cpp, + src/qtgui/reslist.cpp, src/qtgui/ssearch_w.cpp, + src/query/docseq.cpp, src/query/docseq.h, src/query/docseqdb.cpp, + src/query/docseqdb.h, src/query/docseqhist.cpp, + src/query/docseqhist.h, src/query/sortseq.cpp, src/query/sortseq.h: + cleanup docseq, arrange things so that we can page reslist past the + initial result count estimate if there are more + +2007-01-19 10:23 +0000 dockes (d4ecd356406a) + + * src/rcldb/searchdata.cpp: + the relevance-boosted original term needs a prefix too + +2007-01-19 10:23 +0000 dockes (cacb9b50f1cf) + + * src/rcldb/rcldb.cpp: + adjust makeAbstract for prefixed terms + +2007-01-19 10:22 +0000 dockes (95d569102c37) + + * src/query/wasatorcl.cpp, src/query/wasatorcl.h: + add direct qstring to rcl function + +2007-01-18 14:23 +0000 dockes (157d8676b256) + + * src/utils/mimeparse.cpp: + debug msg + +2007-01-18 12:09 +0000 dockes (b0647b310dec) + + * src/common/textsplit.cpp, src/common/textsplit.h, + src/rcldb/searchdata.cpp: + handle wildcards in search terms + +2007-01-17 14:06 +0000 dockes (65d2617d690c) + + * src/query/Makefile, src/query/wasatorcl.cpp: + *** empty log message *** + +2007-01-17 13:53 +0000 dockes (82c00cf9d054) + + * src/internfile/internfile.cpp, src/internfile/mh_html.cpp, + src/internfile/mh_mail.cpp, src/internfile/myhtmlparse.cpp, + src/internfile/myhtmlparse.h, src/lib/Makefile, src/lib/mkMake, + src/query/Makefile, src/query/wasastringtoquery.cpp, + src/query/wasastringtoquery.h, src/query/wasatorcl.cpp, + src/rcldb/rcldb.cpp, src/rcldb/rcldoc.h, src/rcldb/searchdata.cpp, + src/rcldb/searchdata.h: + added field/prefixes for author and title + command line query + language + +2007-01-16 10:58 +0000 dockes (f56d8a303798) + + * src/sampleconf/recoll.conf.in: + add recollrc to skipped + +2007-01-16 10:58 +0000 dockes (a28d7ea5359b) + + * website/BUGS.txt, website/CHANGES.txt, website/download.html, + website/index.html: + 1.7.5 + +2007-01-16 10:58 +0000 dockes (83b10dc2e5ea) + + * src/bincimapmime/trbinc.cc, src/utils/debuglog.cpp: + wrong copyrights + +2007-01-16 10:56 +0000 dockes (e51d7ee21ffd) + + * packaging/FreeBSD/recoll/Makefile, + packaging/FreeBSD/recoll/distinfo, packaging/rpm/recoll.spec, + packaging/rpm/recollfedora.spec, packaging/rpm/recollmdk.spec: + 1.7.5 packaging + +2007-01-16 09:22 +0000 dockes (7f8fea3bed13) + + * packaging/debian/manpages: deleted file. + * packaging/debian/changelog, packaging/debian/control, + packaging/debian/copyright, packaging/debian/manpages, + packaging/debian/rules: + 2007-01-12 comments + +2007-01-15 19:16 +0000 dockes (740528a1cd7d) + + * packaging/debian/dirs: deleted file. + * packaging/debian/dirs: + *** empty log message *** + +2007-01-15 13:06 +0000 dockes (12e31e690f9e) + + * src/internfile/internfile.cpp, src/internfile/internfile.h: + dont stop processing a complex document on the first next_document + error: pop level and go on + +2007-01-15 13:03 +0000 dockes (6d3f8a71e602) + + * src/doc/user/usermanual.sgml: + *** empty log message *** + +2007-01-13 15:21 +0000 dockes (b04adc5188d5) + + * src/qtgui/rclmain.ui, src/qtgui/rclmain_w.cpp, + src/qtgui/rclmain_w.h, src/qtgui/uiprefs.ui, + src/qtgui/uiprefs_w.cpp, src/qtgui/uiprefs_w.h: + improved external index dialog with listview + +2007-01-13 14:41 +0000 dockes (f9567f0fed32) + + * src/query/xadump.cpp: + add option to dump raw terms + +2007-01-13 10:28 +0000 dockes (fc890008108f) + + * src/internfile/mh_mail.cpp: + handle multipart/signed + +2007-01-12 09:01 +0000 dockes (1782d39f9d4d) + + * src/qtgui/reslist.cpp: + Use sample from Rcl::Doc if makeAbstract() fails + +2007-01-12 06:42 +0000 dockes (8223a4aa9ad4) + + * packaging/debian/copyright: + include gpl statement + +2007-01-10 16:03 +0000 dockes (66247acdb470) + + * packaging/debian/changelog, packaging/debian/compat, + packaging/debian/control, packaging/debian/copyright, + packaging/debian/dirs, packaging/debian/docs, + packaging/debian/manpages, packaging/debian/menu, + packaging/debian/rules, packaging/debian/watch: new file. + * packaging/debian/changelog, packaging/debian/compat, + packaging/debian/control, packaging/debian/copyright, + packaging/debian/dirs, packaging/debian/docs, + packaging/debian/manpages, packaging/debian/menu, + packaging/debian/rules, packaging/debian/watch, src/Makefile.in, + src/VERSION: + *** empty log message *** + +2007-01-10 12:27 +0000 dockes (733bc11b5526) + + * packaging/FreeBSD/recoll/Makefile: + *** empty log message *** + +2007-01-09 15:34 +0000 dockes (9583ff723edf [RECOLL_1_7_3]) + + * packaging/rpm/recollfedora.spec: new file. + * packaging/FreeBSD/recoll/Makefile, + packaging/FreeBSD/recoll/distinfo, packaging/FreeBSD/recoll/pkg- + descr, packaging/FreeBSD/recoll/pkg-plist, + packaging/rpm/recoll.spec, packaging/rpm/recollfedora.spec, + packaging/rpm/recollmdk.spec: + 1.7.3 + +2007-01-09 14:39 +0000 dockes (f108471cd099) + + * website/BUGS.txt, website/CHANGES.txt, website/download.html: + 1.7.3 + +2007-01-09 07:25 +0000 dockes (e0c1d14a73c5) + + * src/VERSION: + *** empty log message *** + +2007-01-09 07:25 +0000 dockes (f06dbc019ff4) + + * src/qtgui/i18n/recoll_fr.ts, src/qtgui/i18n/recoll_ru.ts, + src/qtgui/i18n/recoll_uk.ts: + french messages + +2007-01-08 15:21 +0000 dockes (906e56e99e81) + + * src/VERSION, src/qtgui/main.cpp: + initial indexation with gui would not work + +2007-01-08 13:00 +0000 dockes (44d2b5d58ac6 [RECOLL_1_7_1]) + + * src/VERSION: + 1.7.1 + +2007-01-08 12:43 +0000 dockes (2cb748432b10) + + * src/qtgui/advsearch.ui: + lost sizers? + +2007-01-08 10:11 +0000 dockes (67c4375292e5) + + * src/qtgui/rclmain_w.cpp: + fix the previous icon fix + +2007-01-08 10:01 +0000 dockes (8eb24fe9db4f) + + * src/qtgui/rclmain_w.cpp, src/qtgui/rclmain_w.h, + src/qtgui/reslist.cpp, src/qtgui/reslist.h: + reslist menu openParent opens containing folder if not a subdoc + +2007-01-08 09:40 +0000 dockes (b38401a650c3) + + * src/qtgui/uiprefs.ui: + fix resizing of prefs dialog + +2007-01-08 07:02 +0000 dockes (5a2fb87a2c55) + + * src/qtgui/rclmain_w.cpp: + get rid of messages about missing d_xxx images + +2007-01-08 07:01 +0000 dockes (8a2c6d2cba46) + + * src/qtgui/reslist.cpp: + synthetic abstracts not displayed + +2006-12-24 08:07 +0000 dockes (e42dca990bea [RECOLL_1_7_0]) + + * src/Makefile.in: + better cleanup -> 1.7.0 NOW + +2006-12-24 08:02 +0000 dockes (916d6e831996 [RECOLL_1_7_2]) + + * packaging/FreeBSD/recoll/pkg-plist, src/excludefile, + website/BUGS.txt, website/CHANGES.txt, website/download.html, + website/features.html, website/index.html, website/pics/index.html, + website/rclidxfmt.html: + 1.7.0 + +2006-12-24 07:53 +0000 dockes (b37a6e3566b9) + + * src/INSTALL, src/README, src/doc/user/usermanual.sgml: + *** empty log message *** + +2006-12-24 07:40 +0000 dockes (69573fe97b89) + + * src/configure, src/configure.ac, src/doc/man/recollindex.1, + src/doc/user/usermanual.sgml, src/index/rclmon.h, + src/index/rclmonprc.cpp, src/index/recollindex.cpp: + option -x to disable x11 session monitoring + +2006-12-23 13:07 +0000 dockes (fb731b7d3ab1) + + * src/configure, src/configure.ac, src/index/Makefile, + src/index/rclmonprc.cpp, src/lib/Makefile, src/lib/mkMake, + src/mk/localdefs.in, src/utils/pathut.cpp: + x11 session end detection + +2006-12-23 12:23 +0000 dockes (00532204c17f) + + * src/utils/x11mon.cpp, src/utils/x11mon.h: new file. + * src/utils/Makefile, src/utils/x11mon.cpp, src/utils/x11mon.h: + *** empty log message *** + +2006-12-22 16:48 +0000 dockes (ee878b9d311e) + + * src/qt4gui/recoll.qrc, src/qtgui/rclmain.ui, + src/qtgui/rclmain_w.cpp, src/qtgui/spell_w.cpp: + get all icons out of .ui files to avoid qt4 startup messages + +2006-12-22 11:01 +0000 dockes (078acb3ab4fd) + + * src/doc/man/recollindex.1, src/doc/user/usermanual.sgml, + src/qtgui/spell_w.h: + *** empty log message *** + +2006-12-21 10:08 +0000 dockes (d36d26d5b5d5) + + * src/index/rclmonprc.cpp: + try to be more responsive to interruptions + +2006-12-21 09:22 +0000 dockes (818387de5d92) + + * src/index/indexer.cpp, src/index/rclmonrcv.cpp, + src/index/recollindex.cpp, src/sampleconf/mimemap, + src/utils/fstreewalk.cpp: + always skip indexing of confdir and dbdir. start index monitor with + normal indexing pass + +2006-12-21 09:21 +0000 dockes (13c7229ee6dc) + + * src/qtgui/advsearch.ui, src/qtgui/ssearchb.ui: + tooltips + +2006-12-21 08:22 +0000 dockes (c1e9892c3ba1) + + * src/utils/fstreewalk.cpp, src/utils/fstreewalk.h: + add skipped paths + +2006-12-20 14:28 +0000 dockes (f580e9aa026a) + + * src/internfile/internfile.cpp: + msg + +2006-12-20 14:09 +0000 dockes (e3d7f975546f) + + * src/qtgui/preview_w.cpp: + try to improve error message for internfile failure + +2006-12-20 13:55 +0000 dockes (0a07075dd464) + + * src/qtgui/preview_w.cpp, src/qtgui/rclmain_w.cpp, + src/qtgui/rclmain_w.h, src/qtgui/reslist.cpp, src/qtgui/reslist.h: + reslist: added menu entry to see parent doc of attachment + +2006-12-20 13:12 +0000 dockes (733a59947cfb) + + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/qtgui/advsearch.ui, src/qtgui/advsearch_w.cpp, + src/qtgui/advsearch_w.h, src/qtgui/guiutils.cpp, + src/qtgui/guiutils.h, src/sampleconf/mimeconf: + mime categories + +2006-12-20 10:47 +0000 dockes (591625eb1d38) + + * src/INSTALL, src/README: + *** empty log message *** + +2006-12-20 09:54 +0000 dockes (c563fb138893) + + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/doc/user/usermanual.sgml, src/index/mimetype.cpp: + changed stopsuffixes processing + +2006-12-20 09:41 +0000 dockes (64488c2687be) + + * src/index/recollindex.cpp: + opt -e + +2006-12-19 12:38 +0000 dockes (6d4a0c0f8cc3) + + * src/qtgui/spell_w.cpp: + qt4 + +2006-12-19 12:11 +0000 dockes (a3e7c86f79d7) + + * src/qtgui/spell.ui, src/qtgui/spell_w.cpp, src/qtgui/spell_w.h, + src/qtgui/ssearch_w.cpp, src/qtgui/viewaction.ui, + src/qtgui/viewaction_w.cpp, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, + src/rcldb/searchdata.cpp, src/rcldb/stemdb.cpp, src/rcldb/stemdb.h, + src/utils/smallut.cpp, src/utils/smallut.h: + merge stemExpand into termExpand. return term frequencies from there + and display in spellW + +2006-12-19 08:40 +0000 dockes (3bbff3062a89) + + * src/common/rclconfig.cpp, src/index/indexer.cpp, + src/index/mimetype.cpp, src/index/mimetype.h, + src/internfile/internfile.cpp, src/internfile/internfile.h, + src/internfile/mimehandler.cpp, src/qtgui/preview_w.cpp, + src/sampleconf/mimeconf, src/sampleconf/mimeview: + index directory names + +2006-12-19 07:48 +0000 dockes (7301c237649a) + + * src/qtgui/mtpics/folder.png: new file. + * src/qtgui/mtpics/folder.png: + *** empty log message *** + +2006-12-18 16:45 +0000 dockes (0a640477a752) + + * src/qt4gui/recoll.pro.in, src/qtgui/viewaction.ui, + src/qtgui/viewaction_w.cpp, src/qtgui/viewaction_w.h: + qt4 + +2006-12-18 12:06 +0000 dockes (5f17ab347621) + + * src/doc/user/usermanual.sgml, src/internfile/mh_mail.cpp, + src/utils/smallut.cpp, src/utils/smallut.h: + mh_mail needs to lowercase contentypes + +2006-12-18 12:05 +0000 dockes (03363b562546) + + * src/qtgui/rclmain_w.cpp, src/qtgui/rclmain_w.h, + src/qtgui/viewaction_w.cpp, src/qtgui/viewaction_w.h: + dblclick to edit in viewAction + +2006-12-16 15:39 +0000 dockes (a3027dd4b920) + + * src/internfile/internfile.cpp, src/internfile/internfile.h, + src/internfile/mh_html.h, src/internfile/mh_mail.cpp, + src/internfile/mh_mail.h, src/internfile/mh_text.h, + src/internfile/mimehandler.h, src/qtgui/main.cpp, + src/qtgui/rclmain_w.cpp, src/qtgui/rclmain_w.h: + mail attachments sort of ok + +2006-12-16 15:31 +0000 dockes (7d335e595c2b) + + * src/utils/pathut.cpp, src/utils/pathut.h: + added TempFile class + +2006-12-16 15:30 +0000 dockes (89fed05a6ace) + + * src/internfile/Filter.h: + *** empty log message *** + +2006-12-16 15:30 +0000 dockes (5f74c84fa800) + + * src/index/indexer.cpp: + dont clobber utf8fn from filter + +2006-12-16 15:30 +0000 dockes (b5f77fb6530b) + + * src/common/rclconfig.cpp, src/common/rclconfig.h: + added getSuffixFromMimeType() + +2006-12-16 07:15 +0000 dockes (ef72575e285c) + + * src/internfile/Filter.h: + *** empty log message *** + +2006-12-15 16:33 +0000 dockes (df6232340341) + + * src/index/indexer.cpp, src/internfile/Filter.h, + src/internfile/internfile.cpp, src/internfile/internfile.h, + src/internfile/mh_html.cpp, src/internfile/mh_mail.cpp, + src/internfile/mh_mail.h, src/internfile/myhtmlparse.h: + test data indexing result same terms as 1.6.3 + +2006-12-15 12:40 +0000 dockes (5156a319f219) + + * src/internfile/Filter.h, src/internfile/mh_mbox.cpp, + src/internfile/mh_mbox.h: new file. + * src/internfile/Filter.h, src/internfile/Makefile, + src/internfile/internfile.cpp, src/internfile/internfile.h, + src/internfile/mh_exec.cpp, src/internfile/mh_exec.h, + src/internfile/mh_html.cpp, src/internfile/mh_html.h, + src/internfile/mh_mail.cpp, src/internfile/mh_mail.h, + src/internfile/mh_mbox.cpp, src/internfile/mh_mbox.h, + src/internfile/mh_text.cpp, src/internfile/mh_text.h, + src/internfile/mh_unknown.h, src/internfile/mimehandler.cpp, + src/internfile/mimehandler.h, src/internfile/myhtmlparse.h, + src/lib/Makefile, src/lib/mkMake, src/utils/smallut.cpp, + src/utils/smallut.h: + Dijon filters 1st step: mostly working needs check and optim + +2006-12-14 14:54 +0000 dockes (2f7d4fb90b31) + + * src/rcldb/rcldoc.h: new file. + * src/rcldb/rcldb.h, src/rcldb/rcldoc.h: + split rcldb.h -> rcldoc.h + +2006-12-14 13:53 +0000 dockes (839454238284) + + * src/qtgui/viewaction.ui, src/qtgui/viewaction_w.cpp, + src/qtgui/viewaction_w.h, src/sampleconf/mimeview: new file. + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/doc/user/usermanual.sgml, src/index/indexer.cpp, + src/qtgui/preview_w.cpp, src/qtgui/rclmain_w.cpp, + src/qtgui/recoll.pro.in, src/qtgui/ssearch_w.cpp, + src/qtgui/uiprefs.ui, src/qtgui/uiprefs_w.cpp, + src/qtgui/uiprefs_w.h, src/qtgui/viewaction.ui, + src/qtgui/viewaction_w.cpp, src/qtgui/viewaction_w.h, + src/recollinstall.in, src/sampleconf/mimeconf, + src/sampleconf/mimeview, src/utils/Makefile, src/utils/conftree.cpp, + src/utils/conftree.h, src/utils/execmd.cpp, src/utils/execmd.h, + src/utils/pathut.cpp, src/utils/pathut.h, src/utils/smallut.cpp, + src/utils/smallut.h: + created mimeview and the viewer conf edit dialog + +2006-12-13 09:13 +0000 dockes (ca4c21f5ad44) + + * src/common/rclconfig.cpp, src/internfile/internfile.cpp, + src/internfile/mh_exec.cpp, src/internfile/mimehandler.cpp: + move findFilter usage out of mh_exec + +2006-12-11 14:56 +0000 dockes (dd4f283c9753 [BEFORE_Dijon20061215]) + + * src/qtgui/plaintorich.cpp: + not calling textsplit with onlyspans improves highlighting + +2006-12-11 14:50 +0000 dockes (c6d552528f6c) + + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/index/mimetype.cpp, src/utils/smallut.cpp, src/utils/smallut.h: + rationalize stopsuffix list usage + +2006-12-11 09:05 +0000 dockes (87037320fddf) + + * packaging/FreeBSD/recoll/pkg-plist: + try to cleanup the share/icons tree + +2006-12-10 17:03 +0000 dockes (0d0fec69b4e4 [MAPSTRMAPSTRSTR]) + + * src/query/wasastringtoquery.cpp, src/query/wasastringtoquery.h, + src/query/wasatorcl.cpp, src/query/wasatorcl.h: + added sort and type specs parsing + +2006-12-08 17:18 +0000 dockes (9d443b2ad416) + + * src/query/wasatorcl.h: + 1st query + +2006-12-08 10:54 +0000 dockes (dc4914858b42) + + * src/query/wasastringtoquery.cpp, src/query/wasastringtoquery.h: + *** empty log message *** + +2006-12-08 07:11 +0000 dockes (df1ce4c7c9bf) + + * src/common/textsplit.cpp, src/common/textsplit.h, + src/qtgui/ssearch_w.cpp: + only autophrase if query has several terms + +2006-12-08 06:45 +0000 dockes (6b96cd852343) + + * src/qtgui/ssearch_w.cpp: + make autophrase do the right thing: add a subclause, not modify the + query string + +2006-12-07 16:38 +0000 dockes (e0b7c11d4054) + + * src/query/qtry.cpp, src/query/qxtry.cpp: deleted file. + * src/query/Makefile, src/query/qtry.cpp, src/query/qxtry.cpp, + src/query/xadump.cpp: + removed qtry and merged qxtry into xadump + +2006-12-07 13:24 +0000 dockes (11f50dc2ced9) + + * src/rcldb/rcldb.cpp: + comment + +2006-12-07 13:14 +0000 dockes (0137bc80c8a5) + + * website/rclidxfmt.html: new file. + * website/rclidxfmt.html: + *** empty log message *** + +2006-12-07 13:02 +0000 dockes (e36e165c1055) + + * src/rcldb/rcldb.cpp: + comments + +2006-12-07 08:23 +0000 dockes (6bdb3421d1ca) + + * packaging/FreeBSD/recoll/Makefile, + packaging/FreeBSD/recoll/distinfo, packaging/FreeBSD/recoll/pkg- + plist: + 1.6.3 + +2006-12-07 08:06 +0000 dockes (2ca80dafce2a) + + * src/internfile/mh_mail.cpp: + fix bug with bad message "From " delimiter detection + +2006-12-07 07:07 +0000 dockes (92354b8e641a) + + * src/qtgui/rclmain_w.cpp, src/utils/mimeparse.h, + src/utils/smallut.cpp, src/utils/smallut.h: + fix pb with executing viewer for files with single-quotes in + pathnames + +2006-12-07 07:06 +0000 dockes (b415958c3148) + + * src/internfile/mh_mail.cpp: + fix bug with bad message "From " delimiter detection + +2006-12-05 15:25 +0000 dockes (451489717e47) + + * src/internfile/mh_mail.cpp: + use regexp to better discriminate From delimiter lines in mbox. + Avoid reading mboxes twice + +2006-12-05 15:23 +0000 dockes (282880e83069) + + * src/qtgui/advsearch.ui, src/qtgui/main.cpp, src/qtgui/rclmain_w.cpp, + src/qtgui/rclmain_w.h, src/qtgui/reslist.cpp, src/qtgui/reslist.h, + src/qtgui/sort.ui, src/qtgui/sort_w.cpp, src/qtgui/sort_w.h: + avoid generating abstracts before theyre needed (ie: not during + sort). have the sort tools redisplay the results when sort criteria + are applied + +2006-12-05 15:18 +0000 dockes (069f87c83682) + + * src/query/sortseq.cpp, src/query/sortseq.h: + use refcntr to access docsequence + +2006-12-05 15:17 +0000 dockes (f7bad3e61904) + + * src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + expose abstract synthesis to let users decide when they want it done + +2006-12-05 15:17 +0000 dockes (57148c851c44) + + * src/rcldb/searchdata.h: + clauseCount + +2006-12-05 15:16 +0000 dockes (d6d5ee7b750b) + + * src/utils/refcntr.h: + fix pbs with empty object + +2006-12-04 09:56 +0000 dockes (1173f38c9de4) + + * src/configure, src/configure.ac, src/qtgui/advsearch_w.h, + src/qtgui/main.cpp, src/qtgui/preview_w.h, src/qtgui/rclmain_w.cpp, + src/qtgui/rclmain_w.h, src/qtgui/sort_w.h, src/qtgui/spell_w.h, + src/qtgui/ssearch_w.h, src/qtgui/uiprefs_w.h, src/utils/refcntr.h: + qt4 compiles and sort of works + +2006-12-04 09:49 +0000 dockes (00bc69d47f20) + + * src/qt4gui/recoll.qrc, src/qt4gui/uifrom3: new file. + * src/qt4gui/recoll.pro.in, src/qt4gui/recoll.qrc, src/qt4gui/uifrom3: + *** empty log message *** + +2006-12-04 08:17 +0000 dockes (c92f84765756) + + * src/qtgui/advsearch.ui, src/qtgui/advsearch_w.cpp, + src/qtgui/advsearch_w.h, src/qtgui/preview_w.cpp, + src/qtgui/preview_w.h, src/qtgui/sort_w.cpp, + src/qtgui/ssearch_w.cpp, src/qtgui/uiprefs_w.cpp, + src/qtgui/uiprefs_w.h: + compiles (doesnt work) on qt4 + +2006-12-04 06:19 +0000 dockes (5a7d6794967e) + + * src/qtgui/advsearch.ui, src/qtgui/advsearch_w.cpp, + src/qtgui/advsearch_w.h, src/qtgui/guiutils.cpp, src/qtgui/main.cpp, + src/qtgui/preview.ui, src/qtgui/preview_w.h, src/qtgui/rclmain.ui, + src/qtgui/rclmain_w.cpp, src/qtgui/rclmain_w.h, + src/qtgui/reslist.cpp, src/qtgui/reslist.h, + src/qtgui/searchclause_w.cpp, src/qtgui/searchclause_w.h, + src/qtgui/sort_w.h, src/qtgui/spell.ui, src/qtgui/spell_w.h, + src/qtgui/ssearch_w.h, src/qtgui/ssearchb.ui, src/qtgui/uiprefs_w.h: + qt4 ckpt + +2006-12-02 07:32 +0000 dockes (45564d318a93) + + * src/utils/idfile.cpp: + improved tests to check for mail + +2006-12-01 10:05 +0000 dockes (8c3b51bc117f) + + * src/query/xadump.cpp: + *** empty log message *** + +2006-11-30 18:12 +0000 dockes (e41c0db701ae) + + * src/query/wasastringtoquery.cpp, src/query/wasastringtoquery.h, + src/query/wasatorcl.cpp, src/query/wasatorcl.h: new file. + * src/query/wasastringtoquery.cpp, src/query/wasastringtoquery.h, + src/query/wasatorcl.cpp, src/query/wasatorcl.h: + *** empty log message *** + +2006-11-30 13:44 +0000 dockes (5ef831ae4659) + + * website/download.html: + *** empty log message *** + +2006-11-30 13:38 +0000 dockes (6e49658236c6) + + * src/qtgui/images/cancel.png, src/qtgui/images/close.png: new file. + * packaging/FreeBSD/recoll/Makefile, + packaging/FreeBSD/recoll/distinfo, packaging/FreeBSD/recoll/pkg- + plist, packaging/rpm/recoll.spec, packaging/rpm/recollmdk.spec, + src/README, src/aspell/rclaspell.cpp, src/doc/user/usermanual.sgml, + src/index/indexer.cpp, src/index/indexer.h, src/makesrcdist.sh, + src/makestaticdist.sh, src/mk/SunOS, src/qtgui/advsearch.ui, + src/qtgui/advsearch_w.cpp, src/qtgui/guiutils.cpp, + src/qtgui/guiutils.h, src/qtgui/i18n/recoll_fr.ts, + src/qtgui/i18n/recoll_ru.ts, src/qtgui/i18n/recoll_uk.ts, + src/qtgui/images/cancel.png, src/qtgui/images/close.png, + src/qtgui/main.cpp, src/qtgui/plaintorich.cpp, + src/qtgui/plaintorich.h, src/qtgui/preview.ui, + src/qtgui/preview_w.cpp, src/qtgui/rclmain.ui, + src/qtgui/recoll.pro.in, src/qtgui/reslist.cpp, + src/qtgui/searchclause_w.cpp, src/qtgui/spell_w.cpp, + src/qtgui/ssearch_w.cpp, src/qtgui/ssearchb.ui, + src/rcldb/searchdata.cpp, src/recoll.desktop, src/recollinstall.in, + src/sampleconf/recoll.conf.in, src/utils/execmd.cpp, + src/utils/mimeparse.cpp, src/utils/smallut.cpp, website/BUGS.txt, + website/CHANGES.txt, website/download.html, website/features.html, + website/index.html: + merged 1.6 maint branch modifs up to MERGED_TO_TRUNK_20061130 + +2006-11-22 09:29 +0000 dockes (568c34cf75e9) + + * src/VERSION, website/BUGS.txt, website/CHANGES.txt, + website/credits.html, website/download.html: + *** empty log message *** + +2006-11-21 14:00 +0000 dockes (f247e019bf08 [RECOLL_1_6_0]) + + * src/INSTALL, src/README: + *** empty log message *** + +2006-11-21 13:05 +0000 dockes (23604b23773d) + + * src/aspell/rclaspell.cpp, src/configure, src/configure.ac: + mdk 2006 aspell quirks + +2006-11-21 09:18 +0000 dockes (17597459707c) + + * packaging/FreeBSD/recoll/pkg-plist, packaging/rpm/recoll.spec, + packaging/rpm/recollmdk.spec, src/doc/user/usermanual.sgml, + src/qtgui/i18n/recoll_fr.ts, src/qtgui/i18n/recoll_ru.ts, + src/qtgui/i18n/recoll_uk.ts, website/BUGS.txt, website/CHANGES.txt, + website/copydocs, website/download.html, website/index.html: + *** empty log message *** + +2006-11-21 08:47 +0000 dockes (f434e776fec8) + + * src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, src/qtgui/spell.ui, + src/qtgui/spell_w.cpp, src/qtgui/spell_w.h, src/qtgui/uiprefs_w.cpp: + added stem expansion mode to term explorer + +2006-11-20 18:07 +0000 dockes (bc85af9f678c) + + * src/doc/man/recoll.conf.5, src/doc/man/recollindex.1, + src/doc/user/usermanual.sgml: + doc + +2006-11-20 17:46 +0000 dockes (28cb0d8c325a) + + * src/doc/user/usermanual.sgml: + *** empty log message *** + +2006-11-20 17:06 +0000 dockes (9252428377e4) + + * src/qtgui/i18n/recoll_fr.ts, src/qtgui/i18n/recoll_ru.ts, + src/qtgui/i18n/recoll_uk.ts: + *** empty log message *** + +2006-11-20 15:35 +0000 dockes (192c101b8b7c) + + * src/qtgui/advsearch.ui: + tooltip + +2006-11-20 15:29 +0000 dockes (73ca6e78a1dd) + + * src/filters/rclxls, src/utils/transcode.cpp: + *** empty log message *** + +2006-11-20 15:28 +0000 dockes (9bb875d3bfcf) + + * src/rcldb/rcldb.cpp: + clear abstract if its only ... + +2006-11-20 15:28 +0000 dockes (5ef1b603c3be) + + * src/common/rclconfig.cpp: + test driver + +2006-11-20 15:28 +0000 dockes (1c4807a363f9) + + * src/common/rclconfig.h: + fix defaultcharset reset + +2006-11-20 11:17 +0000 dockes (ef95275586d1) + + * src/common/Makefile, src/common/textsplit.cpp, + src/common/textsplit.h: + improved textsplit speed (needs utf8iter modifs too + +2006-11-20 11:16 +0000 dockes (e05653621eb4) + + * src/utils/Makefile, src/utils/utf8iter.cpp, src/utils/utf8iter.h: + cleaned and speeded up utf8iter + +2006-11-19 18:37 +0000 dockes (756bc7569b34) + + * src/common/textsplit.cpp, src/common/textsplit.h: + optim ckpt + +2006-11-18 12:56 +0000 dockes (bf6e4de3a902) + + * src/qtgui/plaintorich.cpp: + firsttermocc init was not always done + +2006-11-18 12:31 +0000 dockes (1703e5a7b03e) + + * src/qtgui/plaintorich.cpp, src/qtgui/plaintorich.h, + src/qtgui/preview_w.cpp, src/qtgui/reslist.cpp: + improve positionning on term groups by storing/passing an occurrence + index + +2006-11-18 12:30 +0000 dockes (f065c8063ff3) + + * src/rcldb/searchdata.cpp: + correctly generate highlighting term groups when stem-expanding NEAR + queries + +2006-11-17 15:26 +0000 dockes (ee4a13877b24) + + * src/qtgui/advsearch.ui, src/qtgui/advsearch_w.cpp, + src/qtgui/advsearch_w.h, src/qtgui/guiutils.cpp, + src/qtgui/guiutils.h: + Save adv search clause list + add delete button + +2006-11-17 12:55 +0000 dockes (679a2cb3d3e7) + + * src/qtgui/rclmain_w.cpp, src/qtgui/rclmain_w.h, + src/qtgui/reslist.cpp, src/qtgui/reslist.h: + get shift+clicklink to open new preview window instead of tab + +2006-11-17 12:32 +0000 dockes (51f7db5eff83) + + * src/qtgui/plaintorich.cpp: + small opts + fixed near region detection code + +2006-11-17 12:31 +0000 dockes (c0ba08efc3dd) + + * src/qtgui/plaintorich.h: + comments + +2006-11-17 12:31 +0000 dockes (e54183706237) + + * src/utils/utf8iter.h: + removed not strictly needed error checking code + +2006-11-17 10:09 +0000 dockes (7e44d4280e2d) + + * src/qtgui/plaintorich.cpp, src/qtgui/plaintorich.h, + src/qtgui/preview_w.cpp, src/qtgui/preview_w.h, + src/qtgui/rclmain_w.cpp, src/qtgui/reslist.cpp, src/qtgui/reslist.h: + Remember searchData and use it in plaintorich for phrase/group + highlighting + +2006-11-17 10:08 +0000 dockes (c175799e9e72) + + * src/qtgui/advsearch_w.cpp: + better data encap in searchdata + +2006-11-17 10:06 +0000 dockes (0ea302968170) + + * src/rcldb/rcldb.cpp, src/rcldb/searchdata.cpp, + src/rcldb/searchdata.h: + added code to remember search terms and term groups in searchdata + +2006-11-15 14:57 +0000 dockes (188b5b28427d) + + * src/common/Makefile, src/lib/Makefile, src/lib/mkMake, + src/mk/commondefs, src/qtgui/recoll.pro.in, src/rcldb/pathhash.cpp, + src/rcldb/pathhash.h, src/rcldb/rcldb.cpp, src/rcldb/searchdata.h, + src/rcldb/stemdb.h: + distributed files from common/ into rcld, internfile, common + +2006-11-15 07:27 +0000 dockes (5bfc0444c072) + + * src/internfile/Makefile: new file. + * src/internfile/Makefile: + *** empty log message *** + +2006-11-14 18:29 +0000 dockes (c45d7a2b1c63) + + * src/qtgui/advsearch_w.cpp, src/qtgui/advsearch_w.h: + got rid of the static clause names + +2006-11-14 18:17 +0000 dockes (e4789b229585) + + * src/qtgui/advsearch.ui: + *** empty log message *** + +2006-11-14 17:56 +0000 dockes (ae916c13c591) + + * src/qtgui/advsearch.ui, src/qtgui/advsearch_w.cpp: + added conjunction choice in advsearch + +2006-11-14 17:41 +0000 dockes (dfc71f06c1ce) + + * src/qtgui/advsearch.ui, src/qtgui/advsearch_w.cpp, + src/qtgui/advsearch_w.h, src/qtgui/searchclause_w.cpp, + src/qtgui/searchclause_w.h, src/rcldb/searchdata.cpp: + use SearchClauseW for all advsearch fields + +2006-11-14 15:13 +0000 dockes (300f3705d6cf) + + * src/qtgui/advsearch.ui, src/qtgui/advsearch_w.cpp: + *** empty log message *** + +2006-11-14 14:58 +0000 dockes (c5f65c6f8fb9) + + * src/qtgui/recoll.pro.in: + *** empty log message *** + +2006-11-14 13:55 +0000 dockes (9e98c3d86016) + + * src/qtgui/searchclause_w.cpp, src/qtgui/searchclause_w.h: new file. + * src/doc/user/usermanual.sgml, src/qtgui/advsearch.ui, + src/qtgui/advsearch_w.cpp, src/qtgui/advsearch_w.h, + src/qtgui/rclmain_w.cpp, src/qtgui/searchclause_w.cpp, + src/qtgui/searchclause_w.h, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, + src/rcldb/searchdata.cpp, src/rcldb/searchdata.h: + added dynamic clauses to adv search. Still needs work + +2006-11-13 14:51 +0000 dockes (5c9db8d08690) + + * src/rcldb/rcldb.cpp: + *** empty log message *** + +2006-11-13 14:48 +0000 dockes (edec86240778) + + * src/rcldb/rcldb.cpp: + use wdfs for better selection of doc extracts in makeAbstract + +2006-11-13 11:59 +0000 dockes (fdf0f43cd03e) + + * src/utils/smallut.h: + *** empty log message *** + +2006-11-13 08:58 +0000 dockes (c48e54f96603) + + * src/utils/refcntr.h: new file. + * src/utils/refcntr.h: + *** empty log message *** + +2006-11-13 08:58 +0000 dockes (40853ad94507) + + * src/qtgui/advsearch_w.cpp, src/qtgui/advsearch_w.h, + src/qtgui/rclmain.ui, src/qtgui/rclmain_w.cpp, + src/qtgui/rclmain_w.h, src/qtgui/reslist.cpp, src/qtgui/reslist.h, + src/qtgui/ssearch_w.cpp, src/qtgui/ssearch_w.h: + make searchdata a more flexible struct + +2006-11-13 08:50 +0000 dockes (e585bfd6e725) + + * src/rcldb/searchdata.cpp: new file. + * src/lib/Makefile, src/lib/mkMake, src/rcldb/rcldb.cpp, + src/rcldb/rcldb.h, src/rcldb/searchdata.cpp, src/rcldb/searchdata.h: + make searchdata a more flexible struct + +2006-11-13 08:49 +0000 dockes (db3490f9b522) + + * src/kde/kioslave/recoll/kio_recoll.cpp: + *** empty log message *** + +2006-11-13 08:15 +0000 dockes (7240ec62ffac) + + * src/qtgui/plaintorich.cpp: + new splitter interface + +2006-11-12 08:35 +0000 dockes (ff9f3aed6a5b) + + * src/common/textsplit.cpp, src/common/textsplit.h, + src/rcldb/rcldb.cpp: + phrase queries with bot spans and words must be splitted as words + only + +2006-11-11 15:30 +0000 dockes (25647c7c5aac) + + * src/qtgui/reslist.cpp, src/qtgui/uiprefs.ui: + have more compact list header + %N + +2006-11-10 17:53 +0000 dockes (d423490bea37) + + * src/qtgui/reslist.cpp: + Really use the rich abstracts + +2006-11-10 17:18 +0000 dockes (9fc1a2d1b7af) + + * src/rcldb/rcldb.cpp: + optimized abstract building: bybye big vector + +2006-11-10 13:32 +0000 dockes (8cfbbddd355a) + + * src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, + src/qtgui/rclmain_w.cpp, src/qtgui/reslist.cpp, + src/qtgui/uiprefs.ui, src/qtgui/uiprefs_w.cpp: + make result list paragraph format user-adjustable + +2006-11-10 13:30 +0000 dockes (933509968125) + + * src/utils/smallut.cpp, src/utils/smallut.h: + pcSubst() + +2006-11-10 13:29 +0000 dockes (17e0ecfb5834) + + * src/internfile/internfile.cpp: + errlog + +2006-11-09 19:04 +0000 dockes (814af75ba7a8) + + * src/qtgui/preview_w.cpp: + better handle the situation of mbox file name matching search + +2006-11-09 17:38 +0000 dockes (3c996d97497a) + + * src/Makefile.in: + *** empty log message *** + +2006-11-09 17:37 +0000 dockes (c13aab8ac186) + + * src/qtgui/reslist.cpp: + nbsp to prevent line date wrap before tz + +2006-11-09 17:37 +0000 dockes (573934250b27) + + * src/rcldb/rcldb.cpp: + dont continue adding ellipsis into the abstract when its maxlen! + +2006-11-09 08:59 +0000 dockes (baafe52b9d1b) + + * src/utils/mimeparse.cpp: + test driver modifs + +2006-11-08 15:34 +0000 dockes (025fa484738a) + + * src/common/rclinit.cpp, src/utils/debuglog.cpp, + src/utils/debuglog.h: + fix pb with special log file names + +2006-11-08 15:32 +0000 dockes (a32333c18e9f) + + * src/configure, src/configure.ac: + aspell help string + +2006-11-08 13:04 +0000 dockes (f5f0e953f42e) + + * src/qtgui/plaintorich.cpp: + use vector instead of list for positions + +2006-11-08 07:22 +0000 dockes (de7777528655) + + * src/common/rclinit.cpp, src/common/rclinit.h, + src/index/recollindex.cpp: + allow daemon-specific log parameters + +2006-11-08 06:56 +0000 dockes (451b31555bc2) + + * src/utils/conftree.cpp, src/utils/conftree.h: + volatile conf + +2006-11-08 06:49 +0000 dockes (ba1e8fb12e39) + + * src/recollinstall.in: + install rclmon.sh + +2006-11-07 18:28 +0000 dockes (fb26679a6cec) + + * src/qtgui/reslist.cpp, src/utils/mimeparse.cpp: + 1.5.9: fix bad tz correction in email dates + display tz in reslist + +2006-11-07 16:51 +0000 dockes (affd0b42e8ae) + + * src/index/rclmon.h, src/index/rclmonprc.cpp, + src/index/rclmonrcv.cpp: + traces + +2006-11-07 12:02 +0000 dockes (70ed645d27f3) + + * src/rcldb/rcldb.cpp: + use both size and mtime changes as updateneeding indicator + +2006-11-07 09:11 +0000 dockes (2491b468f55d) + + * src/qtgui/uiprefs.ui: + improved autophrase tooltip + +2006-11-07 09:04 +0000 dockes (ba7c28e1a205) + + * src/qtgui/uiprefs_w.cpp: + Cancel did not reset uiprefs dialog to stored state + +2006-11-07 08:57 +0000 dockes (c9f2b8c02171) + + * src/qtgui/uiprefs_w.cpp, src/qtgui/uiprefs_w.h: + Cancel did not reset uiprefs dialog to stored state + +2006-11-07 06:41 +0000 dockes (fea8781e4829) + + * src/index/indexer.cpp: + record/show mtime instead of ctime + +2006-11-06 17:37 +0000 dockes (a82b3932ac69) + + * src/doc/user/usermanual.sgml, src/qtgui/rclmain.ui, + src/qtgui/spell_w.cpp, src/rcldb/rcldb.cpp: + wrote manual for term explorer and fixed a few problems + +2006-11-05 21:10 +0000 dockes (f4fc6544cb74) + + * src/bincimapmime/mime-parsefull.cc: + fix binc imap infinite loop on multipart with null boundary + +2006-11-05 18:02 +0000 dockes (9306096cb34f) + + * src/bincimapmime/depot.h, src/bincimapmime/session.h: deleted file. + * src/bincimapmime/address.cc, src/bincimapmime/address.h, + src/bincimapmime/convert.cc, src/bincimapmime/convert.h, + src/bincimapmime/depot.h, src/bincimapmime/iodevice.cc, + src/bincimapmime/iodevice.h, src/bincimapmime/iofactory.h, + src/bincimapmime/mime-getpart.cc, src/bincimapmime/mime- + inputsource.h, src/bincimapmime/mime-parsefull.cc, src/bincimapmime + /mime-parseonlyheader.cc, src/bincimapmime/mime-printbody.cc, + src/bincimapmime/mime-printdoc.cc, src/bincimapmime/mime- + printheader.cc, src/bincimapmime/mime-utils.h, + src/bincimapmime/mime.cc, src/bincimapmime/mime.h, + src/bincimapmime/session.h: + included bincimap 1.3.3 to 1.3.4 diffs (mostly cosmetic) + +2006-11-04 17:09 +0000 dockes (3e0e0d4b152f) + + * src/qtgui/spell.ui, src/qtgui/spell_w.cpp: + fix aspell version of term explorer + +2006-11-04 14:49 +0000 dockes (7f914235875b) + + * src/qtgui/ssearch_w.cpp, src/qtgui/ssearch_w.h: + change ctrl-tab to esc-spc + +2006-10-30 12:59 +0000 dockes (2454d0c418a2) + + * src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, + src/qtgui/rclmain_w.cpp, src/qtgui/spell.ui, src/qtgui/spell_w.cpp, + src/qtgui/ssearch_w.cpp, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + Turn spell tool into multimode spell/wild/regexp + +2006-10-25 11:50 +0000 dockes (66843e6e167c) + + * src/index/indexer.cpp: + make tmpdir only once + +2006-10-25 10:52 +0000 dockes (10c2b1b74822) + + * src/index/indexer.cpp, src/index/rclmon.h, src/index/rclmonprc.cpp, + src/index/rclmonrcv.cpp, src/rcldb/rcldb.cpp: + added some debugging msgs (too much) + +2006-10-24 15:16 +0000 dockes (1fc3f90d5ee3) + + * src/mk/Darwin: + *** empty log message *** + +2006-10-24 14:28 +0000 dockes (33512e5ceddb) + + * src/index/indexer.cpp, src/index/indexer.h, src/index/rclmon.h, + src/index/rclmonprc.cpp, src/index/recollindex.cpp: + create stemming db on queue timeout if needed + +2006-10-24 13:22 +0000 dockes (21df8a0f4856) + + * src/index/rclmon.sh: new file. + * src/index/rclmon.sh: + *** empty log message *** + +2006-10-24 12:48 +0000 dockes (4af32c44f8ea) + + * src/index/rclmon.h, src/index/rclmonprc.cpp: + setup lockfile for monitor + +2006-10-24 11:42 +0000 dockes (f922b4dda121) + + * src/query/Makefile: + *** empty log message *** + +2006-10-24 11:42 +0000 dockes (f1da6521f1ff) + + * src/qtgui/ssearch_w.cpp: + explain error for C-TAB too many expansions + +2006-10-24 09:28 +0000 dockes (3228b6b8093a) + + * src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + fix slowness in needUpdate by using Database instead of + WritableDatabase + +2006-10-24 09:09 +0000 dockes (0d72c341e2eb) + + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/index/indexer.cpp, src/index/rclmonrcv.cpp: + centralize skippedNames computation to add dbdir always + +2006-10-23 15:01 +0000 dockes (6a07dc59db99) + + * src/index/rclmon.h, src/index/rclmonrcv.cpp: + handle directory creation + +2006-10-23 15:00 +0000 dockes (672e4b4bfe51) + + * src/utils/pathut.cpp, src/utils/pathut.h: + add path_isdir() + +2006-10-23 14:29 +0000 dockes (d395ca679c7a) + + * src/common/autoconfig.h.in, src/configure, src/configure.ac, + src/index/rclmonrcv.cpp: + raw inotify support + +2006-10-22 15:55 +0000 dockes (de0702a6c5e2) + + * src/mk/Linux: + *** empty log message *** + +2006-10-22 15:54 +0000 dockes (35832011eaf9) + + * src/rcldb/rcldb.cpp: + simplify needUpdate test + +2006-10-22 14:47 +0000 dockes (733c7646ca29) + + * src/configure, src/configure.ac, src/index/Makefile, + src/index/indexer.cpp, src/index/indexer.h, src/index/rclmonprc.cpp, + src/index/rclmonrcv.cpp, src/index/recollindex.cpp, + src/mk/localdefs.in, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + monitor: purge docs for deleted files from db + +2006-10-20 08:31 +0000 dockes (6d54039efe79) + + * src/qtgui/i18n/recoll_ru.ts, src/qtgui/i18n/recoll_uk.ts: + new Ukrainian+Russian messages from Michael + +2006-10-20 08:29 +0000 dockes (ebcb12870038) + + * src/qtgui/advsearch.ui, src/qtgui/rclmain.ui, src/qtgui/uiprefs.ui: + small fixes on label strings + +2006-10-17 14:41 +0000 dockes (ea77c15d81a6) + + * src/common/autoconfig.h.in, src/configure, src/configure.ac, + src/index/rclmon.h, src/index/rclmonprc.cpp, + src/index/rclmonrcv.cpp, src/index/recollindex.cpp: + fam autoconfig + +2006-10-16 15:33 +0000 dockes (aa570fc97bf9) + + * src/index/rclmon.h, src/index/rclmonprc.cpp, + src/index/rclmonrcv.cpp: new file. + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/index/Makefile, src/index/indexer.cpp, src/index/indexer.h, + src/index/rclmon.h, src/index/rclmonprc.cpp, + src/index/rclmonrcv.cpp, src/index/recollindex.cpp: + 1st version of real time monitor + +2006-10-15 13:07 +0000 dockes (aa97f764d4a6) + + * src/qtgui/rclmain_w.cpp, src/qtgui/spell_w.cpp, src/qtgui/spell_w.h: + dbl click in spell win to add to ssearch + +2006-10-12 14:46 +0000 dockes (78a3a37209ae) + + * src/configure.ac, src/index/indexer.cpp, src/index/indexer.h, + src/index/recollindex.cpp: + recollindex -i now checks that the files are descendants of topdirs + +2006-10-12 08:39 +0000 dockes (ab66430f3f7d) + + * src/doc/user/usermanual.sgml: + *** empty log message *** + +2006-10-11 16:09 +0000 dockes (1cf66e2b486f) + + * src/aspell/rclaspell.cpp, src/utils/execmd.cpp, src/utils/execmd.h: + improve execcmd to avoid allocating an allterms buffer when creating + dico + +2006-10-11 14:16 +0000 dockes (26e08a8fc135) + + * src/qtgui/images/d_spell.png, src/qtgui/images/spell.png, + src/qtgui/spell.ui, src/qtgui/spell_w.cpp, src/qtgui/spell_w.h: new + file. + * src/aspell/rclaspell.cpp, src/aspell/rclaspell.h, + src/common/autoconfig.h.in, src/common/rclconfig.h, src/configure, + src/configure.ac, src/index/indexer.cpp, src/index/indexer.h, + src/index/recollindex.cpp, src/mk/commondefs, src/mk/localdefs.in, + src/qtgui/images/d_spell.png, src/qtgui/images/spell.png, + src/qtgui/main.cpp, src/qtgui/rclmain.ui, src/qtgui/rclmain_w.cpp, + src/qtgui/rclmain_w.h, src/qtgui/recoll.h, src/qtgui/recoll.pro.in, + src/qtgui/spell.ui, src/qtgui/spell_w.cpp, src/qtgui/spell_w.h, + src/sampleconf/recoll.conf.in, src/utils/smallut.cpp, + src/utils/smallut.h: + 1st full version of aspell support + +2006-10-10 10:58 +0000 dockes (ed60d657e8e9) + + * src/aspell/aspell-local.h, src/common/autoconfig.h.in: new file. + * src/aspell/aspell-local.h, src/common/autoconfig.h.in: + *** empty log message *** + +2006-10-09 16:37 +0000 dockes (93d9009c4d51) + + * src/VERSION, src/aspell/rclaspell.cpp, src/aspell/rclaspell.h, + src/index/Makefile, src/lib/Makefile, src/lib/mkMake, + src/makesrcdist.sh, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, + src/rcldb/stemdb.cpp, src/utils/execmd.cpp, src/utils/execmd.h: + aspell checkpoint + +2006-10-09 14:05 +0000 dockes (711360b10738) + + * src/aspell/Makefile, src/aspell/rclaspell.cpp, + src/aspell/rclaspell.h: new file. + * src/aspell/Makefile, src/aspell/rclaspell.cpp, + src/aspell/rclaspell.h: + *** empty log message *** + +2006-10-03 08:34 +0000 dockes (4033d57b83da) + + * packaging/rpm/recoll.spec, packaging/rpm/recollmdk.spec: + 1.5 + +2006-10-02 13:30 +0000 dockes (562f54fc8029) + + * src/VERSION, src/makestaticdist.sh: + small glitches in makestaticdist + +2006-10-02 12:33 +0000 dockes (7be5b4b7d6c0) + + * src/VERSION, src/configure, src/configure.ac, src/query/history.h: + small glitches detected on suse / gcc 4.1 + +2006-10-02 11:25 +0000 dockes (8731b62606fe [RECOLL-1_5_8, RECOLL-1_5_3, RECOLL-1_5_6, RECOLL-1_5_7, RECOLL-1_5_4, RECOLL-1_5_5]) + + * packaging/FreeBSD/recoll/Makefile, + packaging/FreeBSD/recoll/distinfo, packaging/FreeBSD/recoll/pkg- + descr, packaging/FreeBSD/recoll/pkg-plist: + 1.5.2 + +2006-10-02 08:38 +0000 dockes (ee82de281263) + + * src/VERSION: + *** empty log message *** + +2006-10-02 08:26 +0000 dockes (bafb3e762d82) + + * src/sampleconf/mimeconf: + added 2 icons + +2006-10-02 08:25 +0000 dockes (c3d47772ea99) + + * src/qtgui/mtpics/image.png, src/qtgui/mtpics/source.png: new file. + * src/qtgui/mtpics/image.png, src/qtgui/mtpics/source.png: + *** empty log message *** + +2006-10-02 07:50 +0000 dockes (fe9700b5a6fe [RECOLL-1_5_2, RECOLL-1_5_1]) + + * src/INSTALL, src/README, website/BUGS.txt, website/CHANGES.txt, + website/download.html, website/index.html: + *** empty log message *** + +2006-10-02 07:45 +0000 dockes (bc3c93581184) + + * src/VERSION, src/qtgui/i18n/recoll_ru.ts, + src/qtgui/i18n/recoll_uk.ts: + 1.5.1 + +2006-09-29 11:43 +0000 dockes (bd51dd85dc0f) + + * src/doc/user/usermanual.sgml: + aspell pass + +2006-09-29 08:26 +0000 dockes (026d0b177533) + + * src/rcldb/rcldb.cpp: + syntabs: remove size limit. Handle overlapping chunks. Make sure we + use only one term per position + +2006-09-29 08:24 +0000 dockes (49342357f800) + + * src/qtgui/reslist.cpp: + reset curPvDoc on setDocSource + +2006-09-29 08:23 +0000 dockes (a9cef42dd219) + + * src/qtgui/uiprefs.ui: + bump up limits on max abstract size parameters + +2006-09-29 07:13 +0000 dockes (7973023d7c1b) + + * src/qtgui/ssearch_w.cpp: + bad/unneeded conversion to utf8 while saving ssearch history would + cause some string sizes in history to double at each program + invocation + +2006-09-28 14:32 +0000 dockes (a5bba26b0ac0) + + * src/qtgui/i18n/recoll_fr.ts: + 1.5 + +2006-09-28 14:31 +0000 dockes (71d5895b7848) + + * src/qtgui/ssearchb.ui: + improved tip + +2006-09-28 14:30 +0000 dockes (903f443a7150) + + * src/doc/user/usermanual.sgml: + reordered the tips + +2006-09-28 11:55 +0000 dockes (3bf818bd1e39) + + * src/qtgui/main.cpp: + debug messages + +2006-09-23 13:32 +0000 dockes (3cf269bf18f0) + + * website/BUGS.txt, website/CHANGES.txt, website/download.html, + website/features.html, website/index.html: + *** empty log message *** + +2006-09-23 13:13 +0000 dockes (06ed627f182d [RECOLL-1_5_0]) + + * src/INSTALL, src/README, src/makesrcdist.sh: + *** empty log message *** + +2006-09-23 13:11 +0000 dockes (0533f47f1c34) + + * src/INSTALL, src/doc/user/usermanual.sgml: + *** empty log message *** + +2006-09-23 13:09 +0000 dockes (9b8fdf62ad07) + + * src/doc/user/usermanual.sgml: + *** empty log message *** + +2006-09-23 07:39 +0000 dockes (33e469ad3a2e) + + * src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, + src/qtgui/preview_w.cpp, src/qtgui/reslist.cpp: + fix file name display in tooltips + +2006-09-23 07:39 +0000 dockes (e47ebb4e22ce) + + * src/internfile/mh_mail.cpp: + fix newlines + +2006-09-23 07:21 +0000 dockes (b5b530ea2ec9) + + * src/rcldb/rcldb.cpp: + message + +2006-09-22 14:11 +0000 dockes (3ef29a8417c7) + + * src/qtgui/i18n/recoll_fr.ts, src/rcldb/rcldb.cpp: + msg + +2006-09-22 10:46 +0000 dockes (9ade76cc0df5) + + * src/qtgui/i18n/recoll_fr.ts, src/qtgui/i18n/recoll_ru.ts, + src/qtgui/i18n/recoll_uk.ts, src/qtgui/uiprefs_w.cpp: + messages + +2006-09-22 08:19 +0000 dockes (c228a1515468) + + * src/qtgui/recoll.pro.in: + *** empty log message *** + +2006-09-22 07:51 +0000 dockes (df858f3508f4) + + * src/qtgui/recoll.pro.in: + names cleanup + +2006-09-22 07:42 +0000 dockes (de54384ab321) + + * src/utils/mimeparse.h: + comment + +2006-09-22 07:41 +0000 dockes (f37052248b5b) + + * src/qtgui/i18n/recoll_fr.ts, src/qtgui/i18n/recoll_ru.ts, + src/qtgui/i18n/recoll_uk.ts, src/qtgui/rclmain.ui, + src/qtgui/rclmain_w.cpp, src/qtgui/rclmain_w.h: new file. + * src/qtgui/rclmain.cpp, src/qtgui/rclmain.h, src/qtgui/recoll_fr.ts, + src/qtgui/recoll_ru.ts, src/qtgui/recoll_uk.ts, + src/qtgui/recollmain.ui: deleted file. + * src/qtgui/i18n/recoll_fr.ts, src/qtgui/i18n/recoll_ru.ts, + src/qtgui/i18n/recoll_uk.ts, src/qtgui/main.cpp, + src/qtgui/rclmain.cpp, src/qtgui/rclmain.h, src/qtgui/rclmain.ui, + src/qtgui/rclmain_w.cpp, src/qtgui/rclmain_w.h, + src/qtgui/recoll_fr.ts, src/qtgui/recoll_ru.ts, + src/qtgui/recoll_uk.ts, src/qtgui/recollmain.ui: + names cleanup: rclmain, translations + +2006-09-22 07:38 +0000 dockes (c17bf757689b) + + * src/recollinstall.in: + names cleanup: translations + +2006-09-22 07:29 +0000 dockes (2d749704a22b) + + * src/qtgui/reslist.cpp, src/qtgui/reslist.h: new file. + * src/qtgui/rclreslist.cpp, src/qtgui/rclreslist.h: deleted file. + * src/qtgui/rclmain.cpp, src/qtgui/rclreslist.cpp, + src/qtgui/rclreslist.h, src/qtgui/recollmain.ui, + src/qtgui/reslist.cpp, src/qtgui/reslist.h: + names cleanup: reslist + +2006-09-22 07:22 +0000 dockes (cd9f046bf5e3) + + * src/qtgui/rclreslist.cpp, src/qtgui/rclreslist.h: + clarified preview paragraph coloring in reslist + +2006-09-22 07:19 +0000 dockes (c700f9f95168) + + * src/internfile/mh_mail.cpp: + clarified depth processing and increased limit + +2006-09-21 12:56 +0000 dockes (334ef2914129) + + * src/qtgui/preview_w.cpp, src/qtgui/preview_w.h, + src/qtgui/rclmain.cpp, src/qtgui/rclmain.h, + src/qtgui/rclreslist.cpp, src/qtgui/rclreslist.h: + synchronize preview tab and colored paragraph in result list + +2006-09-21 09:37 +0000 dockes (43c279d4d112) + + * src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, src/qtgui/rclmain.cpp, + src/qtgui/rclmain.h, src/qtgui/sort_w.cpp, src/qtgui/sort_w.h, + src/query/sortseq.cpp, src/query/sortseq.h: + remember sort criteria + +2006-09-21 05:59 +0000 dockes (e5e9c1ffa44c) + + * src/internfile/myhtmlparse.cpp: + dont throw away text even if html is weird + +2006-09-21 05:59 +0000 dockes (4e99ebec009f) + + * src/common/textsplit.cpp: + 132.jpg was not split + +2006-09-21 05:57 +0000 dockes (3bc572456a49) + + * src/common/Makefile, src/utils/Makefile: + *** empty log message *** + +2006-09-20 06:21 +0000 dockes (5829221e8612) + + * src/rcldb/stemdb.cpp: + comments + +2006-09-19 14:30 +0000 dockes (598f2c534c4c) + + * src/rcldb/stemdb.cpp: + Stems with unique parent must be in db too so that one can search on + stem (which is not a term) + +2006-09-19 14:30 +0000 dockes (98cd92c958bd) + + * src/internfile/mh_mail.cpp, src/internfile/mh_mail.h: + walk the full mime tree instead of staying at level 1 + +2006-09-19 14:19 +0000 dockes (12fcb57186c2) + + * src/configure, src/configure.ac: + *** empty log message *** + +2006-09-19 14:19 +0000 dockes (88bbc8f18b9e) + + * src/utils/mimeparse.cpp: + disable date debug msgs + +2006-09-19 14:18 +0000 dockes (a0016b0e9969) + + * src/query/xadump.cpp: + add option to dump a recoll stemdb + +2006-09-18 12:17 +0000 dockes (e662e0bbe85e) + + * src/README: + *** empty log message *** + +2006-09-15 16:50 +0000 dockes (315f1c1d3dd3) + + * src/VERSION, src/doc/user/usermanual.sgml, + src/internfile/mh_mail.cpp, src/utils/mimeparse.cpp, + src/utils/mimeparse.h: + Use own code to parse rfc822 dates, strptime() cant do + +2006-09-15 16:49 +0000 dockes (ca133771bc5b) + + * src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, + src/qtgui/recoll.pro.in, src/qtgui/uiprefs.ui, + src/qtgui/uiprefs_w.cpp: + small typo fixes + +2006-09-15 12:36 +0000 dockes (47354227e577) + + * src/INSTALL, src/README: + *** empty log message *** + +2006-09-14 07:13 +0000 dockes (b717321f9de4 [RECOLL-1_4_4]) + + * *** empty log message *** + +2006-09-14 07:13 +0000 dockes (919e6e0dfc56) + + * website/BUGS.txt, website/CHANGES.txt, website/copydocs, + website/credits.html, website/devel.html, website/download.html, + website/features.html, website/index.html, website/pics/index.html, + website/styles/style.css: new file. + * website/BUGS.txt, website/CHANGES.txt, website/copydocs, + website/credits.html, website/devel.html, website/download.html, + website/features.html, website/index.html, website/pics/index.html, + website/styles/style.css: + *** empty log message *** + +2006-09-13 15:31 +0000 dockes (9bd2431eaa66) + + * src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, + src/qtgui/ssearch_w.cpp, src/qtgui/uiprefs.ui, + src/qtgui/uiprefs_w.cpp: + autophrase parameter + +2006-09-13 14:57 +0000 dockes (0d952f522055) + + * src/qtgui/plaintorich.cpp, src/qtgui/plaintorich.h, + src/qtgui/rclreslist.cpp, src/query/docseq.cpp, src/query/docseq.h: + colorize search terms in abstracts + +2006-09-13 13:53 +0000 dockes (5980807171a8) + + * src/index/indexer.cpp, src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, + src/qtgui/main.cpp, src/qtgui/rclmain.cpp, src/qtgui/ssearch_w.cpp, + src/qtgui/uiprefs.ui, src/qtgui/uiprefs_w.cpp, src/rcldb/rcldb.cpp, + src/rcldb/rcldb.h, src/sampleconf/recoll.conf.in: + make constant lengths for abstracts config params + +2006-09-13 08:13 +0000 dockes (6e43869ceb61) + + * src/qtgui/advsearch.ui, src/qtgui/advsearch_w.cpp, + src/qtgui/advsearch_w.h, src/qtgui/guiutils.cpp, + src/qtgui/guiutils.h, src/qtgui/main.cpp, src/qtgui/rclmain.cpp, + src/qtgui/uiprefs.ui, src/qtgui/uiprefs_w.cpp: + add feature to save asearch ignored file types as startup default + +2006-09-12 10:11 +0000 dockes (9b323c436beb) + + * src/qtgui/advsearch.ui, src/qtgui/advsearch_w.cpp, + src/qtgui/preview_w.cpp, src/qtgui/preview_w.h, + src/qtgui/rclmain.cpp, src/qtgui/rclmain.h, + src/qtgui/rclreslist.cpp, src/qtgui/rclreslist.h, + src/qtgui/ssearch_w.cpp, src/qtgui/ssearchb.ui: + allow paging through results inside a preview window with shift-up + shift-down + +2006-09-11 14:22 +0000 dockes (f0dd93428e23) + + * src/doc/user/usermanual.sgml, src/qtgui/advsearch.ui: + try to make clearer that adv search fields will accept phrases as + well as single words + +2006-09-11 12:05 +0000 dockes (f455fbc6a42a) + + * src/qtgui/advsearch.ui, src/qtgui/advsearch_w.cpp, + src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, + src/qtgui/ssearch_w.cpp, src/qtgui/ssearchb.ui, + src/query/history.cpp, src/query/history.h: + remember history of restrict subdirs in adv search + +2006-09-11 09:08 +0000 dockes (ad274e633ffb) + + * src/qtgui/guiutils.cpp, src/qtgui/main.cpp, src/qtgui/rclmain.cpp, + src/qtgui/rclmain.h, src/qtgui/recoll.h, src/qtgui/uiprefs.ui, + src/query/docseq.h, src/query/history.cpp, src/query/history.h: + use the (should be renamed) history file to store external databases + lists + +2006-09-11 07:10 +0000 dockes (6cb09384f54a) + + * src/qtgui/ssearch_w.cpp, src/qtgui/ssearchb.ui: + maintain ssearches listbox in mru order + +2006-09-11 06:58 +0000 dockes (b62d0be5650e) + + * src/qtgui/advsearch.ui, src/qtgui/sort.ui, src/qtgui/uiprefs.ui: + ensure dialogs are sized according to font size + +2006-09-08 09:02 +0000 dockes (a5a31c9b0a37) + + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/common/rclinit.cpp, src/common/rclinit.h, src/doc/man/recoll.1, + src/doc/man/recoll.conf.5, src/doc/man/recollindex.1, + src/doc/user/usermanual.sgml, src/index/recollindex.cpp, + src/qtgui/guiutils.cpp, src/qtgui/main.cpp: + Add -c option to recoll and recollindex + +2006-09-08 08:51 +0000 dockes (315e0865ec26) + + * src/sampleconf/recoll.conf.in: + The dbdir default value is now relative to the cnf dir + +2006-09-06 09:50 +0000 dockes (e696d98fe7fe) + + * src/qtgui/uiprefs_w.cpp: + Used to reset the buildAbstract replaceAbstract options because of + setDown instead of setChecked + +2006-09-06 09:14 +0000 dockes (0dedd735c86e) + + * src/utils/mimeparse.cpp, src/utils/mimeparse.h: + implement rfc2231 decoding for mime parameter values + +2006-09-05 17:09 +0000 dockes (95fd6b3a5b9a) + + * src/internfile/mh_mail.cpp: + let mimeparse handle decoding or param values + +2006-09-05 09:52 +0000 dockes (44182523e711) + + * src/filters/rclppt, src/filters/rclxls: new file. + * src/filters/rclppt, src/filters/rclxls, src/sampleconf/mimeconf, + src/sampleconf/mimemap: + added support for ppt and xls via catdoc + +2006-09-05 08:05 +0000 dockes (587719349228) + + * src/internfile/mh_mail.cpp, src/internfile/mh_mail.h: + index and display attachment file names + +2006-09-05 08:04 +0000 dockes (6f8b09a74d14) + + * src/utils/mimeparse.cpp, src/utils/mimeparse.h: + comments only + +2006-09-04 15:13 +0000 dockes (0f11e18480b2) + + * src/qtgui/advsearch_w.cpp, src/qtgui/advsearch_w.h, + src/qtgui/preview.ui, src/qtgui/preview.ui.h, + src/qtgui/preview_w.cpp, src/qtgui/preview_w.h, + src/qtgui/sort_w.cpp, src/qtgui/sort_w.h, src/qtgui/ssearch_w.cpp, + src/qtgui/ssearch_w.h, src/qtgui/uiprefs_w.cpp, + src/qtgui/uiprefs_w.h: new file. + * src/qtgui/preview/preview.pro, src/qtgui/preview/preview.ui, + src/qtgui/preview/preview.ui.h, src/qtgui/preview/pvmain.cpp: + deleted file. + * src/qtgui/advsearch.ui, src/qtgui/advsearch.ui.h, + src/qtgui/advsearch_w.cpp, src/qtgui/advsearch_w.h, + src/qtgui/guiutils.cpp, src/qtgui/main.cpp, src/qtgui/preview.ui, + src/qtgui/preview.ui.h, src/qtgui/preview/preview.pro, + src/qtgui/preview/preview.ui, src/qtgui/preview/preview.ui.h, + src/qtgui/preview/pvmain.cpp, src/qtgui/preview_w.cpp, + src/qtgui/preview_w.h, src/qtgui/rclmain.cpp, src/qtgui/rclmain.h, + src/qtgui/recoll.pro.in, src/qtgui/recollmain.ui, + src/qtgui/recollmain.ui.h, src/qtgui/sort.ui, src/qtgui/sort.ui.h, + src/qtgui/sort_w.cpp, src/qtgui/sort_w.h, src/qtgui/ssearch_w.cpp, + src/qtgui/ssearch_w.h, src/qtgui/ssearchb.ui, + src/qtgui/ssearchb.ui.h, src/qtgui/uiprefs.ui, + src/qtgui/uiprefs.ui.h, src/qtgui/uiprefs_w.cpp, + src/qtgui/uiprefs_w.h: + mostly cosmetic changes to prepare for a future qt4 port: better + separate form design from code + +2006-06-29 11:05 +0000 dockes (8f28af2cb548) + + * src/qt4gui/recollmain.ui: + *** empty log message *** + +2006-06-24 09:56 +0000 dockes (fb2180e4d577) + + * src/qt4gui/recollmain.ui: + qt4 cleanup: merged back rclmainbase and rclmain + +2006-06-24 07:40 +0000 dockes (e1b5ffd88b25) + + * src/Makefile.in, src/VERSION, src/configure, src/configure.ac, + src/doc/user/usermanual.sgml, src/qt4gui/recoll.pro.in, + src/qt4gui/recollmain.ui, src/recollinstall.in: + more qt4, unfinished + +2006-06-23 08:07 +0000 dockes (46a46e406504) + + * src/qt4gui/recoll.pro.in, src/qt4gui/recollmain.ui: new file. + * src/qt4gui/recoll.pro.in, src/qt4gui/recollmain.ui: + added qt4gui code from Gennadi Sushko + +2006-05-22 07:04 +0000 dockes (2663a50d4760) + + * packaging/FreeBSD/recoll/Makefile, + packaging/FreeBSD/recoll/distinfo: + 1.4.3 + +2006-05-09 10:15 +0000 dockes (c9a62f0cb289) + + * src/rcldb/rcldb.cpp: + perform stem expansion using all active dbs + +2006-05-09 07:56 +0000 dockes (29feec461985) + + * src/qtgui/preview/preview.ui.h, src/qtgui/rclreslist.cpp: + esc quits preview + prev/next links + +2006-05-08 07:08 +0000 dockes (185da0be6900) + + * src/recollinstall.in: + install icon + +2006-05-08 07:08 +0000 dockes (7dbebc260389) + + * src/qtgui/rclreslist.cpp: + *** empty log message *** + +2006-05-07 14:18 +0000 dockes (2f273f645a91) + + * packaging/rpm/recoll.spec: + 1.4.3 + +2006-05-07 14:18 +0000 dockes (16b38a704d8e) + + * packaging/rpm/recoll.spec, packaging/rpm/recollmdk.spec: + 1.3.3 + +2006-05-07 14:10 +0000 dockes (4ab20caea142 [RECOLL-1_4_3]) + + * src/VERSION: + Release 1.4.3 + +2006-05-06 17:25 +0000 dockes (e7b4fd0f97fa) + + * src/recoll.png, src/recoll.xcf: new file. + * src/qtgui/recoll.pro.in, src/recoll.png, src/recoll.xcf: + *** empty log message *** + +2006-05-06 17:24 +0000 dockes (aae37ad598a9) + + * src/qtgui/recoll_ru.ts, src/qtgui/recoll_uk.ts: + new from michael + +2006-05-02 09:49 +0000 dockes (fb5bb4665925 [RECOLL-1_4_2]) + + * src/qtgui/guiutils.cpp, src/rcldb/stemdb.cpp, src/unac/unac.c: + more fbsd4 tweaks: Release 1.4.2 + +2006-04-30 07:44 +0000 dockes (d686e45d4b5e) + + * src/rcldb/rcldb.cpp: + fbsd4 tweaks + +2006-04-30 07:39 +0000 dockes (b889e57b87d6) + + * src/VERSION, src/index/indexer.cpp, src/index/indexer.h, + src/lib/Makefile, src/lib/mkMake: + fbsd4 tweaks + +2006-04-30 07:26 +0000 dockes (72f2881955d1 [RECOLL-1_4_1]) + + * src/Makefile.in, src/README: + *** empty log message *** + +2006-04-30 07:23 +0000 dockes (172a9e09b77c) + + * src/Makefile.in: + *** empty log message *** + +2006-04-30 07:20 +0000 dockes (7be76a62e017) + + * src/qtgui/recoll_fr.ts, src/qtgui/recoll_ru.ts, + src/qtgui/recoll_uk.ts: + lupdate+french + +2006-04-28 07:54 +0000 dockes (5b44017502c3) + + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/index/indexer.cpp, src/index/recollindex.cpp, + src/kde/kioslave/recoll/kio_recoll.cpp, src/qtgui/main.cpp, + src/query/qtry.cpp: + centralize dbdir computation in rclconfig+cat with conffdir if not + absolute + +2006-04-28 07:23 +0000 dockes (436f58f83459) + + * src/utils/transcode.cpp: + change debug log trace + +2006-04-27 09:23 +0000 dockes (3df68e37cdd9) + + * src/doc/user/usermanual.sgml, src/qtgui/guiutils.cpp, + src/qtgui/guiutils.h, src/qtgui/rclmain.cpp, src/qtgui/ssearchb.ui, + src/qtgui/ssearchb.ui.h: + make ssearch a combobox + +2006-04-27 06:12 +0000 dockes (e7c0f6cd73f0) + + * src/configure, src/configure.ac, src/lib/Makefile, src/lib/mkMake: + fix pb with .deps not existing + +2006-04-27 06:12 +0000 dockes (83e1c6a16ca6) + + * src/qtgui/preview/preview.ui.h, src/qtgui/rclmain.cpp, + src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + use getmatchingterms instead of getqueryterms for highlighting etc. + in preview + +2006-04-26 11:51 +0000 dockes (fa1cc55f05e9) + + * src/INSTALL, src/README: + *** empty log message *** + +2006-04-26 11:29 +0000 dockes (d92273eb3274) + + * src/qtgui/rclmain.cpp, src/qtgui/rclreslist.cpp, + src/qtgui/rclreslist.h: + dblclck in reslist adds to search lineedit + +2006-04-25 09:59 +0000 dockes (16f32a4eda4c) + + * src/index/indexer.cpp, src/rcldb/rcldb.cpp: + new way for doc unique terms: only path for monodoc, only path+ipath + for doc inside multidoc, add pseudo-doc for file itself + +2006-04-25 08:17 +0000 dockes (4c947b29c23c) + + * src/common/textsplit.cpp, src/rcldb/rcldb.cpp: + fixed small glitch in abstract text splitting + +2006-04-23 13:37 +0000 dockes (ea8caddeb344) + + * src/lib/mkMake: new file. + * src/lib/mkMake: + *** empty log message *** + +2006-04-22 06:27 +0000 dockes (1b0dd24cad31) + + * src/qtgui/main.cpp, src/qtgui/preview/preview.ui, + src/qtgui/preview/preview.ui.h, src/qtgui/rclmain.cpp, + src/qtgui/rclmain.h, src/qtgui/rclreslist.cpp, + src/qtgui/rclreslist.h, src/qtgui/ssearchb.ui, + src/qtgui/ssearchb.ui.h, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, + src/rcldb/searchdata.h: + turn-off abst. build for fname search (no terms) + prototype query + expansion (xapian e-set on chosen doc) + dbl-click in preview adds + term to ssearch + +2006-04-20 09:20 +0000 dockes (4b9c3c7bcb49) + + * src/common/rclconfig.cpp, src/lib/Makefile, src/qtgui/rclmain.cpp, + src/qtgui/rclmain.h, src/qtgui/rclreslist.cpp, + src/qtgui/rclreslist.h, src/qtgui/recollmain.ui, + src/qtgui/recollmain.ui.h, src/qtgui/sort.ui, src/qtgui/sort.ui.h, + src/qtgui/ssearchb.ui.h, src/query/sortseq.cpp, src/query/sortseq.h: + mode 700 on .recoll. move showquerydetails to rclreslist + +2006-04-19 08:26 +0000 dockes (9ec7ff1d0d53) + + * src/rcldb/searchdata.h: new file. + * src/qtgui/advsearch.ui, src/qtgui/advsearch.ui.h, + src/qtgui/main.cpp, src/qtgui/rclmain.h, src/qtgui/rclreslist.cpp, + src/qtgui/ssearchb.ui, src/qtgui/ssearchb.ui.h, src/rcldb/rcldb.cpp, + src/rcldb/rcldb.h, src/rcldb/searchdata.h: + compacted res list + completions in ssearch + additional or field + +2006-04-18 08:53 +0000 dockes (7c4352949f19) + + * src/index/recollindex.cpp, src/lib/Makefile, src/qtgui/advsearch.ui, + src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, src/qtgui/rclmain.cpp, + src/qtgui/rclreslist.cpp, src/qtgui/rclreslist.h, + src/qtgui/recollmain.ui, src/qtgui/ssearchb.ui, + src/qtgui/ssearchb.ui.h, src/qtgui/uiprefs.ui, + src/qtgui/uiprefs.ui.h: + new libs Makefile+autoSearchOnWS + +2006-04-15 17:15 +0000 dockes (cc178f316e64) + + * src/qtgui/main.cpp, src/query/Makefile: + small aix tweaks + +2006-04-15 16:51 +0000 dockes (356148054ef1) + + * src/mk/AIX: new file. + * src/mk/AIX: + *** empty log message *** + +2006-04-13 09:50 +0000 dockes (fe982a2684e4) + + * src/rcldb/stemdb.cpp, src/rcldb/stemdb.h: new file. + * src/lib/Makefile, src/rcldb/rcldb.cpp, src/rcldb/stemdb.cpp, + src/rcldb/stemdb.h: + extracted stem database from rcldb to make it smaller + +2006-04-12 10:41 +0000 dockes (6892025a5c8e) + + * src/index/indexer.cpp, src/index/indexer.h, src/qtgui/idxthread.cpp, + src/qtgui/idxthread.h, src/qtgui/rclmain.cpp, + src/qtgui/recollmain.ui, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + improve indexing status reporting + +2006-04-12 07:26 +0000 dockes (44ac63815611) + + * src/qtgui/rclmain.cpp, src/rcldb/rcldb.cpp: + Fix history not working after thread index run + +2006-04-11 07:14 +0000 dockes (bd453ed96f6a) + + * src/rcldb/rcldb.cpp: + fix rare case where stem itself was forgotten in list of possible + derivatives + +2006-04-11 06:49 +0000 dockes (dd7f793fdf8e) + + * src/common/textsplit.cpp, src/rcldb/rcldb.cpp, + src/utils/smallut.cpp, src/utils/smallut.h: + comments and moving some util routines out of rcldb.cpp + +2006-04-08 14:00 +0000 dockes (d60e656c348f) + + * src/VERSION, src/doc/user/usermanual.sgml: + *** empty log message *** + +2006-04-07 13:10 +0000 dockes (dc4ff4178b85) + + * src/qtgui/advsearch.ui.h, src/rcldb/rcldb.cpp: + check for and forbid pure negative query + +2006-04-07 13:08 +0000 dockes (7da00eb0c7aa) + + * src/qtgui/guiutils.cpp: + RECOLL_EXTRA_DBS environment variable + +2006-04-07 13:07 +0000 dockes (f040ff3bf0aa) + + * src/doc/user/usermanual.sgml: + use indexing instead of indexation + +2006-04-07 08:51 +0000 dockes (52451e342e49) + + * src/internfile/mh_mail.cpp, src/internfile/mh_mail.h: + comments+conventions + +2006-04-06 17:39 +0000 dockes (7d2906a0371d) + + * packaging/FreeBSD/recoll/pkg-plist: + merge modif from committer + +2006-04-06 14:28 +0000 dockes (52d4a2c2a341) + + * src/sampleconf/recoll.conf.in: + stem only for english by default + +2006-04-06 13:09 +0000 dockes (fa565da09aa7 [RECOLL-1_4_0]) + + * src/VERSION: + 1.4.0 + +2006-04-06 13:08 +0000 dockes (1436c843e74e) + + * src/VERSION, src/rcldb/rcldb.h, src/recollinstall.in: + rpmlint wants 755 for execs + +2006-04-06 12:34 +0000 dockes (687369f6736c) + + * src/INSTALL, src/README: + *** empty log message *** + +2006-04-05 15:41 +0000 dockes (359711d5fbe3) + + * src/recollinstall.in: + fix the installed file perms + +2006-04-05 13:39 +0000 dockes (fdd0d33d5c2e) + + * src/qtgui/guiutils.cpp, src/qtgui/uiprefs.ui, + src/qtgui/uiprefs.ui.h, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + small fixes for extra db selection + +2006-04-05 13:30 +0000 dockes (3277935457e9) + + * src/doc/user/usermanual.sgml: + small fixes + +2006-04-05 12:50 +0000 dockes (98d8d7d74aee) + + * src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, src/qtgui/main.cpp, + src/qtgui/uiprefs.ui, src/qtgui/uiprefs.ui.h, src/rcldb/rcldb.cpp, + src/rcldb/rcldb.h: + additional search databases + +2006-04-05 06:26 +0000 dockes (e8f1cc7c2bbf) + + * src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + simplified class structure + +2006-04-04 16:03 +0000 dockes (ddb66052e3e8 [RECOLL-1_4_0pre1]) + + * src/filters/rcldjvu, src/filters/rclmedia, src/filters/rclps, + src/filters/rclsoff: + handle paths with embedded spaces + +2006-04-04 15:44 +0000 dockes (933f89f10033) + + * src/filters/rcluncomp: + handle paths with embedded spaces + +2006-04-04 13:49 +0000 dockes (dec4932652ae) + + * src/index/indexer.cpp, src/index/indexer.h, + src/index/recollindex.cpp, src/qtgui/idxthread.cpp, + src/qtgui/idxthread.h, src/qtgui/rclmain.cpp: + make indexation more easily cancellable + +2006-04-04 12:37 +0000 dockes (17342a5b330b) + + * src/doc/user/usermanual.sgml, src/index/indexer.cpp, + src/index/indexer.h: + check for symlinks in the topdirs list. Generate diags in + confIndexer + +2006-04-04 10:38 +0000 dockes (ec632eb29364) + + * src/qtgui/guiutils.cpp, src/qtgui/rclreslist.cpp: + setup initial default window size smaller + +2006-04-04 09:36 +0000 dockes (d175998d9270) + + * src/common/unacpp.cpp, src/unac/unac.c: + clarify/clean up mem buffer handling + +2006-04-04 09:35 +0000 dockes (b14f9df37817) + + * src/utils/conftree.h: + fix potential minor memory leak when copying conftrees + +2006-04-04 09:34 +0000 dockes (aaddcbb06c7a) + + * src/index/indexer.cpp, src/index/indexer.h: + cosmetic: add m_ prefix to private vars + +2006-04-04 07:55 +0000 dockes (1bda0dcafd17) + + * src/qtgui/main.cpp, src/qtgui/preview/preview.ui.h, + src/qtgui/rclmain.cpp: + Get things to compile with QT_NO_STL + +2006-04-03 14:16 +0000 dockes (4957b439000e) + + * packaging/FreeBSD/recoll/Makefile: + add mods from port tree + +2006-04-03 12:59 +0000 dockes (62a51f626e46) + + * packaging/FreeBSD/recoll/Makefile, + packaging/FreeBSD/recoll/distinfo: + *** empty log message *** + +2006-04-03 11:43 +0000 dockes (0449d2ba4099 [RECOLL-1_3_3]) + + * src/VERSION: + 1.3.3 + +2006-04-03 11:43 +0000 dockes (6b54e368d2d1) + + * src/common/rclconfig.cpp: + small port fixes for fbsd4 and solaris + +2006-04-03 09:42 +0000 dockes (cd9fe4976fae) + + * src/utils/execmd.cpp: + warning + +2006-04-01 21:02 +0000 dockes (eef792b97ce8 [RECOLL-1_3_2]) + + * src/VERSION, src/qtgui/rclmain.cpp: + limit max length of displayed query details. 1.3.2 + +2006-04-01 09:15 +0000 dockes (315da01fb1a5 [RECOLL-1_3_1]) + + * src/INSTALL, src/README: + *** empty log message *** + +2006-04-01 09:15 +0000 dockes (e9f0a85fc18e) + + * src/INSTALL, src/README, src/qtgui/rclreslist.cpp, + src/qtgui/ssearchb.ui: + updated INSTALL+README. Fix tab focus in main window + +2006-04-01 08:07 +0000 dockes (916faf93fb66) + + * src/qtgui/rclmain.cpp: + urlencode file name before executing ext app with url param + +2006-04-01 07:48 +0000 dockes (adbde9cd60b9) + + * packaging/FreeBSD/recoll/Makefile, + packaging/FreeBSD/recoll/distinfo, packaging/FreeBSD/recoll/pkg- + plist: + 1.3.1 + +2006-04-01 07:34 +0000 dockes (4cd3e4e4074c) + + * src/sampleconf/mimeconf, src/sampleconf/mimemap: + Allow ext edit for c/c++ files. 1.3.1 2? + +2006-03-31 17:19 +0000 dockes (35db6f17bdd8) + + * src/VERSION, src/qtgui/rclmain.cpp, src/qtgui/rclreslist.cpp, + src/qtgui/recoll_ru.ts, src/qtgui/recoll_uk.ts: + fixed reslist header charset issues. 1.3.1 first + +2006-03-31 09:02 +0000 dockes (ae3d9c9deb6d) + + * src/INSTALL, src/README: + *** empty log message *** + +2006-03-31 07:51 +0000 dockes (0fccf51c6905 [RECOLL-1_3_1pre3]) + + * src/qtgui/recoll_uk.ts: new file. + * src/qtgui/recoll_uk.ts: + *** empty log message *** + +2006-03-30 13:00 +0000 dockes (b41828dda0ac) + + * src/common/Makefile: + cleanup rclconfig + +2006-03-30 10:31 +0000 dockes (afbdbc31ff1c) + + * src/sampleconf/recoll.conf.in: + dont set defaultcharset to 8859-1: will let nls info be used + +2006-03-30 10:31 +0000 dockes (582fa2a09db3) + + * src/doc/user/usermanual.sgml: + *** empty log message *** + +2006-03-30 08:19 +0000 dockes (89efa1c78c3c [RECOLL-1_3_1pre2]) + + * src/qtgui/recoll_fr.ts, src/qtgui/recoll_ru.ts: + lupdate + +2006-03-30 07:54 +0000 dockes (0b236faa0b9d) + + * src/qtgui/advsearch.ui: + cleaned up layout + +2006-03-29 17:31 +0000 dockes (7cb115f5789c) + + * src/qtgui/guiutils.cpp, src/qtgui/guiutils.h, src/qtgui/main.cpp, + src/qtgui/ssearchb.ui, src/qtgui/ssearchb.ui.h: + gui: replaced checkboxes for all/filename in simple search with + droplist + +2006-03-29 13:08 +0000 dockes (ce199bb02759) + + * src/VERSION, src/common/Makefile, src/common/rclconfig.cpp, + src/common/rclconfig.h, src/internfile/mimehandler.cpp, + src/internfile/mimehandler.h, src/qtgui/rclreslist.cpp, + src/sampleconf/mimeconf, src/sampleconf/mimemap: + result list: show preview and edit links only when they can be used + +2006-03-29 11:18 +0000 dockes (5f22b93705b4) + + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/common/rclinit.cpp, src/index/indexer.cpp, + src/qtgui/preview/preview.ui.h, src/qtgui/rclreslist.cpp, + src/qtgui/rclreslist.h, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, + src/utils/pathut.cpp, src/utils/pathut.h, src/utils/transcode.cpp, + src/utils/transcode.h: + try to better handle non-ascii file names + +2006-03-28 12:49 +0000 dockes (a081a1b65de1) + + * src/doc/man/recoll.conf.5, src/doc/user/usermanual.sgml, + src/qtgui/recoll.pro.in, src/recollinstall.in, + src/sampleconf/recoll.conf.in: + 1.3.1pre1 + +2006-03-28 12:18 +0000 dockes (7429c22d162b) + + * src/INSTALL, src/README: + *** empty log message *** + +2006-03-28 09:38 +0000 dockes (25e1ed25acc5) + + * src/filters/rclmedia, src/qtgui/mtpics/sownd.png: new file. + * src/filters/rclmedia, src/qtgui/mtpics/sownd.png, + src/sampleconf/mimeconf, src/sampleconf/mimemap: + filter for indexing mp3 tags + +2006-03-28 09:36 +0000 dockes (fb852147db29) + + * src/internfile/mh_unknown.h: new file. + * src/internfile/mh_unknown.h: + added code to specifically index/search file names + +2006-03-22 16:24 +0000 dockes (4467274ce405) + + * src/index/indexer.cpp, src/index/indexer.h, src/qtgui/idxthread.cpp, + src/qtgui/idxthread.h, src/qtgui/rclmain.cpp, + src/qtgui/recollmain.ui: + show current filename as feedback during indexation + +2006-03-22 14:25 +0000 dockes (5dae5f8a140d) + + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/utils/conftree.cpp, src/utils/conftree.h: + Replace user config with central values + override + +2006-03-22 11:17 +0000 dockes (1f04e3bfeb4a) + + * src/qtgui/rclreslist.cpp: + fix size display + +2006-03-21 15:11 +0000 dockes (88d6359d2739) + + * src/qtgui/rclreslist.cpp, src/qtgui/rclreslist.h: + implement right click menu in result list + +2006-03-21 13:46 +0000 dockes (56610f5d03b3) + + * src/qtgui/rclmain.cpp, src/qtgui/rclreslist.cpp, + src/qtgui/rclreslist.h: + replaced (double)clicks in the result list with links + +2006-03-21 13:27 +0000 dockes (cc41e73a4f5a) + + * src/qtgui/rclreslist.cpp: + ckpt + +2006-03-21 11:04 +0000 dockes (b1dc67961a45) + + * src/index/mimetype.cpp: + sanity check on file -i return + +2006-03-21 09:15 +0000 dockes (8589c7c01f25) + + * src/qtgui/rclreslist.cpp, src/qtgui/rclreslist.h: new file. + * src/qtgui/reslistb.ui, src/qtgui/reslistb.ui.h: deleted file. + * src/qtgui/rclmain.cpp, src/qtgui/rclmain.h, + src/qtgui/rclreslist.cpp, src/qtgui/rclreslist.h, + src/qtgui/recollmain.ui, src/qtgui/reslistb.ui, + src/qtgui/reslistb.ui.h: + reslistb form replaced by object derived from QTextBrowser + +2006-03-20 16:05 +0000 dockes (70c0ec0275a9) + + * src/VERSION, src/index/indexer.cpp, src/internfile/internfile.cpp, + src/internfile/mimehandler.cpp, src/qtgui/advsearch.ui, + src/qtgui/advsearch.ui.h, src/qtgui/ssearchb.ui, + src/qtgui/ssearchb.ui.h, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + added code to specifically index/search file names + +2006-03-20 15:14 +0000 dockes (86bb2d64fdd9) + + * src/internfile/mh_text.cpp: + get rid of unused temp + +2006-03-20 09:54 +0000 dockes (fea74448199d) + + * src/utils/pathut.h: + comments + +2006-03-20 09:54 +0000 dockes (bf4772fd96ff) + + * src/sampleconf/mimemap: + add # to ignd suffixes + +2006-03-20 09:51 +0000 dockes (218c67bcb769) + + * src/common/rclconfig.cpp, src/common/rclconfig.h: + try to get default charset from LANG if not in config + +2006-03-20 09:50 +0000 dockes (2d633e45c451) + + * src/makestaticdist.sh: + desktop file + +2006-03-16 14:00 +0000 dockes (b45dd89bb177) + + * src/recoll.desktop: new file. + * src/recoll.desktop: + initial version from Michael Shigorin + +2006-03-16 13:49 +0000 dockes (e3e216dfacb6) + + * src/qtgui/recoll_ru.ts: new file. + * src/qtgui/recoll_ru.ts: + initial version from Michael Shigorin + +2006-03-04 10:09 +0000 dockes (983d0984e972 [RECOLL-1_2_3]) + + * src/VERSION, src/doc/user/usermanual.sgml: + 1.2.3 + +2006-02-21 12:57 +0000 dockes (29500b27662b) + + * src/INSTALL, src/README: + *** empty log message *** + +2006-02-21 12:56 +0000 dockes (0bc6bf836dfe) + + * src/Makefile.in, src/configure, src/configure.ac: + ensure Makefile uses same qmake as configure + +2006-02-21 12:52 +0000 dockes (9a69d49b1448) + + * src/query/docseq.h, src/query/sortseq.h: + sorted sequence title would never show + +2006-02-07 10:26 +0000 dockes (8881db16fe21) + + * src/qtgui/reslistb.ui.h, src/query/docseq.cpp, src/query/docseq.h, + src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + fix problems with doc fetch sequence (have to know where to stop) + +2006-02-07 09:44 +0000 dockes (fbfb30458fc2) + + * src/qtgui/plaintorich.cpp, src/qtgui/plaintorich.h, + src/qtgui/preview/preview.ui, src/qtgui/preview/preview.ui.h: + replace computation of term positions in editor text with search for + 1st query term + +2006-02-03 11:47 +0000 dockes (1dbf9bcedfc0) + + * src/filters/rcldvi: + option to use catdvi + +2006-02-03 10:53 +0000 dockes (f219261a580b) + + * src/filters/rcldjvu, src/filters/rcldvi: new file. + * src/filters/rcldjvu, src/filters/rcldvi, src/filters/rclps, + src/sampleconf/mimeconf, src/sampleconf/mimemap: + added dvi and djvu support + +2006-02-02 09:45 +0000 dockes (71a4b9e391e0) + + * packaging/FreeBSD/recoll/Makefile, + packaging/FreeBSD/recoll/distinfo: + 1.2.2 + +2006-02-02 08:58 +0000 dockes (c2f3b36a7169 [RECOLL-1_2_2]) + + * src/rcldb/rcldb.cpp, src/utils/pathut.cpp: + suppress 2 compilation warnings (one was actual 64bits bug but + inocuous + +2006-02-02 08:35 +0000 dockes (4d473bd0d9a8) + + * src/Makefile.in, src/VERSION, src/configure, src/configure.ac, + src/qtgui/main.cpp, src/qtgui/preview/preview.ui.h: + fix small cc glitches: qt3.1, xapian-config + +2006-02-01 14:34 +0000 dockes (a4deac6ede77 [RECOLL-1_2_1]) + + * src/qtgui/guiutils.cpp, src/qtgui/reslistb.ui.h: + fbsd4 cc + +2006-02-01 14:27 +0000 dockes (b005945089dc) + + * src/VERSION: + *** empty log message *** + +2006-02-01 14:18 +0000 dockes (1f6da4b2f946) + + * src/common/textsplit.cpp: + use string::erase() not clear() + +2006-02-01 09:00 +0000 dockes (09b3a24a6173 [RECOLL-1_2_0]) + + * src/recollinstall.in: + *** empty log message *** + +2006-02-01 08:19 +0000 dockes (bef8d87339d0) + + * packaging/rpm/recoll.spec: + *** empty log message *** + +2006-02-01 07:14 +0000 dockes (5c4deca7b177) + + * src/excludefile, src/utils/base64.cpp: + *** empty log message *** + +2006-02-01 07:12 +0000 dockes (77e021af3fa0) + + * src/INSTALL, src/README, src/doc/user/usermanual.sgml, + src/excludefile, src/makesrcdist.sh: + *** empty log message *** + +2006-01-31 11:39 +0000 dockes (73f22e91d844) + + * src/qtgui/reslistb.ui.h: + Clicking on "No results found" will also display the expanded query + +2006-01-31 11:39 +0000 dockes (c225bd05e9c1) + + * src/qtgui/recoll.h: + close/reopen db by default: let us see results of recollindex -i + +2006-01-30 12:51 +0000 dockes (cd40d5627d38) + + * src/qtgui/recoll_fr.ts: + *** empty log message *** + +2006-01-30 11:15 +0000 dockes (962649c706ef) + + * src/common/rclconfig.h, src/common/rclinit.h, + src/common/textsplit.h, src/common/unacpp.h, src/common/uproplist.h, + src/index/csguess.h, src/index/indexer.h, src/index/mimetype.h, + src/internfile/htmlparse.cpp, src/internfile/htmlparse.h, + src/internfile/indextext.h, src/internfile/internfile.h, + src/internfile/mh_exec.h, src/internfile/mh_html.h, + src/internfile/mh_mail.h, src/internfile/mh_text.h, + src/internfile/mimehandler.h, src/internfile/myhtmlparse.cpp, + src/internfile/myhtmlparse.h, src/qtgui/advsearch.ui.h, + src/qtgui/guiutils.h, src/qtgui/idxthread.h, + src/qtgui/plaintorich.h, src/qtgui/preview/preview.ui.h, + src/qtgui/rclmain.h, src/qtgui/recoll.h, src/qtgui/recollmain.ui.h, + src/qtgui/reslistb.ui.h, src/qtgui/sort.ui.h, + src/qtgui/ssearchb.ui.h, src/qtgui/uiprefs.ui.h, src/query/docseq.h, + src/query/history.h, src/query/sortseq.h, src/rcldb/pathhash.h, + src/rcldb/rcldb.h, src/utils/base64.h, src/utils/cancelcheck.h, + src/utils/conftree.h, src/utils/copyfile.h, src/utils/debuglog.h, + src/utils/execmd.h, src/utils/fstreewalk.h, src/utils/idfile.h, + src/utils/mimeparse.h, src/utils/pathut.h, src/utils/readfile.h, + src/utils/smallut.h, src/utils/transcode.h, src/utils/utf8iter.h, + src/utils/wipedir.h: + *** empty log message *** + +2006-01-30 10:01 +0000 dockes (f683194d38a4) + + * src/qtgui/preview/preview.ui.h: + dont highlight terms in very big docs: too slow + +2006-01-30 09:32 +0000 dockes (dc8cbf051f54) + + * src/mk/localdefs.in: + -O2 + +2006-01-30 09:28 +0000 dockes (af56f00261eb) + + * src/qtgui/guiutils.cpp, src/qtgui/main.cpp, src/qtgui/rclmain.cpp, + src/qtgui/uiprefs.ui, src/qtgui/uiprefs.ui.h: + help browser selection in prefs + +2006-01-30 09:28 +0000 dockes (df275d18bee6) + + * src/utils/execmd.cpp: + *** empty log message *** + +2006-01-30 09:28 +0000 dockes (6d7b08c3bba0) + + * src/common/textsplit.cpp: + moved span cleanup where it belonged + +2006-01-28 15:36 +0000 dockes (b65e6344a9e4) + + * src/common/textsplit.cpp, src/common/textsplit.h: + *** empty log message *** + +2006-01-28 10:23 +0000 dockes (507b05e72779) + + * src/common/textsplit.cpp, src/common/textsplit.h, src/configure, + src/configure.ac, src/query/xadump.cpp, src/utils/utf8iter.h: + more textsplit tweaking + +2006-01-27 13:43 +0000 dockes (8ed38cba7965) + + * src/utils/cancelcheck.h: new file. + * src/utils/cancelcheck.h: + *** empty log message *** + +2006-01-27 13:43 +0000 dockes (fa13d8fe2fc9) + + * src/qtgui/guiutils.cpp, src/qtgui/guiutils.h: new file. + * src/qtgui/guiutils.cpp, src/qtgui/guiutils.h: + extracted code from main and others + +2006-01-27 13:42 +0000 dockes (96572eee9528) + + * src/qtgui/plaintorich.cpp, src/qtgui/plaintorich.h, + src/qtgui/preview/preview.ui, src/qtgui/preview/preview.ui.h, + src/qtgui/rclmain.cpp: + implement cancellation in preview loading + +2006-01-27 13:38 +0000 dockes (3ad2458e654a) + + * src/internfile/myhtmlparse.cpp: + strip whitespace and newlines (as the original version), except in + pre tags + +2006-01-27 13:37 +0000 dockes (80dbbac5b981) + + * src/filters/rcldoc, src/filters/rclpdf, src/filters/rclps, + src/filters/rclsoff: + fix to output
when needed + other misc pbs + +2006-01-27 13:34 +0000 dockes (538235c10cd7) + + * src/rcldb/rcldb.cpp: + define some constants and increase abstract context width + +2006-01-27 11:25 +0000 dockes (1d381cea9ec3) + + * src/internfile/htmlparse.cpp: + missing amp entity translation + +2006-01-26 17:59 +0000 dockes (15b82e0f9689) + + * src/internfile/mh_exec.cpp: + check for cancellation + +2006-01-26 17:59 +0000 dockes (81f5d1264b7d) + + * src/utils/execmd.cpp, src/utils/execmd.h: + also test cancel on select timeout + +2006-01-26 17:44 +0000 dockes (77efdf7b7e93) + + * src/utils/execmd.cpp, src/utils/execmd.h: + make execCmd exception-safe + +2006-01-26 14:02 +0000 dockes (ffd1ec38fb9f) + + * src/qtgui/main.cpp, src/qtgui/rclmain.cpp, src/qtgui/recoll.h, + src/qtgui/uiprefs.ui, src/qtgui/uiprefs.ui.h: + abstract params + +2006-01-26 14:01 +0000 dockes (c34965eaaa05) + + * src/qtgui/reslistb.ui, src/qtgui/reslistb.ui.h: + abstracts + doc sizes + +2006-01-26 12:30 +0000 dockes (c3718d2ceeae) + + * src/query/docseq.cpp: + let the db do whats needed to get a result count + +2006-01-26 12:29 +0000 dockes (bc0a233de310) + + * src/utils/smallut.cpp, src/utils/smallut.h: + chrono + +2006-01-26 12:28 +0000 dockes (69be9a0edd98) + + * src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + abstract building from position data + +2006-01-26 07:03 +0000 dockes (2c5403cbdbc1) + + * src/qtgui/recoll.pro: deleted file. + * src/qtgui/recoll.pro: + replaced by recoll.pro.in + +2006-01-26 07:03 +0000 dockes (7a03d26ad54d) + + * src/qtgui/recoll.pro, src/qtgui/recoll.pro.in, src/utils/smallut.h: + *** empty log message *** + +2006-01-26 07:02 +0000 dockes (de94ebf3cb51) + + * src/index/indexer.cpp: + pass size info to db.add + +2006-01-25 08:39 +0000 dockes (fc5ab7249caa) + + * src/internfile/myhtmlparse.cpp, src/internfile/myhtmlparse.h: + reenable stripping newlines + +2006-01-25 08:09 +0000 dockes (1ce613930379) + + * src/query/Makefile, src/query/xadump.cpp: + xadump improvements + +2006-01-24 12:22 +0000 dockes (6a16d14c076e) + + * src/qtgui/rclmain.cpp: + fix signal type + +2006-01-24 12:22 +0000 dockes (322a0f010b59) + + * src/utils/execmd.cpp, src/utils/execmd.h: + add feedback and possible cancellation + +2006-01-23 17:21 +0000 dockes (d16bcca9bc1e) + + * src/qtgui/images/d_nextpage.png, src/qtgui/images/d_prevpage.png: + new file. + * src/qtgui/images/d_nextpage.png, src/qtgui/images/d_prevpage.png, + src/qtgui/rclmain.cpp, src/qtgui/recoll.pro, + src/qtgui/recollmain.ui: + slightly improved the icon situation + +2006-01-23 16:52 +0000 dockes (a51e0cfa77db) + + * src/qtgui/images/asearch.png, src/qtgui/images/history.png, + src/qtgui/images/nextpage.png, src/qtgui/images/prevpage.png, + src/qtgui/images/sortparms.png: + *** empty log message *** + +2006-01-23 15:43 +0000 dockes (907a44f71ddc) + + * src/qtgui/images/editcopy, src/qtgui/images/editcut, + src/qtgui/images/editpaste, src/qtgui/images/filenew, + src/qtgui/images/fileopen, src/qtgui/images/filesave, + src/qtgui/images/print, src/qtgui/images/redo, + src/qtgui/images/searchfind, src/qtgui/images/undo: deleted file. + * src/qtgui/images/editcopy, src/qtgui/images/editcut, + src/qtgui/images/editpaste, src/qtgui/images/filenew, + src/qtgui/images/fileopen, src/qtgui/images/filesave, + src/qtgui/images/print, src/qtgui/images/redo, + src/qtgui/images/searchfind, src/qtgui/images/undo: + *** empty log message *** + +2006-01-23 13:32 +0000 dockes (b27df12a0147) + + * src/common/rclconfig.cpp, src/common/rclinit.cpp, + src/common/textsplit.cpp, src/common/unacpp.cpp, + src/index/csguess.cpp, src/index/indexer.cpp, + src/index/mimetype.cpp, src/index/recollindex.cpp, + src/internfile/internfile.cpp, src/internfile/mh_exec.cpp, + src/internfile/mh_mail.cpp, src/internfile/mh_text.cpp, + src/internfile/mimehandler.cpp, src/query/docseq.cpp, + src/query/history.cpp, src/query/qtry.cpp, src/query/qxtry.cpp, + src/query/sortseq.cpp, src/query/xadump.cpp, src/rcldb/pathhash.cpp, + src/rcldb/rcldb.cpp, src/utils/base64.cpp, src/utils/conftree.cpp, + src/utils/copyfile.cpp, src/utils/debuglog.cpp, + src/utils/execmd.cpp, src/utils/fstreewalk.cpp, + src/utils/idfile.cpp, src/utils/mimeparse.cpp, src/utils/pathut.cpp, + src/utils/readfile.cpp, src/utils/smallut.cpp, + src/utils/transcode.cpp, src/utils/utf8iter.cpp, + src/utils/wipedir.cpp: + reference to GPL in all .cpp files + +2006-01-23 13:32 +0000 dockes (c2c52e3c568f) + + * src/qtgui/idxthread.cpp, src/qtgui/main.cpp, + src/qtgui/plaintorich.cpp, src/qtgui/rclmain.cpp, + src/qtgui/recoll.h, src/qtgui/recoll.pro, src/qtgui/reslistb.ui.h, + src/qtgui/uiprefs.ui.h: + more refactoring + +2006-01-23 07:15 +0000 dockes (639d2208e231) + + * src/qtgui/rclmain.cpp: + *** empty log message *** + +2006-01-23 07:07 +0000 dockes (29cad268f7ba) + + * src/qtgui/rclmain.cpp, src/qtgui/rclmain.h, src/qtgui/reslistb.ui, + src/qtgui/reslistb.ui.h, src/qtgui/ssearchb.ui.h: + more modularization + +2006-01-22 18:46 +0000 dockes (c329a0d633e1) + + * src/qtgui/recoll.pro.in: new file. + * src/qtgui/main.cpp, src/qtgui/rclmain.cpp, src/qtgui/rclmain.h, + src/qtgui/recoll.pro, src/qtgui/recoll.pro.in, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h, + src/qtgui/reslistb.ui, src/qtgui/reslistb.ui.h, + src/qtgui/ssearchb.ui: + extract functionality from main window + +2006-01-22 15:16 +0000 dockes (f8f81a690e3d) + + * src/qtgui/reslistb.ui, src/qtgui/reslistb.ui.h: + *** empty log message *** + +2006-01-22 13:56 +0000 dockes (b62fca0983d3) + + * src/qtgui/reslistb.ui, src/qtgui/reslistb.ui.h, + src/qtgui/ssearchb.ui.h: new file. + * src/qtgui/reslistb.ui, src/qtgui/reslistb.ui.h, + src/qtgui/ssearchb.ui.h: + *** empty log message *** + +2006-01-22 07:41 +0000 dockes (50553b4f8d29 [T1_2]) + + * src/qtgui/ssearchb.ui: + *** empty log message *** + +2006-01-22 07:25 +0000 dockes (f5ecee171cca) + + * src/qtgui/ssearchb.ui: new file. + * src/qtgui/ssearchb.ui: + *** empty log message *** + +2006-01-21 15:36 +0000 dockes (283be80e303b) + + * src/configure: + *** empty log message *** + +2006-01-21 15:36 +0000 dockes (57061cf4c252) + + * src/Makefile.in, src/configure, src/configure.ac, + src/makesrcdist.sh, src/qtgui/recoll.pro: + enable building from inside qtgui/ + +2006-01-21 15:25 +0000 dockes (ce790ab8e905) + + * packaging/rpm/recollmdk.spec: new file. + * packaging/rpm/recollmdk.spec: + *** empty log message *** + +2006-01-21 10:47 +0000 dockes (47b92b35b369) + + * src/INSTALL, src/README: + *** empty log message *** + +2006-01-20 14:58 +0000 dockes (9dfcca9b0073) + + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/qtgui/main.cpp, src/qtgui/preview/preview.ui.h, + src/qtgui/rclmain.cpp, src/qtgui/rclmain.h, src/qtgui/recoll.h: + qt main program cleanup + +2006-01-20 12:46 +0000 dockes (04782d3c08bb) + + * src/qtgui/rclmain.cpp, src/qtgui/rclmain.h: new file. + * src/qtgui/main.cpp, src/qtgui/rclmain.cpp, src/qtgui/rclmain.h, + src/qtgui/recoll.pro, src/qtgui/recoll_fr.ts, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h: + separated code from design by subclassing recollmain + +2006-01-20 10:01 +0000 dockes (f1c90fc5dd19) + + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/kde/kioslave/recoll/00README.txt, src/mk/commondefs, + src/mk/localdefs.in, src/qtgui/idxthread.cpp, src/qtgui/idxthread.h, + src/qtgui/main.cpp, src/utils/conftree.h, src/utils/debuglog.h: + cleanup + +2006-01-19 17:11 +0000 dockes (b6465d0ee08c) + + * src/Makefile.in: new file. + * src/Makefile: deleted file. + * src/Makefile, src/Makefile.in, src/common/rclconfig.cpp, + src/common/rclconfig.h, src/configure, src/configure.ac, + src/internfile/internfile.cpp, src/internfile/mh_exec.cpp, + src/mk/localdefs.in, src/qtgui/main.cpp, src/qtgui/recoll.pro, + src/recollinstall.in: + slight config cleanup + +2006-01-19 15:08 +0000 dockes (211c1066ac8f) + + * src/kde/kioslave/recoll/00README.txt: new file. + * src/kde/kioslave/recoll/00README.txt: + end of test, doesnt look very useful + +2006-01-19 14:57 +0000 dockes (302ee688e96a) + + * src/kde/kioslave/recoll/kio_recoll.la: new file. + * src/kde/kioslave/recoll/Makefile, + src/kde/kioslave/recoll/kio_recoll.cpp, + src/kde/kioslave/recoll/kio_recoll.h, + src/kde/kioslave/recoll/kio_recoll.la: + end of initial experimentation + +2006-01-19 12:03 +0000 dockes (ffb549062074) + + * src/utils/Makefile: + *** empty log message *** + +2006-01-19 12:01 +0000 dockes (0e6b7d796f28) + + * packaging/FreeBSD/recoll/Makefile, src/Makefile, src/VERSION, + src/bincimapmime/Makefile, src/common/Makefile, + src/doc/user/usermanual.sgml, src/index/Makefile, + src/kde/kioslave/recoll/Makefile, + src/kde/kioslave/recoll/kio_recoll.cpp, + src/kde/kioslave/recoll/kio_recoll.h, src/lib/Makefile, + src/makestaticdist.sh, src/mk/Darwin, src/mk/FreeBSD, src/mk/Linux, + src/mk/SunOS, src/mk/commondefs, src/mk/localdefs.in, + src/qtgui/plaintorich.cpp, src/qtgui/plaintorich.h, + src/qtgui/recollmain.ui.h, src/query/Makefile, src/utils/Makefile, + src/utils/smallut.cpp, src/utils/smallut.h: + misc small mods to help with building kio_recoll + +2006-01-18 13:41 +0000 dockes (ebf94c8fc21c) + + * src/kde/kioslave/recoll/Makefile, + src/kde/kioslave/recoll/kio_recoll.cpp, + src/kde/kioslave/recoll/kio_recoll.h, + src/kde/kioslave/recoll/recoll.protocol: new file. + * src/kde/kioslave/recoll/Makefile, + src/kde/kioslave/recoll/kio_recoll.cpp, + src/kde/kioslave/recoll/kio_recoll.h, + src/kde/kioslave/recoll/recoll.protocol: + *** empty log message *** + +2006-01-17 10:08 +0000 dockes (9784891fd0a7) + + * src/utils/mimeparse.h: + comments and clarification + +2006-01-17 09:31 +0000 dockes (08549e5e4a9e) + + * src/index/indexer.cpp, src/utils/fstreewalk.cpp, + src/utils/fstreewalk.h: + cleanup and comments + +2006-01-14 13:09 +0000 dockes (d7ac146b7dd5) + + * src/configure, src/configure.ac: + do a better search for qt configuration + +2006-01-14 11:48 +0000 dockes (d073ecc93317) + + * src/Makefile, src/configure, src/configure.ac: + do a better search for qt configuration + +2006-01-12 09:29 +0000 dockes (2dfd16f6a9a4 [RECOLL-1_1_0]) + + * src/qtgui/recoll_fr.ts: + *** empty log message *** + +2006-01-12 09:16 +0000 dockes (deb6607d43bf) + + * src/README: + *** empty log message *** + +2006-01-12 09:13 +0000 dockes (7635781b18c5) + + * src/qtgui/recollmain.ui.h, src/rcldb/rcldb.cpp: + handle removed docs in history + +2006-01-11 17:41 +0000 dockes (bd54a740def9) + + * src/qtgui/recollmain.ui.h: + *** empty log message *** + +2006-01-11 15:09 +0000 dockes (108917b10bf3) + + * src/qtgui/uiprefs.ui.h: new file. + * src/qtgui/uiprefs.ui.h: + *** empty log message *** + +2006-01-11 15:08 +0000 dockes (a03b6696412a) + + * src/doc/user/usermanual.sgml, src/index/Makefile, + src/qtgui/recoll_fr.ts, src/qtgui/recollmain.ui, + src/qtgui/recollmain.ui.h, src/query/docseq.h, + src/query/sortseq.cpp, src/query/sortseq.h, src/rcldb/rcldb.cpp, + src/rcldb/rcldb.h: + translation of result list title. Show query details when clicking + on header + +2006-01-10 17:46 +0000 dockes (d4cc3428e381) + + * src/recollinstall.in: + *** empty log message *** + +2006-01-10 14:53 +0000 dockes (c873b3133cdd) + + * packaging/rpm/recoll.spec: + *** empty log message *** + +2006-01-10 13:52 +0000 dockes (ab4934e066f9) + + * src/recollinstall.in: + *** empty log message *** + +2006-01-10 13:41 +0000 dockes (23d6e8ae7155) + + * src/recollinstall.in: + *** empty log message *** + +2006-01-10 13:32 +0000 dockes (526cfe52f2e1) + + * src/recollinstall.in: + *** empty log message *** + +2006-01-10 13:27 +0000 dockes (a2f47b62ca03) + + * src/recollinstall.in: + *** empty log message *** + +2006-01-10 13:16 +0000 dockes (72d6ccffea15) + + * packaging/FreeBSD/recoll/Makefile, + packaging/FreeBSD/recoll/distinfo, packaging/FreeBSD/recoll/pkg- + plist, src/recollinstall.in: + install man pages + +2006-01-10 12:58 +0000 dockes (3a7d0fd4ceb7) + + * src/Makefile, src/common/rclconfig.cpp: + warning + +2006-01-10 12:55 +0000 dockes (aaeb49f89a98) + + * src/rcldb/rcldb.cpp: + include unistd + +2006-01-10 12:06 +0000 dockes (9b804748017f) + + * src/INSTALL, src/README: + *** empty log message *** + +2006-01-10 11:07 +0000 dockes (01e4fe9772b0) + + * src/common/rclconfig.h, src/doc/user/usermanual.sgml, + src/index/recollindex.cpp, src/sampleconf/recoll.conf.in: + doc + got rid of unused defaultlanguage config param + +2006-01-10 09:10 +0000 dockes (34638d9bd009) + + * src/doc/man/recoll.conf.5: new file. + * src/doc/man/recoll.conf.5: + *** empty log message *** + +2006-01-10 08:14 +0000 dockes (a9b485ada811) + + * src/doc/man/recoll.1, src/doc/man/recollindex.1: new file. + * src/doc/man/recoll.1, src/doc/man/recollindex.1: + *** empty log message *** + +2006-01-09 16:53 +0000 dockes (29f37b7888d3) + + * src/excludefile, src/index/indexer.cpp, src/index/indexer.h, + src/index/recollindex.cpp, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, + src/utils/Makefile, src/utils/pathut.cpp, src/utils/pathut.h: + allow independant creation / deletion of stem dbs + +2006-01-06 13:55 +0000 dockes (8831260252d9) + + * src/rcldb/rcldb.cpp: + do a better test for a capitalized query term (no stem expand) + +2006-01-06 13:20 +0000 dockes (82e02042773f) + + * src/qtgui/uiprefs.ui: new file. + * src/qtgui/uiprefs.ui: + *** empty log message *** + +2006-01-06 13:19 +0000 dockes (29cdbe2390e4) + + * src/utils/CaseFolding.txt, src/utils/caseconvert.cpp, + src/utils/caseconvert.h, src/utils/gencasefold.sh: deleted file. + * src/lib/Makefile, src/rcldb/rcldb.cpp, src/unac/unac.c, + src/unac/unac.h, src/utils/CaseFolding.txt, src/utils/Makefile, + src/utils/caseconvert.cpp, src/utils/caseconvert.h, + src/utils/gencasefold.sh: + integrated case-folding into unac for better performance + +2006-01-06 13:18 +0000 dockes (7840fc0ec48b) + + * src/common/Makefile, src/common/unacpp.cpp, src/common/unacpp.h, + src/rcldb/rcldb.cpp: + integrated case-folding into unac for better performance + +2006-01-06 13:10 +0000 dockes (15e715082e40) + + * unac/CaseFolding-3.2.0.txt: new file. + * unac/CaseFolding-3.2.0.txt, unac/builder.in, unac/unac.c, + unac/unac.h: + implemented additional case-folding + +2006-01-06 13:08 +0000 dockes (f27aa43e32ef [UNAC_1_7_0]) + + * unac/.version, unac/AUTHORS, unac/COPYING, unac/ChangeLog, + unac/INSTALL, unac/Makefile.am, unac/Makefile.in, unac/NEWS, + unac/README, unac/THANKS, unac/UnicodeData-3.2.0.txt, + unac/acinclude.m4, unac/aclocal.m4, unac/builder.in, + unac/config.guess, unac/config.h.in, unac/config.sub, + unac/configure, unac/configure.ac, unac/depcomp, unac/getopt.c, + unac/getopt.h, unac/install-sh, unac/ltconfig, unac/ltmain.sh, + unac/missing, unac/mkinstalldirs, unac/stamp-h.in, unac/t_unac.in, + unac/unac.3, unac/unac.c, unac/unac.h, unac/unac.pc.in, + unac/unac.spec.in, unac/unaccent.1, unac/unaccent.c, + unac/unactest.c, unac/unactest1.c: new file. + * unac/.version, unac/AUTHORS, unac/COPYING, unac/ChangeLog, + unac/INSTALL, unac/Makefile.am, unac/Makefile.in, unac/NEWS, + unac/README, unac/THANKS, unac/UnicodeData-3.2.0.txt, + unac/acinclude.m4, unac/aclocal.m4, unac/builder.in, + unac/config.guess, unac/config.h.in, unac/config.sub, + unac/configure, unac/configure.ac, unac/depcomp, unac/getopt.c, + unac/getopt.h, unac/install-sh, unac/ltconfig, unac/ltmain.sh, + unac/missing, unac/mkinstalldirs, unac/stamp-h.in, unac/t_unac.in, + unac/unac.3, unac/unac.c, unac/unac.h, unac/unac.pc.in, + unac/unac.spec.in, unac/unaccent.1, unac/unaccent.c, + unac/unactest.c, unac/unactest1.c: + initial import + +2006-01-06 07:59 +0000 dockes (52c86ee701fd) + + * src/index/Makefile, src/qtgui/recoll.pro: + ensure relink for changed lib + +2006-01-05 16:37 +0000 dockes (a2ef019b6308) + + * src/common/unacpp.cpp, src/common/unacpp.h, src/lib/Makefile, + src/rcldb/rcldb.cpp, src/utils/Makefile: + Use proper unicode lowercasing + +2006-01-05 16:16 +0000 dockes (158267ddbcb6) + + * src/utils/CaseFolding.txt, src/utils/caseconvert.cpp, + src/utils/caseconvert.h, src/utils/gencasefold.sh: new file. + * src/utils/CaseFolding.txt, src/utils/caseconvert.cpp, + src/utils/caseconvert.h, src/utils/gencasefold.sh: + *** empty log message *** + +2006-01-05 10:27 +0000 dockes (f1af15efef34) + + * packaging/rpm/recoll.spec: new file. + * packaging/rpm/recoll.spec: + *** empty log message *** + +2006-01-05 10:24 +0000 dockes (55284d2ed66e) + + * src/Makefile, src/recollinstall.in: + install tweaks for rpm compatibility + +2006-01-04 11:33 +0000 dockes (236c587eb180) + + * src/VERSION, src/common/rclconfig.h, src/makesrcdist.sh, + src/qtgui/main.cpp, src/qtgui/recoll.h, src/qtgui/recoll_fr.ts, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h, + src/recollinstall.in, src/utils/smallut.cpp, src/utils/smallut.h: + add menu entry to start browser on html doc + +2006-01-04 11:16 +0000 dockes (2075c2a6d71e) + + * src/INSTALL, src/README: + *** empty log message *** + +2006-01-04 11:09 +0000 dockes (9a4cceb219aa) + + * src/doc/user/Makefile, src/doc/user/docbook.css, + src/doc/user/usermanual.sgml: new file. + * src/doc/user/Makefile, src/doc/user/docbook.css, + src/doc/user/usermanual.sgml: + *** empty log message *** + +2006-01-03 11:35 +0000 dockes (188ffc87b7d3) + + * src/INSTALL, src/README: + *** empty log message *** + +2005-12-16 10:08 +0000 dockes (789da9d2380c) + + * src/query/Makefile, src/query/xadump.cpp, src/unac/unac.c, + src/utils/mimeparse.cpp: + 64 bits fixes + +2005-12-16 10:06 +0000 dockes (cf18fa6d2a7b) + + * src/Makefile, src/mk/localdefs.in, src/qtgui/main.cpp, + src/qtgui/recoll.pro, src/recollinstall.in: + get prefix to really work + +2005-12-16 08:00 +0000 dockes (cca6b156e460) + + * src/excludefile: + dont copy localdefs + +2005-12-16 07:58 +0000 dockes (7b20df9408ce) + + * src/mk/localdefs: deleted file. + * src/mk/localdefs: + *** empty log message *** + +2005-12-15 14:39 +0000 dockes (959564d835fd) + + * src/qtgui/main.cpp, src/qtgui/recoll.h, src/qtgui/recollmain.ui, + src/qtgui/recollmain.ui.h, src/sampleconf/recoll.conf.in: + user prefs tweaks. Allow switching stemlang from ui + +2005-12-15 13:41 +0000 dockes (bf3c45bf931d) + + * src/qtgui/main.cpp: + *** empty log message *** + +2005-12-14 16:15 +0000 dockes (229d1902798e) + + * src/qtgui/main.cpp, src/qtgui/recoll.h, src/qtgui/recoll.pro, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h: + user interface preferences settable from ui + +2005-12-14 11:00 +0000 dockes (3e5f6f1c000d) + + * src/index/indexer.cpp, src/index/indexer.h, + src/index/recollindex.cpp, src/internfile/mh_html.cpp, + src/internfile/mh_text.cpp, src/qtgui/preview/preview.ui.h, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h, + src/query/Makefile: + allow indexing individual files. Fix pb with preview and charsets + (local defcharset ignored) + +2005-12-13 17:20 +0000 dockes (0895be2b8196) + + * src/qtgui/main.cpp, src/qtgui/recollmain.ui, + src/qtgui/recollmain.ui.h: + add allTerms checkbutton, save state in settings + +2005-12-13 17:20 +0000 dockes (b522d74e613c) + + * src/qtgui/advsearch.ui: + avoid activating random buttons when typing CR... + +2005-12-13 12:43 +0000 dockes (0448daf8c23e) + + * packaging/FreeBSD/recoll/Makefile, + packaging/FreeBSD/recoll/distinfo, packaging/FreeBSD/recoll/pkg- + descr, packaging/FreeBSD/recoll/pkg-plist, src/common/rclconfig.cpp, + src/doc/prog/Doxyfile, src/doc/prog/Makefile, + src/doc/prog/filters.txt, src/qtgui/main.cpp, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h, + src/rcldb/rcldb.cpp, src/utils/fstreewalk.cpp, src/utils/pathut.cpp, + src/utils/pathut.h, src/utils/smallut.cpp, src/utils/wipedir.cpp: + pgup/down in result list + +2005-12-08 08:44 +0000 dockes (ec006d171797) + + * src/common/Makefile, src/internfile/htmlparse.cpp, + src/internfile/htmlparse.h, src/internfile/internfile.cpp, + src/internfile/mh_html.cpp, src/internfile/myhtmlparse.cpp, + src/internfile/myhtmlparse.h: + process text from html files without a tag + +2005-12-07 15:41 +0000 dockes (a44bf0c6a081 [RECOLL-1_0_14]) + + * src/VERSION, src/internfile/mh_mail.cpp, + src/qtgui/preview/preview.ui.h, src/qtgui/recollmain.ui.h, + src/query/docseq.cpp, src/utils/utf8iter.h: + freebsd 4 port + +2005-12-06 15:59 +0000 dockes (812bc8f9232b) + + * packaging/FreeBSD/recoll/distinfo: + 0.13 really now + +2005-12-06 15:41 +0000 dockes (3a7b74624ff4) + + * src/recollinstall.in: + strip execs + +2005-12-06 15:20 +0000 dockes (fa8c19799a41) + + * packaging/FreeBSD/recoll/Makefile, + packaging/FreeBSD/recoll/distinfo, packaging/FreeBSD/recoll/pkg- + plist: + recoll-0.13 + +2005-12-06 15:10 +0000 dockes (b6df28b0d0e3) + + * src/README: + *** empty log message *** + +2005-12-06 15:10 +0000 dockes (e66dba4d628c [RECOLL-1_0_13]) + + * src/Makefile, src/VERSION, src/recollinstall.in: + no recollinstall install + +2005-12-06 12:55 +0000 dockes (cbfcc5627111) + + * packaging/FreeBSD/recoll/pkg-descr: + *** empty log message *** + +2005-12-06 10:30 +0000 dockes (d132e05e40ac) + + * packaging/FreeBSD/recoll/Makefile, + packaging/FreeBSD/recoll/distinfo, packaging/FreeBSD/recoll/pkg- + descr, packaging/FreeBSD/recoll/pkg-plist: + *** empty log message *** + +2005-12-06 09:40 +0000 dockes (f93d6a9b2336) + + * src/internfile/mh_html.cpp, src/internfile/myhtmlparse.cpp: + previous html fix didnt work + +2005-12-06 08:35 +0000 dockes (a3eec94f6861) + + * src/VERSION, src/internfile/internfile.cpp, + src/internfile/mh_html.cpp, src/internfile/myhtmlparse.cpp: + fix nasty html parse bug introduced in 1.0.9 + +2005-12-06 07:16 +0000 dockes (c1ccf42bf359 [RECOLL-1_0_12, RECOLL-1_0_11]) + + * src/qtgui/recollmain.ui: + move search/clear buttons to the left side + +2005-12-05 17:47 +0000 dockes (37952b251aee) + + * src/VERSION: + 1.0.11? + +2005-12-05 16:45 +0000 dockes (eecd7a311e8f) + + * src/qtgui/recollmain.ui.h: + no %F on solaris8 + +2005-12-05 16:13 +0000 dockes (cd9899dcdec1) + + * src/utils/copyfile.cpp: + *** empty log message *** + +2005-12-05 16:13 +0000 dockes (7e7e675138b2) + + * src/query/docseq.cpp, src/query/docseq.h: + avoid unneeded getDoc(0) + normalize private var names + +2005-12-05 15:00 +0000 dockes (6aa562bb0180) + + * src/INSTALL, src/Makefile, src/README, src/qtgui/main.cpp: + *** empty log message *** + +2005-12-05 14:09 +0000 dockes (d3954ac2c5ec) + + * src/utils/copyfile.cpp, src/utils/copyfile.h: new file. + * src/common/rclconfig.cpp, src/lib/Makefile, src/mk/localdefs, + src/mk/localdefs.in, src/utils/copyfile.cpp, src/utils/copyfile.h: + create personal config if it does not exist + +2005-12-05 12:02 +0000 dockes (6d38fb24e3b1) + + * src/qtgui/images/asearch.png, src/qtgui/images/history.png, + src/qtgui/images/nextpage.png, src/qtgui/images/prevpage.png, + src/qtgui/images/sortparms.png: new file. + * src/qtgui/images/asearch.png, src/qtgui/images/history.png, + src/qtgui/images/nextpage.png, src/qtgui/images/prevpage.png, + src/qtgui/images/sortparms.png, src/qtgui/recollmain.ui, + src/qtgui/recollmain.ui.h, src/qtgui/sort.ui.h, + src/query/docseq.cpp, src/query/sortseq.cpp: + use toolbar buttons for prev/next + misc cleanups + +2005-12-05 10:39 +0000 dockes (55a212b17808) + + * src/rcldb/rcldb.cpp: + also index file path as terms + +2005-12-04 17:10 +0000 dockes (a4005adeece9) + + * src/qtgui/recoll.pro: + more + +2005-12-04 17:10 +0000 dockes (15ce414ea700) + + * src/common/textsplit.cpp: + split stdin + +2005-12-04 14:58 +0000 dockes (369372321681) + + * src/qtgui/recollmain.ui: + *** empty log message *** + +2005-12-02 16:18 +0000 dockes (b8ea8500fe26) + + * src/qtgui/preview/preview.ui.h, src/qtgui/recollmain.ui, + src/qtgui/recollmain.ui.h, src/qtgui/sort.ui, src/qtgui/sort.ui.h, + src/query/sortseq.cpp, src/query/sortseq.h, src/rcldb/rcldb.h: + 1st version of sorting interface. Needs polishing + +2005-12-02 16:17 +0000 dockes (fba2b55c4ba7) + + * src/filters/rclpdf: + new version of pdftotext broke us + +2005-12-02 16:17 +0000 dockes (a31234c89a73) + + * src/common/rclconfig.cpp, src/recollinstall.in, + src/sampleconf/recoll.conf.in: + install filters to /usr/local + +2005-12-02 14:18 +0000 dockes (7b585689ce4a) + + * src/query/sortseq.cpp: + *** empty log message *** + +2005-12-01 16:23 +0000 dockes (c7393c3bc8b5) + + * src/qtgui/sort.ui, src/qtgui/sort.ui.h, src/query/sortseq.cpp, + src/query/sortseq.h: new file. + * src/lib/Makefile, src/qtgui/recoll.pro, src/qtgui/recollmain.ui.h, + src/qtgui/sort.ui, src/qtgui/sort.ui.h, src/query/sortseq.cpp, + src/query/sortseq.h: + sorting 1st steps + +2005-11-30 18:37 +0000 dockes (ddba9ec4f65f) + + * src/configure: + make recollinstall executable + +2005-11-30 18:28 +0000 dockes (35f236d5ad1f) + + * src/configure.ac: + make recollinstall executable + +2005-11-30 18:26 +0000 dockes (580ae261b629) + + * src/sampleconf/recoll.conf.in: + keep log level at 4 for index feedback + +2005-11-30 18:20 +0000 dockes (2fb51c4552fb) + + * src/sampleconf/recoll.conf.in: + decrease log level + +2005-11-30 18:10 +0000 dockes (0ad46d9bcaa5) + + * src/query/history.cpp: + *** empty log message *** + +2005-11-30 18:05 +0000 dockes (653e0a145731) + + * src/qtgui/form1.ui.h: deleted file. + * src/excludefile, src/qtgui/form1.ui.h: + *** empty log message *** + +2005-11-30 18:04 +0000 dockes (dfff4ecb1918) + + * src/qtgui/form1.ui: deleted file. + * src/excludefile, src/qtgui/form1.ui: + *** empty log message *** + +2005-11-30 18:01 +0000 dockes (a63a8d7c49f3) + + * src/excludefile: + *** empty log message *** + +2005-11-30 17:58 +0000 dockes (7676c325de57) + + * src/excludefile: + *** empty log message *** + +2005-11-30 17:58 +0000 dockes (6ddc4c210c87) + + * src/utils/transcode.cpp: + try harder to convert bad encodings + +2005-11-30 10:36 +0000 dockes (7e0aab848f91 [RECOLL-1_0_10]) + + * src/README, src/qtgui/recollmain.ui: + *** empty log message *** + +2005-11-30 10:35 +0000 dockes (1f97b79ea735) + + * src/VERSION: + v1.0.10 + +2005-11-30 10:25 +0000 dockes (3c2bcb1ec527) + + * src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h: + disable/enable buttons dep. on state + +2005-11-30 09:46 +0000 dockes (a75b091acbae) + + * src/qtgui/advsearch.ui, src/qtgui/advsearch.ui.h, + src/sampleconf/mimeconf: + *** empty log message *** + +2005-11-30 09:46 +0000 dockes (30a527e5014f) + + * src/index/indexer.cpp, src/index/indexer.h, + src/index/recollindex.cpp, src/rcldb/rcldb.cpp: + add option to rezero db before index + +2005-11-28 15:31 +0000 dockes (d9e31422258b) + + * src/qtgui/main.cpp, src/qtgui/recoll.h, src/qtgui/recollmain.ui.h, + src/query/docseq.cpp, src/query/docseq.h, src/query/history.cpp, + src/query/history.h: + store and display dates in history. Needs more work + +2005-11-25 14:36 +0000 dockes (18bc54d4e426) + + * src/qtgui/recollmain.ui.h, src/query/history.cpp, + src/utils/conftree.cpp, src/utils/smallut.cpp, src/utils/smallut.h: + show history newest first + prune duplicate entries + +2005-11-25 10:26 +0000 dockes (3ad346d3f29e) + + * src/qtgui/main.cpp, src/qtgui/recoll_fr.ts, src/recollinstall.in: + install translations to share/recoll/translations + +2005-11-25 10:02 +0000 dockes (6ed5669a337b) + + * src/query/docseq.cpp, src/query/docseq.h: new file. + * src/lib/Makefile, src/qtgui/main.cpp, src/qtgui/recoll.h, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h, + src/query/docseq.cpp, src/query/docseq.h: + 1st version of doc history + +2005-11-25 09:14 +0000 dockes (69bab5c09012) + + * src/index/indexer.cpp, src/index/mimetype.cpp, + src/sampleconf/mimeconf: + *** empty log message *** + +2005-11-25 09:13 +0000 dockes (55e99bcc0a46) + + * src/common/rclconfig.cpp, src/common/rclconfig.h: + get all mime list from mimeconf, not mimemap + +2005-11-25 09:12 +0000 dockes (87febfb9c3be) + + * src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + added method to retrieve doc from path/ipath + +2005-11-25 08:53 +0000 dockes (756168516697) + + * src/Makefile, src/internfile/mimehandler.cpp, src/rcldb/rcldb.h: + *** empty log message *** + +2005-11-25 08:50 +0000 dockes (6fda25d19678) + + * src/utils/conftree.cpp, src/utils/conftree.h, src/utils/smallut.cpp, + src/utils/smallut.h: + add methods useful for history. move stuff to smallut + +2005-11-25 08:49 +0000 dockes (bd6b75c162a5) + + * src/utils/base64.cpp: + Strip extra null byte that we were appending + +2005-11-24 18:21 +0000 dockes (ba604719481c) + + * src/query/history.cpp, src/query/history.h: new file. + * src/query/Makefile, src/query/history.cpp, src/query/history.h, + src/query/qtry.cpp, src/query/xadump.cpp: + *** empty log message *** + +2005-11-24 07:16 +0000 dockes (1fc7382994a5) + + * src/recollinstall.in, src/sampleconf/recoll.conf.in: new file. + * src/bincimapmime/address.cc, src/bincimapmime/convert.cc, + src/bincimapmime/iodevice.cc, src/bincimapmime/iofactory.cc, + src/bincimapmime/mime-getpart.cc, src/bincimapmime/mime- + parsefull.cc, src/bincimapmime/mime-parseonlyheader.cc, + src/bincimapmime/mime-printbody.cc, src/bincimapmime/mime- + printdoc.cc, src/bincimapmime/mime-printheader.cc, src/bincimapmime + /mime-utils.h, src/bincimapmime/mime.cc, src/bincimapmime/trbinc.cc, + src/common/rclconfig.cpp, src/common/textsplit.cpp, + src/common/unacpp.cpp, src/configure, src/configure.ac, + src/index/csguess.cpp, src/index/indexer.cpp, + src/index/mimetype.cpp, src/internfile/htmlparse.cpp, + src/internfile/htmlparse.h, src/internfile/internfile.cpp, + src/internfile/mh_exec.cpp, src/internfile/mh_html.cpp, + src/internfile/mh_mail.cpp, src/internfile/mh_text.cpp, + src/internfile/mimehandler.cpp, src/makestaticdist.sh, + src/qtgui/advsearch.ui.h, src/qtgui/main.cpp, + src/qtgui/plaintorich.cpp, src/qtgui/preview/preview.ui.h, + src/qtgui/preview/pvmain.cpp, src/qtgui/recollmain.ui.h, + src/query/qtry.cpp, src/query/qxtry.cpp, src/query/xadump.cpp, + src/rcldb/pathhash.cpp, src/rcldb/rcldb.cpp, src/recollinstall.in, + src/sampleconf/recoll.conf.in, src/utils/base64.cpp, + src/utils/execmd.cpp, src/utils/fstreewalk.cpp, + src/utils/idfile.cpp, src/utils/mimeparse.cpp, src/utils/pathut.cpp, + src/utils/readfile.cpp, src/utils/smallut.cpp, src/utils/smallut.h, + src/utils/transcode.cpp, src/utils/utf8iter.cpp, + src/utils/wipedir.cpp: + *** empty log message *** + +2005-11-23 13:12 +0000 dockes (a8ff464ec720) + + * src/recollinstall, src/sampleconf/recoll.conf: deleted file. + * src/recollinstall, src/sampleconf/recoll.conf: + *** empty log message *** + +2005-11-23 11:11 +0000 dockes (4ba2ad248537) + + * src/utils/execmd.cpp: + *** empty log message *** + +2005-11-23 11:00 +0000 dockes (66cac25635e1) + + * src/INSTALL, src/README, src/rcldb/rcldb.cpp: + *** empty log message *** + +2005-11-23 10:57 +0000 dockes (45f106d04652 [RECOLL-1_0_9]) + + * src/Makefile: + use prefix instead of PREFIX + +2005-11-23 10:19 +0000 dockes (e7a6edd38c56) + + * src/Makefile, src/VERSION, src/filters/rclrtf, src/index/Makefile, + src/index/mimetype.cpp, src/utils/debuglog.cpp, + src/utils/mimeparse.cpp: + *** empty log message *** + +2005-11-23 10:18 +0000 dockes (4e530d6556d2) + + * src/qtgui/preview/preview.ui, src/qtgui/preview/preview.ui.h, + src/qtgui/recollmain.ui.h: + document already shown test was wrong, wouldnt show more docs from + same file + +2005-11-23 10:17 +0000 dockes (9944ac86338d) + + * src/utils/execmd.cpp: + need to do _exit not exit after exec failure + +2005-11-23 10:16 +0000 dockes (085c66533884) + + * src/internfile/mh_html.cpp, src/utils/smallut.cpp, + src/utils/smallut.h: + improve charset name comparison + +2005-11-21 17:18 +0000 dockes (9c398b7ee69e [RECOLL-1_0_8]) + + * src/configure, src/configure.ac, src/index/mimetype.cpp, + src/internfile/myhtmlparse.cpp, src/mk/Linux, src/mk/SunOS, + src/recollinstall, src/utils/execmd.cpp: + glitches in linux/solaris compil. + install + +2005-11-21 16:16 +0000 dockes (7594b3dd0dc5) + + * src/README: + *** empty log message *** + +2005-11-21 16:06 +0000 dockes (8a82b3826a4a) + + * src/VERSION: + *** empty log message *** + +2005-11-21 16:05 +0000 dockes (9cc42706006d) + + * src/filters/rclrtf: new file. + * src/filters/rclrtf, src/sampleconf/mimeconf, src/sampleconf/mimemap, + src/sampleconf/recoll.conf: + add support for rtf + +2005-11-21 16:04 +0000 dockes (8169ca3ae210) + + * src/Makefile, src/makestaticdist.sh, src/recollinstall: + install pics and samples to $PREFIX/local/recoll + +2005-11-21 14:32 +0000 dockes (f0aaac1df843) + + * src/filters/rclgaim: + just needs awk + +2005-11-21 14:31 +0000 dockes (88649af9a0ac [RECOLL-1_0_7]) + + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/index/indexer.cpp, src/index/mimetype.cpp, src/index/mimetype.h, + src/internfile/internfile.cpp, src/internfile/mh_html.cpp, + src/internfile/mimehandler.cpp, src/internfile/mimehandler.h, + src/internfile/myhtmlparse.cpp, src/internfile/myhtmlparse.h, + src/lib/Makefile, src/qtgui/recollmain.ui.h, + src/sampleconf/mimeconf, src/sampleconf/mimemap, + src/sampleconf/recoll.conf: + mimemap processing recentered in rclconfig. Handle directory-local + suffix to mime-type definitions. Implement gaim log handling + +2005-11-18 17:03 +0000 dockes (ae7d483398d2) + + * src/filters/rclgaim: new file. + * src/filters/rclgaim: + *** empty log message *** + +2005-11-18 15:19 +0000 dockes (9c8cb27e5749) + + * src/internfile/internfile.cpp, src/internfile/internfile.h, + src/internfile/mh_exec.cpp, src/internfile/mimehandler.h, + src/utils/execmd.h: + misc cleanup + tell filters if working for preview or index + +2005-11-18 13:52 +0000 dockes (9d83fd6a7d8c) + + * src/utils/execmd.cpp, src/utils/execmd.h: + add putenv interface + +2005-11-18 13:23 +0000 dockes (c3d0cfc77a9f) + + * src/internfile/mh_exec.cpp, src/internfile/mh_exec.h, + src/internfile/mh_text.cpp, src/internfile/mh_text.h: new file. + * src/internfile/mh_exec.cpp, src/internfile/mh_exec.h, + src/internfile/mh_html.cpp, src/internfile/mh_html.h, + src/internfile/mh_mail.cpp, src/internfile/mh_mail.h, + src/internfile/mh_text.cpp, src/internfile/mh_text.h, + src/internfile/mimehandler.cpp, src/lib/Makefile: + restructuring on mimehandler files + +2005-11-17 17:39 +0000 dockes (e530dcacaf42) + + * src/VERSION: + *** empty log message *** + +2005-11-17 17:36 +0000 dockes (64437283f61f) + + * src/rcldb/rcldb.cpp: + use OP_FILTER instead of OP_AND to filter on file types + +2005-11-17 12:47 +0000 dockes (e9efe66d79c0) + + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/qtgui/main.cpp, src/qtgui/recollmain.ui, + src/sampleconf/recoll.conf, src/utils/conftree.cpp, + src/utils/conftree.h: + allow tilde expansion for section names in config file + +2005-11-16 18:31 +0000 dockes (e319e6fa047d) + + * src/qtgui/recollmain.ui.h: + *** empty log message *** + +2005-11-16 17:30 +0000 dockes (70dbf29f84e0) + + * src/excludefile: + *** empty log message *** + +2005-11-16 17:29 +0000 dockes (4c957598f6fd [RECOLL-1_0_6]) + + * src/mk/localdefs, src/rcldb/rcldb.cpp: + use and_maybe in adv search + +2005-11-16 15:07 +0000 dockes (a19870cd6761) + + * src/internfile/mimehandler.cpp, src/internfile/mimehandler.h, + src/qtgui/main.cpp, src/qtgui/preview/preview.ui, + src/qtgui/preview/preview.ui.h, src/qtgui/recoll.h, + src/qtgui/recollmain.ui.h, src/sampleconf/mimeconf, + src/sampleconf/recoll.conf: + Optionnally show mime type icons in result list + +2005-11-16 15:05 +0000 dockes (6464421540ca) + + * src/qtgui/mtpics/README, src/qtgui/mtpics/document.png, + src/qtgui/mtpics/drawing.png, src/qtgui/mtpics/html.png, + src/qtgui/mtpics/message.png, src/qtgui/mtpics/mozilla_doc.png, + src/qtgui/mtpics/pdf.png, src/qtgui/mtpics/postscript.png, + src/qtgui/mtpics/presentation.png, src/qtgui/mtpics/soffice.png, + src/qtgui/mtpics/spreadsheet.png, src/qtgui/mtpics/txt.png, + src/qtgui/mtpics/wordprocessing.png: new file. + * src/qtgui/mtpics/README, src/qtgui/mtpics/document.png, + src/qtgui/mtpics/drawing.png, src/qtgui/mtpics/html.png, + src/qtgui/mtpics/message.png, src/qtgui/mtpics/mozilla_doc.png, + src/qtgui/mtpics/pdf.png, src/qtgui/mtpics/postscript.png, + src/qtgui/mtpics/presentation.png, src/qtgui/mtpics/soffice.png, + src/qtgui/mtpics/spreadsheet.png, src/qtgui/mtpics/txt.png, + src/qtgui/mtpics/wordprocessing.png: + *** empty log message *** + +2005-11-16 11:22 +0000 dockes (f29236269564) + + * src/qtgui/plaintorich.cpp, src/qtgui/preview/preview.ui, + src/qtgui/preview/preview.ui.h, src/qtgui/recollmain.ui.h: + Implemented better feedback during preview loading + +2005-11-16 08:17 +0000 dockes (44b8c2233623) + + * src/Makefile, src/VERSION, src/qtgui/main.cpp, + src/qtgui/preview/preview.ui, src/qtgui/preview/preview.ui.h, + src/qtgui/recoll_fr.ts, src/qtgui/recollmain.ui, + src/qtgui/recollmain.ui.h: + about dialog, remember previous mainwin geometry + +2005-11-14 09:59 +0000 dockes (f196f00bd521) + + * src/internfile/internfile.cpp, src/internfile/internfile.h, + src/qtgui/recollmain.ui.h: + fix rare case where indexed file could not be previewed because of + change in file identification config param + +2005-11-14 09:57 +0000 dockes (5610887cf602) + + * src/index/indexer.cpp: + comment + +2005-11-14 09:56 +0000 dockes (b6c7dd9504b9) + + * src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + stem expansion was never done for adv search + +2005-11-12 14:36 +0000 dockes (87b02b667eef) + + * src/README, src/mk/Linux: + *** empty log message *** + +2005-11-12 14:33 +0000 dockes (5743f1558790) + + * src/mk/localdefs.in: + typo + +2005-11-12 14:31 +0000 dockes (0dd4948b5c2f) + + * src/Makefile, src/configure, src/configure.ac: + more config tweaks + +2005-11-12 14:24 +0000 dockes (6d47a227c1b2) + + * src/utils/conftree.cpp, src/utils/conftree.h, + src/utils/debuglog.cpp, src/utils/debuglog.h: new file. + * src/utils/conftree.cpp, src/utils/conftree.h, + src/utils/debuglog.cpp, src/utils/debuglog.h: + local versions of utility files + +2005-11-12 14:23 +0000 dockes (c77e47fdc6fb) + + * src/Makefile: + *** empty log message *** + +2005-11-12 14:19 +0000 dockes (49499e32e341) + + * src/configure.ac, src/mk/localdefs, src/mk/localdefs.in: new file. + * src/Makefile, src/configure, src/configure.ac, src/mk/Darwin, + src/mk/FreeBSD, src/mk/Linux, src/mk/SunOS, src/mk/commondefs, + src/mk/localdefs, src/mk/localdefs.in: + introduced some autoconf + +2005-11-12 11:26 +0000 dockes (b13e733c2796) + + * src/Makefile, src/bincimapmime/Makefile, src/common/Makefile, + src/index/Makefile, src/lib/Makefile, src/mk/commondefs, + src/qtgui/recoll.pro, src/query/Makefile, src/sampleconf/mimemap, + src/utils/Makefile: + cleaned-up makes + +2005-11-10 08:47 +0000 dockes (06490e6e7dc1) + + * src/index/Makefile, src/index/indexer.cpp, src/index/indexer.h, + src/index/mimetype.cpp, src/index/mimetype.h, + src/internfile/internfile.cpp, src/sampleconf/recoll.conf: + add config parameter to decide if we use the file command as a final + step of mimetype identification + +2005-11-10 08:46 +0000 dockes (d9a64999d22d) + + * src/sampleconf/mimeconf, src/sampleconf/mimemap: + add .Z compressed files + +2005-11-09 21:40 +0000 dockes (1dd753a59d1c) + + * src/sampleconf/mimemap: + add .odt -> openoffice. Add .php and others to ignored types + +2005-11-09 21:39 +0000 dockes (a8b54cf24c83) + + * src/common/rclinit.cpp: + test cleanup and sigcleanup not zero for small uts that dont need + this + +2005-11-08 21:02 +0000 dockes (344fc56239c8) + + * src/internfile/internfile.cpp, src/internfile/mh_html.cpp, + src/internfile/mh_html.h, src/internfile/mh_mail.cpp, + src/internfile/mh_mail.h, src/internfile/mimehandler.cpp, + src/internfile/mimehandler.h: + renamed MimeHandler::worker to mkDoc + comments for doxygen + +2005-11-08 21:02 +0000 dockes (1ac76bfea47d) + + * packaging/FreeBSD/recoll/Makefile, + packaging/FreeBSD/recoll/distinfo, packaging/FreeBSD/recoll/pkg- + descr, packaging/FreeBSD/recoll/pkg-plist, src/doc/prog/filters.txt, + src/doc/prog/top.txt: new file. + * packaging/FreeBSD/recoll/Makefile, + packaging/FreeBSD/recoll/distinfo, packaging/FreeBSD/recoll/pkg- + descr, packaging/FreeBSD/recoll/pkg-plist, src/doc/prog/Doxyfile, + src/doc/prog/Makefile, src/doc/prog/filters.txt, + src/doc/prog/top.txt: + *** empty log message *** + +2005-11-08 21:00 +0000 dockes (54bcdfd186f1) + + * src/doc/prog/Doxyfile, src/doc/prog/Makefile: new file. + * src/doc/prog/Doxyfile, src/doc/prog/Makefile: + *** empty log message *** + +2005-11-07 15:52 +0000 dockes (a0bde5fbc55b [RECOLL-1_0_5]) + + * src/INSTALL, src/Makefile, src/README, src/excludefile, + src/makesrcdist.sh, src/makestaticdist.sh: + *** empty log message *** + +2005-11-07 15:37 +0000 dockes (c6a8f5375981) + + * src/README: + *** empty log message *** + +2005-11-07 15:36 +0000 dockes (5ca00f4db306) + + * src/INSTALL, src/README: + *** empty log message *** + +2005-11-07 15:11 +0000 dockes (8ae633ae4194) + + * src/VERSION: + *** empty log message *** + +2005-11-07 15:06 +0000 dockes (6be191f54656) + + * src/Makefile, src/mk/commondefs, src/recollinstall: + fixed installation script + +2005-11-07 11:21 +0000 dockes (e48ddf065716) + + * src/VERSION: + *** empty log message *** + +2005-11-06 15:07 +0000 dockes (fef6e5d66e29 [RECOLL-1_05]) + + * src/qtgui/idxthread.cpp, src/qtgui/main.cpp, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h, + src/rcldb/rcldb.cpp, src/utils/base64.cpp: + slightly better status printing while loading preview + +2005-11-06 11:16 +0000 dockes (0fa0ac2c3e5b) + + * src/rcldb/pathhash.cpp, src/rcldb/pathhash.h, src/utils/base64.cpp, + src/utils/base64.h, src/utils/md5.cpp, src/utils/md5.h: new file. + * src/lib/Makefile, src/rcldb/pathhash.cpp, src/rcldb/pathhash.h, + src/rcldb/rcldb.cpp, src/utils/base64.cpp, src/utils/base64.h, + src/utils/md5.cpp, src/utils/md5.h, src/utils/mimeparse.cpp: + limit path therm length through hashing + +2005-11-05 15:30 +0000 dockes (eea6ede9ce9a) + + * src/INSTALL, src/README, src/VERSION: + *** empty log message *** + +2005-11-05 15:29 +0000 dockes (c99e6c9d50df) + + * src/rcldb/rcldb.cpp: + debug message + +2005-11-05 15:17 +0000 dockes (a3463f8f8c63) + + * src/mk/commondefs: + unused def + +2005-11-05 14:40 +0000 dockes (47c04f4507d0 [RECOLL-1_04]) + + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/common/rclinit.cpp, src/common/rclinit.h, src/index/indexer.cpp, + src/index/recollindex.cpp, src/internfile/mh_mail.cpp, src/mk/SunOS, + src/qtgui/main.cpp, src/qtgui/preview/preview.ui, + src/qtgui/preview/preview.ui.h, src/qtgui/recollmain.ui.h, + src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + separate file and document dates (mainly for email folders). Better + check configuration at startup + +2005-11-02 12:36 +0000 dockes (e0d52b43cd5c) + + * src/lib/Makefile, src/mk/commondefs: + add def for RANLIB + +2005-11-01 10:55 +0000 dockes (2b858432af00) + + * src/mk/Darwin: new file. + * src/mk/Darwin: + *** empty log message *** + +2005-10-31 08:59 +0000 dockes (65fd4f89de80) + + * src/internfile/mh_mail.cpp, src/utils/mimeparse.cpp: + fixed base64 decoding of email parts: str[x] = ch does not adjust + length! and be more lenient with encoding errors + +2005-10-22 13:10 +0000 dockes (9a5b142d31f3) + + * src/README: + *** empty log message *** + +2005-10-22 13:10 +0000 dockes (d5ccf5480db1 [RECOLL-1_03]) + + * src/VERSION, src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h: + update status line when starting lengthy operations + +2005-10-22 07:29 +0000 dockes (df8ad947685b) + + * src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h: + get clicks in res list to behave: drag->no click. dblclick->no + single click + +2005-10-22 05:35 +0000 dockes (c566d157cfd3) + + * src/qtgui/recoll_fr.ts: new file. + * src/qtgui/main.cpp, src/qtgui/recoll.pro, src/qtgui/recoll_fr.ts: + i8n + +2005-10-21 15:45 +0000 dockes (34b797e01868) + + * src/mk/commondefs: new file. + * src/mk/commondefs: + *** empty log message *** + +2005-10-21 15:41 +0000 dockes (08f9ad818cb3 [RECOLL-1_02]) + + * src/makestaticdist.sh, src/recollinstall: + more verbosity in install + +2005-10-21 15:22 +0000 dockes (aa642ead5a8e) + + * src/INSTALL: + *** empty log message *** + +2005-10-21 15:11 +0000 dockes (1c74d6d926b7) + + * src/INSTALL: + *** empty log message *** + +2005-10-21 14:14 +0000 dockes (662fe9bab837) + + * src/excludefile: + *** empty log message *** + +2005-10-21 14:11 +0000 dockes (1856de4bf3f6) + + * src/makestaticdist.sh: new file. + * src/Makefile, src/makestaticdist.sh: + static bin dists + +2005-10-21 13:34 +0000 dockes (0c861c8b6029) + + * src/INSTALL, src/README: + *** empty log message *** + +2005-10-21 13:33 +0000 dockes (7256b6e4e2ff) + + * src/Makefile, src/excludefile, src/index/Makefile, + src/makesrcdist.sh, src/mk/FreeBSD, src/mk/Linux, src/mk/SunOS, + src/qtgui/recoll.pro: + rearrange make includes+prepare bin static distrib + +2005-10-21 12:15 +0000 dockes (a9773a1a4715) + + * src/unac/unac.c: + fix args to iconv to get rid of warnings + +2005-10-21 08:14 +0000 dockes (f50d252ec29b) + + * src/Makefile, src/VERSION, src/excludefile, src/mk/FreeBSD, + src/mk/Linux, src/qtgui/preview/pvmain.cpp, src/utils/smallut.cpp: + more small build tweaks. use mkdtemp if available + +2005-10-20 16:20 +0000 dockes (b5fe53035720 [RECOLL-1_01]) + + * src/qtgui/advsearch.ui, src/qtgui/preview/preview.ui, + src/qtgui/preview/preview.ui.h: + CR->search in advanced dialog. ^W close tab in preview + +2005-10-20 15:42 +0000 dockes (a9e9ecfba2d2) + + * src/filters/rcldoc, src/filters/rclpdf, src/filters/rclps, + src/filters/rclsoff, src/mk/SunOS: + small fixes for SunOS + +2005-10-20 12:17 +0000 dockes (bc70bba2564c) + + * src/README, src/makesrcdist.sh: + *** empty log message *** + +2005-10-20 12:17 +0000 dockes (4e8de2aee40d) + + * src/INSTALL, src/README: + *** empty log message *** + +2005-10-20 12:17 +0000 dockes (39b33b1f4e36) + + * src/INSTALL, src/README: + *** empty log message *** + +2005-10-20 12:16 +0000 dockes (45a324ad4baa) + + * src/INSTALL, src/README: + *** empty log message *** + +2005-10-20 12:16 +0000 dockes (73b1f99aef21) + + * src/INSTALL, src/README: + *** empty log message *** + +2005-10-20 12:12 +0000 dockes (b3a8d1bceb51) + + * src/INSTALL, src/README: + *** empty log message *** + +2005-10-20 11:38 +0000 dockes (5966cd48c62c) + + * src/sampleconf/recoll.conf: + defaultlanguage->english + +2005-10-20 11:33 +0000 dockes (4ba3bd42973e) + + * src/recollinstall: new file. + * src/bincimapmime/Makefile, src/filters/rcldoc, src/filters/rclpdf, + src/filters/rclps, src/filters/rclsoff, + src/qtgui/preview/preview.ui.h, src/qtgui/recollmain.ui.h, + src/rcldb/rcldb.cpp, src/recollinstall: + small installation tweaks + +2005-10-20 08:34 +0000 dockes (8ce6cff4ca9c) + + * src/Makefile, src/VERSION, src/bincimapmime/Makefile, + src/excludefile, src/lib/Makefile, src/mk/FreeBSD, + src/qtgui/plaintorich.cpp, src/qtgui/preview/preview.ui.h, + src/qtgui/recoll.pro: + small warning and compilation adjustments + +2005-10-20 07:51 +0000 dockes (b6f58b26d846 [RECOLL-1_0]) + + * src/configure: new file. + * src/README, src/configure: + *** empty log message *** + +2005-10-19 16:29 +0000 dockes (46a91fdb7a8e) + + * src/INSTALL, src/README: + *** empty log message *** + +2005-10-19 16:27 +0000 dockes (92e16891b11d) + + * src/INSTALL: + *** empty log message *** + +2005-10-19 16:09 +0000 dockes (0dda1bd16921) + + * src/README, src/VERSION: + *** empty log message *** + +2005-10-19 15:22 +0000 dockes (88cadb2e703e) + + * src/qtgui/recollmain.ui: + *** empty log message *** + +2005-10-19 14:14 +0000 dockes (61cd7c267dec) + + * src/common/rclconfig.cpp, src/qtgui/advsearch.ui.h, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h, + src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, src/utils/idfile.cpp, + src/utils/idfile.h: + implemented filtering on file subtree + +2005-10-19 10:21 +0000 dockes (598116a30bfb) + + * src/common/textsplit.cpp, src/common/textsplit.h, + src/filters/rcldoc, src/filters/rclpdf, src/filters/rclps, + src/filters/rclsoff, src/qtgui/advsearch.ui, + src/qtgui/advsearch.ui.h, src/qtgui/main.cpp, + src/qtgui/plaintorich.cpp, src/qtgui/recoll.h, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h, + src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + most of adv search working. Still need subtree/filename filters + +2005-10-17 13:36 +0000 dockes (6ce40ecb81f6) + + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/qtgui/advsearch.ui, src/qtgui/advsearch.ui.h, + src/qtgui/preview/preview.ui, src/qtgui/preview/preview.ui.h, + src/qtgui/preview/pvmain.cpp, src/qtgui/recoll.h, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h, + src/utils/Makefile: + implemented dialog/glue for advanced search + +2005-10-15 12:18 +0000 dockes (b57626e188f9) + + * src/index/indexer.cpp, src/internfile/mh_mail.cpp, + src/utils/mimeparse.cpp, src/utils/mimeparse.h: + decode encoded mail headers, plus use message date instead of file + mtime + +2005-10-10 13:25 +0000 dockes (3797f12a0832) + + * src/common/textsplit.h: + comments + +2005-10-10 13:24 +0000 dockes (a339c123dcb9) + + * src/qtgui/plaintorich.cpp, src/qtgui/plaintorich.h, + src/qtgui/preview/preview.ui, src/qtgui/preview/preview.ui.h, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h: + ckpt + +2005-10-10 12:29 +0000 dockes (e88bad1f996b) + + * src/qtgui/advsearch.ui, src/qtgui/main.cpp, + src/qtgui/preview/preview.ui, src/qtgui/preview/preview.ui.h, + src/qtgui/preview/pvmain.cpp, src/qtgui/recollmain.ui, + src/qtgui/recollmain.ui.h: + ckpt + +2005-09-27 06:20 +0000 dockes (8b147a42b660) + + * src/qtgui/preview/preview.pro, src/qtgui/preview/preview.ui, + src/qtgui/preview/preview.ui.h, src/qtgui/preview/pvmain.cpp: new + file. + * src/qtgui/preview/preview.pro, src/qtgui/preview/preview.ui, + src/qtgui/preview/preview.ui.h, src/qtgui/preview/pvmain.cpp: + *** empty log message *** + +2005-09-26 16:17 +0000 dockes (783900fcd3e7) + + * src/qtgui/recoll.pro: + *** empty log message *** + +2005-09-22 16:22 +0000 dockes (1e6ccf2c2fdc) + + * src/qtgui/plaintorich.cpp, src/qtgui/plaintorich.h: new file. + * src/qtgui/plaintorich.cpp, src/qtgui/plaintorich.h: + *** empty log message *** + +2005-09-22 15:00 +0000 dockes (db2d876f2a2b) + + * src/qtgui/recollmain.ui.h: + *** empty log message *** + +2005-09-22 14:09 +0000 dockes (4455c0eeffd4) + + * src/common/textsplit.cpp: + adjust start/end of word when trimming + +2005-09-22 11:10 +0000 dockes (3b9d4fc5b507) + + * src/common/textsplit.cpp: + fix problems with word followed by . + +2005-05-18 08:42 +0000 dockes (03bc1f1290cd) + + * src/qtgui/recoll.pro: + *** empty log message *** + +2005-05-17 11:46 +0000 dockes (cff6e901fde8) + + * src/qtgui/advsearch.ui, src/qtgui/advsearch.ui.h: new file. + * src/qtgui/advsearch.ui, src/qtgui/advsearch.ui.h, + src/qtgui/recoll.pro: + *** empty log message *** + +2005-05-17 06:30 +0000 dockes (9a44703bd049 [RECOLL-0_7]) + + * src/README: + *** empty log message *** + +2005-05-17 06:30 +0000 dockes (d2265051082d) + + * src/qtgui/recollmain.ui.h: + escape < to < in rich text + +2005-04-08 07:32 +0000 dockes (3917ab1cc937) + + * src/README: + *** empty log message *** + +2005-04-08 07:32 +0000 dockes (2f2439c9590a) + + * src/mk/SunOS: new file. + * src/Makefile, src/mk/SunOS, src/utils/Makefile: + works on solaris8 + +2005-04-07 09:05 +0000 dockes (0264f1839b92) + + * src/utils/idfile.cpp, src/utils/idfile.h: new file. + * src/index/mimetype.cpp, src/lib/Makefile, src/sampleconf/mimemap, + src/utils/Makefile, src/utils/idfile.cpp, src/utils/idfile.h: + replaced /usr/bin/file exec with internal code + +2005-04-06 10:20 +0000 dockes (ba9162debe5a) + + * src/bincimapmime/AUTHORS, src/bincimapmime/COPYING: new file. + * src/INSTALL, src/VERSION, src/bincimapmime/AUTHORS, + src/bincimapmime/COPYING, src/bincimapmime/mime-inputsource.h, + src/index/indexer.cpp, src/internfile/mh_mail.cpp, + src/makesrcdist.sh, src/mk/FreeBSD, src/mk/Linux, + src/qtgui/main.cpp, src/rcldb/rcldb.cpp, src/sampleconf/recoll.conf, + src/utils/smallut.h, src/utils/wipedir.cpp: + re-port to linux + +2005-04-06 09:18 +0000 dockes (d8add828aa6b) + + * src/README: + *** empty log message *** + +2005-04-06 09:13 +0000 dockes (7d5759a43255) + + * src/README: + *** empty log message *** + +2005-04-05 09:35 +0000 dockes (6232ca052972) + + * src/common/rclinit.cpp, src/common/rclinit.h: new file. + * src/common/rclinit.cpp, src/common/rclinit.h, + src/index/mimetype.cpp, src/index/recollindex.cpp, + src/internfile/internfile.cpp, src/internfile/mh_mail.cpp, + src/lib/Makefile, src/qtgui/main.cpp, src/rcldb/rcldb.cpp, + src/sampleconf/mimemap: + *** empty log message *** + +2005-04-04 13:18 +0000 dockes (e69c810eb5b1) + + * src/index/indexer.cpp, src/index/mimetype.cpp, + src/internfile/mh_html.cpp, src/internfile/mh_mail.cpp, + src/rcldb/rcldb.cpp, src/sampleconf/mimeconf, + src/utils/fstreewalk.cpp, src/utils/fstreewalk.h: + *** empty log message *** + +2005-03-31 10:04 +0000 dockes (9428bb11ff77) + + * src/bincimapmime/mime-inputsource.h, src/bincimapmime/mime- + parsefull.cc, src/bincimapmime/mime-parseonlyheader.cc, + src/bincimapmime/mime-printbody.cc, src/bincimapmime/mime.h, + src/bincimapmime/trbinc.cc, src/common/rclconfig.cpp, + src/internfile/mh_html.cpp, src/internfile/mh_html.h, + src/internfile/mh_mail.cpp, src/internfile/mh_mail.h, + src/rcldb/rcldb.cpp: + mail handling 1st working version + +2005-03-25 09:40 +0000 dockes (408a2650e963 [RECOLL-0_6]) + + * src/bincimapmime/00README.recoll, src/bincimapmime/trbinc.cc, + src/internfile/mh_mail.cpp, src/internfile/mh_mail.h: new file. + * src/bincimapmime/00README.recoll, src/bincimapmime/mime- + printbody.cc, src/bincimapmime/mime.h, src/bincimapmime/trbinc.cc, + src/common/Makefile, src/index/Makefile, src/index/indexer.cpp, + src/index/mimetype.cpp, src/internfile/internfile.cpp, + src/internfile/internfile.h, src/internfile/mh_html.cpp, + src/internfile/mh_html.h, src/internfile/mh_mail.cpp, + src/internfile/mh_mail.h, src/internfile/mimehandler.cpp, + src/internfile/mimehandler.h, src/internfile/myhtmlparse.cpp, + src/lib/Makefile, src/mk/FreeBSD, src/qtgui/recoll.pro, + src/qtgui/recollmain.ui.h, src/rcldb/rcldb.h, + src/sampleconf/mimeconf, src/utils/mimeparse.cpp, + src/utils/mimeparse.h: + mail ckpt + +2005-03-17 15:35 +0000 dockes (55a0c15039bf) + + * src/index/indexer.cpp, src/index/indexer.h, + src/internfile/internfile.cpp, src/internfile/mh_html.h: + only comments. Before multidoc files + +2005-03-17 14:02 +0000 dockes (b1f57902f3c1) + + * src/bincimapmime/Makefile, src/bincimapmime/iodevice.cc, + src/index/indexer.cpp, src/qtgui/recollmain.ui.h, + src/sampleconf/mimeconf, src/utils/execmd.cpp, src/utils/execmd.h, + src/utils/mimeparse.cpp, src/utils/smallut.cpp, src/utils/smallut.h, + src/utils/utf8iter.h: + checkpoint after long pause + +2005-03-16 07:35 +0000 dockes (4d4d71cd89ea) + + * src/bincimapmime/Makefile, src/bincimapmime/address.cc, + src/bincimapmime/address.h, src/bincimapmime/config.h, + src/bincimapmime/convert.cc, src/bincimapmime/convert.h, + src/bincimapmime/depot.h, src/bincimapmime/iodevice.cc, + src/bincimapmime/iodevice.h, src/bincimapmime/iofactory.cc, + src/bincimapmime/iofactory.h, src/bincimapmime/mime-getpart.cc, + src/bincimapmime/mime-inputsource.h, src/bincimapmime/mime- + parsefull.cc, src/bincimapmime/mime-parseonlyheader.cc, + src/bincimapmime/mime-printbody.cc, src/bincimapmime/mime- + printdoc.cc, src/bincimapmime/mime-printheader.cc, src/bincimapmime + /mime-utils.h, src/bincimapmime/mime.cc, src/bincimapmime/mime.h, + src/bincimapmime/session.h: new file. + * src/bincimapmime/Makefile, src/bincimapmime/address.cc, + src/bincimapmime/address.h, src/bincimapmime/config.h, + src/bincimapmime/convert.cc, src/bincimapmime/convert.h, + src/bincimapmime/depot.h, src/bincimapmime/iodevice.cc, + src/bincimapmime/iodevice.h, src/bincimapmime/iofactory.cc, + src/bincimapmime/iofactory.h, src/bincimapmime/mime-getpart.cc, + src/bincimapmime/mime-inputsource.h, src/bincimapmime/mime- + parsefull.cc, src/bincimapmime/mime-parseonlyheader.cc, + src/bincimapmime/mime-printbody.cc, src/bincimapmime/mime- + printdoc.cc, src/bincimapmime/mime-printheader.cc, src/bincimapmime + /mime-utils.h, src/bincimapmime/mime.cc, src/bincimapmime/mime.h, + src/bincimapmime/session.h: + initial import from bincimap-1.3.3 + +2005-02-11 11:48 +0000 dockes (7b2bdc5c6ed9) + + * src/README, src/makesrcdist.sh: + *** empty log message *** + +2005-02-11 11:48 +0000 dockes (ffca521040c2) + + * src/README: + *** empty log message *** + +2005-02-11 11:20 +0000 dockes (7c54c58f0fd1) + + * src/common/uproplist.h, src/utils/utf8testin.txt: new file. + * src/common/textsplit.cpp, src/common/uproplist.h, + src/utils/Makefile, src/utils/utf8iter.cpp, src/utils/utf8iter.h, + src/utils/utf8testin.txt: + improved word extraction a bit (unicode punctuation) + +2005-02-10 19:52 +0000 dockes (ba4dd19f41c4) + + * src/utils/utf8iter.cpp, src/utils/utf8iter.h: new file. + * src/common/textsplit.cpp, src/utils/Makefile, + src/utils/utf8iter.cpp, src/utils/utf8iter.h: + *** empty log message *** + +2005-02-10 15:21 +0000 dockes (44892bfc8d49) + + * src/index/indexer.cpp, src/qtgui/recollmain.ui.h, + src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, src/utils/execmd.cpp, + src/utils/fstreewalk.cpp, src/utils/fstreewalk.h, + src/utils/smallut.cpp, src/utils/smallut.h: + implemented stem databases + +2005-02-09 13:34 +0000 dockes (7517469a76b5) + + * src/index/Makefile, src/index/mimetype.cpp: + *** empty log message *** + +2005-02-09 12:07 +0000 dockes (e5d0612227af) + + * src/filters/rcldoc, src/filters/rclsoff, src/utils/wipedir.cpp, + src/utils/wipedir.h: new file. + * src/VERSION, src/filters/rcldoc, src/filters/rclsoff, + src/index/indexer.cpp, src/index/mimetype.cpp, + src/internfile/internfile.cpp, src/internfile/internfile.h, + src/internfile/myhtmlparse.cpp, src/lib/Makefile, + src/qtgui/main.cpp, src/qtgui/recoll.h, src/qtgui/recollmain.ui.h, + src/sampleconf/mimeconf, src/sampleconf/mimemap, src/utils/Makefile, + src/utils/smallut.cpp, src/utils/smallut.h, src/utils/wipedir.cpp, + src/utils/wipedir.h: + added support for openoffice and word + optimized decomp temp dir + usage + +2005-02-08 17:35 +0000 dockes (e5a6d4a27e1f) + + * src/INSTALL, src/README: + *** empty log message *** + +2005-02-08 15:08 +0000 dockes (f89783d5d828) + + * src/excludefile, src/makesrcdist.sh: new file. + * src/README, src/excludefile, src/makesrcdist.sh: + *** empty log message *** + +2005-02-08 15:03 +0000 dockes (4ec10decb898) + + * src/README: + *** empty log message *** + +2005-02-08 14:55 +0000 dockes (07541712859f) + + * src/README: + *** empty log message *** + +2005-02-08 14:54 +0000 dockes (fa3ad0590138 [RECOLL-0_5]) + + * src/Makefile, src/README, src/qtgui/recoll.pro, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h, + src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, src/sampleconf/recoll.conf: + *** empty log message *** + +2005-02-08 14:45 +0000 dockes (d04d78bb1af4) + + * src/INSTALL, src/internfile/myhtmlparse.cpp, src/qtgui/recoll.pro: + *** empty log message *** + +2005-02-08 11:59 +0000 dockes (b5f33d8a83cb) + + * src/common/textsplit.cpp, src/qtgui/recollmain.ui.h, + src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + fixed next/prev screen pb + pb with accents when matching in preview + +2005-02-08 10:56 +0000 dockes (ea8c32a3b71e) + + * src/common/textsplit.cpp, src/common/textsplit.h, + src/rcldb/rcldb.cpp: + phrases ok except for preview position + +2005-02-08 09:34 +0000 dockes (8f72bd8ca147) + + * src/common/textsplit.cpp, src/common/textsplit.h, + src/qtgui/recoll.pro, src/qtgui/recollmain.ui.h, + src/query/xadump.cpp, src/rcldb/rcldb.cpp, src/utils/execmd.cpp: + fixes in textsplit + +2005-02-07 13:17 +0000 dockes (3e10d31a55a9) + + * src/common/textsplit.cpp, src/common/textsplit.h, + src/qtgui/recollmain.ui.h, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + simple term highlighting in query preview + +2005-02-04 14:21 +0000 dockes (77a59732f8aa) + + * src/COPYING, src/INSTALL, src/README, src/VERSION, + src/filters/rcluncomp, src/internfile/internfile.cpp, + src/internfile/internfile.h, src/mk/Linux, + src/qtgui/images/editcopy, src/qtgui/images/editcut, + src/qtgui/images/editpaste, src/qtgui/images/filenew, + src/qtgui/images/fileopen, src/qtgui/images/filesave, + src/qtgui/images/print, src/qtgui/images/redo, + src/qtgui/images/searchfind, src/qtgui/images/undo: new file. + * src/COPYING, src/INSTALL, src/Makefile, src/README, src/VERSION, + src/common/Makefile, src/common/unacpp.cpp, src/filters/rcluncomp, + src/index/Makefile, src/index/csguess.cpp, src/index/indexer.cpp, + src/internfile/internfile.cpp, src/internfile/internfile.h, + src/internfile/mimehandler.cpp, src/lib/Makefile, src/mk/FreeBSD, + src/mk/Linux, src/qtgui/idxthread.cpp, src/qtgui/images/editcopy, + src/qtgui/images/editcut, src/qtgui/images/editpaste, + src/qtgui/images/filenew, src/qtgui/images/fileopen, + src/qtgui/images/filesave, src/qtgui/images/print, + src/qtgui/images/redo, src/qtgui/images/searchfind, + src/qtgui/images/undo, src/qtgui/recoll.pro, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h, + src/query/Makefile, src/rcldb/rcldb.cpp, src/utils/Makefile, + src/utils/pathut.cpp, src/utils/transcode.cpp: + uncompression+linux port + +2005-02-04 09:39 +0000 dockes (482687ce34da) + + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/index/indexer.cpp, src/internfile/mh_html.cpp, + src/internfile/mimehandler.cpp, src/internfile/mimehandler.h, + src/lib/Makefile, src/qtgui/recollmain.ui.h, src/utils/smallut.cpp, + src/utils/smallut.h: + *** empty log message *** + +2005-02-04 09:30 +0000 dockes (5fac5dd8a1c4) + + * src/sampleconf/mimeconf, src/sampleconf/mimemap, + src/sampleconf/recoll.conf: + *** empty log message *** + +2005-02-04 09:21 +0000 dockes (2ad004ec5fd7) + + * src/sampleconf/mimeconf, src/sampleconf/mimemap, + src/sampleconf/recoll.conf: new file. + * src/sampleconf/mimeconf, src/sampleconf/mimemap, + src/sampleconf/recoll.conf: + *** empty log message *** + +2005-02-02 17:57 +0000 dockes (4819b0b410e7) + + * src/filters/rclps: new file. + * src/filters/rclps: + *** empty log message *** + +2005-02-01 17:52 +0000 dockes (023ac2c1c87f) + + * src/internfile/mimehandler.cpp, src/qtgui/recollmain.ui, + src/qtgui/recollmain.ui.h, src/rcldb/rcldb.cpp: + *** empty log message *** + +2005-02-01 17:20 +0000 dockes (4eb8337baa03) + + * src/filters/rclpdf, src/internfile/mh_html.h, src/mk/FreeBSD, + src/qtgui/idxthread.h, src/qtgui/recoll.h: new file. + * src/filters/rclpdf, src/index/indexer.cpp, + src/internfile/mh_html.cpp, src/internfile/mh_html.h, + src/internfile/mimehandler.cpp, src/internfile/mimehandler.h, + src/lib/Makefile, src/mk/FreeBSD, src/qtgui/idxthread.h, + src/qtgui/recoll.h, src/qtgui/recollmain.ui.h, src/rcldb/rcldb.cpp, + src/utils/Makefile, src/utils/execmd.cpp: + added external filters and pdf handling + +2005-02-01 08:42 +0000 dockes (b82908e25c6b) + + * src/common/Makefile, src/index/Makefile, src/index/recollindex.cpp, + src/lib/Makefile, src/qtgui/idxthread.cpp, src/qtgui/main.cpp, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h, + src/query/Makefile, src/rcldb/rcldb.cpp, src/utils/Makefile: + *** empty log message *** + +2005-01-31 14:31 +0000 dockes (c8a32d0e0056) + + * src/index/indexer.cpp, src/qtgui/idxthread.cpp, + src/utils/smallut.cpp, src/utils/smallut.h: new file. + * src/common/rclconfig.cpp, src/index/indexer.cpp, + src/index/indexer.h, src/index/recollindex.cpp, src/lib/Makefile, + src/qtgui/idxthread.cpp, src/qtgui/main.cpp, src/qtgui/recoll.pro, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h, + src/query/qtry.cpp, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, + src/utils/Makefile, src/utils/pathut.cpp, src/utils/pathut.h, + src/utils/smallut.cpp, src/utils/smallut.h: + first incarnation of indexing thread + +2005-01-29 15:41 +0000 dockes (3dd05c65d8ed) + + * src/index/recollindex.cpp, src/internfile/mimehandler.cpp, + src/internfile/mimehandler.h, src/lib/Makefile, src/qtgui/main.cpp, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h, + src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, src/utils/Makefile: + external viewer+ deleted doc purging + +2005-01-28 15:25 +0000 dockes (8c6b04552a34) + + * src/Makefile, src/internfile/indextext.h: new file. + * src/Makefile, src/internfile/indextext.h, + src/internfile/myhtmlparse.cpp, src/qtgui/recollmain.ui, + src/qtgui/recollmain.ui.h, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h: + ckpt + +2005-01-28 09:37 +0000 dockes (bf2c00ad72d0) + + * src/internfile/mh_html.cpp, src/internfile/myhtmlparse.cpp, + src/internfile/myhtmlparse.h, src/lib/Makefile, src/rcldb/rcldb.cpp: + merged modifs from xapian/omega 0.8.5 + +2005-01-28 08:56 +0000 dockes (a5e2a08ce1b8) + + * src/internfile/myhtmlparse.cpp, src/internfile/myhtmlparse.h: + import from xapian 0.8.5 + +2005-01-28 08:50 +0000 dockes (73f5b0ed50d8) + + * src/internfile/htmlparse.cpp, src/internfile/htmlparse.h: + Initial recoll modifs for utf8 + +2005-01-28 08:46 +0000 dockes (04f0053d01e4) + + * src/internfile/mh_html.cpp, src/rcldb/rcldb.cpp: + xapian 0.8.3 + +2005-01-28 08:45 +0000 dockes (ec7863976555) + + * src/internfile/myhtmlparse.cpp, src/internfile/myhtmlparse.h: new + file. + * src/internfile/myhtmlparse.cpp, src/internfile/myhtmlparse.h: + *** empty log message *** + +2005-01-28 08:41 +0000 dockes (c5c570040571) + + * src/internfile/htmlparse.cpp, src/internfile/htmlparse.h: new file. + * src/internfile/htmlparse.cpp, src/internfile/htmlparse.h: + xapian 0.8.3 + +2005-01-26 13:03 +0000 dockes (5a37e2aa9a53) + + * src/index/recollindex.cpp, src/internfile/mh_html.cpp, + src/internfile/mimehandler.cpp, src/rcldb/rcldb.cpp: + sort of indexes html + +2005-01-26 11:47 +0000 dockes (eec829a74f2d) + + * src/internfile/mh_html.cpp: new file. + * src/internfile/mh_html.cpp, src/internfile/mimehandler.cpp, + src/internfile/mimehandler.h, src/lib/Makefile, + src/qtgui/recollmain.ui, src/qtgui/recollmain.ui.h, + src/query/qtry.cpp, src/rcldb/rcldb.cpp, src/utils/Makefile: + ckpt + +2005-01-26 11:45 +0000 dockes (1c17d5d56a6b) + + * src/utils/mimeparse.cpp, src/utils/mimeparse.h: new file. + * src/utils/mimeparse.cpp, src/utils/mimeparse.h: + mime header parsing embryo + +2005-01-25 14:37 +0000 dockes (1d5b47c225bf) + + * src/internfile/mimehandler.cpp, src/internfile/mimehandler.h: new + file. + * src/internfile/mimehandler.cpp, src/internfile/mimehandler.h: + *** empty log message *** + +2005-01-25 14:37 +0000 dockes (46d42849ee3a) + + * src/lib/Makefile, src/qtgui/recoll.pro, src/qtgui/recollmain.ui, + src/qtgui/recollmain.ui.h: new file. + * src/common/Makefile, src/common/rclconfig.cpp, src/index/Makefile, + src/index/indexer.h, src/index/recollindex.cpp, src/lib/Makefile, + src/qtgui/main.cpp, src/qtgui/recoll.pro, src/qtgui/recollmain.ui, + src/qtgui/recollmain.ui.h, src/query/Makefile, src/query/qtry.cpp, + src/query/xadump.cpp, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, + src/utils/Makefile, src/utils/transcode.h: + gui connected to rcldb (init) + +2005-01-24 13:17 +0000 dockes (e0104075bdd3) + + * src/common/Makefile, src/index/Makefile, src/qtgui/form1.ui, + src/qtgui/form1.ui.h, src/qtgui/main.cpp, src/query/qtry.cpp, + src/query/qxtry.cpp, src/utils/Makefile: new file. + * src/common/Makefile, src/common/rclconfig.cpp, + src/common/textsplit.h, src/common/unacpp.cpp, src/index/Makefile, + src/qtgui/form1.ui, src/qtgui/form1.ui.h, src/qtgui/main.cpp, + src/query/Makefile, src/query/qtry.cpp, src/query/qxtry.cpp, + src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, src/utils/Makefile: + *** empty log message *** + +2004-12-17 15:50 +0000 dockes (4f7a0a26f6d7) + + * src/query/xadump.cpp, src/rcldb/rcldb.cpp: + very basic indexing working + +2004-12-17 15:36 +0000 dockes (325aea11f893) + + * src/common/unacpp.cpp, src/common/unacpp.h: new file. + * src/common/unacpp.cpp, src/common/unacpp.h, src/rcldb/rcldb.cpp: + *** empty log message *** + +2004-12-17 15:04 +0000 dockes (930a5f50b45e) + + * src/unac/AUTHORS, src/unac/COPYING, src/unac/README, + src/unac/README.recoll, src/unac/unac.c, src/unac/unac.h: new file. + * src/unac/AUTHORS, src/unac/COPYING, src/unac/README, + src/unac/README.recoll, src/unac/unac.c, src/unac/unac.h: + unac 1.7.0 + +2004-12-17 13:01 +0000 dockes (70ded59ba246) + + * src/query/Makefile, src/query/xadump.cpp: new file. + * src/common/rclconfig.h, src/common/textsplit.cpp, + src/common/textsplit.h, src/index/recollindex.cpp, + src/query/Makefile, src/query/xadump.cpp, src/rcldb/rcldb.cpp, + src/rcldb/rcldb.h: + *** empty log message *** + +2004-12-15 15:00 +0000 dockes (1e3483587b45) + + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/common/textsplit.cpp, src/index/csguess.cpp, + src/index/csguess.h, src/index/indexer.h, src/index/mimetype.cpp, + src/index/recollindex.cpp, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, + src/utils/transcode.cpp: + warnings cleanup + +2004-12-15 09:43 +0000 dockes (502752de59d5) + + * src/utils/transcode.cpp, src/utils/transcode.h: new file. + * src/utils/transcode.cpp, src/utils/transcode.h: + *** empty log message *** + +2004-12-15 08:21 +0000 dockes (520f5e294f10) + + * src/index/csguess.cpp, src/index/csguess.h: new file. + * src/index/csguess.cpp, src/index/csguess.h: + just converted (indent+comments) from estraier + +2004-12-14 17:54 +0000 dockes (12a23501eee8) + + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/common/textsplit.h, src/index/indexer.h, src/rcldb/rcldb.cpp, + src/rcldb/rcldb.h, src/utils/readfile.cpp, src/utils/readfile.h: new + file. + * src/common/rclconfig.cpp, src/common/rclconfig.h, + src/common/textsplit.cpp, src/common/textsplit.h, + src/index/indexer.h, src/index/mimetype.cpp, src/index/mimetype.h, + src/index/recollindex.cpp, src/rcldb/rcldb.cpp, src/rcldb/rcldb.h, + src/utils/execmd.cpp, src/utils/pathut.cpp, src/utils/pathut.h, + src/utils/readfile.cpp, src/utils/readfile.h: + *** empty log message *** + +2004-12-13 15:42 +0000 dockes (8c1fce132f19) + + * src/common/textsplit.cpp, src/index/mimetype.cpp, + src/index/mimetype.h, src/index/recollindex.cpp: new file. + * src/common/textsplit.cpp, src/index/mimetype.cpp, + src/index/mimetype.h, src/index/recollindex.cpp: + *** empty log message *** + +2004-12-12 08:58 +0000 dockes (17a132340425) + + * src/utils/execmd.cpp, src/utils/execmd.h: new file. + * src/utils/execmd.cpp, src/utils/execmd.h, src/utils/fstreewalk.cpp: + *** empty log message *** + +2004-12-10 18:13 +0000 dockes (1de12131e4a4) + + * src/utils/fstreewalk.cpp, src/utils/fstreewalk.h, + src/utils/pathut.cpp, src/utils/pathut.h: new file. + * src/utils/fstreewalk.cpp, src/utils/fstreewalk.h, + src/utils/pathut.cpp, src/utils/pathut.h: + *** empty log message *** + +2004-12-10 18:13 +0000 unknown (318176766db7) + + * Standard project directories initialized by cvs2svn. + diff --git a/src/INSTALL b/src/INSTALL new file mode 100644 index 00000000..3656c003 --- /dev/null +++ b/src/INSTALL @@ -0,0 +1,1180 @@ + +More documentation can be found in the doc/ directory or at http://www.recoll.org + + + Link: home: Recoll user manual + Link: up: Recoll user manual + Link: prev: 4.3. API + Link: next: 5.2. Supporting packages + + Chapter 5. Installation and configuration + Prev Next + + ---------------------------------------------------------------------- + +Chapter 5. Installation and configuration + +5.1. Installing a binary copy + + There are three types of binary Recoll installations: + + o Through your system normal software distribution framework (ie, + Debian/Ubuntu apt, FreeBSD ports, etc.). + + o From a package downloaded from the Recoll web site. + + o From a prebuilt tree downloaded from the Recoll web site. + + In all cases, the strict software dependancies (ie on Xapian or iconv) + will be automatically satisfied, you should not have to worry about them. + + You will only have to check or install supporting applications for the + file types that you want to index beyond those that are natively processed + by Recoll (text, HTML, email files, and a few others). + + You should also maybe have a look at the configuration section (but this + may not be necessary for a quick test with default parameters). Most + parameters can be more conveniently set from the GUI interface. + + 5.1.1. Installing through a package system + + If you use a BSD-type port system or a prebuilt package (DEB, RPM, + manually or through the system software configuration utility), just + follow the usual procedure for your system. + + 5.1.2. Installing a prebuilt Recoll + + The unpackaged binary versions on the Recoll web site are just compressed + tar files of a build tree, where only the useful parts were kept + (executables and sample configuration). + + The executable binary files are built with a static link to libxapian and + libiconv, to make installation easier (no dependencies). + + After extracting the tar file, you can proceed with installation as if you + had built the package from source (that is, just type make install). The + binary trees are built for installation to /usr/local. + + ---------------------------------------------------------------------- + + Prev Next + 4.3. API Home 5.2. Supporting packages + Link: home: Recoll user manual + Link: up: Chapter 5. Installation and configuration + Link: prev: Chapter 5. Installation and configuration + Link: next: 5.3. Building from source + + 5.2. Supporting packages + Prev Chapter 5. Installation and configuration Next + + ---------------------------------------------------------------------- + +5.2. Supporting packages + + Recoll uses external applications to index some file types. You need to + install them for the file types that you wish to have indexed (these are + run-time optional dependencies. None is needed for building or running + Recoll except for indexing their specific file type). + + After an indexing pass, the commands that were found missing can be + displayed from the recoll File menu. The list is stored in the missing + text file inside the configuration directory. + + A list of common file types which need external commands follows. Many of + the filters need the iconv command, which is not always listed as a + dependancy. + + Please note that, due to the relatively dynamic nature of this + information, the most up to date version is now kept on the Recoll helper + applications page along with links to the home pages or best + source/patches pages, and misc tips. The list below is not updated often + and may be quite stale. + + For many Linux distributions, most of the commands listed can be installed + from the package repositories. However, the packages are sometimes + outdated, or not the best version for Recoll, so you should take a look at + the Recoll helper applications page if a file type is important to you. + + As of Recoll release 1.14, a number of XML-based formats that were handled + by ad hoc filter code now use the xsltproc command, which usually comes + with libxslt. These are: abiword, fb2 (ebooks), kword, openoffice, svg. + + Now for the list: + + o Openoffice files need unzip and xsltproc. + + o PDF files need pdftotext which is part of the Xpdf or Poppler + packages. + + o Postscript files need pstotext. The original version has an issue with + shell character in file names, which is corrected in recent packages. + See the the Recoll helper applications page for more detail. + + o MS Word needs antiword. It is also useful to have wvWare installed as + it may be be used as a fallback for some files which antiword does not + handle. + + o MS Excel and PowerPoint need catdoc. + + o MS Open XML (docx) needs xsltproc. + + o Wordperfect files need wpd2html from the libwpd (or libwpd-tools on + Ubuntu) package. + + o RTF files need unrtf, which, in its standard version, has much trouble + with non-western character sets. Check the Recoll helper applications + page. + + o TeX files need untex or detex. Check the Recoll helper applications + page for sources if it's not packaged for your distribution. + + o dvi files need dvips. + + o djvu files need djvutxt and djvused from the DjVuLibre package. + + o Audio files: Recoll releases before 1.13 used the id3info command from + the id3lib package to extract mp3 tag information, metaflac (standard + flac tools) for flac files, and ogginfo (vorbis tools) for ogg files. + Releases 1.14 and later use a single Python filter based on mutagen + for all audio file types. + + o Pictures: Recoll uses the Exiftool Perl package to extract tag + information. Most image file formats are supported. Note that there + may not be much interest in indexing the technical tags (image size, + aperture, etc.). This is only of interest if you store personal tags + or textual descriptions inside the image files. + + o chm: files in microsoft help format need Python and the pychm module + (which needs chmlib). + + o ICS: up to Recoll 1.13, iCalendar files need Python and the icalendar + module. icalendar is not needed for newer versions, which use internal + code. + + o Zip archives need Python (and the standard zipfile module). + + o Rar archives need Python, the rarfile Python module and the unrar + utility. + + o Midi karaoke files need Python and the Midi module + + o Konqueror webarchive format with Python (uses the Tarfile module). + + o mimehtml web archive format (support based on the email filter, which + introduces some mild weirdness, but still usable). + + Text, HTML, email folders, and Scribus files are processed internally. Lyx + is used to index Lyx files. Many filters need iconv and the standard sed + and awk. + + ---------------------------------------------------------------------- + + Prev Up Next + Chapter 5. Installation and configuration Home 5.3. Building from source + Link: home: Recoll user manual + Link: up: Chapter 5. Installation and configuration + Link: prev: 5.2. Supporting packages + Link: next: 5.4. Configuration overview + + 5.3. Building from source + Prev Chapter 5. Installation and configuration Next + + ---------------------------------------------------------------------- + +5.3. Building from source + + 5.3.1. Prerequisites + + If you can install any or all of the following through the package manager + for your system, all the better. Especially Qt is a very big piece of + software, but you will most probably be able to find a binary package. + + You may have to compile Xapian but this is easy. + + The shopping list: + + o C++ compiler. Up to Recoll version 1.13.04, its absence can manifest + itself by strange messages about a missing iconv_open. + + o Development files for Xapian core. + + Important + + If you are building Xapian for an older CPU (before Pentium 4 or + Athlon 64), you need to add the --disable-sse flag to the configure + command. Else all Xapian application will crash with an illegal + instruction error. + + o Development files for Qt 4 . Recoll has not been tested with Qt 5 yet. + Recoll 1.15.9 was the last version to support Qt 3. If you do not want + to install or build the Qt Webkit module, Recoll has a configuration + option to disable its use (see further). + + o Development files for X11 and zlib. + + o You may also need libiconv. On Linux systems, the iconv interface is + part of libc and you should not need to do anything special. + + Check the Recoll download page for up to date version information. + + 5.3.2. Building + + Recoll has been built on Linux, FreeBSD, Mac OS X, and Solaris, most + versions after 2005 should be ok, maybe some older ones too (Solaris 8 is + ok). If you build on another system, and need to modify things, I would + very much welcome patches. + + Configure options: + + o --without-aspell will disable the code for phonetic matching of search + terms. + + o --with-fam or --with-inotify will enable the code for real time + indexing. Inotify support is enabled by default on recent Linux + systems. + + o --with-qtzeitgeist will enable sending Zeitgeist events about the + visited search results, and needs the Qt Zeitgeist module. + + o --disable-webkit is available from version 1.17 to implement the + result list with a Qt QTextBrowser instead of a WebKit widget if you + do not or can't depend on the latter. + + o --disable-idxthreads is available from version 1.19 to suppress + multithreading inside the indexing process. You can also use the + run-time configuration to restrict recollindex to using a single + thread, but the compile-time option may disable a few more unused + locks. This only applies to the use of multithreading for the core + index processing (data input). The Recoll monitor mode always uses at + least two threads of execution. + + o --disable-python-module will avoid building the Python module. + + o --disable-xattr will prevent fetching data from file extended + attributes. Beyond a few standard attributes, fetching extended + attributes data can only be useful is some application stores data in + there, and also needs some simple configuration (see comments in the + fields configuration file). + + o --enable-camelcase will enable splitting camelCase words. This is not + enabled by default as it has the unfortunate side-effect of making + some phrase searches quite confusing: ie, "MySQL manual" would be + matched by "MySQL manual" and "my sql manual" but not "mysql manual" + (only inside phrase searches). + + o --with-file-command Specify the version of the 'file' command to use + (ie: --with-file-command=/usr/local/bin/file). Can be useful to enable + the gnu version on systems where the native one is bad. + + o --disable-qtgui Disable the Qt interface. Will allow building the + indexer and the command line search program in absence of a Qt + environment. + + o --disable-x11mon Disable X11 connection monitoring inside recollindex. + Together with --disable-qtgui, this allows building recoll without Qt + and X11. + + o --disable-pic will compile Recoll with position-dependant code. This + is incompatible with building the KIO or the Python or PHP extensions, + but might yield very marginally faster code. + + o Of course the usual autoconf configure options, like --prefix apply. + + Normal procedure: + + cd recoll-xxx + configure + make + (practices usual hardship-repelling invocations) + + + There is little auto-configuration. The configure script will mainly link + one of the system-specific files in the mk directory to mk/sysconf. If + your system is not known yet, it will tell you as much, and you may want + to manually copy and modify one of the existing files (the new file name + should be the output of uname -s). + + 5.3.3. Installation + + Either type make install or execute recollinstall prefix, in the root of + the source tree. This will copy the commands to prefix/bin and the sample + configuration files, scripts and other shared data to prefix/share/recoll. + + If the installation prefix given to recollinstall is different from either + the system default or the value which was specified when executing + configure (as in configure --prefix /some/path), you will have to set the + RECOLL_DATADIR environment variable to indicate where the shared data is + to be found (ie for (ba)sh: export + RECOLL_DATADIR=/some/path/share/recoll). + + You can then proceed to configuration. + + ---------------------------------------------------------------------- + + Prev Up Next + 5.2. Supporting packages Home 5.4. Configuration overview + Link: home: Recoll user manual + Link: up: Chapter 5. Installation and configuration + Link: prev: 5.3. Building from source + + 5.4. Configuration overview + Prev Chapter 5. Installation and configuration + + ---------------------------------------------------------------------- + +5.4. Configuration overview + + Most of the parameters specific to the recoll GUI are set through the + Preferences menu and stored in the standard Qt place + ($HOME/.config/Recoll.org/recoll.conf). You probably do not want to edit + this by hand. + + Recoll indexing options are set inside text configuration files located in + a configuration directory. There can be several such directories, each of + which define the parameters for one index. + + The configuration files can be edited by hand or through the Index + configuration dialog (Preferences menu). The GUI tool will try to respect + your formatting and comments as much as possible, so it is quite possible + to use both ways. + + The most accurate documentation for the configuration parameters is given + by comments inside the default files, and we will just give a general + overview here. + + For each index, there are two sets of configuration files. System-wide + configuration files are kept in a directory named like + /usr/[local/]share/recoll/examples, and define default values, shared by + all indexes. For each index, a parallel set of files defines the + customized parameters. + + The default location of the configuration is the .recoll directory in your + home. Most people will only use this directory. + + This location can be changed, or others can be added with the + RECOLL_CONFDIR environment variable or the -c option parameter to recoll + and recollindex. + + If the .recoll directory does not exist when recoll or recollindex are + started, it will be created with a set of empty configuration files. + recoll will give you a chance to edit the configuration file before + starting indexing. recollindex will proceed immediately. To avoid + mistakes, the automatic directory creation will only occur for the default + location, not if -c or RECOLL_CONFDIR were used (in the latter cases, you + will have to create the directory). + + All configuration files share the same format. For example, a short + extract of the main configuration file might look as follows: + + # Space-separated list of directories to index. + topdirs = ~/docs /usr/share/doc + + [~/somedirectory-with-utf8-txt-files] + defaultcharset = utf-8 + + + There are three kinds of lines: + + o Comment (starts with #) or empty. + + o Parameter affectation (name = value). + + o Section definition ([somedirname]). + + Depending on the type of configuration file, section definitions either + separate groups of parameters or allow redefining some parameters for a + directory sub-tree. They stay in effect until another section definition, + or the end of file, is encountered. Some of the parameters used for + indexing are looked up hierarchically from the current directory location + upwards. Not all parameters can be meaningfully redefined, this is + specified for each in the next section. + + When found at the beginning of a file path, the tilde character (~) is + expanded to the name of the user's home directory, as a shell would do. + + White space is used for separation inside lists. List elements with + embedded spaces can be quoted using double-quotes. + + Encoding issues. Most of the configuration parameters are plain ASCII. Two + particular sets of values may cause encoding issues: + + o File path parameters may contain non-ascii characters and should use + the exact same byte values as found in the file system directory. + Usually, this means that the configuration file should use the system + default locale encoding. + + o The unac_except_trans parameter should be encoded in UTF-8. If your + system locale is not UTF-8, and you need to also specify non-ascii + file paths, this poses a difficulty because common text editors cannot + handle multiple encodings in a single file. In this relatively + unlikely case, you can edit the configuration file as two separate + text files with appropriate encodings, and concatenate them to create + the complete configuration. + + 5.4.1. Main configuration file + + recoll.conf is the main configuration file. It defines things like what to + index (top directories and things to ignore), and the default character + set to use for document types which do not specify it internally. + + The default configuration will index your home directory. If this is not + appropriate, start recoll to create a blank configuration, click Cancel, + and edit the configuration file before restarting the command. This will + start the initial indexing, which may take some time. + + Most of the following parameters can be changed from the Index + Configuration menu in the recoll interface. Some can only be set by + editing the configuration file. + + 5.4.1.1. Parameters affecting what documents we index: + + topdirs + + Specifies the list of directories or files to index (recursively + for directories). You can use symbolic links as elements of this + list. See the followLinks option about following symbolic links + found under the top elements (not followed by default). + + skippedNames + + A space-separated list of patterns for names of files or + directories that should be completely ignored. The list defined in + the default file is: + + skippedNames = #* bin CVS Cache cache* caughtspam tmp .thumbnails .svn \ + *~ .beagle .git .hg .bzr loop.ps .xsession-errors \ + .recoll* xapiandb recollrc recoll.conf + + The list can be redefined at any sub-directory in the indexed + area. + + The top-level directories are not affected by this list (that is, + a directory in topdirs might match and would still be indexed). + + The list in the default configuration does not exclude hidden + directories (names beginning with a dot), which means that it may + index quite a few things that you do not want. On the other hand, + email user agents like thunderbird usually store messages in + hidden directories, and you probably want this indexed. One + possible solution is to have .* in skippedNames, and add things + like ~/.thunderbird or ~/.evolution in topdirs. + + Not even the file names are indexed for patterns in this list. See + the recoll_noindex variable in mimemap for an alternative approach + which indexes the file names. + + skippedPaths and daemSkippedPaths + + A space-separated list of patterns for paths of files or + directories that should be skipped. There is no default in the + sample configuration file, but the code always adds the + configuration and database directories in there. + + skippedPaths is used both by batch and real time indexing. + daemSkippedPaths can be used to specify things that should be + indexed at startup, but not monitored. + + Example of use for skipping text files only in a specific + directory: + + skippedPaths = ~/somedir/*.txt + + + skippedPathsFnmPathname + + The values in the *skippedPaths variables are matched by default + with fnmatch(3), with the FNM_PATHNAME and FNM_LEADING_DIR flags. + This means that '/' characters must be matched explicitely. You + can set skippedPathsFnmPathname to 0 to disable the use of + FNM_PATHNAME (meaning that /*/dir3 will match /dir1/dir2/dir3). + + followLinks + + Specifies if the indexer should follow symbolic links while + walking the file tree. The default is to ignore symbolic links to + avoid multiple indexing of linked files. No effort is made to + avoid duplication when this option is set to true. This option can + be set individually for each of the topdirs members by using + sections. It can not be changed below the topdirs level. + + indexedmimetypes + + Recoll normally indexes any file which it knows how to read. This + list lets you restrict the indexed mime types to what you specify. + If the variable is unspecified or the list empty (the default), + all supported types are processed. + + compressedfilemaxkbs + + Size limit for compressed (.gz or .bz2) files. These need to be + decompressed in a temporary directory for identification, which + can be very wasteful if 'uninteresting' big compressed files are + present. Negative means no limit, 0 means no processing of any + compressed file. Defaults to -1. + + textfilemaxmbs + + Maximum size for text files. Very big text files are often + uninteresting logs. Set to -1 to disable (default 20MB). + + textfilepagekbs + + If set to other than -1, text files will be indexed as multiple + documents of the given page size. This may be useful if you do + want to index very big text files as it will both reduce memory + usage at index time and help with loading data to the preview + window. A size of a few megabytes would seem reasonable (default: + 1MB). + + membermaxkbs + + This defines the maximum size in kilobytes for an archive member + (zip, tar or rar at the moment). Bigger entries will be skipped. + + indexallfilenames + + Recoll indexes file names in a special section of the database to + allow specific file names searches using wild cards. This + parameter decides if file name indexing is performed only for + files with mime types that would qualify them for full text + indexing, or for all files inside the selected subtrees, + independently of mime type. + + usesystemfilecommand + + Decide if we use the file -i system command as a final step for + determining the mime type for a file (the main procedure uses + suffix associations as defined in the mimemap file). This can be + useful for files with suffix-less names, but it will also cause + the indexing of many bogus "text" files. + + processwebqueue + + If this is set, process the directory where Web browser plugins + copy visited pages for indexing. + + webqueuedir + + The path to the web indexing queue. This is hard-coded in the + Firefox plugin as ~/.recollweb/ToIndex so there should be no need + to change it. + + 5.4.1.2. Parameters affecting how we generate terms: + + Changing some of these parameters will imply a full reindex. Also, when + using multiple indexes, it may not make sense to search indexes that don't + share the values for these parameters, because they usually affect both + search and index operations. + + indexStripChars + + Decide if we strip characters of diacritics and convert them to + lower-case before terms are indexed. If we don't, searches + sensitive to case and diacritics can be performed, but the index + will be bigger, and some marginal weirdness may sometimes occur. + The default is a stripped index (indexStripChars = 1) for now. + When using multiple indexes for a search, this parameter must be + defined identically for all. Changing the value implies an index + reset. + + maxTermExpand + + Maximum expansion count for a single term (e.g.: when using + wildcards). The default of 10000 is reasonable and will avoid + queries that appear frozen while the engine is walking the term + list. + + maxXapianClauses + + Maximum number of elementary clauses we can add to a single Xapian + query. In some cases, the result of term expansion can be + multiplicative, and we want to avoid using excessive memory. The + default of 100 000 should be both high enough in most cases and + compatible with current typical hardware configurations. + + nonumbers + + If this set to true, no terms will be generated for numbers. For + example "123", "1.5e6", 192.168.1.4, would not be indexed + ("value123" would still be). Numbers are often quite interesting + to search for, and this should probably not be set except for + special situations, ie, scientific documents with huge amounts of + numbers in them. This can only be set for a whole index, not for a + subtree. + + nocjk + + If this set to true, specific east asian (Chinese Korean Japanese) + characters/word splitting is turned off. This will save a small + amount of cpu if you have no CJK documents. If your document base + does include such text but you are not interested in searching it, + setting nocjk may be a significant time and space saver. + + cjkngramlen + + This lets you adjust the size of n-grams used for indexing CJK + text. The default value of 2 is probably appropriate in most + cases. A value of 3 would allow more precision and efficiency on + longer words, but the index will be approximately twice as large. + + indexstemminglanguages + + A list of languages for which the stem expansion databases will be + built. See recollindex(1) or use the recollindex -l command for + possible values. You can add a stem expansion database for a + different language by using recollindex -s, but it will be deleted + during the next indexing. Only languages listed in the + configuration file are permanent. + + defaultcharset + + The name of the character set used for files that do not contain a + character set definition (ie: plain text files). This can be + redefined for any sub-directory. If it is not set at all, the + character set used is the one defined by the nls environment ( + LC_ALL, LC_CTYPE, LANG), or iso8859-1 if nothing is set. + + unac_except_trans + + This is a list of characters, encoded in UTF-8, which should be + handled specially when converting text to unaccented lowercase. + For example, in Swedish, the letter a with diaeresis has full + alphabet citizenship and should not be turned into an a. Each + element in the space-separated list has the special character as + first element and the translation following. The handling of both + the lowercase and upper-case versions of a character should be + specified, as appartenance to the list will turn-off both standard + accent and case processing. Example for Swedish: + + unac_except_trans = aaaa AAaa a:a: A:a: o:o: O:o: + + + Note that the translation is not limited to a single character, + you could very well have something like u:ue in the list. + + The default value set for unac_except_trans can't be listed here + because I have trouble with SGML and UTF-8, but it only contains + ligature decompositions: german ss, oe, ae, fi, fl. + + This parameter can't be defined for subdirectories, it is global, + because there is no way to do otherwise when querying. If you have + document sets which would need different values, you will have to + index and query them separately. + + maildefcharset + + This can be used to define the default character set specifically + for email messages which don't specify it. This is mainly useful + for readpst (libpst) dumps, which are utf-8 but do not say so. + + localfields + + This allows setting fields for all documents under a given + directory. Typical usage would be to set an "rclaptg" field, to be + used in mimeview to select a specific viewer. If several fields + are to be set, they should be separated with a semi-colon (';') + character, which there is currently no way to escape. Also note + the initial semi-colon. Example: localfields= ;rclaptg=gnus;other + = val, then select specifier viewer with mimetype|tag=... in + mimeview. + + metadatacmds + + This allows executing external commands for each file and storing + the output in a Recoll field. This could be used for example to + index external tag data. The value is a list of field names and + commands, don't forget an initial semi-colon. Example: + + [/some/area/of/the/fs] + metadatacmds = ; tags = tmsu tags %f; otherfield = somecmd -xx %f + + + 5.4.1.3. Parameters affecting where and how we store things: + + dbdir + + The name of the Xapian data directory. It will be created if + needed when the index is initialized. If this is not an absolute + path, it will be interpreted relative to the configuration + directory. The value can have embedded spaces but starting or + trailing spaces will be trimmed. You cannot use quotes here. + + idxstatusfile + + The name of the scratch file where the indexer process updates its + status. Default: idxstatus.txt inside the configuration directory. + + maxfsoccuppc + + Maximum file system occupation before we stop indexing. The value + is a percentage, corresponding to what the "Capacity" df output + column shows. The default value is 0, meaning no checking. + + mboxcachedir + + The directory where mbox message offsets cache files are held. + This is normally $RECOLL_CONFDIR/mboxcache, but it may be useful + to share a directory between different configurations. + + mboxcacheminmbs + + The minimum mbox file size over which we cache the offsets. There + is really no sense in caching offsets for small files. The default + is 5 MB. + + webcachedir + + This is only used by the web browser plugin indexing code, and + defines where the cache for visited pages will live. Default: + $RECOLL_CONFDIR/webcache + + webcachemaxmbs + + This is only used by the web browser plugin indexing code, and + defines the maximum size for the web page cache. Default: 40 MB. + + idxflushmb + + Threshold (megabytes of new text data) where we flush from memory + to disk index. Setting this can help control memory usage. A value + of 0 means no explicit flushing, letting Xapian use its own + default, which is flushing every 10000 (or XAPIAN_FLUSH_THRESHOLD) + documents, which gives little memory usage control, as memory + usage also depends on average document size. The default value is + 10, and it is probably a bit low. If your system usually has free + memory, you can try higher values between 20 and 80. In my + experience, values beyond 100 are always counterproductive. + + 5.4.1.4. Indexing parallelism configuration + + The Recoll indexing process recollindex can use multiple threads to speed + up indexing on multiprocessor systems. The work done to index files is + divided in several stages and some of the stages can be executed by + multiple threads. The stages are: + + 1. File system walking: this is always performed by the main thread. + 2. File conversion and data extraction. + 3. Text processing (splitting, stemming, etc.) + 4. Xapian index update. + + You can also read a longer document about the transformation of Recoll + indexing to multithreading. + + The threads configuration is controlled by two configuration file + parameters. + + thrQSizes + + This variable defines the job input queues configuration. There + are three possible queues for stages 2, 3 and 4, and this + parameter should give the queue depth for each stage (three + integer values). If a value of -1 is used for a given stage, no + queue is used, and the thread will go on performing the next + stage. In practise, deep queues have not been shown to increase + performance. A value of 0 for the first queue tells Recoll to + perform autoconfiguration (no need for the two other values in + this case)- this is the default configuration. + + thrTCounts + + This defines the number of threads used for each stage. If a value + of -1 is used for one of the queue depths, the corresponding + thread count is ignored. It makes no sense to use a value other + than 1 for the last stage because updating the Xapian index is + necessarily single-threaded (and protected by a mutex). + + The following example would use three queues (of depth 2), and 4 threads + for converting source documents, 2 for processing their text, and one to + update the index. This was tested to be the best configuration on the test + system (quadri-processor with multiple disks). + + thrQSizes = 2 2 2 + thrTCounts = 4 2 1 + + The following example would use a single queue, and the complete + processing for each document would be performed by a single thread + (several documents will still be processed in parallel in most cases). The + threads will use mutual exclusion when entering the index update stage. In + practise the performance would be close to the precedent case in general, + but worse in certain cases (e.g. a Zip archive would be performed purely + sequentially), so the previous approach is preferred. YMMV... The 2 last + values for thrTCounts are ignored. + + thrQSizes = 2 -1 -1 + thrTCounts = 6 1 1 + + 5.4.1.5. Miscellaneous parameters: + + autodiacsens + + IF the index is not stripped, decide if we automatically trigger + diacritics sensitivity if the search term has accented characters + (not in unac_except_trans). Else you need to use the query + language and the D modifier to specify diacritics sensitivity. + Default is no. + + autocasesens + + IF the index is not stripped, decide if we automatically trigger + character case sensitivity if the search term has upper-case + characters in any but the first position. Else you need to use the + query language and the C modifier to specify character-case + sensitivity. Default is yes. + + loglevel,daemloglevel + + Verbosity level for recoll and recollindex. A value of 4 lists + quite a lot of debug/information messages. 2 only lists errors. + The daemversion is specific to the indexing monitor daemon. + + logfilename, daemlogfilename + + Where the messages should go. 'stderr' can be used as a special + value, and is the default. The daemversion is specific to the + indexing monitor daemon. + + mondelaypatterns + + This allows specify wildcard path patterns (processed with + fnmatch(3) with 0 flag), to match files which change too often and + for which a delay should be observed before re-indexing. This is a + space-separated list, each entry being a pattern and a time in + seconds, separated by a colon. You can use double quotes if a path + entry contains white space. Example: + + mondelaypatterns = *.log:20 "this one has spaces*:10" + + + monixinterval + + Minimum interval (seconds) for processing the indexing queue. The + real time monitor does not process each event when it comes in, + but will wait this time for the queue to accumulate to diminish + overhead and in order to aggregate multiple events to the same + file. Default 30 S. + + monauxinterval + + Period (in seconds) at which the real time monitor will regenerate + the auxiliary databases (spelling, stemming) if needed. The + default is one hour. + + monioniceclass, monioniceclassdata + + These allow defining the ionice class and data used by the indexer + (default class 3, no data). + + filtermaxseconds + + Maximum filter execution time, after which it is aborted. Some + postscript programs just loop... + + filtersdir + + A directory to search for the external filter scripts used to + index some types of files. The value should not be changed, except + if you want to modify one of the default scripts. The value can be + redefined for any sub-directory. + + iconsdir + + The name of the directory where recoll result list icons are + stored. You can change this if you want different images. + + idxabsmlen + + Recoll stores an abstract for each indexed file inside the + database. The text can come from an actual 'abstract' section in + the document or will just be the beginning of the document. It is + stored in the index so that it can be displayed inside the result + lists without decoding the original file. The idxabsmlen parameter + defines the size of the stored abstract. The default value is 250 + bytes. The search interface gives you the choice to display this + stored text or a synthetic abstract built by extracting text + around the search terms. If you always prefer the synthetic + abstract, you can reduce this value and save a little space. + + aspellLanguage + + Language definitions to use when creating the aspell dictionary. + The value must match a set of aspell language definition files. + You can type "aspell config" to see where these are installed + (look for data-dir). The default if the variable is not set is to + use your desktop national language environment to guess the value. + + noaspell + + If this is set, the aspell dictionary generation is turned off. + Useful for cases where you don't need the functionality or when it + is unusable because aspell crashes during dictionary generation. + + mhmboxquirks + + This allows definining location-related quirks for the mailbox + handler. Currently only the tbird flag is defined, and it should + be set for directories which hold Thunderbird data, as their + folder format is weird. + + 5.4.2. The fields file + + This file contains information about dynamic fields handling in Recoll. + Some very basic fields have hard-wired behaviour, and, mostly, you should + not change the original data inside the fields file. But you can create + custom fields fitting your data and handle them just like they were native + ones. + + The fields file has several sections, which each define an aspect of + fields processing. Quite often, you'll have to modify several sections to + obtain the desired behaviour. + + We will only give a short description here, you should refer to the + comments inside the file for more detailed information. + + Field names should be lowercase alphabetic ASCII. + + [prefixes] + + A field becomes indexed (searchable) by having a prefix defined in + this section. + + [stored] + + A field becomes stored (displayable inside results) by having its + name listed in this section (typically with an empty value). + + [aliases] + + This section defines lists of synonyms for the canonical names + used inside the [prefixes] and [stored] sections + + filter-specific sections + + Some filters may need specific configuration for handling fields. + Only the email message filter currently has such a section (named + [mail]). It allows indexing arbitrary email headers in addition to + the ones indexed by default. Other such sections may appear in the + future. + + Here follows a small example of a personal fields file. This would extract + a specific email header and use it as a searchable field, with data + displayable inside result lists. (Side note: as the email filter does no + decoding on the values, only plain ascii headers can be indexed, and only + the first occurrence will be used for headers that occur several times). + + [prefixes] + # Index mailmytag contents (with the given prefix) + mailmytag = XMTAG + + [stored] + # Store mailmytag inside the document data record (so that it can be + # displayed - as %(mailmytag) - in result lists). + mailmytag = + + [mail] + # Extract the X-My-Tag mail header, and use it internally with the + # mailmytag field name + x-my-tag = mailmytag + + 5.4.2.1. Extended attributes in the fields file + + Recoll versions 1.19 and later process user extended file attributes as + documents fields by default. + + Attributes are processed as fields of the same name, after removing the + user prefix on Linux. + + The [xattrtofields] section of the fields file allows specifying + translations from extended attributes names to Recoll field names. An + empty translation disables use of the corresponding attribute data. + + 5.4.3. The mimemap file + + mimemap specifies the file name extension to mime type mappings. + + For file names without an extension, or with an unknown one, the system's + file -i command will be executed to determine the mime type (this can be + switched off inside the main configuration file). + + The mappings can be specified on a per-subtree basis, which may be useful + in some cases. Example: gaim logs have a .txt extension but should be + handled specially, which is possible because they are usually all located + in one place. + + mimemap also has a recoll_noindex variable which is a list of suffixes. + Matching files will be skipped (which avoids unnecessary decompressions or + file executions). This is partially redundant with skippedNames in the + main configuration file, with a few differences: it will not affect + directories, it cannot be made dependant on the file-system location (it + is a configuration-wide parameter), and the file names will still be + indexed (not even the file names are indexed for patterns in skippedNames. + recoll_noindex is used mostly for things known to be unindexable by a + given Recoll version. Having it there avoids cluttering the more + user-oriented and locally customized skippedNames. + + 5.4.4. The mimeconf file + + mimeconf specifies how the different mime types are handled for indexing, + and which icons are displayed in the recoll result lists. + + Changing the parameters in the [index] section is probably not a good idea + except if you are a Recoll developer. + + The [icons] section allows you to change the icons which are displayed by + recoll in the result lists (the values are the basenames of the png images + inside the iconsdir directory (specified in recoll.conf). + + 5.4.5. The mimeview file + + mimeview specifies which programs are started when you click on an Open + link in a result list. Ie: HTML is normally displayed using firefox, but + you may prefer Konqueror, your openoffice.org program might be named + oofice instead of openoffice etc. + + Changes to this file can be done by direct editing, or through the recoll + GUI preferences dialog. + + If Use desktop preferences to choose document editor is checked in the + Recoll GUI preferences, all mimeview entries will be ignored except the + one labelled application/x-all (which is set to use xdg-open by default). + + In this case, the xallexcepts top level variable defines a list of mime + type exceptions which will be processed according to the local entries + instead of being passed to the desktop. This is so that specific Recoll + options such as a page number or a search string can be passed to + applications that support them, such as the evince viewer. + + As for the other configuration files, the normal usage is to have a + mimeview inside your own configuration directory, with just the + non-default entries, which will override those from the central + configuration file. + + All viewer definition entries must be placed under a [view] section. + + The keys in the file are normally mime types. You can add an application + tag to specialize the choice for an area of the filesystem (using a + localfields specification in mimeconf). The syntax for the key is + mimetype|tag + + The nouncompforviewmts entry, (placed at the top level, outside of the + [view] section), holds a list of mime types that should not be + uncompressed before starting the viewer (if they are found compressed, ie: + mydoc.doc.gz). + + The right side of each assignment holds a command to be executed for + opening the file. The following substitutions are performed: + + o %D. Document date + + o %f. File name. This may be the name of a temporary file if it was + necessary to create one (ie: to extract a subdocument from a + container). + + o %F. Original file name. Same as %f except if a temporary file is used. + + o %i. Internal path, for subdocuments of containers. The format depends + on the container type. If this appears in the command line, Recoll + will not create a temporary file to extract the subdocument, expecting + the called application (possibly a script) to be able to handle it. + + o %M. Mime type + + o %p. Page index. Only significant for a subset of document types, + currently only PDF, Postscript and DVI files. Can be used to start the + editor at the right page for a match or snippet. + + o %s. Search term. The value will only be set for documents with indexed + page numbers (ie: PDF). The value will be one of the matched search + terms. It would allow pre-setting the value in the "Find" entry inside + Evince for example, for easy highlighting of the term. + + o %U, %u. Url. + + In addition to the predefined values above, all strings like %(fieldname) + will be replaced by the value of the field named fieldname for the + document. This could be used in combination with field customisation to + help with opening the document. + + 5.4.6. The ptrans file + + ptrans specifies query-time path translations. These can be useful in + multiple cases. + + The file has a section for any index which needs translations, either the + main one or additional query indexes. The sections are named with the + Xapian index directory names. No slash character should exist at the end + of the paths (all comparisons are textual). An exemple should make things + sufficiently clear + + [/home/me/.recoll/xapiandb] + /this/directory/moved = /to/this/place + + [/path/to/additional/xapiandb] + /server/volume1/docdir = /net/server/volume1/docdir + /server/volume2/docdir = /net/server/volume2/docdir + + + 5.4.7. Examples of configuration adjustments + + 5.4.7.1. Adding an external viewer for an non-indexed type + + Imagine that you have some kind of file which does not have indexable + content, but for which you would like to have a functional Open link in + the result list (when found by file name). The file names end in .blob and + can be displayed by application blobviewer. + + You need two entries in the configuration files for this to work: + + o In $RECOLL_CONFDIR/mimemap (typically ~/.recoll/mimemap), add the + following line: + + .blob = application/x-blobapp + + Note that the mime type is made up here, and you could call it + diesel/oil just the same. + + o In $RECOLL_CONFDIR/mimeview under the [view] section, add: + + application/x-blobapp = blobviewer %f + + We are supposing that blobviewer wants a file name parameter here, you + would use %u if it liked URLs better. + + If you just wanted to change the application used by Recoll to display a + mime type which it already knows, you would just need to edit mimeview. + The entries you add in your personal file override those in the central + configuration, which you do not need to alter. mimeview can also be + modified from the Gui. + + 5.4.7.2. Adding indexing support for a new file type + + Let us now imagine that the above .blob files actually contain indexable + text and that you know how to extract it with a command line program. + Getting Recoll to index the files is easy. You need to perform the above + alteration, and also to add data to the mimeconf file (typically in + ~/.recoll/mimeconf): + + o Under the [index] section, add the following line (more about the + rclblob indexing script later): + + application/x-blobapp = exec rclblob + + o Under the [icons] section, you should choose an icon to be displayed + for the files inside the result lists. Icons are normally 64x64 pixels + PNG files which live in /usr/[local/]share/recoll/images. + + o Under the [categories] section, you should add the mime type where it + makes sense (you can also create a category). Categories may be used + for filtering in advanced search. + + The rclblob filter should be an executable program or script which exists + inside /usr/[local/]share/recoll/filters. It will be given a file name as + argument and should output the text or html contents on the standard + output. + + The filter programming section describes in more detail how to write a + filter. + + ---------------------------------------------------------------------- + + Prev Up + 5.3. Building from source Home diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 00000000..35348f78 --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,84 @@ +# Copyright (C) 2005 J.F.Dockes + +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +libdir = @libdir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +mandir = @mandir@ + +QMAKE = @QMAKE@ +QTGUI = @QTGUI@ + +all: mk/sysconf + ${MAKE} -C lib + ${MAKE} -C index depend recollindex + @NOQTMAKE@(cd $(QTGUI); ${QMAKE} recoll.pro) + @NOQTMAKE@${MAKE} -C $(QTGUI) depth=.. prefix=$(prefix) exec_prefix=$(exec_prefix) libdir=$(libdir) + @NOPYTHON@${MAKE} -C python/recoll libdir=$(libdir) + ${MAKE} -C query recollq xadump + +mk/sysconf: + @echo "You need to run configure first" ; exit 1 + +static: mk/sysconf + ${MAKE} -C lib + rm -f index/recollindex + ${MAKE} -C index BSTATIC=-Wl,-Bstatic BDYNAMIC=-Wl,-Bdynamic \ + LIBXAPIANSTATICEXTRA="@LIBXAPIANSTATICEXTRA@" \ + recollindex + @NOQTMAKE@(cd $(QTGUI); $(QMAKE) recoll.pro) + @NOQTMAKE@rm -f $(QTGUI)/recoll + @NOQTMAKE@${MAKE} -C $(QTGUI) BSTATIC=-Wl,-Bstatic \ + @NOQTMAKE@ BDYNAMIC=-Wl,-Bdynamic depth=.. \ + @NOQTMAKE@ LIBXAPIANSTATICEXTRA="@LIBXAPIANSTATICEXTRA@" + +clean: + ${MAKE} -C common clean + ${MAKE} -C index clean + ${MAKE} -C internfile clean + ${MAKE} -C lib clean + ${MAKE} -C query clean + ${MAKE} -C utils clean + -${MAKE} -C desktop/unity-lens-recoll clean + -${MAKE} -C python/recoll clean + @NOQTMAKE@@-${MAKE} -C $(QTGUI) clean + rm -f qtgui/Makefile qtgui/confgui/Makefile qtgui/recoll + rm -f filters/rclexecm.pyc + rm -rf qtgui/.moc qtgui/.ui qtgui/confgui/.moc qtgui/confgui/.ui + rm -rf qtgui/.obj qtgui/.moc qtgui/.ui + rm -rf python/recoll/build + rm -rf php/recoll/build php/recoll/include php/recoll/modules + rm -rf $(QTGUI)/recoll.app + +# Note: we don't remove the top Makefile, to keep the "clean" targets +# available but a "Make" won't work without a configure anyway +distclean: clean + -${MAKE} -C desktop/unity-lens-recoll distclean + -${MAKE} -C python/recoll distclean + rm -f mk/sysconf mk/localdefs sampleconf/recoll.conf \ + qtgui/recoll.pro \ + config.log config.status \ + recollinstall \ + lib/*.dep common/autoconfig.h + rm -f common/rclversion.h + rm -f index/alldeps lib/alldeps query/alldeps \ + bincimapmime/alldeps common/alldeps internfile/alldeps utils/alldeps + rm -rf autom4te.cache + +maintainer-clean: distclean + rm -f doc/user/*.html* doc/user/*.txt doc/user/HTML.manifest + rm -f qtgui/i18n/*.qm + +# recollinstall can be executed by the user and will compute 'normal' +# values for bindir etc., relative to the prefix argument. When executed +# here, we pass a bunch of variables in the environment, the values will +# override the computed defaults. +install: all + DESTDIR=${DESTDIR} bindir=${bindir} datadir=${datadir} \ + libdir=${libdir} mandir=${mandir} \ + /bin/sh ./recollinstall ${prefix} + +.PHONY: all static clean distclean install diff --git a/src/README b/src/README new file mode 100644 index 00000000..f2e663ea --- /dev/null +++ b/src/README @@ -0,0 +1,4080 @@ + +More documentation can be found in the doc/ directory or at http://www.recoll.org + + + Recoll user manual + + Jean-Francois Dockes + + + + Copyright (c) 2005-2013 Jean-Francois Dockes + + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 or any + later version published by the Free Software Foundation; with no Invariant + Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the + license can be found at the following location: GNU web site. + + This document introduces full text search notions and describes the + installation and use of the Recoll application. It currently describes + Recoll 1.19. + + ---------------------------------------------------------------------- + + Table of Contents + + 1. Introduction + + 1.1. Giving it a try + + 1.2. Full text search + + 1.3. Recoll overview + + 2. Indexing + + 2.1. Introduction + + 2.1.1. Indexing modes + + 2.1.2. Configurations, multiple indexes + + 2.1.3. Document types + + 2.1.4. Recovery + + 2.2. Index storage + + 2.2.1. Xapian index formats + + 2.2.2. Security aspects + + 2.3. Index configuration + + 2.3.1. Multiple indexes + + 2.3.2. Index case and diacritics sensitivity + + 2.3.3. The index configuration GUI + + 2.4. Indexing WEB pages you wisit + + 2.5. Extended attributes data + + 2.6. Importing external tags + + 2.7. Periodic indexing + + 2.7.1. Running indexing + + 2.7.2. Using cron to automate indexing + + 2.8. Real time indexing + + 2.8.1. Slowing down the reindexing rate for fast + changing files + + 3. Searching + + 3.1. Searching with the Qt graphical user interface + + 3.1.1. Simple search + + 3.1.2. The default result list + + 3.1.3. The result table + + 3.1.4. Displaying thumbnails + + 3.1.5. The preview window + + 3.1.6. Complex/advanced search + + 3.1.7. The term explorer tool + + 3.1.8. Multiple indexes + + 3.1.9. Document history + + 3.1.10. Sorting search results and collapsing + duplicates + + 3.1.11. Search tips, shortcuts + + 3.1.12. Customizing the search interface + + 3.2. Searching with the KDE KIO slave + + 3.2.1. What's this + + 3.2.2. Searchable documents + + 3.3. Searching on the command line + + 3.4. Path translations + + 3.5. The query language + + 3.5.1. Modifiers + + 3.6. Search case and diacritics sensitivity + + 3.7. Anchored searches and wildcards + + 3.7.1. More about wildcards + + 3.7.2. Anchored searches + + 3.8. Desktop integration + + 3.8.1. Hotkeying recoll + + 3.8.2. The KDE Kicker Recoll applet + + 4. Programming interface + + 4.1. Writing a document filter + + 4.1.1. Simple filters + + 4.1.2. "Multiple" filters + + 4.1.3. Telling Recoll about the filter + + 4.1.4. Filter HTML output + + 4.1.5. Page numbers + + 4.2. Field data processing + + 4.3. API + + 4.3.1. Interface elements + + 4.3.2. Python interface + + 5. Installation and configuration + + 5.1. Installing a binary copy + + 5.1.1. Installing through a package system + + 5.1.2. Installing a prebuilt Recoll + + 5.2. Supporting packages + + 5.3. Building from source + + 5.3.1. Prerequisites + + 5.3.2. Building + + 5.3.3. Installation + + 5.4. Configuration overview + + 5.4.1. Main configuration file + + 5.4.2. The fields file + + 5.4.3. The mimemap file + + 5.4.4. The mimeconf file + + 5.4.5. The mimeview file + + 5.4.6. The ptrans file + + 5.4.7. Examples of configuration adjustments + +Chapter 1. Introduction + +1.1. Giving it a try + + If you do not like reading manuals (who does?) and would like to give + Recoll a try, just install the application and start the recoll graphical + user interface (GUI), which will ask to index your home directory by + default, allowing you to search immediately after indexing completes. + + Do not do this if your home directory contains a huge number of documents + and you do not want to wait or are very short on disk space. In this case, + you may first want to customize the configuration to restrict the indexed + area. + + Also be aware that you may need to install the appropriate supporting + applications for document types that need them (for example antiword for + Microsoft Word files). + +1.2. Full text search + + Recoll is a full text search application. Full text search applications + let you find your data by content rather than by external attributes (like + a file name). More specifically, they will let you specify words (terms) + that should or should not appear in the text you are looking for, and + return a list of matching documents, ordered so that the most relevant + documents will appear first. + + You do not need to remember in what file or email message you stored a + given piece of information. You just ask for related terms, and the tool + will return a list of documents where these terms are prominent, in a + similar way to Internet search engines. + + A search application tries to determine which documents are most relevant + to the search terms you provide. Computer algorithms for determining + relevance can be very complex, and in general are inferior to the power of + the human mind to rapidly determine relevance. The quality of relevance + guessing is probably the most important aspect when evaluating a search + application. + + In many cases, you are looking for all the forms of a word, not for a + specific form or spelling. These different forms may include plurals, + different tenses for a verb, or terms derived from the same root or stem + (example: floor, floors, floored, flooring...). Search applications + usually expand queries to all such related terms (words that reduce to the + same stem) and also provide a way to disable this expansion if you are + actually searching for a specific form. + + Stemming, by itself, does not accommodate for misspellings or phonetic + searches. Recoll supports these features through a specific tool (the term + explorer) which will let you explore the set of index terms along + different modes. + +1.3. Recoll overview + + Recoll uses the Xapian information retrieval library as its storage and + retrieval engine. Xapian is a very mature package using a sophisticated + probabilistic ranking model. Recoll provides the mechanisms and interface + to get data into and out of the system. + + In practice, Xapian works by remembering where terms appear in your + document files. The acquisition process is called indexing. + + The resulting index can be big (roughly the size of the original document + set), but it is not a document archive. Recoll can only display documents + that still exist at the place from which they were indexed. (Actually, + there is a way to reconstruct a document from the information in the + index, but the result is not nice, as all formatting, punctuation and + capitalization are lost). + + Recoll stores all internal data in Unicode UTF-8 format, and it can index + files with different character sets, encodings, and languages into the + same index. It has input filters for many document types. + + Stemming is the process by which Recoll reduces words to their radicals so + that searching does not depend, for example, on a word being singular or + plural (floor, floors), or on a verb tense (flooring, floored). Because + the mechanisms used for stemming depend on the specific grammatical rules + for each language, there is a separate Xapian stemmer module for most + common languages where stemming makes sense. + + Recoll stores the unstemmed versions of terms in the main index and uses + auxiliary databases for term expansion (one for each stemming language), + which means that you can switch stemming languages between searches, or + add a language without needing a full reindex. + + Storing documents written in different languages in the same index is + possible, and commonly done. In this situation, you can specify several + stemming languages for the index. + + Recoll currently makes no attempt at automatic language recognition, which + means that the stemmer will sometimes be applied to terms from other + languages with potentially strange results. In practise, even if this + introduces possibilities of confusion, this approach has been proven quite + useful, and it is much less cumbersome than separating your documents + according to what language they are written in. + + Before version 1.18, Recoll stripped most accents and diacritics from + terms, and converted them to lower case before either storing them in the + index or searching for them. As a consequence, it was impossible to search + for a particular capitalization of a term (US / us), or to discriminate + two terms based on diacritics (sake / sake, mate / mate). + + As of version 1.18, Recoll can optionally store the raw terms, without + accent stripping or case conversion. In this configuration, it is still + possible (and most common) for a query to be insensitive to case and/or + diacritics. Appropriate term expansions are performed before actually + accessing the main index. This is described in more detail in the section + about index case and diacritics sensitivity. + + Recoll has many parameters which define exactly what to index, and how to + classify and decode the source documents. These are kept in configuration + files. A default configuration is copied into a standard location (usually + something like /usr/[local/]share/recoll/examples) during installation. + The default values set by the configuration files in this directory may be + overridden by values that you set inside your personal configuration, + found by default in the .recoll sub-directory of your home directory. The + default configuration will index your home directory with default + parameters and should be sufficient for giving Recoll a try, but you may + want to adjust it later, which can be done either by editing the text + files or by using configuration menus in the recoll GUI. Some other + parameters affecting only the recoll GUI are stored in the standard + location defined by Qt. + + The indexing process is started automatically the first time you execute + the recoll GUI. Indexing can also be performed by executing the + recollindex command. + + Searches are usually performed inside the recoll GUI, which has many + options to help you find what you are looking for. However, there are + other ways to perform Recoll searches: mostly a command line interface, a + Python programming interface, a KDE KIO slave module, and a Ubuntu Unity + Lens module. + +Chapter 2. Indexing + +2.1. Introduction + + Indexing is the process by which the set of documents is analyzed and the + data entered into the database. Recoll indexing is normally incremental: + documents will only be processed if they have been modified. On the first + execution, all documents will need processing. A full index build can be + forced later by specifying an option to the indexing command (recollindex + -z or -Z). + + The following sections give an overview of different aspects of the + indexing processes and configuration, with links to detailed sections. + + 2.1.1. Indexing modes + + Recoll indexing can be performed along two different modes: + + o Periodic (or batch) indexing: indexing takes place at discrete times, + by executing the recollindex command. The typical usage is to have a + nightly indexing run programmed into your cron file. + + o Real time indexing: indexing takes place as soon as a file is created + or changed. recollindex runs as a daemon and uses a file system + alteration monitor such as inotify, Fam or Gamin to detect file + changes. + + The choice between the two methods is mostly a matter of preference, and + they can be combined by setting up multiple indexes (ie: use periodic + indexing on a big documentation directory, and real time indexing on a + small home directory). Monitoring a big file system tree can consume + significant system resources. + + The choice of method and the parameters used can be configured from the + recoll GUI: Preferences -> Indexing schedule + + 2.1.2. Configurations, multiple indexes + + The parameters describing what is to be indexed and local preferences are + defined in text files contained in a configuration directory. + + All parameters have defaults, defined in system-wide files. + + Without further configuration, Recoll will index all appropriate files + from your home directory, with a reasonable set of defaults. + + A default personal configuration directory ($HOME/.recoll/) is created + when a Recoll program is first executed. It is possible to create other + configuration directories, and use them by setting the RECOLL_CONFDIR + environment variable, or giving the -c option to any of the Recoll + commands. + + In some cases, it may be interesting to index different areas of the file + system to separate databases. You can do this by using multiple + configuration directories, each indexing a file system area to a specific + database. Typically, this would be done to separate personal and shared + indexes, or to take advantage of the organization of your data to improve + search precision. + + The generated indexes can be queried concurrently in a transparent manner. + + For index generation, multiple configurations are totally independant from + each other. When multiple indexes need to be used for a single search, + some parameters should be consistent among the configurations. + + 2.1.3. Document types + + Recoll knows about quite a few different document types. The parameters + for document types recognition and processing are set in configuration + files. + + Most file types, like HTML or word processing files, only hold one + document. Some file types, like email folders or zip archives, can hold + many individually indexed documents, which may themselves be compound + ones. Such hierarchies can go quite deep, and Recoll can process, for + example, a LibreOffice document stored as an attachment to an email + message inside an email folder archived in a zip file... + + Recoll indexing processes plain text, HTML, OpenDocument + (Open/LibreOffice), email formats, and a few others internally. + + Other file types (ie: postscript, pdf, ms-word, rtf ...) need external + applications for preprocessing. The list is in the installation section. + After every indexing operation, Recoll updates a list of commands that + would be needed for indexing existing files types. This list can be + displayed by selecting the menu option File -> Show Missing Helpers in the + recoll GUI. It is stored in the missing text file inside the configuration + directory. + + By default, Recoll will try to index any file type that it has a way to + read. This is sometimes not desirable, and there are ways to either + exclude some types, or on the contrary to define a positive list of types + to be indexed. In the latter case, any type not in the list will be + ignored. + + Excluding types can be done by adding name patterns to the skippedNames + list, which can be done from the GUI Index configuration menu. It is also + possible to exclude a mime type independantly of the file name by + associating it with the rclnull filter. This can be done by editing the + mimeconf configuration file. + + In order to define a positive list, You need to edit the main + configuration file (recoll.conf) and set the indexedmimetypes + configuration variable. Example: + + indexedmimetypes = text/html application/pdf + + + There is no GUI way to do this, because this option runs a bit contrary to + Recoll main goal which is to help you find information, independantly of + how it may be stored. + + 2.1.4. Recovery + + In the rare case where the index becomes corrupted (which can signal + itself by weird search results or crashes), the index files need to be + erased before restarting a clean indexing pass. Just delete the xapiandb + directory (see next section), or, alternatively, start the next + recollindex with the -z option, which will reset the database before + indexing. + +2.2. Index storage + + The default location for the index data is the xapiandb subdirectory of + the Recoll configuration directory, typically $HOME/.recoll/xapiandb/. + This can be changed via two different methods (with different purposes): + + o You can specify a different configuration directory by setting the + RECOLL_CONFDIR environment variable, or using the -c option to the + Recoll commands. This method would typically be used to index + different areas of the file system to different indexes. For example, + if you were to issue the following commands: + + export RECOLL_CONFDIR=~/.indexes-email + recoll + + + Then Recoll would use configuration files stored in ~/.indexes-email/ + and, (unless specified otherwise in recoll.conf) would look for the + index in ~/.indexes-email/xapiandb/. + + Using multiple configuration directories and configuration options + allows you to tailor multiple configurations and indexes to handle + whatever subset of the available data you wish to make searchable. + + o For a given configuration directory, you can specify a non-default + storage location for the index by setting the dbdir parameter in the + configuration file (see the configuration section). This method would + mainly be of use if you wanted to keep the configuration directory in + its default location, but desired another location for the index, + typically out of disk occupation concerns. + + The size of the index is determined by the size of the set of documents, + but the ratio can vary a lot. For a typical mixed set of documents, the + index size will often be close to the data set size. In specific cases (a + set of compressed mbox files for example), the index can become much + bigger than the documents. It may also be much smaller if the documents + contain a lot of images or other non-indexed data (an extreme example + being a set of mp3 files where only the tags would be indexed). + + Of course, images, sound and video do not increase the index size, which + means that nowadays (2012), typically, even a big index will be negligible + against the total amount of data on the computer. + + The index data directory (xapiandb) only contains data that can be + completely rebuilt by an index run (as long as the original documents + exist), and it can always be destroyed safely. + + 2.2.1. Xapian index formats + + Xapian versions usually support several formats for index storage. A given + major Xapian version will have a current format, used to create new + indexes, and will also support the format from the previous major version. + + Xapian will not convert automatically an existing index from the older + format to the newer one. If you want to upgrade to the new format, or if a + very old index needs to be converted because its format is not supported + any more, you will have to explicitly delete the old index, then run a + normal indexing process. + + Using the -z option to recollindex is not sufficient to change the format, + you will have to delete all files inside the index directory (typically + ~/.recoll/xapiandb) before starting the indexing. + + 2.2.2. Security aspects + + The Recoll index does not hold copies of the indexed documents. But it + does hold enough data to allow for an almost complete reconstruction. If + confidential data is indexed, access to the database directory should be + restricted. + + Recoll (since version 1.4) will create the configuration directory with a + mode of 0700 (access by owner only). As the index data directory is by + default a sub-directory of the configuration directory, this should result + in appropriate protection. + + If you use another setup, you should think of the kind of protection you + need for your index, set the directory and files access modes + appropriately, and also maybe adjust the umask used during index updates. + +2.3. Index configuration + + Variables set inside the Recoll configuration files control which areas of + the file system are indexed, and how files are processed. These variables + can be set either by editing the text files or by using the dialogs in the + recoll GUI. + + The first time you start recoll, you will be asked whether or not you + would like it to build the index. If you want to adjust the configuration + before indexing, just click Cancel at this point, which will get you into + the configuration interface. If you exit at this point, recoll will have + created a ~/.recoll directory containing empty configuration files, which + you can edit by hand. + + The configuration is documented inside the installation chapter of this + document, or in the recoll.conf(5) man page, but the most current + information will most likely be the comments inside the sample file. The + most immediately useful variable you may interested in is probably + topdirs, which determines what subtrees get indexed. + + The applications needed to index file types other than text, HTML or email + (ie: pdf, postscript, ms-word...) are described in the external packages + section. + + As of Recoll 1.18 there are two incompatible types of Recoll indexes, + depending on the treatment of character case and diacritics. The next + section describes the two types in more detail. + + 2.3.1. Multiple indexes + + Multiple Recoll indexes can be created by using several configuration + directories which are usually set to index different areas of the file + system. A specific index can be selected for updating or searching, using + the RECOLL_CONFDIR environment variable or the -c option to recoll and + recollindex. + + A typical usage scenario for the multiple index feature would be for a + system administrator to set up a central index for shared data, that you + choose to search or not in addition to your personal data. Of course, + there are other possibilities. There are many cases where you know the + subset of files that should be searched, and where narrowing the search + can improve the results. You can achieve approximately the same effect + with the directory filter in advanced search, but multiple indexes will + have much better performance and may be worth the trouble. + + A recollindex program instance can only update one specific index. + + The main index (defined by RECOLL_CONFDIR or -c) is always active. If this + is undesirable, you can set up your base configuration to index an empty + directory. + + The different search interfaces (GUI, command line, ...) have different + methods to define the set of indexes to be used, see the appropriate + section. + + If a set of multiple indexes are to be used together for searches, some + configuration parameters must be consistent among the set. These are + parameters which need to be the same when indexing and searching. As the + parameters come from the main configuration when searching, they need to + be compatible with what was set when creating the other indexes (which + came from their respective configuration directories). + + Most importantly, all indexes to be queried concurrently must have the + same option concerning character case and diacritics stripping, but there + are other constraints. Most of the relevant parameters are described in + the linked section. + + 2.3.2. Index case and diacritics sensitivity + + As of Recoll version 1.18 you have a choice of building an index with + terms stripped of character case and diacritics, or one with raw terms. + For a source term of Resume, the former will store resume, the latter + Resume. + + Each type of index allows performing searches insensitive to case and + diacritics: with a raw index, the user entry will be expanded to match all + case and diacritics variations present in the index. With a stripped + index, the search term will be stripped before searching. + + A raw index allows for another possibility which a stripped index cannot + offer: using case and diacritics to discriminate between terms, returning + different results when searching for US and us or resume and resume. Read + the section about search case and diacritics sensitivity for more details. + + The type of index to be created is controlled by the indexStripChars + configuration variable which can only be changed by editing the + configuration file. Any change implies an index reset (not automated by + Recoll), and all indexes in a search must be set in the same way (again, + not checked by Recoll). + + If the indexStripChars is not set, Recoll 1.18 creates a stripped index by + default, for compatibility with previous versions. + + As a cost for added capability, a raw index will be slightly bigger than a + stripped one (around 10%). Also, searches will be more complex, so + probably slightly slower, and the feature is still young, so that a + certain amount of weirdness cannot be excluded. + + 2.3.3. The index configuration GUI + + Most parameters for a given index configuration can be set from a recoll + GUI running on this configuration (either as default, or by setting + RECOLL_CONFDIR or the -c option.) + + The interface is started from the Preferences -> Index Configuration menu + entry. It is divided in four tabs, Global parameters, Local parameters, + Web history (which is explained in the next section) and Search + parameters. + + The Global parameters tab allows setting global variables, like the lists + of top directories, skipped paths, or stemming languages. + + The Local parameters tab allows setting variables that can be redefined + for subdirectories. This second tab has an initially empty list of + customisation directories, to which you can add. The variables are then + set for the currently selected directory (or at the top level if the empty + line is selected). + + The Search parameters section defines parameters which are used at query + time, but are global to an index and affect all search tools, not only the + GUI. + + The meaning for most entries in the interface is self-evident and + documented by a ToolTip popup on the text label. For more detail, you will + need to refer to the configuration section of this guide. + + The configuration tool normally respects the comments and most of the + formatting inside the configuration file, so that it is quite possible to + use it on hand-edited files, which you might nevertheless want to backup + first... + +2.4. Indexing WEB pages you wisit + + With the help of a Firefox extension, Recoll can index the Internet pages + that you visit. The extension was initially designed for the Beagle + indexer, but it has recently be renamed and better adapted to Recoll. + + The extension works by copying visited WEB pages to an indexing queue + directory, which Recoll then processes, indexing the data, storing it into + a local cache, then removing the file from the queue. + + This feature can be enabled in the GUI Index configuration panel, or by + editing the configuration file (set processwebqueue to 1). + + A current pointer to the extension can be found, along with up-to-date + instructions, on the Recoll wiki. + + A copy of the indexed WEB pages is retained by Recoll in a local cache + (from which previews can be fetched). The cache size can be adjusted from + the Index configuration / Web history panel. Once the maximum size is + reached, old pages are purged - both from the cache and the index - to + make room for new ones, so you need to explicitly archive in some other + place the pages that you want to keep indefinitely. + +2.5. Extended attributes data + + User extended attributes are named pieces of information that most modern + file systems can attach to any file. + + Recoll versions 1.19 and later process extended attributes as document + fields by default. For older versions, this has to be activated at build + time. + + A freedesktop standard defines a few special attributes, which are handled + as such by Recoll: + + mime_type + + If set, this overrides any other determination of the file mime + type. + + charset + If set, this defines the file character set (mostly useful for + plain text files). + + By default, other attributes are handled as Recoll fields. On Linux, the + user prefix is removed from the name. This can be configured more + precisely inside the fields configuration file. + +2.6. Importing external tags + + During indexing, it is possible to import metadata for each file by + executing commands. For example, this could extract user tag data for the + file and store it in a field for indexing. + + See the section about the metadatacmds field in the main configuration + chapter for more detail. + +2.7. Periodic indexing + + 2.7.1. Running indexing + + Indexing is always performed by the recollindex program, which can be + started either from the command line or from the File menu in the recoll + GUI program. When started from the GUI, the indexing will run on the same + configuration recoll was started on. When started from the command line, + recollindex will use the RECOLL_CONFDIR variable or accept a -c confdir + option to specify a non-default configuration directory. + + If the recoll program finds no index when it starts, it will automatically + start indexing (except if canceled). + + The recollindex indexing process can be interrupted by sending an + interrupt (Ctrl-C, SIGINT) or terminate (SIGTERM) signal. Some time may + elapse before the process exits, because it needs to properly flush and + close the index. This can also be done from the recoll GUI File -> Stop + Indexing menu entry. + + After such an interruption, the index will be somewhat inconsistent + because some operations which are normally performed at the end of the + indexing pass will have been skipped (for example, the stemming and + spelling databases will be inexistant or out of date). You just need to + restart indexing at a later time to restore consistency. The indexing will + restart at the interruption point (the full file tree will be traversed, + but files that were indexed up to the interruption and for which the index + is still up to date will not need to be reindexed). + + recollindex has a number of other options which are described in its man + page. Only a few will be described here. + + Option -z will reset the index when starting. This is almost the same as + destroying the index files (the nuance is that the Xapian format version + will not be changed). + + Option -Z will force the update of all documents without resetting the + index first. This will not have the "clean start" aspect of -z, but the + advantage is that the index will remain available for querying while it is + rebuilt, which can be a significant advantage if it is very big (some + installations need days for a full index rebuild). + + Of special interest also, maybe, are the -i and -f options. -i allows + indexing an explicit list of files (given as command line parameters or + read on stdin). -f tells recollindex to ignore file selection parameters + from the configuration. Together, these options allow building a custom + file selection process for some area of the file system, by adding the top + directory to the skippedPaths list and using an appropriate file selection + method to build the file list to be fed to recollindex -if. Trivial + example: + + find . -name indexable.txt -print | recollindex -if + + + recollindex -i will not descend into subdirectories specified as + parameters, but just add them as index entries. It is up to the external + file selection method to build the complete file list. + + 2.7.2. Using cron to automate indexing + + The most common way to set up indexing is to have a cron task execute it + every night. For example the following crontab entry would do it every day + at 3:30AM (supposing recollindex is in your PATH): + + 30 3 * * * recollindex > /some/tmp/dir/recolltrace 2>&1 + + Or, using anacron: + + 1 15 su mylogin -c "recollindex recollindex > /tmp/rcltraceme 2>&1" + + As of version 1.17 the Recoll GUI has dialogs to manage crontab entries + for recollindex. You can reach them from the Preferences -> Indexing + Schedule menu. They only work with the good old cron, and do not give + access to all features of cron scheduling. + + The usual command to edit your crontab is crontab -e (which will usually + start the vi editor to edit the file). You may have more sophisticated + tools available on your system. + + Please be aware that there may be differences between your usual + interactive command line environment and the one seen by crontab commands. + Especially the PATH variable may be of concern. Please check the crontab + manual pages about possible issues. + +2.8. Real time indexing + + Real time monitoring/indexing is performed by starting the recollindex -m + command. With this option, recollindex will detach from the terminal and + become a daemon, permanently monitoring file changes and updating the + index. + + Under KDE, Gnome and some other desktop environments, the daemon can + automatically started when you log in, by creating a desktop file inside + the ~/.config/autostart directory. This can be done for you by the Recoll + GUI. Use the Preferences->Indexing Schedule menu. + + With older X11 setups, starting the daemon is normally performed as part + of the user session script. + + The rclmon.sh script can be used to easily start and stop the daemon. It + can be found in the examples directory (typically + /usr/local/[share/]recoll/examples). + + For example, my out of fashion xdm-based session has a .xsession script + with the following lines at the end: + + recollconf=$HOME/.recoll-home + recolldata=/usr/local/share/recoll + RECOLL_CONFDIR=$recollconf $recolldata/examples/rclmon.sh start + + fvwm + + + The indexing daemon gets started, then the window manager, for which the + session waits. + + By default the indexing daemon will monitor the state of the X11 session, + and exit when it finishes, it is not necessary to kill it explicitly. (The + X11 server monitoring can be disabled with option -x to recollindex). + + If you use the daemon completely out of an X11 session, you need to add + option -x to disable X11 session monitoring (else the daemon will not + start). + + By default, the messages from the indexing daemon will be discarded. You + may want to change this by setting the daemlogfilename and daemloglevel + configuration parameters. Also the log file will only be truncated when + the daemon starts. If the daemon runs permanently, the log file may grow + quite big, depending on the log level. + + When building Recoll, the real time indexing support can be customised + during package configuration with the --with[out]-fam or + --with[out]-inotify options. The default is currently to include inotify + monitoring on systems that support it, and, as of Recoll 1.17, gamin + support on FreeBSD. + + While it is convenient that data is indexed in real time, repeated + indexing can generate a significant load on the system when files such as + email folders change. Also, monitoring large file trees by itself + significantly taxes system resources. You probably do not want to enable + it if your system is short on resources. Periodic indexing is adequate in + most cases. + + 2.8.1. Slowing down the reindexing rate for fast changing files + + When using the real time monitor, it may happen that some files need to be + indexed, but change so often that they impose an excessive load for the + system. + + Recoll provides a configuration option to specify the minimum time before + which a file, specified by a wildcard pattern, cannot be reindexed. See + the mondelaypatterns parameter in the configuration section. + +Chapter 3. Searching + +3.1. Searching with the Qt graphical user interface + + The recoll program provides the main user interface for searching. It is + based on the Qt library. + + recoll has two search modes: + + o Simple search (the default, on the main screen) has a single entry + field where you can enter multiple words. + + o Advanced search (a panel accessed through the Tools menu or the + toolbox bar icon) has multiple entry fields, which you may use to + build a logical condition, with additional filtering on file type, + location in the file system, modification date, and size. + + In most cases, you can enter the terms as you think them, even if they + contain embedded punctuation or other non-textual characters. For example, + Recoll can handle things like email addresses, or arbitrary cut and paste + from another text window, punctation and all. + + The main case where you should enter text differently from how it is + printed is for east-asian languages (Chinese, Japanese, Korean). Words + composed of single or multiple characters should be entered separated by + white space in this case (they would typically be printed without white + space). + + 3.1.1. Simple search + + 1. Start the recoll program. + + 2. Possibly choose a search mode: Any term, All terms, File name or Query + language. + + 3. Enter search term(s) in the text field at the top of the window. + + 4. Click the Search button or hit the Enter key to start the search. + + The initial default search mode is Query language. Without special + directives, this will look for documents containing all of the search + terms (the ones with more terms will get better scores), just like the All + terms mode which will ignore such directives. Any term will search for + documents where at least one of the terms appear. + + The Query Language features are described in a separate section. + + All search modes allow wildcards inside terms (*, ?, []). You may want to + have a look at the section about wildcards for more information about + this. + + File name will specifically look for file names. The point of having a + separate file name search is that wild card expansion can be performed + more efficiently on a small subset of the index (allowing wild cards on + the left of terms without excessive penality). Things to know: + + o White space in the entry should match white space in the file name, + and is not treated specially. + + o The search is insensitive to character case and accents, independantly + of the type of index. + + o An entry without any wild card character and not capitalized will be + prepended and appended with '*' (ie: etc -> *etc*, but Etc -> etc). + + o If you have a big index (many files), excessively generic fragments + may result in inefficient searches. + + You can search for exact phrases (adjacent words in a given order) by + enclosing the input inside double quotes. Ex: "virtual reality". + + When using a stripped index, character case has no influence on search, + except that you can disable stem expansion for any term by capitalizing + it. Ie: a search for floor will also normally look for flooring, floored, + etc., but a search for Floor will only look for floor, in any character + case. Stemming can also be disabled globally in the preferences. When + using a raw index, the rules are a bit more complicated. + + Recoll remembers the last few searches that you performed. You can use the + simple search text entry widget (a combobox) to recall them (click on the + thing at the right of the text field). Please note, however, that only the + search texts are remembered, not the mode (all/any/file name). + + Typing Esc Space while entering a word in the simple search entry will + open a window with possible completions for the word. The completions are + extracted from the database. + + Double-clicking on a word in the result list or a preview window will + insert it into the simple search entry field. + + You can cut and paste any text into an All terms or Any term search field, + punctuation, newlines and all - except for wildcard characters (single ? + characters are ok). Recoll will process it and produce a meaningful + search. This is what most differentiates this mode from the Query Language + mode, where you have to care about the syntax. + + You can use the Tools -> Advanced search dialog for more complex searches. + + 3.1.2. The default result list + + After starting a search, a list of results will instantly be displayed in + the main list window. + + By default, the document list is presented in order of relevance (how well + the system estimates that the document matches the query). You can sort + the result by ascending or descending date by using the vertical arrows in + the toolbar. + + Clicking on the Preview link for an entry will open an internal preview + window for the document. Further Preview clicks for the same search will + open tabs in the existing preview window. You can use Shift+Click to force + the creation of another preview window, which may be useful to view the + documents side by side. (You can also browse successive results in a + single preview window by typing Shift+ArrowUp/Down in the window). + + Clicking the Open link will start an external viewer for the document. By + default, Recoll lets the desktop choose the appropriate application for + most document types (there is a short list of exceptions, see further). If + you prefer to completely customize the choice of applications, you can + uncheck the Use desktop preferences option in the GUI preferences dialog, + and click the Choose editor applications button to adjust the predefined + Recoll choices. The tool accepts multiple selections of mime types (e.g. + to set up the editor for the dozens of office file types). + + Even when Use desktop preferences is checked, there is a small list of + exceptions, for mime types where the Recoll choice should override the + desktop one. These are applications which are well integrated with Recoll, + especially evince for viewing PDF and Postscript files because of its + support for opening the document at a specific page and passing a search + string as an argument. Of course, you can edit the list (in the GUI + preferences) if you would prefer to lose the functionality and use the + standard desktop tool. + + You may also change the choice of applications by editing the mimeview + configuration file if you find this more convenient. + + The Preview and Open edit links may not be present for all entries, + meaning that Recoll has no configured way to preview a given file type + (which was indexed by name only), or no configured external editor for the + file type. This can sometimes be adjusted simply by tweaking the mimemap + and mimeview configuration files (the latter can be modified with the user + preferences dialog). + + The format of the result list entries is entirely configurable by using + the preference dialog to edit an HTML fragment. + + You can click on the Query details link at the top of the results page to + see the query actually performed, after stem expansion and other + processing. + + Double-clicking on any word inside the result list or a preview window + will insert it into the simple search text. + + The result list is divided into pages (the size of which you can change in + the preferences). Use the arrow buttons in the toolbar or the links at the + bottom of the page to browse the results. + + 3.1.2.1. No results: the spelling suggestions + + When a search yields no result, and if the aspell dictionary is + configured, Recoll will try to check for misspellings among the query + terms, and will propose lists of replacements. Clicking on one of the + suggestions will replace the word and restart the search. You can hold any + of the modifier keys (Ctrl, Shift, etc.) while clicking if you would + rather stay on the suggestion screen because several terms need + replacement. + + 3.1.2.2. The result list right-click menu + + Apart from the preview and edit links, you can display a pop-up menu by + right-clicking over a paragraph in the result list. This menu has the + following entries: + + o Preview + + o Open + + o Copy File Name + + o Copy Url + + o Save to File + + o Find similar + + o Preview Parent document + + o Open Parent document + + o Open Snippets Window + + The Preview and Open entries do the same thing as the corresponding links. + + The Copy File Name and Copy Url copy the relevant data to the clipboard, + for later pasting. + + Save to File allows saving the contents of a result document to a chosen + file. This entry will only appear if the document does not correspond to + an existing file, but is a subdocument inside such a file (ie: an email + attachment). It is especially useful to extract attachments with no + associated editor. + + The Find similar entry will select a number of relevant term from the + current document and enter them into the simple search field. You can then + start a simple search, with a good chance of finding documents related to + the current result. + + The Parent document entries will appear for documents which are not + actually files but are part of, or attached to, a higher level document. + This entry is mainly useful for email attachments and permits viewing the + message to which the document is attached. Note that the entry will also + appear for an email which is part of an mbox folder file, but that you + can't actually visualize the folder (there will be an error dialog if you + try). Recoll is unfortunately not yet smart enough to disable the entry in + this case. In other cases, the Open option makes sense, for example to + start a chm viewer on the parent document for a help page. + + The Open Snippets Window entry will only appear for documents which + support page breaks (typically PDF, Postscript, DVI). The snippets window + lists extracts from the document, taken around search terms occurrences, + along with the corresponding page number, as links which can be used to + start the native viewer on the appropriate page. If the viewer supports + it, its search function will also be primed with one of the search terms. + + 3.1.3. The result table + + In Recoll 1.15 and newer, the results can be displayed in spreadsheet-like + fashion. You can switch to this presentation by clicking the table-like + icon in the toolbar (this is a toggle, click again to restore the list). + + Clicking on the column headers will allow sorting by the values in the + column. You can click again to invert the order, and use the header + right-click menu to reset sorting to the default relevance order (you can + also use the sort-by-date arrows to do this). + + Both the list and the table display the same underlying results. The sort + order set from the table is still active if you switch back to the list + mode. You can click twice on a date sort arrow to reset it from there. + + The header right-click menu allows adding or deleting columns. The columns + can be resized, and their order can be changed (by dragging). All the + changes are recorded when you quit recoll + + Hovering over a table row will update the detail area at the bottom of the + window with the corresponding values. You can click the row to freeze the + display. The bottom area is equivalent to a result list paragraph, with + links for starting a preview or a native application, and an equivalent + right-click menu. Typing Esc (the Escape key) will unfreeze the display. + + 3.1.4. Displaying thumbnails + + The default format for the result list entries and the detail area of the + result table display an icon for each result document. The icon is either + a generic one determined from the MIME type, or a thumbnail of the + document appearance. Thumbnails are only displayed if found in the + standard freedesktop location, where they would typically have been + created by a file manager. + + Recoll has no capability to create thumbnails. A relatively simple trick + is to use the Open parent document/folder entry in the result list popup + menu. This should open a file manager window on the containing directory, + which should in turn create the thumbnails (depending on your settings). + Restarting the search should then display the thumbnails. + + There are also some pointers about thumbnail generation on the Recoll + wiki. + + 3.1.5. The preview window + + The preview window opens when you first click a Preview link inside the + result list. + + Subsequent preview requests for a given search open new tabs in the + existing window (except if you hold the Shift key while clicking which + will open a new window for side by side viewing). + + Starting another search and requesting a preview will create a new preview + window. The old one stays open until you close it. + + You can close a preview tab by typing Ctrl-W (Ctrl + W) in the window. + Closing the last tab for a window will also close the window. + + Of course you can also close a preview window by using the window manager + button in the top of the frame. + + You can display successive or previous documents from the result list + inside a preview tab by typing Shift+Down or Shift+Up (Down and Up are the + arrow keys). + + A right-click menu in the text area allows switching between displaying + the main text or the contents of fields associated to the document (ie: + author, abtract, etc.). This is especially useful in cases where the term + match did not occur in the main text but in one of the fields. In the case + of images, you can switch between three displays: the image itself, the + image metadata as extracted by exiftool and the fields, which is the + metadata stored in the index. + + You can print the current preview window contents by typing Ctrl-P (Ctrl + + P) in the window text. + + 3.1.5.1. Searching inside the preview + + The preview window has an internal search capability, mostly controlled by + the panel at the bottom of the window, which works in two modes: as a + classical editor incremental search, where we look for the text entered in + the entry zone, or as a way to walk the matches between the document and + the Recoll query that found it. + + Incremental text search + + The preview tabs have an internal incremental search function. You + initiate the search either by typing a / (slash) or CTL-F inside + the text area or by clicking into the Search for: text field and + entering the search string. You can then use the Next and Previous + buttons to find the next/previous occurrence. You can also type F3 + inside the text area to get to the next occurrence. + + If you have a search string entered and you use Ctrl-Up/Ctrl-Down + to browse the results, the search is initiated for each successive + document. If the string is found, the cursor will be positioned at + the first occurrence of the search string. + + Walking the match lists + + If the entry area is empty when you click the Next or Previous + buttons, the editor will be scrolled to show the next match to any + search term (the next highlighted zone). If you select a search + group from the dropdown list and click Next or Previous, the match + list for this group will be walked. This is not the same as a text + search, because the occurences will include non-exact matches (as + caused by stemming or wildcards). The search will revert to the + text mode as soon as you edit the entry area. + + 3.1.6. Complex/advanced search + + The advanced search dialog helps you build more complex queries without + memorizing the search language constructs. It can be opened through the + Tools menu or through the main toolbar. + + The dialog has two tabs: + + 1. The first tab lets you specify terms to search for, and permits + specifying multiple clauses which are combined to build the search. + + 2. The second tab lets filter the results according to file size, date of + modification, mime type, or location. + + Click on the Start Search button in the advanced search dialog, or type + Enter in any text field to start the search. The button in the main window + always performs a simple search. + + Click on the Show query details link at the top of the result page to see + the query expansion. + + 3.1.6.1. Avanced search: the "find" tab + + This part of the dialog lets you constructc a query by combining multiple + clauses of different types. Each entry field is configurable for the + following modes: + + o All terms. + + o Any term. + + o None of the terms. + + o Phrase (exact terms in order within an adjustable window). + + o Proximity (terms in any order within an adjustable window). + + o Filename search. + + Additional entry fields can be created by clicking the Add clause button. + + When searching, the non-empty clauses will be combined either with an AND + or an OR conjunction, depending on the choice made on the left (All + clauses or Any clause). + + Entries of all types except "Phrase" and "Near" accept a mix of single + words and phrases enclosed in double quotes. Stemming and wildcard + expansion will be performed as for simple search. + + Phrases and Proximity searches. These two clauses work in similar ways, + with the difference that proximity searches do not impose an order on the + words. In both cases, an adjustable number (slack) of non-matched words + may be accepted between the searched ones (use the counter on the left to + adjust this count). For phrases, the default count is zero (exact match). + For proximity it is ten (meaning that two search terms, would be matched + if found within a window of twelve words). Examples: a phrase search for + quick fox with a slack of 0 will match quick fox but not quick brown fox. + With a slack of 1 it will match the latter, but not fox quick. A proximity + search for quick fox with the default slack will match the latter, and + also a fox is a cunning and quick animal. + + 3.1.6.2. Avanced search: the "filter" tab + + This part of the dialog has several sections which allow filtering the + results of a search according to a number of criteria + + o The first section allows filtering by dates of last modification. You + can specify both a minimum and a maximum date. The initial values are + set according to the oldest and newest documents found in the index. + + o The next section allows filtering the results by file size. There are + two entries for minimum and maximum size. Enter decimal numbers. You + can use suffix multipliers: k/K, m/M, g/G, t/T for 1E3, 1E6, 1E9, 1E12 + respectively. + + o The next section allows filtering the results by their mime types, or + mime categories (ie: media/text/message/etc.). + + You can transfer the types between two boxes, to define which will be + included or excluded by the search. + + The state of the file type selection can be saved as the default (the + file type filter will not be activated at program start-up, but the + lists will be in the restored state). + + o The bottom section allows restricting the search results to a sub-tree + of the indexed area. You can use the Invert checkbox to search for + files not in the sub-tree instead. If you use directory filtering + often and on big subsets of the file system, you may think of setting + up multiple indexes instead, as the performance may be better. + + You can use relative/partial paths for filtering. Ie, entering + dirA/dirB would match either /dir1/dirA/dirB/myfile1 or + /dir2/dirA/dirB/someother/myfile2. + + 3.1.6.3. Avanced search history + + The advanced search tool memorizes the last 100 searches performed. You + can walk the saved searches by using the up and down arrow keys while the + keyboard focus belongs to the advanced search dialog. + + The complex search history can be erased, along with the one for simple + search, by selecting the File -> Erase Search History menu entry. + + 3.1.7. The term explorer tool + + Recoll automatically manages the expansion of search terms to their + derivatives (ie: plural/singular, verb inflections). But there are other + cases where the exact search term is not known. For example, you may not + remember the exact spelling, or only know the beginning of the name. + + The term explorer tool (started from the toolbar icon or from the Term + explorer entry of the Tools menu) can be used to search the full index + terms list. It has three modes of operations: + + Wildcard + + In this mode of operation, you can enter a search string with + shell-like wildcards (*, ?, []). ie: xapi* would display all index + terms beginning with xapi. (More about wildcards here). + + Regular expression + + This mode will accept a regular expression as input. Example: + word[0-9]+. The expression is implicitely anchored at the + beginning. Ie: press will match pression but not expression. You + can use .*press to match the latter, but be aware that this will + cause a full index term list scan, which can be quite long. + + Stem expansion + + This mode will perform the usual stem expansion normally done as + part user input processing. As such it is probably mostly useful + to demonstrate the process. + + Spelling/Phonetic + + In this mode, you enter the term as you think it is spelled, and + Recoll will do its best to find index terms that sound like your + entry. This mode uses the Aspell spelling application, which must + be installed on your system for things to work (if your documents + contain non-ascii characters, Recoll needs an aspell version newer + than 0.60 for UTF-8 support). The language which is used to build + the dictionary out of the index terms (which is done at the end of + an indexing pass) is the one defined by your NLS environment. + Weird things will probably happen if languages are mixed up. + + Note that in cases where Recoll does not know the beginning of the string + to search for (ie a wildcard expression like *coll), the expansion can + take quite a long time because the full index term list will have to be + processed. The expansion is currently limited at 10000 results for + wildcards and regular expressions. It is possible to change the limit in + the configuration file. + + Double-clicking on a term in the result list will insert it into the + simple search entry field. You can also cut/paste between the result list + and any entry field (the end of lines will be taken care of). + + 3.1.8. Multiple indexes + + See the section describing the use of multiple indexes for generalities. + Only the aspects concerning the recoll GUI are described here. + + A recoll program instance is always associated with a specific index, + which is the one to be updated when requested from the File menu, but it + can use any number of Recoll indexes for searching. The external indexes + can be selected through the external indexes tab in the preferences + dialog. + + Index selection is performed in two phases. A set of all usable indexes + must first be defined, and then the subset of indexes to be used for + searching. These parameters are retained across program executions (there + are kept separately for each Recoll configuration). The set of all indexes + is usually quite stable, while the active ones might typically be adjusted + quite frequently. + + The main index (defined by RECOLL_CONFDIR) is always active. If this is + undesirable, you can set up your base configuration to index an empty + directory. + + When adding a new index to the set, you can select either a Recoll + configuration directory, or directly a Xapian index directory. In the + first case, the Xapian index directory will be obtained from the selected + configuration. + + As building the set of all indexes can be a little tedious when done + through the user interface, you can use the RECOLL_EXTRA_DBS environment + variable to provide an initial set. This might typically be set up by a + system administrator so that every user does not have to do it. The + variable should define a colon-separated list of index directories, ie: + + export RECOLL_EXTRA_DBS=/some/place/xapiandb:/some/other/db + + Another environment variable, RECOLL_ACTIVE_EXTRA_DBS allows adding to the + active list of indexes. This variable was suggested and implemented by a + Recoll user. It is mostly useful if you use scripts to mount external + volumes with Recoll indexes. By using RECOLL_EXTRA_DBS and + RECOLL_ACTIVE_EXTRA_DBS, you can add and activate the index for the + mounted volume when starting recoll. + + RECOLL_ACTIVE_EXTRA_DBS is available for Recoll versions 1.17.2 and later. + A change was made in the same update so that recoll will automatically + deactivate unreachable indexes when starting up. + + 3.1.9. Document history + + Documents that you actually view (with the internal preview or an external + tool) are entered into the document history, which is remembered. + + You can display the history list by using the Tools/Doc History menu + entry. + + You can erase the document history by using the Erase document history + entry in the File menu. + + 3.1.10. Sorting search results and collapsing duplicates + + The documents in a result list are normally sorted in order of relevance. + It is possible to specify a different sort order, either by using the + vertical arrows in the GUI toolbox to sort by date, or switching to the + result table display and clicking on any header. The sort order chosen + inside the result table remains active if you switch back to the result + list, until you click one of the vertical arrows, until both are unchecked + (you are back to sort by relevance). + + Sort parameters are remembered between program invocations, but result + sorting is normally always inactive when the program starts. It is + possible to keep the sorting activation state between program invocations + by checking the Remember sort activation state option in the preferences. + + It is also possible to hide duplicate entries inside the result list + (documents with the exact same contents as the displayed one). The test of + identity is based on an MD5 hash of the document container, not only of + the text contents (so that ie, a text document with an image added will + not be a duplicate of the text only). Duplicates hiding is controlled by + an entry in the GUI configuration dialog, and is off by default. + + 3.1.11. Search tips, shortcuts + + 3.1.11.1. Terms and search expansion + + Term completion. Typing Esc Space in the simple search entry field while + entering a word will either complete the current word if its beginning + matches a unique term in the index, or open a window to propose a list of + completions. + + Picking up new terms from result or preview text. Double-clicking on a + word in the result list or in a preview window will copy it to the simple + search entry field. + + Wildcards. Wildcards can be used inside search terms in all forms of + searches. More about wildcards. + + Automatic suffixes. Words like odt or ods can be automatically turned into + query language ext:xxx clauses. This can be enabled in the Search + preferences panel in the GUI. + + Disabling stem expansion. Entering a capitalized word in any search field + will prevent stem expansion (no search for gardening if you enter Garden + instead of garden). This is the only case where character case should make + a difference for a Recoll search. You can also disable stem expansion or + change the stemming language in the preferences. + + Finding related documents. Selecting the Find similar documents entry in + the result list paragraph right-click menu will select a set of + "interesting" terms from the current result, and insert them into the + simple search entry field. You can then possibly edit the list and start a + search to find documents which may be apparented to the current result. + + File names. File names are added as terms during indexing, and you can + specify them as ordinary terms in normal search fields (Recoll used to + index all directories in the file path as terms. This has been abandoned + as it did not seem really useful). Alternatively, you can use the specific + file name search which will only look for file names, and may be faster + than the generic search especially when using wildcards. + + 3.1.11.2. Working with phrases and proximity + + Phrases and Proximity searches. A phrase can be looked for by enclosing it + in double quotes. Example: "user manual" will look only for occurrences of + user immediately followed by manual. You can use the This phrase field of + the advanced search dialog to the same effect. Phrases can be entered + along simple terms in all simple or advanced search entry fields (except + This exact phrase). + + AutoPhrases. This option can be set in the preferences dialog. If it is + set, a phrase will be automatically built and added to simple searches + when looking for Any terms. This will not change radically the results, + but will give a relevance boost to the results where the search terms + appear as a phrase. Ie: searching for virtual reality will still find all + documents where either virtual or reality or both appear, but those which + contain virtual reality should appear sooner in the list. + + Phrase searches can strongly slow down a query if most of the terms in the + phrase are common. This is why the autophrase option is off by default for + Recoll versions before 1.17. As of version 1.17, autophrase is on by + default, but very common terms will be removed from the constructed + phrase. The removal threshold can be adjusted from the search preferences. + + Phrases and abbreviations. As of Recoll version 1.17, dotted abbreviations + like I.B.M. are also automatically indexed as a word without the dots: + IBM. Searching for the word inside a phrase (ie: "the IBM company") will + only match the dotted abrreviation if you increase the phrase slack (using + the advanced search panel control, or the o query language modifier). + Literal occurences of the word will be matched normally. + + 3.1.11.3. Others + + Using fields. You can use the query language and field specifications to + only search certain parts of documents. This can be especially helpful + with email, for example only searching emails from a specific originator: + search tips from:helpfulgui + + Ajusting the result table columns. When displaying results in table mode, + you can use a right click on the table headers to activate a pop-up menu + which will let you adjust what columns are displayed. You can drag the + column headers to adjust their order. You can click them to sort by the + field displayed in the column. You can also save the result list in CSV + format. + + Query explanation. You can get an exact description of what the query + looked for, including stem expansion, and Boolean operators used, by + clicking on the result list header. + + Advanced search history. As of Recoll 1.18, you can display any of the + last 100 complex searches performed by using the up and down arrow keys + while the advanced search panel is active. + + Browsing the result list inside a preview window. Entering Shift-Down or + Shift-Up (Shift + an arrow key) in a preview window will display the next + or the previous document from the result list. Any secondary search + currently active will be executed on the new document. + + Scrolling the result list from the keyboard. You can use PageUp and + PageDown to scroll the result list, Shift+Home to go back to the first + page. These work even while the focus is in the search entry. + + Editing a new search while the focus is not in the search entry. You can + use the Ctrl-Shift-S shortcut to return the cursor to the search entry + (and select the current search text), while the focus is anywhere in the + main window. + + Forced opening of a preview window. You can use Shift+Click on a result + list Preview link to force the creation of a preview window instead of a + new tab in the existing one. + + Closing previews. Entering Ctrl-W in a tab will close it (and, for the + last tab, close the preview window). Entering Esc will close the preview + window and all its tabs. + + Printing previews. Entering Ctrl-P in a preview window will print the + currently displayed text. + + Quitting. Entering Ctrl-Q almost anywhere will close the application. + + 3.1.12. Customizing the search interface + + You can customize some aspects of the search interface by using the GUI + configuration entry in the Preferences menu. + + There are several tabs in the dialog, dealing with the interface itself, + the parameters used for searching and returning results, and what indexes + are searched. + + User interface parameters: + + o Highlight color for query terms: Terms from the user query are + highlighted in the result list samples and the preview window. The + color can be chosen here. Any Qt color string should work (ie red, + #ff0000). The default is blue. + + o Style sheet: The name of a Qt style sheet text file which is applied + to the whole Recoll application on startup. The default value is + empty, but there is a skeleton style sheet (recoll.qss) inside the + /usr/share/recoll/examples directory. Using a style sheet, you can + change most recoll graphical parameters: colors, fonts, etc. See the + sample file for a few simple examples. + + You should be aware that parameters (e.g.: the background color) set + inside the Recoll GUI style sheet will override global system + preferences, with possible strange side effects: for example if you + set the foreground to a light color and the background to a dark one + in the desktop preferences, but only the background is set inside the + Recoll style sheet, and it is light too, then text will appear + light-on-light inside the Recoll GUI. + + o Maximum text size highlighted for preview Inserting highlights on + search term inside the text before inserting it in the preview window + involves quite a lot of processing, and can be disabled over the given + text size to speed up loading. + + o Prefer HTML to plain text for preview if set, Recoll will display HTML + as such inside the preview window. If this causes problems with the Qt + HTML display, you can uncheck it to display the plain text version + instead. + + o Plain text to HTML line style: when displaying plain text inside the + preview window, Recoll tries to preserve some of the original text + line breaks and indentation. It can either use PRE HTML tags, which + will well preserve the indentation but will force horizontal scrolling + for long lines, or use BR tags to break at the original line breaks, + which will let the editor introduce other line breaks according to the + window width, but will lose some of the original indentation. The + third option has been available in recent releases and is probably now + the best one: use PRE tags with line wrapping. + + o Use desktop preferences to choose document editor: if this is checked, + the xdg-open utility will be used to open files when you click the + Open link in the result list, instead of the application defined in + mimeview. xdg-open will in term use your desktop preferences to choose + an appropriate application. + + o Exceptions: when using the desktop preferences for opening documents, + these are mime types that will still be opened according to Recoll + preferences. This is useful for passing parameters like page numbers + or search strings to applications that support them (e.g. evince). + This cannot be done with xdg-open which only supports passing one + parameter. + + o Choose editor applications this will let you choose the command + started by the Open links inside the result list, for specific + document types. + + o Display category filter as toolbar... this will let you choose if the + document categories are displayed as a list or a set of buttons. + + o Auto-start simple search on white space entry: if this is checked, a + search will be executed each time you enter a space in the simple + search input field. This lets you look at the result list as you enter + new terms. This is off by default, you may like it or not... + + o Start with advanced search dialog open : If you use this dialog + frequently, checking the entries will get it to open when recoll + starts. + + o Remember sort activation state if set, Recoll will remember the sort + tool stat between invocations. It normally starts with sorting + disabled. + + Result list parameters: + + o Number of results in a result page + + o Result list font: There is quite a lot of information shown in the + result list, and you may want to customize the font and/or font size. + The rest of the fonts used by Recoll are determined by your generic Qt + config (try the qtconfig command). + + o Edit result list paragraph format string: allows you to change the + presentation of each result list entry. See the result list + customisation section. + + o Edit result page HTML header insert: allows you to define text + inserted at the end of the result page HTML header. More detail in the + result list customisation section. + + o Date format: allows specifying the format used for displaying dates + inside the result list. This should be specified as an strftime() + string (man strftime). + + o Abstract snippet separator: for synthetic abstracts built from index + data, which are usually made of several snippets from different parts + of the document, this defines the snippet separator, an ellipsis by + default. + + Search parameters: + + o Hide duplicate results: decides if result list entries are shown for + identical documents found in different places. + + o Stemming language: stemming obviously depends on the document's + language. This listbox will let you chose among the stemming databases + which were built during indexing (this is set in the main + configuration file), or later added with recollindex -s (See the + recollindex manual). Stemming languages which are dynamically added + will be deleted at the next indexing pass unless they are also added + in the configuration file. + + o Automatically add phrase to simple searches: a phrase will be + automatically built and added to simple searches when looking for Any + terms. This will give a relevance boost to the results where the + search terms appear as a phrase (consecutive and in order). + + o Autophrase term frequency threshold percentage: very frequent terms + should not be included in automatic phrase searches for performance + reasons. The parameter defines the cutoff percentage (percentage of + the documents where the term appears). + + o Replace abstracts from documents: this decides if we should synthesize + and display an abstract in place of an explicit abstract found within + the document itself. + + o Dynamically build abstracts: this decides if Recoll tries to build + document abstracts (lists of snippets) when displaying the result + list. Abstracts are constructed by taking context from the document + information, around the search terms. + + o Synthetic abstract size: adjust to taste... + + o Synthetic abstract context words: how many words should be displayed + around each term occurrence. + + o Query language magic file name suffixes: a list of words which + automatically get turned into ext:xxx file name suffix clauses when + starting a query language query (ie: doc xls xlsx...). This will save + some typing for people who use file types a lot when querying. + + External indexes: This panel will let you browse for additional indexes + that you may want to search. External indexes are designated by their + database directory (ie: /home/someothergui/.recoll/xapiandb, + /usr/local/recollglobal/xapiandb). + + Once entered, the indexes will appear in the External indexes list, and + you can chose which ones you want to use at any moment by checking or + unchecking their entries. + + Your main database (the one the current configuration indexes to), is + always implicitly active. If this is not desirable, you can set up your + configuration so that it indexes, for example, an empty directory. An + alternative indexer may also need to implement a way of purging the index + from stale data, + + 3.1.12.1. The result list format + + The result list presentation can be exhaustively customized by adjusting + two elements: + + o The paragraph format + + o HTML code inside the header section + + These can be edited from the Result list tab of the GUI configuration. + + Newer versions of Recoll (from 1.17) use a WebKit HTML object by default + (this may be disabled at build time), and total customisation is possible + with full support for CSS and Javascript. Conversely, there are limits to + what you can do with the older Qt QTextBrowser, but still, it is possible + to decide what data each result will contain, and how it will be + displayed. + + No more detail will be given about the header part (only useful with the + WebKit build), if there are restrictions to what you can do, they are + beyond this author's HTML/CSS/Javascript abilities... There are a few + examples on the page about customising the result list on the Recoll web + site. + + The paragraph format + + This is an arbitrary HTML string where the following printf-like % + substitutions will be performed: + + o %A. Abstract + + o %D. Date + + o %I. Icon image name. This is normally determined from the mime type. + The associations are defined inside the mimeconf configuration file. + If a thumbnail for the file is found at the standard Freedesktop + location, this will be displayed instead. + + o %K. Keywords (if any) + + o %L. Precooked Preview, Edit, and possibly Snippets links + + o %M. Mime type + + o %N. result Number inside the result page + + o %R. Relevance percentage + + o %S. Size information + + o %T. Title or Filename if not set. + + o %t. Title or Filename if not set. + + o %U. Url + + The format of the Preview, Edit, and Snippets links is , and where docnum (%N) expands to the document + number inside the result page). + + In addition to the predefined values above, all strings like %(fieldname) + will be replaced by the value of the field named fieldname for this + document. Only stored fields can be accessed in this way, the value of + indexed but not stored fields is not known at this point in the search + process (see field configuration). There are currently very few fields + stored by default, apart from the values above (only author and filename), + so this feature will need some custom local configuration to be useful. An + example candidate would be the recipient field which is generated by the + message filters. + + The default value for the paragraph format string is: + + %R %S %L   %T
+ %M %D   %U %i
+ %A %K + + You may, for example, try the following for a more web-like experience: + +
%T
+ %A%U - %S - %L + + Note that the P%N link in the above paragraph makes the title a preview + link. Or the clean looking: + + %L %R +   %T&
%S  + %U + + +
%A
%K + + These samples, and some others are on the web site, with pictures to show + how they look. + + It is also possible to define the value of the snippet separator inside + the abstract section. + +3.2. Searching with the KDE KIO slave + + 3.2.1. What's this + + The Recoll KIO slave allows performing a Recoll search by entering an + appropriate URL in a KDE open dialog, or with an HTML-based interface + displayed in Konqueror. + + The HTML-based interface is similar to the Qt-based interface, but + slightly less powerful for now. Its advantage is that you can perform your + search while staying fully within the KDE framework: drag and drop from + the result list works normally and you have your normal choice of + applications for opening files. + + The alternative interface uses a directory view of search results. Due to + limitations in the current KIO slave interface, it is currently not + obviously useful (to me). + + The interface is described in more detail inside a help file which you can + access by entering recoll:/ inside the konqueror URL line (this works only + if the recoll KIO slave has been previously installed). + + The instructions for building this module are located in the source tree. + See: kde/kio/recoll/00README.txt. Some Linux distributions do package the + kio-recoll module, so check before diving into the build process, maybe + it's already out there ready for one-click installation. + + 3.2.2. Searchable documents + + As a sample application, the Recoll KIO slave could allow preparing a set + of HTML documents (for example a manual) so that they become their own + search interface inside konqueror. + + This can be done by either explicitly inserting + links around some document areas, or automatically by adding a very small + javascript program to the documents, like the following example, which + would initiate a search by double-clicking any term: + + + .... + + + +3.3. Searching on the command line + + There are several ways to obtain search results as a text stream, without + a graphical interface: + + o By passing option -t to the recoll program. + + o By using the recollq program. + + o By writing a custom Python program, using the Recoll Python API. + + The first two methods work in the same way and accept/need the same + arguments (except for the additional -t to recoll). The query to be + executed is specified as command line arguments. + + recollq is not built by default. You can use the Makefile in the query + directory to build it. This is a very simple program, and if you can + program a little c++, you may find it useful to taylor its output format + to your needs. + + recollq has a man page (not installed by default, look in the doc/man + directory). The Usage string is as follows: + + recollq: usage: + -P: Show the date span for all the documents present in the index + [-o|-a|-f] [-q] + Runs a recoll query and displays result lines. + Default: will interpret the argument(s) as a xesam query string + query may be like: + implicit AND, Exclusion, field spec: t1 -t2 title:t3 + OR has priority: t1 OR t2 t3 OR t4 means (t1 OR t2) AND (t3 OR t4) + Phrase: "t1 t2" (needs additional quoting on cmd line) + -o Emulate the GUI simple search in ANY TERM mode + -a Emulate the GUI simple search in ALL TERMS mode + -f Emulate the GUI simple search in filename mode + -q is just ignored (compatibility with the recoll GUI command line) + Common options: + -c : specify config directory, overriding $RECOLL_CONFDIR + -d also dump file contents + -n [first-] define the result slice. The default value for [first] + is 0. Without the option, the default max count is 2000. + Use n=0 for no limit + -b : basic. Just output urls, no mime types or titles + -Q : no result lines, just the processed query and result count + -m : dump the whole document meta[] array for each result + -A : output the document abstracts + -S fld : sort by field + -D : sort descending + -i : additional index, several can be given + -e use url encoding (%xx) for urls + -F : output exactly these fields for each result. + The field values are encoded in base64, output in one line and + separated by one space character. This is the recommended format + for use by other programs. Use a normal query with option -m to + see the field names. + + Sample execution: + + recollq 'ilur -nautique mime:text/html' + Recoll query: ((((ilur:(wqf=11) OR ilurs) AND_NOT (nautique:(wqf=11) + OR nautiques OR nautiqu OR nautiquement)) FILTER Ttext/html)) + 4 results + text/html [file:///Users/uncrypted-dockes/projets/bateaux/ilur/comptes.html] [comptes.html] 18593 bytes + text/html [file:///Users/uncrypted-dockes/projets/nautique/webnautique/articles/ilur1/index.html] [Constructio... + text/html [file:///Users/uncrypted-dockes/projets/pagepers/index.html] [psxtcl/writemime/recoll]... + text/html [file:///Users/uncrypted-dockes/projets/bateaux/ilur/factEtCie/recu-chasse-maree.... + +3.4. Path translations + + In some cases, the document paths stored inside the index do not match the + actual ones, so that document previews and accesses will fail. This can + occur in a number of circumstances: + + o When using multiple indexes it is a relatively common occurrence that + some will actually reside on a remote volume, for exemple mounted via + NFS. In this case, the paths used to access the documents on the local + machine are not necessarily the same than the ones used while indexing + on the remote machine. For example, /home/me may have been used as a + topdirs elements while indexing, but the directory might be mounted as + /net/server/home/me on the local machine. + + o The case may also occur with removable disks. It is perfectly possible + to configure an index to live with the documents on the removable + disk, but it may happen that the disk is not mounted at the same place + so that the documents paths from the index are invalid. + + o As a last exemple, one could imagine that a big directory has been + moved, but that it is currently inconvenient to run the indexer. + + More generally, the path translation facility may be useful whenever the + documents paths seen by the indexer are not the same as the ones which + should be used at query time. + + Recoll has a facility for rewriting access paths when extracting the data + from the index. The translations can be defined for the main index and for + any additional query index. + + In the above NFS example, Recoll could be instructed to rewrite any + file:///home/me URL from the index to file:///net/server/home/me, allowing + accesses from the client. + + The translations are defined in the ptrans configuration file, which can + be edited by hand or from the GUI external indexes configuration dialog. + +3.5. The query language + + The query language processor is activated in the GUI simple search entry + when the search mode selector is set to Query Language. It can also be + used with the KIO slave or the command line search. It broadly has the + same capabilities as the complex search interface in the GUI. + + The language is based on the (seemingly defunct) Xesam user search + language specification. + + If the results of a query language search puzzle you and you doubt what + has been actually searched for, you can use the GUI Show Query link at the + top of the result list to check the exact query which was finally executed + by Xapian. + + Here follows a sample request that we are going to explain: + + author:"john doe" Beatles OR Lennon Live OR Unplugged -potatoes + + + This would search for all documents with John Doe appearing as a phrase in + the author field (exactly what this is would depend on the document type, + ie: the From: header, for an email message), and containing either beatles + or lennon and either live or unplugged but not potatoes (in any part of + the document). + + An element is composed of an optional field specification, and a value, + separated by a colon (the field separator is the last colon in the + element). Example: Eugenie, author:balzac, dc:title:grandet + + The colon, if present, means "contains". Xesam defines other relations, + which are mostly unsupported for now (except in special cases, described + further down). + + All elements in the search entry are normally combined with an implicit + AND. It is possible to specify that elements be OR'ed instead, as in + Beatles OR Lennon. The OR must be entered literally (capitals), and it has + priority over the AND associations: word1 word2 OR word3 means word1 AND + (word2 OR word3) not (word1 AND word2) OR word3. Explicit parenthesis are + not supported. + + An element preceded by a - specifies a term that should not appear. Pure + negative queries are forbidden. + + As usual, words inside quotes define a phrase (the order of words is + significant), so that title:"prejudice pride" is not the same as + title:prejudice title:pride, and is unlikely to find a result. + + Modifiers can be set on a phrase clause, for example to specify a + proximity search (unordered). See the modifier section. + + Recoll currently manages the following default fields: + + o title, subject or caption are synonyms which specify data to be + searched for in the document title or subject. + + o author or from for searching the documents originators. + + o recipient or to for searching the documents recipients. + + o keyword for searching the document-specified keywords (few documents + actually have any). + + o filename for the document's file name. + + o ext specifies the file name extension (Ex: ext:html) + + The field syntax also supports a few field-like, but special, criteria: + + o dir for filtering the results on file location (Ex: + dir:/home/me/somedir). -dir also works to find results not in the + specified directory (release >= 1.15.8). A tilde inside the value will + be expanded to the home directory. Wildcards will be expanded, but + please have a look at an important limitation of wildcards in path + filters. + + Relative paths also make sense, for example, dir:share/doc would match + either /usr/share/doc or /usr/local/share/doc + + Several dir clauses can be specified, both positive and negative. For + example the following makes sense: + + dir:recoll dir:src -dir:utils -dir:common + + + This would select results which have both recoll and src in the path + (in any order), and which have not either utils or common. + + You can also use OR conjunctions with dir: clauses. + + A special aspect of dir clauses is that the values in the index are + not transcoded to UTF-8, and never lower-cased or unaccented, but + stored as binary. This means that you need to enter the values in the + exact lower or upper case, and that searches for names with diacritics + may sometimes be impossible because of character set conversion + issues. Non-ASCII UNIX file paths are an unending source of trouble + and are best avoided. + + You need to use double-quotes around the path value if it contains + space characters. + + o size for filtering the results on file size. Example: size<10000. You + can use <, > or = as operators. You can specify a range like the + following: size>100 size<1000. The usual k/K, m/M, g/G, t/T can be + used as (decimal) multipliers. Ex: size>1k to search for files bigger + than 1000 bytes. + + o date for searching or filtering on dates. The syntax for the argument + is based on the ISO8601 standard for dates and time intervals. Only + dates are supported, no times. The general syntax is 2 elements + separated by a / character. Each element can be a date or a period of + time. Periods are specified as PnYnMnD. The n numbers are the + respective numbers of years, months or days, any of which may be + missing. Dates are specified as YYYY-MM-DD. The days and months parts + may be missing. If the / is present but an element is missing, the + missing element is interpreted as the lowest or highest date in the + index. Examples: + + o 2001-03-01/2002-05-01 the basic syntax for an interval of dates. + + o 2001-03-01/P1Y2M the same specified with a period. + + o 2001/ from the beginning of 2001 to the latest date in the index. + + o 2001 the whole year of 2001 + + o P2D/ means 2 days ago up to now if there are no documents with + dates in the future. + + o /2003 all documents from 2003 or older. + + Periods can also be specified with small letters (ie: p2y). + + o mime or format for specifying the mime type. This one is quite special + because you can specify several values which will be OR'ed (the normal + default for the language is AND). Ex: mime:text/plain mime:text/html. + Specifying an explicit boolean operator before a mime specification is + not supported and will produce strange results. You can filter out + certain types by using negation (-mime:some/type), and you can use + wildcards in the value (mime:text/*). Note that mime is the ONLY field + with an OR default. You do need to use OR with ext terms for example. + + o type or rclcat for specifying the category (as in + text/media/presentation/etc.). The classification of mime types in + categories is defined in the Recoll configuration (mimeconf), and can + be modified or extended. The default category names are those which + permit filtering results in the main GUI screen. Categories are OR'ed + like mime types above. This can't be negated with - either. + + Words inside phrases and capitalized words are not stem-expanded. + Wildcards may be used anywhere inside a term. Specifying a wild-card on + the left of a term can produce a very slow search (or even an incorrect + one if the expansion is truncated because of excessive size). Also see + More about wildcards. + + The document filters used while indexing have the possibility to create + other fields with arbitrary names, and aliases may be defined in the + configuration, so that the exact field search possibilities may be + different for you if someone took care of the customisation. + + 3.5.1. Modifiers + + Some characters are recognized as search modifiers when found immediately + after the closing double quote of a phrase, as in "some + term"modifierchars. The actual "phrase" can be a single term of course. + Supported modifiers: + + o l can be used to turn off stemming (mostly makes sense with p because + stemming is off by default for phrases). + + o o can be used to specify a "slack" for phrase and proximity searches: + the number of additional terms that may be found between the specified + ones. If o is followed by an integer number, this is the slack, else + the default is 10. + + o p can be used to turn the default phrase search into a proximity one + (unordered). Example:"order any in"p + + o C will turn on case sensitivity (if the index supports it). + + o D will turn on diacritics sensitivity (if the index supports it). + + o A weight can be specified for a query element by specifying a decimal + value at the start of the modifiers. Example: "Important"2.5. + +3.6. Search case and diacritics sensitivity + + For Recoll versions 1.18 and later, and when working with a raw index (not + the default), searches can be made sensitive to character case and + diacritics. How this happens is controlled by configuration variables and + what search data is entered. + + The general default is that searches are insensitive to case and + diacritics. An entry of resume will match any of Resume, RESUME, resume, + Resume etc. + + Two configuration variables can automate switching on sensitivity: + + autodiacsens + + If this is set, search sensitivity to diacritics will be turned on + as soon as an accented character exists in a search term. When the + variable is set to true, resume will start a + diacritics-unsensitive search, but resume will be matched exactly. + The default value is false. + + autocasesens + + If this is set, search sensitivity to character case will be + turned on as soon as an upper-case character exists in a search + term except for the first one. When the variable is set to true, + us or Us will start a diacritics-unsensitive search, but US will + be matched exactly. The default value is true (contrary to + autodiacsens). + + As in the past, capitalizing the first letter of a word will turn off its + stem expansion and have no effect on case-sensitivity. + + You can also explicitely activate case and diacritics sensitivity by using + modifiers with the query language. C will make the term case-sensitive, + and D will make it diacritics-sensitive. Examples: + + "us"C + + + will search for the term us exactly (Us will not be a match). + + "resume"D + + + will search for the term resume exactly (resume will not be a match). + + When either case or diacritics sensitivity is activated, stem expansion is + turned off. Having both does not make much sense. + +3.7. Anchored searches and wildcards + + Some special characters are interpreted by Recoll in search strings to + expand or specialize the search. Wildcards expand a root term in + controlled ways. Anchor characters can restrict a search to succeed only + if the match is found at or near the beginning of the document or one of + its fields. + + 3.7.1. More about wildcards + + All words entered in Recoll search fields will be processed for wildcard + expansion before the request is finally executed. + + The wildcard characters are: + + o * which matches 0 or more characters. + + o ? which matches a single character. + + o [] which allow defining sets of characters to be matched (ex: [abc] + matches a single character which may be 'a' or 'b' or 'c', [0-9] + matches any number. + + You should be aware of a few things when using wildcards. + + o Using a wildcard character at the beginning of a word can make for a + slow search because Recoll will have to scan the whole index term list + to find the matches. However, this is much less a problem for field + searches, and queries like author:*@domain.com can sometimes be very + useful. + + o For Recoll version 18 only, when working with a raw index (preserving + character case and diacritics), the literal part of a wildcard + expression will be matched exactly for case and diacritics. This is + not true any more for versions 19 and later. + + o Using a * at the end of a word can produce more matches than you would + think, and strange search results. You can use the term explorer tool + to check what completions exist for a given term. You can also see + exactly what search was performed by clicking on the link at the top + of the result list. In general, for natural language terms, stem + expansion will produce better results than an ending * (stem expansion + is turned off when any wildcard character appears in the term). + + 3.7.1.1. Wildcards and path filtering + + Due to the way that Recoll processes wildcards inside dir path filtering + clauses, they will have a multiplicative effect on the query size. A + clause containg wildcards in several paths elements, like, for example, + dir:/home/me/*/*/docdir, will almost certainly fail if your indexed tree + is of any realistic size. + + Depending on the case, you may be able to work around the issue by + specifying the paths elements more narrowly, with a constant prefix, or by + using 2 separate dir: clauses instead of multiple wildcards, as in + dir:/home/me dir:docdir. The latter query is not equivalent to the initial + one because it does not specify a number of directory levels, but that's + the best we can do (and it may be actually more useful in some cases). + + 3.7.2. Anchored searches + + Two characters are used to specify that a search hit should occur at the + beginning or at the end of the text. ^ at the beginning of a term or + phrase constrains the search to happen at the start, $ at the end force it + to happen at the end. + + As this function is implemented as a phrase search it is possible to + specify a maximum distance at which the hit should occur, either through + the controls of the advanced search panel, or using the query language, + for example, as in: + + "^someterm"o10 + + which would force someterm to be found within 10 terms of the start of the + text. This can be combined with a field search as in + somefield:"^someterm"o10 or somefield:someterm$. + + This feature can also be used with an actual phrase search, but in this + case, the distance applies to the whole phrase and anchor, so that, for + example, bla bla my unexpected term at the beginning of the text would be + a match for "^my term"o5. + + Anchored searches can be very useful for searches inside somewhat + structured documents like scientific articles, in case explicit metadata + has not been supplied (a most frequent case), for example for looking for + matches inside the abstract or the list of authors (which occur at the top + of the document). + +3.8. Desktop integration + + Being independant of the desktop type has its drawbacks: Recoll desktop + integration is minimal. However there are a few tools available: + + o The KDE KIO Slave was described in a previous section. + + o If you use a recent version of Ubuntu Linux, you may find the Ubuntu + Unity Lens module useful. + + o There is also an independantly developed Krunner plugin. + + Here follow a few other things that may help. + + 3.8.1. Hotkeying recoll + + It is surprisingly convenient to be able to show or hide the Recoll GUI + with a single keystroke. Recoll comes with a small Python script, based on + the libwnck window manager interface library, which will allow you to do + just this. The detailed instructions are on this wiki page. + + 3.8.2. The KDE Kicker Recoll applet + + This is probably obsolete now. Anyway: + + The Recoll source tree contains the source code to the recoll_applet, a + small application derived from the find_applet. This can be used to add a + small Recoll launcher to the KDE panel. + + The applet is not automatically built with the main Recoll programs, nor + is it included with the main source distribution (because the KDE build + boilerplate makes it relatively big). You can download its source from the + recoll.org download page. Use the omnipotent configure;make;make install + incantation to build and install. + + You can then add the applet to the panel by right-clicking the panel and + choosing the Add applet entry. + + The recoll_applet has a small text window where you can type a Recoll + query (in query language form), and an icon which can be used to restrict + the search to certain types of files. It is quite primitive, and launches + a new recoll GUI instance every time (even if it is already running). You + may find it useful anyway. + +Chapter 4. Programming interface + + Recoll has an Application Programming Interface, usable both for indexing + and searching, currently accessible from the Python language. + + Another less radical way to extend the application is to write filters for + new types of documents. + + The processing of metadata attributes for documents (fields) is highly + configurable. + +4.1. Writing a document filter + + Recoll filters cooperate to translate from the multitude of input document + formats, simple ones as opendocument, acrobat), or compound ones such as + Zip or Email, into the final Recoll indexing input format, which may be + text/plain or text/html. Most filters are executable programs or scripts. + A few filters are coded in C++ and live inside recollindex. This latter + kind will not be described here. + + There are currently (1.18 and since 1.13) two kinds of external executable + filters: + + o Simple filters (exec filters) run once and exit. They can be bare + programs like antiword, or scripts using other programs. They are very + simple to write, because they just need to print the converted + document to the standard output. Their output can be text/plain or + text/html. + + o Multiple filters (execm filters), run as long as their master process + (recollindex) is active. They can process multiple files (sparing the + process startup time which can be very significant), or multiple + documents per file (e.g.: for zip or chm files). They communicate with + the indexer through a simple protocol, but are nevertheless a bit more + complicated than the older kind. Most of new filters are written in + Python, using a common module to handle the protocol. There is an + exception, rclimg which is written in Perl. The subdocuments output by + these filters can be directly indexable (text or HTML), or they can be + other simple or compound documents that will need to be processed by + another filter. + + In both cases, filters deal with regular file system files, and can + process either a single document, or a linear list of documents in each + file. Recoll is responsible for performing up to date checks, deal with + more complex embedding and other upper level issues. + + In the extreme case of a simple filter returning a document in text/plain + format, no metadata can be transferred from the filter to the indexer. + Generic metadata, like document size or modification date, will be + gathered and stored by the indexer. + + Filters that produce text/html format can return an arbitrary amount of + metadata inside HTML meta tags. These will be processed according to the + directives found in the fields configuration file. + + The filters that can handle multiple documents per file return a single + piece of data to identify each document inside the file. This piece of + data, called an ipath element will be sent back by Recoll to extract the + document at query time, for previewing, or for creating a temporary file + to be opened by a viewer. + + The following section describes the simple filters, and the next one gives + a few explanations about the execm ones. You could conceivably write a + simple filter with only the elements in the manual. This will not be the + case for the other ones, for which you will have to look at the code. + + 4.1.1. Simple filters + + Recoll simple filters are usually shell-scripts, but this is in no way + necessary. Extracting the text from the native format is the difficult + part. Outputting the format expected by Recoll is trivial. Happily enough, + most document formats have translators or text extractors which can be + called from the filter. In some cases the output of the translating + program is completely appropriate, and no intermediate shell-script is + needed. + + Filters are called with a single argument which is the source file name. + They should output the result to stdout. + + When writing a filter, you should decide if it will output plain text or + HTML. Plain text is simpler, but you will not be able to add metadata or + vary the output character encoding (this will be defined in a + configuration file). Additionally, some formatting may be easier to + preserve when previewing HTML. Actually the deciding factor is metadata: + Recoll has a way to extract metadata from the HTML header and use it for + field searches.. + + The RECOLL_FILTER_FORPREVIEW environment variable (values yes, no) tells + the filter if the operation is for indexing or previewing. Some filters + use this to output a slightly different format, for example stripping + uninteresting repeated keywords (ie: Subject: for email) when indexing. + This is not essential. + + You should look at one of the simple filters, for example rclps for a + starting point. + + Don't forget to make your filter executable before testing ! + + 4.1.2. "Multiple" filters + + If you can program and want to write an execm filter, it should not be too + difficult to make sense of one of the existing modules. For example, look + at rclzip which uses Zip file paths as identifiers (ipath), and rclics, + which uses an integer index. Also have a look at the comments inside the + internfile/mh_execm.h file and possibly at the corresponding module. + + execm filters sometimes need to make a choice for the nature of the ipath + elements that they use in communication with the indexer. Here are a few + guidelines: + + o Use ASCII or UTF-8 (if the identifier is an integer print it, for + example, like printf %d would do). + + o If at all possible, the data should make some kind of sense when + printed to a log file to help with debugging. + + o Recoll uses a colon (:) as a separator to store a complex path + internally (for deeper embedding). Colons inside the ipath elements + output by a filter will be escaped, but would be a bad choice as a + filter-specific separator (mostly, again, for debugging issues). + + In any case, the main goal is that it should be easy for the filter to + extract the target document, given the file name and the ipath element. + + execm filters will also produce a document with a null ipath element. + Depending on the type of document, this may have some associated data + (e.g. the body of an email message), or none (typical for an archive + file). If it is empty, this document will be useful anyway for some + operations, as the parent of the actual data documents. + + 4.1.3. Telling Recoll about the filter + + There are two elements that link a file to the filter which should process + it: the association of file to mime type and the association of a mime + type with a filter. + + The association of files to mime types is mostly based on name suffixes. + The types are defined inside the mimemap file. Example: + + + .doc = application/msword + + If no suffix association is found for the file name, Recoll will try to + execute the file -i command to determine a mime type. + + The association of file types to filters is performed in the mimeconf + file. A sample will probably be of better help than a long explanation: + + + [index] + application/msword = exec antiword -t -i 1 -m UTF-8;\ + mimetype = text/plain ; charset=utf-8 + + application/ogg = exec rclogg + + text/rtf = exec unrtf --nopict --html; charset=iso-8859-1; mimetype=text/html + + application/x-chm = execm rclchm + + The fragment specifies that: + + o application/msword files are processed by executing the antiword + program, which outputs text/plain encoded in utf-8. + + o application/ogg files are processed by the rclogg script, with default + output type (text/html, with encoding specified in the header, or + utf-8 by default). + + o text/rtf is processed by unrtf, which outputs text/html. The + iso-8859-1 encoding is specified because it is not the utf-8 default, + and not output by unrtf in the HTML header section. + + o application/x-chm is processed by a persistant filter. This is + determined by the execm keyword. + + 4.1.4. Filter HTML output + + The output HTML could be very minimal like the following example: + + + + + + + Some text content + + + + + You should take care to escape some characters inside the text by + transforming them into appropriate entities. At the very minimum, "&" + should be transformed into "&", "<" should be transformed into "<". + This is not always properly done by translating programs which output + HTML, and of course never by those which output plain text. + + When encapsulating plain text in an HTML body, the display of a preview + may be improved by enclosing the text inside
 tags.
+
+   The character set needs to be specified in the header. It does not need to
+   be UTF-8 (Recoll will take care of translating it), but it must be
+   accurate for good results.
+
+   Recoll will process meta tags inside the header as possible document
+   fields candidates. Documents fields can be processed by the indexer in
+   different ways, for searching or displaying inside query results. This is
+   described in a following section.
+
+   By default, the indexer will process the standard header fields if they
+   are present: title, meta/description, and meta/keywords are both indexed
+   and stored for query-time display.
+
+   A predefined non-standard meta tag will also be processed by Recoll
+   without further configuration: if a date tag is present and has the right
+   format, it will be used as the document date (for display and sorting), in
+   preference to the file modification date. The date format should be as
+   follows:
+
+ 
+ or
+ 
+          
+
+   Example:
+
+ 
+          
+
+   Filters also have the possibility to "invent" field names. This should
+   also be output as meta tags:
+
+ 
+
+   You can embed HTML markup inside the content of custom fields, for
+   improving the display inside result lists. In this case, add a (wildly
+   non-standard) markup attribute to tell Recoll that the value is HTML and
+   should not be escaped for display.
+
+ 
+
+   As written above, the processing of fields is described in a further
+   section.
+
+  4.1.5. Page numbers
+
+   The indexer will interpret ^L characters in the filter output as
+   indicating page breaks, and will record them. At query time, this allows
+   starting a viewer on the right page for a hit or a snippet. Currently,
+   only the PDF, Postscript and DVI filters generate page breaks.
+
+4.2. Field data processing
+
+   Fields are named pieces of information in or about documents, like title,
+   author, abstract.
+
+   The field values for documents can appear in several ways during indexing:
+   either output by filters as meta fields in the HTML header section, or
+   extracted from file extended attributes, or added as attributes of the Doc
+   object when using the API, or again synthetized internally by Recoll.
+
+   The Recoll query language allows searching for text in a specific field.
+
+   Recoll defines a number of default fields. Additional ones can be output
+   by filters, and described in the fields configuration file.
+
+   Fields can be:
+
+     o indexed, meaning that their terms are separately stored in inverted
+       lists (with a specific prefix), and that a field-specific search is
+       possible.
+
+     o stored, meaning that their value is recorded in the index data record
+       for the document, and can be returned and displayed with search
+       results.
+
+   A field can be either or both indexed and stored. This and other aspects
+   of fields handling is defined inside the fields configuration file.
+
+   The sequence of events for field processing is as follows:
+
+     o During indexing, recollindex scans all meta fields in HTML documents
+       (most document types are transformed into HTML at some point). It
+       compares the name for each element to the configuration defining what
+       should be done with fields (the fields file)
+
+     o If the name for the meta element matches one for a field that should
+       be indexed, the contents are processed and the terms are entered into
+       the index with the prefix defined in the fields file.
+
+     o If the name for the meta element matches one for a field that should
+       be stored, the content of the element is stored with the document data
+       record, from which it can be extracted and displayed at query time.
+
+     o At query time, if a field search is performed, the index prefix is
+       computed and the match is only performed against appropriately
+       prefixed terms in the index.
+
+     o At query time, the field can be displayed inside the result list by
+       using the appropriate directive in the definition of the result list
+       paragraph format. All fields are displayed on the fields screen of the
+       preview window (which you can reach through the right-click menu).
+       This is independant of the fact that the search which produced the
+       results used the field or not.
+
+   You can find more information in the section about the fields file, or in
+   comments inside the file.
+
+   You can also have a look at the example on the Wiki, detailing how one
+   could add a page count field to pdf documents for displaying inside result
+   lists.
+
+4.3. API
+
+  4.3.1. Interface elements
+
+   A few elements in the interface are specific and and need an explanation.
+
+   udi
+
+           An udi (unique document identifier) identifies a document. Because
+           of limitations inside the index engine, it is restricted in length
+           (to 200 bytes), which is why a regular URI cannot be used. The
+           structure and contents of the udi is defined by the application
+           and opaque to the index engine. For example, the internal file
+           system indexer uses the complete document path (file path +
+           internal path), truncated to length, the suppressed part being
+           replaced by a hash value.
+
+   ipath
+
+           This data value (set as a field in the Doc object) is stored,
+           along with the URL, but not indexed by Recoll. Its contents are
+           not interpreted, and its use is up to the application. For
+           example, the Recoll internal file system indexer stores the part
+           of the document access path internal to the container file (ipath
+           in this case is a list of subdocument sequential numbers). url and
+           ipath are returned in every search result and permit access to the
+           original document.
+
+   Stored and indexed fields
+
+           The fields file inside the Recoll configuration defines which
+           document fields are either "indexed" (searchable), "stored"
+           (retrievable with search results), or both.
+
+   Data for an external indexer, should be stored in a separate index, not
+   the one for the Recoll internal file system indexer, except if the latter
+   is not used at all). The reason is that the main document indexer purge
+   pass would remove all the other indexer's documents, as they were not seen
+   during indexing. The main indexer documents would also probably be a
+   problem for the external indexer purge operation.
+
+  4.3.2. Python interface
+
+    4.3.2.1. Introduction
+
+   Recoll versions after 1.11 define a Python programming interface, both for
+   searching and indexing.
+
+   The API is inspired by the Python database API specification, version 1.0
+   for Recoll versions up to 1.18, version 2.0 for Recoll versions 1.19 and
+   later. The package structure changed with Recoll 1.19 too. We will mostly
+   describe the new API and package structure here. A paragraph at the end of
+   this section will explain a few differences and ways to write code
+   compatible with both versions.
+
+   The Python interface can be found in the source package, under
+   python/recoll.
+
+   The python/recoll/ directory contains the usual setup.py. After
+   configuring the main Recoll code, you can use the script to build and
+   install the Python module:
+
+             cd recoll-xxx/python/recoll
+             python setup.py build
+             python setup.py install
+          
+
+    4.3.2.2. Recoll package
+
+   The recoll package contains two modules:
+
+     o The recoll module contains functions and classes used to query (or
+       update) the index.
+
+     o The rclextract module contains functions and classes used to access
+       document data.
+
+    4.3.2.3. The recoll module
+
+      Functions
+
+   connect(confdir=None, extra_dbs=None, writable = False)
+           The connect() function connects to one or several Recoll index(es)
+           and returns a Db object.
+              o confdir may specify a configuration directory. The usual
+                defaults apply.
+              o extra_dbs is a list of additional indexes (Xapian
+                directories).
+              o writable decides if we can index new data through this
+                connection.
+           This call initializes the recoll module, and it should always be
+           performed before any other call or object creation.
+
+      Classes
+
+        The Db class
+
+   A Db object is created by a connect() function and holds a connection to a
+   Recoll index.
+
+   Methods
+
+   Db.close()
+           Closes the connection. You can't do anything with the Db object
+           after this.
+
+   Db.query(), Db.cursor()
+           These aliases return a blank Query object for this index.
+
+   Db.setAbstractParams(maxchars, contextwords)
+           Set the parameters used to build snippets.
+
+        The Query class
+
+   A Query object (equivalent to a cursor in the Python DB API) is created by
+   a Db.query() call. It is used to execute index searches.
+
+   Methods
+
+   Query.sortby(fieldname, ascending=True)
+           Sort results by fieldname, in ascending or descending order. Must
+           be called before executing the search.
+
+   Query.execute(query_string, stemming=1, stemlang="english")
+           Starts a search for query_string, a Recoll search language string.
+
+   Query.executesd(SearchData)
+           Starts a search for the query defined by the SearchData object.
+
+   Query.fetchmany(size=query.arraysize)
+           Fetches the next Doc objects in the current search results, and
+           returns them as an array of the required size, which is by default
+           the value of the arraysize data member.
+
+   Query.fetchone()
+           Fetches the next Doc object from the current search results.
+
+   Query.close()
+           Closes the connection. The object is unusable after the call.
+
+   Query.scroll(value, mode='relative')
+           Adjusts the position in the current result set. mode can be
+           relative or absolute.
+
+   Query.getgroups()
+           Retrieves the expanded query terms as a list of pairs. Meaningful
+           only after executexx In each pair, the first entry is a list of
+           user terms, the second a list of query terms as derived from the
+           user terms and used in the Xapian Query. The size of each list is
+           one for simple terms, or more for group and phrase clauses.
+
+   Query.getxquery()
+           Return the Xapian query description as a Unicode string.
+           Meaningful only after executexx.
+
+   Query.highlight(text, ishtml = 0, methods = object)
+           Will insert ,  tags around the match
+           areas in the input text and return the modified text. ishtml can
+           be set to indicate that the input text is HTML and that HTML
+           special characters should not be escaped. methods if set should be
+           an object with methods startMatch(i) and endMatch() which will be
+           called for each match and should return a begin and end tag
+
+   Query.makedocabstract(doc, methods = object))
+           Create a snippets abstract for doc (a Doc object) by selecting
+           text around the match terms. If methods is set, will also perform
+           highlighting. See the highlight method.
+
+   Query.__iter__() and Query.next()
+           So that things like for doc in query: will work.
+
+   Data descriptors
+
+   Query.arraysize
+           Default number of records processed by fetchmany (r/w).
+
+   Query.rowcount
+           Number of records returned by the last execute.
+
+   Query.rownumber
+           Next index to be fetched from results. Normally increments after
+           each fetchone() call, but can be set/reset before the call effect
+           seeking. Starts at 0.
+
+        The Doc class
+
+   A Doc object contains index data for a given document. The data is
+   extracted from the index when searching, or set by the indexer program
+   when updating. The Doc object has many attributes to be read or set by its
+   user. It matches exactly the Rcl::Doc C++ object. Some of the attributes
+   are predefined, but, especially when indexing, others can be set, the name
+   of which will be processed as field names by the indexing configuration.
+   Inputs can be specified as Unicode or strings. Outputs are Unicode
+   objects. All dates are specified as Unix timestamps, printed as strings.
+   Please refer to the rcldb/rcldoc.h C++ file for a description of the
+   predefined attributes.
+
+   At query time, only the fields that are defined as stored either by
+   default or in the fields configuration file will be meaningful in the Doc
+   object. Especially this will not be the case for the document text. See
+   the rclextract module for accessing document contents.
+
+   Methods
+
+   get(key), [] operator
+           Retrieve the named doc attribute
+
+   getbinurl()
+           Retrieve the URL in byte array format (no transcoding), for use as
+           parameter to a system call.
+
+   items()
+           Return a dictionary of doc object keys/values
+
+   keys()
+           list of doc object keys (attribute names).
+
+        The SearchData class
+
+   A SearchData object allows building a query by combining clauses, for
+   execution by Query.executesd(). It can be used in replacement of the query
+   language approach. The interface is going to change a little, so no
+   detailed doc for now...
+
+   Methods
+
+   addclause(type='and'|'or'|'excl'|'phrase'|'near'|'sub', qstring=string,
+   slack=0, field='', stemming=1, subSearch=SearchData)
+
+    4.3.2.4. The rclextract module
+
+   Document content is not provided by an index query. To access it, the data
+   extraction part of the indexing process must be performed (subdocument
+   access and format translation). This is not trivial in general. The
+   rclextract module currently provides a single class which can be used to
+   access the data content for result documents.
+
+      Classes
+
+        The Extractor class
+
+   Methods
+
+   Extractor(doc)
+           An Extractor object is built from a Doc object, output from a
+           query.
+
+   Extractor.textextract(ipath)
+           Extract document defined by ipath and return a Doc object. The
+           doc.text field has the document text as either text/plain or
+           text/html according to doc.mimetype.
+
+   Extractor.idoctofile()
+           Extracts document into an output file, which can be given
+           explicitly or will be created as a temporary file to be deleted by
+           the caller.
+
+    4.3.2.5. Example code
+
+   The following sample would query the index with a user language string.
+   See the python/samples directory inside the Recoll source for other
+   examples. The recollgui subdirectory has a very embryonic GUI which
+   demonstrates the highlighting and data extraction functions.
+
+ #!/usr/bin/env python
+
+ from recoll import recoll
+
+ db = recoll.connect()
+ db.setAbstractParams(maxchars=80, contextwords=4)
+
+ query = db.query()
+ nres = query.execute("some user question")
+ print "Result count: ", nres
+ if nres > 5:
+     nres = 5
+ for i in range(nres):
+     doc = query.fetchone()
+     print "Result #%d" % (query.rownumber,)
+     for k in ("title", "size"):
+         print k, ":", getattr(doc, k).encode('utf-8')
+     abs = db.makeDocAbstract(doc, query).encode('utf-8')
+     print abs
+     print
+
+
+
+    4.3.2.6. Compatibility with the previous version
+
+   The following code fragments can be used to ensure that code can run with
+   both the old and the new API (as long as it does not use the new abilities
+   of the new API of course).
+
+   Adapting to the new package structure:
+
+
+ try:
+     from recoll import recoll
+     from recoll import rclextract
+     hasextract = True
+ except:
+     import recoll
+     hasextract = False
+
+
+   Adapting to the change of nature of the next Query member. The same test
+   can be used to choose to use the scroll() method (new) or set the next
+   value (old).
+
+
+        rownum = query.next if type(query.next) == int else \
+                  query.rownumber
+
+
+Chapter 5. Installation and configuration
+
+5.1. Installing a binary copy
+
+   There are three types of binary Recoll installations:
+
+     o Through your system normal software distribution framework (ie,
+       Debian/Ubuntu apt, FreeBSD ports, etc.).
+
+     o From a package downloaded from the Recoll web site.
+
+     o From a prebuilt tree downloaded from the Recoll web site.
+
+   In all cases, the strict software dependancies (ie on Xapian or iconv)
+   will be automatically satisfied, you should not have to worry about them.
+
+   You will only have to check or install supporting applications for the
+   file types that you want to index beyond those that are natively processed
+   by Recoll (text, HTML, email files, and a few others).
+
+   You should also maybe have a look at the configuration section (but this
+   may not be necessary for a quick test with default parameters). Most
+   parameters can be more conveniently set from the GUI interface.
+
+  5.1.1. Installing through a package system
+
+   If you use a BSD-type port system or a prebuilt package (DEB, RPM,
+   manually or through the system software configuration utility), just
+   follow the usual procedure for your system.
+
+  5.1.2. Installing a prebuilt Recoll
+
+   The unpackaged binary versions on the Recoll web site are just compressed
+   tar files of a build tree, where only the useful parts were kept
+   (executables and sample configuration).
+
+   The executable binary files are built with a static link to libxapian and
+   libiconv, to make installation easier (no dependencies).
+
+   After extracting the tar file, you can proceed with installation as if you
+   had built the package from source (that is, just type make install). The
+   binary trees are built for installation to /usr/local.
+
+5.2. Supporting packages
+
+   Recoll uses external applications to index some file types. You need to
+   install them for the file types that you wish to have indexed (these are
+   run-time optional dependencies. None is needed for building or running
+   Recoll except for indexing their specific file type).
+
+   After an indexing pass, the commands that were found missing can be
+   displayed from the recoll File menu. The list is stored in the missing
+   text file inside the configuration directory.
+
+   A list of common file types which need external commands follows. Many of
+   the filters need the iconv command, which is not always listed as a
+   dependancy.
+
+   Please note that, due to the relatively dynamic nature of this
+   information, the most up to date version is now kept on the Recoll helper
+   applications page along with links to the home pages or best
+   source/patches pages, and misc tips. The list below is not updated often
+   and may be quite stale.
+
+   For many Linux distributions, most of the commands listed can be installed
+   from the package repositories. However, the packages are sometimes
+   outdated, or not the best version for Recoll, so you should take a look at
+   the Recoll helper applications page if a file type is important to you.
+
+   As of Recoll release 1.14, a number of XML-based formats that were handled
+   by ad hoc filter code now use the xsltproc command, which usually comes
+   with libxslt. These are: abiword, fb2 (ebooks), kword, openoffice, svg.
+
+   Now for the list:
+
+     o Openoffice files need unzip and xsltproc.
+
+     o PDF files need pdftotext which is part of the Xpdf or Poppler
+       packages.
+
+     o Postscript files need pstotext. The original version has an issue with
+       shell character in file names, which is corrected in recent packages.
+       See the the Recoll helper applications page for more detail.
+
+     o MS Word needs antiword. It is also useful to have wvWare installed as
+       it may be be used as a fallback for some files which antiword does not
+       handle.
+
+     o MS Excel and PowerPoint need catdoc.
+
+     o MS Open XML (docx) needs xsltproc.
+
+     o Wordperfect files need wpd2html from the libwpd (or libwpd-tools on
+       Ubuntu) package.
+
+     o RTF files need unrtf, which, in its standard version, has much trouble
+       with non-western character sets. Check the Recoll helper applications
+       page.
+
+     o TeX files need untex or detex. Check the Recoll helper applications
+       page for sources if it's not packaged for your distribution.
+
+     o dvi files need dvips.
+
+     o djvu files need djvutxt and djvused from the DjVuLibre package.
+
+     o Audio files: Recoll releases before 1.13 used the id3info command from
+       the id3lib package to extract mp3 tag information, metaflac (standard
+       flac tools) for flac files, and ogginfo (vorbis tools) for ogg files.
+       Releases 1.14 and later use a single Python filter based on mutagen
+       for all audio file types.
+
+     o Pictures: Recoll uses the Exiftool Perl package to extract tag
+       information. Most image file formats are supported. Note that there
+       may not be much interest in indexing the technical tags (image size,
+       aperture, etc.). This is only of interest if you store personal tags
+       or textual descriptions inside the image files.
+
+     o chm: files in microsoft help format need Python and the pychm module
+       (which needs chmlib).
+
+     o ICS: up to Recoll 1.13, iCalendar files need Python and the icalendar
+       module. icalendar is not needed for newer versions, which use internal
+       code.
+
+     o Zip archives need Python (and the standard zipfile module).
+
+     o Rar archives need Python, the rarfile Python module and the unrar
+       utility.
+
+     o Midi karaoke files need Python and the Midi module
+
+     o Konqueror webarchive format with Python (uses the Tarfile module).
+
+     o mimehtml web archive format (support based on the email filter, which
+       introduces some mild weirdness, but still usable).
+
+   Text, HTML, email folders, and Scribus files are processed internally. Lyx
+   is used to index Lyx files. Many filters need iconv and the standard sed
+   and awk.
+
+5.3. Building from source
+
+  5.3.1. Prerequisites
+
+   If you can install any or all of the following through the package manager
+   for your system, all the better. Especially Qt is a very big piece of
+   software, but you will most probably be able to find a binary package.
+
+   You may have to compile Xapian but this is easy.
+
+   The shopping list:
+
+     o C++ compiler. Up to Recoll version 1.13.04, its absence can manifest
+       itself by strange messages about a missing iconv_open.
+
+     o Development files for Xapian core.
+
+  Important
+
+       If you are building Xapian for an older CPU (before Pentium 4 or
+       Athlon 64), you need to add the --disable-sse flag to the configure
+       command. Else all Xapian application will crash with an illegal
+       instruction error.
+
+     o Development files for Qt 4 . Recoll has not been tested with Qt 5 yet.
+       Recoll 1.15.9 was the last version to support Qt 3. If you do not want
+       to install or build the Qt Webkit module, Recoll has a configuration
+       option to disable its use (see further).
+
+     o Development files for X11 and zlib.
+
+     o You may also need libiconv. On Linux systems, the iconv interface is
+       part of libc and you should not need to do anything special.
+
+   Check the Recoll download page for up to date version information.
+
+  5.3.2. Building
+
+   Recoll has been built on Linux, FreeBSD, Mac OS X, and Solaris, most
+   versions after 2005 should be ok, maybe some older ones too (Solaris 8 is
+   ok). If you build on another system, and need to modify things, I would
+   very much welcome patches.
+
+   Configure options: 
+
+     o --without-aspell will disable the code for phonetic matching of search
+       terms.
+
+     o --with-fam or --with-inotify will enable the code for real time
+       indexing. Inotify support is enabled by default on recent Linux
+       systems.
+
+     o --with-qtzeitgeist will enable sending Zeitgeist events about the
+       visited search results, and needs the Qt Zeitgeist module.
+
+     o --disable-webkit is available from version 1.17 to implement the
+       result list with a Qt QTextBrowser instead of a WebKit widget if you
+       do not or can't depend on the latter.
+
+     o --disable-idxthreads is available from version 1.19 to suppress
+       multithreading inside the indexing process. You can also use the
+       run-time configuration to restrict recollindex to using a single
+       thread, but the compile-time option may disable a few more unused
+       locks. This only applies to the use of multithreading for the core
+       index processing (data input). The Recoll monitor mode always uses at
+       least two threads of execution.
+
+     o --disable-python-module will avoid building the Python module.
+
+     o --disable-xattr will prevent fetching data from file extended
+       attributes. Beyond a few standard attributes, fetching extended
+       attributes data can only be useful is some application stores data in
+       there, and also needs some simple configuration (see comments in the
+       fields configuration file).
+
+     o --enable-camelcase will enable splitting camelCase words. This is not
+       enabled by default as it has the unfortunate side-effect of making
+       some phrase searches quite confusing: ie, "MySQL manual" would be
+       matched by "MySQL manual" and "my sql manual" but not "mysql manual"
+       (only inside phrase searches).
+
+     o --with-file-command Specify the version of the 'file' command to use
+       (ie: --with-file-command=/usr/local/bin/file). Can be useful to enable
+       the gnu version on systems where the native one is bad.
+
+     o --disable-qtgui Disable the Qt interface. Will allow building the
+       indexer and the command line search program in absence of a Qt
+       environment.
+
+     o --disable-x11mon Disable X11 connection monitoring inside recollindex.
+       Together with --disable-qtgui, this allows building recoll without Qt
+       and X11.
+
+     o --disable-pic will compile Recoll with position-dependant code. This
+       is incompatible with building the KIO or the Python or PHP extensions,
+       but might yield very marginally faster code.
+
+     o Of course the usual autoconf configure options, like --prefix apply.
+
+   Normal procedure:
+
+         cd recoll-xxx
+         configure
+         make
+         (practices usual hardship-repelling invocations)
+      
+
+   There is little auto-configuration. The configure script will mainly link
+   one of the system-specific files in the mk directory to mk/sysconf. If
+   your system is not known yet, it will tell you as much, and you may want
+   to manually copy and modify one of the existing files (the new file name
+   should be the output of uname -s).
+
+  5.3.3. Installation
+
+   Either type make install or execute recollinstall prefix, in the root of
+   the source tree. This will copy the commands to prefix/bin and the sample
+   configuration files, scripts and other shared data to prefix/share/recoll.
+
+   If the installation prefix given to recollinstall is different from either
+   the system default or the value which was specified when executing
+   configure (as in configure --prefix /some/path), you will have to set the
+   RECOLL_DATADIR environment variable to indicate where the shared data is
+   to be found (ie for (ba)sh: export
+   RECOLL_DATADIR=/some/path/share/recoll).
+
+   You can then proceed to configuration.
+
+5.4. Configuration overview
+
+   Most of the parameters specific to the recoll GUI are set through the
+   Preferences menu and stored in the standard Qt place
+   ($HOME/.config/Recoll.org/recoll.conf). You probably do not want to edit
+   this by hand.
+
+   Recoll indexing options are set inside text configuration files located in
+   a configuration directory. There can be several such directories, each of
+   which define the parameters for one index.
+
+   The configuration files can be edited by hand or through the Index
+   configuration dialog (Preferences menu). The GUI tool will try to respect
+   your formatting and comments as much as possible, so it is quite possible
+   to use both ways.
+
+   The most accurate documentation for the configuration parameters is given
+   by comments inside the default files, and we will just give a general
+   overview here.
+
+   For each index, there are two sets of configuration files. System-wide
+   configuration files are kept in a directory named like
+   /usr/[local/]share/recoll/examples, and define default values, shared by
+   all indexes. For each index, a parallel set of files defines the
+   customized parameters.
+
+   The default location of the configuration is the .recoll directory in your
+   home. Most people will only use this directory.
+
+   This location can be changed, or others can be added with the
+   RECOLL_CONFDIR environment variable or the -c option parameter to recoll
+   and recollindex.
+
+   If the .recoll directory does not exist when recoll or recollindex are
+   started, it will be created with a set of empty configuration files.
+   recoll will give you a chance to edit the configuration file before
+   starting indexing. recollindex will proceed immediately. To avoid
+   mistakes, the automatic directory creation will only occur for the default
+   location, not if -c or RECOLL_CONFDIR were used (in the latter cases, you
+   will have to create the directory).
+
+   All configuration files share the same format. For example, a short
+   extract of the main configuration file might look as follows:
+
+         # Space-separated list of directories to index.
+         topdirs =  ~/docs /usr/share/doc
+
+         [~/somedirectory-with-utf8-txt-files]
+         defaultcharset = utf-8
+        
+
+   There are three kinds of lines:
+
+     o Comment (starts with #) or empty.
+
+     o Parameter affectation (name = value).
+
+     o Section definition ([somedirname]).
+
+   Depending on the type of configuration file, section definitions either
+   separate groups of parameters or allow redefining some parameters for a
+   directory sub-tree. They stay in effect until another section definition,
+   or the end of file, is encountered. Some of the parameters used for
+   indexing are looked up hierarchically from the current directory location
+   upwards. Not all parameters can be meaningfully redefined, this is
+   specified for each in the next section.
+
+   When found at the beginning of a file path, the tilde character (~) is
+   expanded to the name of the user's home directory, as a shell would do.
+
+   White space is used for separation inside lists. List elements with
+   embedded spaces can be quoted using double-quotes.
+
+   Encoding issues. Most of the configuration parameters are plain ASCII. Two
+   particular sets of values may cause encoding issues:
+
+     o File path parameters may contain non-ascii characters and should use
+       the exact same byte values as found in the file system directory.
+       Usually, this means that the configuration file should use the system
+       default locale encoding.
+
+     o The unac_except_trans parameter should be encoded in UTF-8. If your
+       system locale is not UTF-8, and you need to also specify non-ascii
+       file paths, this poses a difficulty because common text editors cannot
+       handle multiple encodings in a single file. In this relatively
+       unlikely case, you can edit the configuration file as two separate
+       text files with appropriate encodings, and concatenate them to create
+       the complete configuration.
+
+  5.4.1. Main configuration file
+
+   recoll.conf is the main configuration file. It defines things like what to
+   index (top directories and things to ignore), and the default character
+   set to use for document types which do not specify it internally.
+
+   The default configuration will index your home directory. If this is not
+   appropriate, start recoll to create a blank configuration, click Cancel,
+   and edit the configuration file before restarting the command. This will
+   start the initial indexing, which may take some time.
+
+   Most of the following parameters can be changed from the Index
+   Configuration menu in the recoll interface. Some can only be set by
+   editing the configuration file.
+
+    5.4.1.1. Parameters affecting what documents we index:
+
+   topdirs
+
+           Specifies the list of directories or files to index (recursively
+           for directories). You can use symbolic links as elements of this
+           list. See the followLinks option about following symbolic links
+           found under the top elements (not followed by default).
+
+   skippedNames
+
+           A space-separated list of patterns for names of files or
+           directories that should be completely ignored. The list defined in
+           the default file is:
+
+ skippedNames = #* bin CVS  Cache cache* caughtspam  tmp .thumbnails .svn \
+                *~ .beagle .git .hg .bzr loop.ps .xsession-errors \
+                .recoll* xapiandb recollrc recoll.conf
+
+           The list can be redefined at any sub-directory in the indexed
+           area.
+
+           The top-level directories are not affected by this list (that is,
+           a directory in topdirs might match and would still be indexed).
+
+           The list in the default configuration does not exclude hidden
+           directories (names beginning with a dot), which means that it may
+           index quite a few things that you do not want. On the other hand,
+           email user agents like thunderbird usually store messages in
+           hidden directories, and you probably want this indexed. One
+           possible solution is to have .* in skippedNames, and add things
+           like ~/.thunderbird or ~/.evolution in topdirs.
+
+           Not even the file names are indexed for patterns in this list. See
+           the recoll_noindex variable in mimemap for an alternative approach
+           which indexes the file names.
+
+   skippedPaths and daemSkippedPaths
+
+           A space-separated list of patterns for paths of files or
+           directories that should be skipped. There is no default in the
+           sample configuration file, but the code always adds the
+           configuration and database directories in there.
+
+           skippedPaths is used both by batch and real time indexing.
+           daemSkippedPaths can be used to specify things that should be
+           indexed at startup, but not monitored.
+
+           Example of use for skipping text files only in a specific
+           directory:
+
+ skippedPaths = ~/somedir/*.txt
+              
+
+   skippedPathsFnmPathname
+
+           The values in the *skippedPaths variables are matched by default
+           with fnmatch(3), with the FNM_PATHNAME and FNM_LEADING_DIR flags.
+           This means that '/' characters must be matched explicitely. You
+           can set skippedPathsFnmPathname to 0 to disable the use of
+           FNM_PATHNAME (meaning that /*/dir3 will match /dir1/dir2/dir3).
+
+   followLinks
+
+           Specifies if the indexer should follow symbolic links while
+           walking the file tree. The default is to ignore symbolic links to
+           avoid multiple indexing of linked files. No effort is made to
+           avoid duplication when this option is set to true. This option can
+           be set individually for each of the topdirs members by using
+           sections. It can not be changed below the topdirs level.
+
+   indexedmimetypes
+
+           Recoll normally indexes any file which it knows how to read. This
+           list lets you restrict the indexed mime types to what you specify.
+           If the variable is unspecified or the list empty (the default),
+           all supported types are processed.
+
+   compressedfilemaxkbs
+
+           Size limit for compressed (.gz or .bz2) files. These need to be
+           decompressed in a temporary directory for identification, which
+           can be very wasteful if 'uninteresting' big compressed files are
+           present. Negative means no limit, 0 means no processing of any
+           compressed file. Defaults to -1.
+
+   textfilemaxmbs
+
+           Maximum size for text files. Very big text files are often
+           uninteresting logs. Set to -1 to disable (default 20MB).
+
+   textfilepagekbs
+
+           If set to other than -1, text files will be indexed as multiple
+           documents of the given page size. This may be useful if you do
+           want to index very big text files as it will both reduce memory
+           usage at index time and help with loading data to the preview
+           window. A size of a few megabytes would seem reasonable (default:
+           1MB).
+
+   membermaxkbs
+
+           This defines the maximum size in kilobytes for an archive member
+           (zip, tar or rar at the moment). Bigger entries will be skipped.
+
+   indexallfilenames
+
+           Recoll indexes file names in a special section of the database to
+           allow specific file names searches using wild cards. This
+           parameter decides if file name indexing is performed only for
+           files with mime types that would qualify them for full text
+           indexing, or for all files inside the selected subtrees,
+           independently of mime type.
+
+   usesystemfilecommand
+
+           Decide if we use the file -i system command as a final step for
+           determining the mime type for a file (the main procedure uses
+           suffix associations as defined in the mimemap file). This can be
+           useful for files with suffix-less names, but it will also cause
+           the indexing of many bogus "text" files.
+
+   processwebqueue
+
+           If this is set, process the directory where Web browser plugins
+           copy visited pages for indexing.
+
+   webqueuedir
+
+           The path to the web indexing queue. This is hard-coded in the
+           Firefox plugin as ~/.recollweb/ToIndex so there should be no need
+           to change it.
+
+    5.4.1.2. Parameters affecting how we generate terms:
+
+   Changing some of these parameters will imply a full reindex. Also, when
+   using multiple indexes, it may not make sense to search indexes that don't
+   share the values for these parameters, because they usually affect both
+   search and index operations.
+
+   indexStripChars
+
+           Decide if we strip characters of diacritics and convert them to
+           lower-case before terms are indexed. If we don't, searches
+           sensitive to case and diacritics can be performed, but the index
+           will be bigger, and some marginal weirdness may sometimes occur.
+           The default is a stripped index (indexStripChars = 1) for now.
+           When using multiple indexes for a search, this parameter must be
+           defined identically for all. Changing the value implies an index
+           reset.
+
+   maxTermExpand
+
+           Maximum expansion count for a single term (e.g.: when using
+           wildcards). The default of 10000 is reasonable and will avoid
+           queries that appear frozen while the engine is walking the term
+           list.
+
+   maxXapianClauses
+
+           Maximum number of elementary clauses we can add to a single Xapian
+           query. In some cases, the result of term expansion can be
+           multiplicative, and we want to avoid using excessive memory. The
+           default of 100 000 should be both high enough in most cases and
+           compatible with current typical hardware configurations.
+
+   nonumbers
+
+           If this set to true, no terms will be generated for numbers. For
+           example "123", "1.5e6", 192.168.1.4, would not be indexed
+           ("value123" would still be). Numbers are often quite interesting
+           to search for, and this should probably not be set except for
+           special situations, ie, scientific documents with huge amounts of
+           numbers in them. This can only be set for a whole index, not for a
+           subtree.
+
+   nocjk
+
+           If this set to true, specific east asian (Chinese Korean Japanese)
+           characters/word splitting is turned off. This will save a small
+           amount of cpu if you have no CJK documents. If your document base
+           does include such text but you are not interested in searching it,
+           setting nocjk may be a significant time and space saver.
+
+   cjkngramlen
+
+           This lets you adjust the size of n-grams used for indexing CJK
+           text. The default value of 2 is probably appropriate in most
+           cases. A value of 3 would allow more precision and efficiency on
+           longer words, but the index will be approximately twice as large.
+
+   indexstemminglanguages
+
+           A list of languages for which the stem expansion databases will be
+           built. See recollindex(1) or use the recollindex -l command for
+           possible values. You can add a stem expansion database for a
+           different language by using recollindex -s, but it will be deleted
+           during the next indexing. Only languages listed in the
+           configuration file are permanent.
+
+   defaultcharset
+
+           The name of the character set used for files that do not contain a
+           character set definition (ie: plain text files). This can be
+           redefined for any sub-directory. If it is not set at all, the
+           character set used is the one defined by the nls environment (
+           LC_ALL, LC_CTYPE, LANG), or iso8859-1 if nothing is set.
+
+   unac_except_trans
+
+           This is a list of characters, encoded in UTF-8, which should be
+           handled specially when converting text to unaccented lowercase.
+           For example, in Swedish, the letter a with diaeresis has full
+           alphabet citizenship and should not be turned into an a. Each
+           element in the space-separated list has the special character as
+           first element and the translation following. The handling of both
+           the lowercase and upper-case versions of a character should be
+           specified, as appartenance to the list will turn-off both standard
+           accent and case processing. Example for Swedish:
+
+ unac_except_trans =  aaaa AAaa a:a: A:a: o:o: O:o:
+            
+
+           Note that the translation is not limited to a single character,
+           you could very well have something like u:ue in the list.
+
+           The default value set for unac_except_trans can't be listed here
+           because I have trouble with SGML and UTF-8, but it only contains
+           ligature decompositions: german ss, oe, ae, fi, fl.
+
+           This parameter can't be defined for subdirectories, it is global,
+           because there is no way to do otherwise when querying. If you have
+           document sets which would need different values, you will have to
+           index and query them separately.
+
+   maildefcharset
+
+           This can be used to define the default character set specifically
+           for email messages which don't specify it. This is mainly useful
+           for readpst (libpst) dumps, which are utf-8 but do not say so.
+
+   localfields
+
+           This allows setting fields for all documents under a given
+           directory. Typical usage would be to set an "rclaptg" field, to be
+           used in mimeview to select a specific viewer. If several fields
+           are to be set, they should be separated with a semi-colon (';')
+           character, which there is currently no way to escape. Also note
+           the initial semi-colon. Example: localfields= ;rclaptg=gnus;other
+           = val, then select specifier viewer with mimetype|tag=... in
+           mimeview.
+
+   metadatacmds
+
+           This allows executing external commands for each file and storing
+           the output in a Recoll field. This could be used for example to
+           index external tag data. The value is a list of field names and
+           commands, don't forget an initial semi-colon. Example:
+
+ [/some/area/of/the/fs]
+ metadatacmds = ; tags = tmsu tags %f; otherfield = somecmd -xx %f
+                
+
+    5.4.1.3. Parameters affecting where and how we store things:
+
+   dbdir
+
+           The name of the Xapian data directory. It will be created if
+           needed when the index is initialized. If this is not an absolute
+           path, it will be interpreted relative to the configuration
+           directory. The value can have embedded spaces but starting or
+           trailing spaces will be trimmed. You cannot use quotes here.
+
+   idxstatusfile
+
+           The name of the scratch file where the indexer process updates its
+           status. Default: idxstatus.txt inside the configuration directory.
+
+   maxfsoccuppc
+
+           Maximum file system occupation before we stop indexing. The value
+           is a percentage, corresponding to what the "Capacity" df output
+           column shows. The default value is 0, meaning no checking.
+
+   mboxcachedir
+
+           The directory where mbox message offsets cache files are held.
+           This is normally $RECOLL_CONFDIR/mboxcache, but it may be useful
+           to share a directory between different configurations.
+
+   mboxcacheminmbs
+
+           The minimum mbox file size over which we cache the offsets. There
+           is really no sense in caching offsets for small files. The default
+           is 5 MB.
+
+   webcachedir
+
+           This is only used by the web browser plugin indexing code, and
+           defines where the cache for visited pages will live. Default:
+           $RECOLL_CONFDIR/webcache
+
+   webcachemaxmbs
+
+           This is only used by the web browser plugin indexing code, and
+           defines the maximum size for the web page cache. Default: 40 MB.
+
+   idxflushmb
+
+           Threshold (megabytes of new text data) where we flush from memory
+           to disk index. Setting this can help control memory usage. A value
+           of 0 means no explicit flushing, letting Xapian use its own
+           default, which is flushing every 10000 (or XAPIAN_FLUSH_THRESHOLD)
+           documents, which gives little memory usage control, as memory
+           usage also depends on average document size. The default value is
+           10, and it is probably a bit low. If your system usually has free
+           memory, you can try higher values between 20 and 80. In my
+           experience, values beyond 100 are always counterproductive.
+
+    5.4.1.4. Indexing parallelism configuration
+
+   The Recoll indexing process recollindex can use multiple threads to speed
+   up indexing on multiprocessor systems. The work done to index files is
+   divided in several stages and some of the stages can be executed by
+   multiple threads. The stages are:
+
+    1. File system walking: this is always performed by the main thread.
+    2. File conversion and data extraction.
+    3. Text processing (splitting, stemming, etc.)
+    4. Xapian index update.
+
+   You can also read a longer document about the transformation of Recoll
+   indexing to multithreading.
+
+   The threads configuration is controlled by two configuration file
+   parameters.
+
+   thrQSizes
+
+           This variable defines the job input queues configuration. There
+           are three possible queues for stages 2, 3 and 4, and this
+           parameter should give the queue depth for each stage (three
+           integer values). If a value of -1 is used for a given stage, no
+           queue is used, and the thread will go on performing the next
+           stage. In practise, deep queues have not been shown to increase
+           performance. A value of 0 for the first queue tells Recoll to
+           perform autoconfiguration (no need for the two other values in
+           this case)- this is the default configuration.
+
+   thrTCounts
+
+           This defines the number of threads used for each stage. If a value
+           of -1 is used for one of the queue depths, the corresponding
+           thread count is ignored. It makes no sense to use a value other
+           than 1 for the last stage because updating the Xapian index is
+           necessarily single-threaded (and protected by a mutex).
+
+   The following example would use three queues (of depth 2), and 4 threads
+   for converting source documents, 2 for processing their text, and one to
+   update the index. This was tested to be the best configuration on the test
+   system (quadri-processor with multiple disks).
+
+ thrQSizes = 2 2 2
+ thrTCounts =  4 2 1
+
+   The following example would use a single queue, and the complete
+   processing for each document would be performed by a single thread
+   (several documents will still be processed in parallel in most cases). The
+   threads will use mutual exclusion when entering the index update stage. In
+   practise the performance would be close to the precedent case in general,
+   but worse in certain cases (e.g. a Zip archive would be performed purely
+   sequentially), so the previous approach is preferred. YMMV... The 2 last
+   values for thrTCounts are ignored.
+
+ thrQSizes = 2 -1 -1
+ thrTCounts =  6 1 1
+
+    5.4.1.5. Miscellaneous parameters:
+
+   autodiacsens
+
+           IF the index is not stripped, decide if we automatically trigger
+           diacritics sensitivity if the search term has accented characters
+           (not in unac_except_trans). Else you need to use the query
+           language and the D modifier to specify diacritics sensitivity.
+           Default is no.
+
+   autocasesens
+
+           IF the index is not stripped, decide if we automatically trigger
+           character case sensitivity if the search term has upper-case
+           characters in any but the first position. Else you need to use the
+           query language and the C modifier to specify character-case
+           sensitivity. Default is yes.
+
+   loglevel,daemloglevel
+
+           Verbosity level for recoll and recollindex. A value of 4 lists
+           quite a lot of debug/information messages. 2 only lists errors.
+           The daemversion is specific to the indexing monitor daemon.
+
+   logfilename, daemlogfilename
+
+           Where the messages should go. 'stderr' can be used as a special
+           value, and is the default. The daemversion is specific to the
+           indexing monitor daemon.
+
+   mondelaypatterns
+
+           This allows specify wildcard path patterns (processed with
+           fnmatch(3) with 0 flag), to match files which change too often and
+           for which a delay should be observed before re-indexing. This is a
+           space-separated list, each entry being a pattern and a time in
+           seconds, separated by a colon. You can use double quotes if a path
+           entry contains white space. Example:
+
+ mondelaypatterns = *.log:20 "this one has spaces*:10"
+              
+
+   monixinterval
+
+           Minimum interval (seconds) for processing the indexing queue. The
+           real time monitor does not process each event when it comes in,
+           but will wait this time for the queue to accumulate to diminish
+           overhead and in order to aggregate multiple events to the same
+           file. Default 30 S.
+
+   monauxinterval
+
+           Period (in seconds) at which the real time monitor will regenerate
+           the auxiliary databases (spelling, stemming) if needed. The
+           default is one hour.
+
+   monioniceclass, monioniceclassdata
+
+           These allow defining the ionice class and data used by the indexer
+           (default class 3, no data).
+
+   filtermaxseconds
+
+           Maximum filter execution time, after which it is aborted. Some
+           postscript programs just loop...
+
+   filtersdir
+
+           A directory to search for the external filter scripts used to
+           index some types of files. The value should not be changed, except
+           if you want to modify one of the default scripts. The value can be
+           redefined for any sub-directory.
+
+   iconsdir
+
+           The name of the directory where recoll result list icons are
+           stored. You can change this if you want different images.
+
+   idxabsmlen
+
+           Recoll stores an abstract for each indexed file inside the
+           database. The text can come from an actual 'abstract' section in
+           the document or will just be the beginning of the document. It is
+           stored in the index so that it can be displayed inside the result
+           lists without decoding the original file. The idxabsmlen parameter
+           defines the size of the stored abstract. The default value is 250
+           bytes. The search interface gives you the choice to display this
+           stored text or a synthetic abstract built by extracting text
+           around the search terms. If you always prefer the synthetic
+           abstract, you can reduce this value and save a little space.
+
+   aspellLanguage
+
+           Language definitions to use when creating the aspell dictionary.
+           The value must match a set of aspell language definition files.
+           You can type "aspell config" to see where these are installed
+           (look for data-dir). The default if the variable is not set is to
+           use your desktop national language environment to guess the value.
+
+   noaspell
+
+           If this is set, the aspell dictionary generation is turned off.
+           Useful for cases where you don't need the functionality or when it
+           is unusable because aspell crashes during dictionary generation.
+
+   mhmboxquirks
+
+           This allows definining location-related quirks for the mailbox
+           handler. Currently only the tbird flag is defined, and it should
+           be set for directories which hold Thunderbird data, as their
+           folder format is weird.
+
+  5.4.2. The fields file
+
+   This file contains information about dynamic fields handling in Recoll.
+   Some very basic fields have hard-wired behaviour, and, mostly, you should
+   not change the original data inside the fields file. But you can create
+   custom fields fitting your data and handle them just like they were native
+   ones.
+
+   The fields file has several sections, which each define an aspect of
+   fields processing. Quite often, you'll have to modify several sections to
+   obtain the desired behaviour.
+
+   We will only give a short description here, you should refer to the
+   comments inside the file for more detailed information.
+
+   Field names should be lowercase alphabetic ASCII.
+
+   [prefixes]
+
+           A field becomes indexed (searchable) by having a prefix defined in
+           this section.
+
+   [stored]
+
+           A field becomes stored (displayable inside results) by having its
+           name listed in this section (typically with an empty value).
+
+   [aliases]
+
+           This section defines lists of synonyms for the canonical names
+           used inside the [prefixes] and [stored] sections
+
+   filter-specific sections
+
+           Some filters may need specific configuration for handling fields.
+           Only the email message filter currently has such a section (named
+           [mail]). It allows indexing arbitrary email headers in addition to
+           the ones indexed by default. Other such sections may appear in the
+           future.
+
+   Here follows a small example of a personal fields file. This would extract
+   a specific email header and use it as a searchable field, with data
+   displayable inside result lists. (Side note: as the email filter does no
+   decoding on the values, only plain ascii headers can be indexed, and only
+   the first occurrence will be used for headers that occur several times).
+
+ [prefixes]
+ # Index mailmytag contents (with the given prefix)
+ mailmytag = XMTAG
+
+ [stored]
+ # Store mailmytag inside the document data record (so that it can be
+ # displayed - as %(mailmytag) - in result lists).
+ mailmytag =
+
+ [mail]
+ # Extract the X-My-Tag mail header, and use it internally with the
+ # mailmytag field name
+ x-my-tag = mailmytag
+
+    5.4.2.1. Extended attributes in the fields file
+
+   Recoll versions 1.19 and later process user extended file attributes as
+   documents fields by default.
+
+   Attributes are processed as fields of the same name, after removing the
+   user prefix on Linux.
+
+   The [xattrtofields] section of the fields file allows specifying
+   translations from extended attributes names to Recoll field names. An
+   empty translation disables use of the corresponding attribute data.
+
+  5.4.3. The mimemap file
+
+   mimemap specifies the file name extension to mime type mappings.
+
+   For file names without an extension, or with an unknown one, the system's
+   file -i command will be executed to determine the mime type (this can be
+   switched off inside the main configuration file).
+
+   The mappings can be specified on a per-subtree basis, which may be useful
+   in some cases. Example: gaim logs have a .txt extension but should be
+   handled specially, which is possible because they are usually all located
+   in one place.
+
+   mimemap also has a recoll_noindex variable which is a list of suffixes.
+   Matching files will be skipped (which avoids unnecessary decompressions or
+   file executions). This is partially redundant with skippedNames in the
+   main configuration file, with a few differences: it will not affect
+   directories, it cannot be made dependant on the file-system location (it
+   is a configuration-wide parameter), and the file names will still be
+   indexed (not even the file names are indexed for patterns in skippedNames.
+   recoll_noindex is used mostly for things known to be unindexable by a
+   given Recoll version. Having it there avoids cluttering the more
+   user-oriented and locally customized skippedNames.
+
+  5.4.4. The mimeconf file
+
+   mimeconf specifies how the different mime types are handled for indexing,
+   and which icons are displayed in the recoll result lists.
+
+   Changing the parameters in the [index] section is probably not a good idea
+   except if you are a Recoll developer.
+
+   The [icons] section allows you to change the icons which are displayed by
+   recoll in the result lists (the values are the basenames of the png images
+   inside the iconsdir directory (specified in recoll.conf).
+
+  5.4.5. The mimeview file
+
+   mimeview specifies which programs are started when you click on an Open
+   link in a result list. Ie: HTML is normally displayed using firefox, but
+   you may prefer Konqueror, your openoffice.org program might be named
+   oofice instead of openoffice etc.
+
+   Changes to this file can be done by direct editing, or through the recoll
+   GUI preferences dialog.
+
+   If Use desktop preferences to choose document editor is checked in the
+   Recoll GUI preferences, all mimeview entries will be ignored except the
+   one labelled application/x-all (which is set to use xdg-open by default).
+
+   In this case, the xallexcepts top level variable defines a list of mime
+   type exceptions which will be processed according to the local entries
+   instead of being passed to the desktop. This is so that specific Recoll
+   options such as a page number or a search string can be passed to
+   applications that support them, such as the evince viewer.
+
+   As for the other configuration files, the normal usage is to have a
+   mimeview inside your own configuration directory, with just the
+   non-default entries, which will override those from the central
+   configuration file.
+
+   All viewer definition entries must be placed under a [view] section.
+
+   The keys in the file are normally mime types. You can add an application
+   tag to specialize the choice for an area of the filesystem (using a
+   localfields specification in mimeconf). The syntax for the key is
+   mimetype|tag
+
+   The nouncompforviewmts entry, (placed at the top level, outside of the
+   [view] section), holds a list of mime types that should not be
+   uncompressed before starting the viewer (if they are found compressed, ie:
+   mydoc.doc.gz).
+
+   The right side of each assignment holds a command to be executed for
+   opening the file. The following substitutions are performed:
+
+     o %D. Document date
+
+     o %f. File name. This may be the name of a temporary file if it was
+       necessary to create one (ie: to extract a subdocument from a
+       container).
+
+     o %F. Original file name. Same as %f except if a temporary file is used.
+
+     o %i. Internal path, for subdocuments of containers. The format depends
+       on the container type. If this appears in the command line, Recoll
+       will not create a temporary file to extract the subdocument, expecting
+       the called application (possibly a script) to be able to handle it.
+
+     o %M. Mime type
+
+     o %p. Page index. Only significant for a subset of document types,
+       currently only PDF, Postscript and DVI files. Can be used to start the
+       editor at the right page for a match or snippet.
+
+     o %s. Search term. The value will only be set for documents with indexed
+       page numbers (ie: PDF). The value will be one of the matched search
+       terms. It would allow pre-setting the value in the "Find" entry inside
+       Evince for example, for easy highlighting of the term.
+
+     o %U, %u. Url.
+
+   In addition to the predefined values above, all strings like %(fieldname)
+   will be replaced by the value of the field named fieldname for the
+   document. This could be used in combination with field customisation to
+   help with opening the document.
+
+  5.4.6. The ptrans file
+
+   ptrans specifies query-time path translations. These can be useful in
+   multiple cases.
+
+   The file has a section for any index which needs translations, either the
+   main one or additional query indexes. The sections are named with the
+   Xapian index directory names. No slash character should exist at the end
+   of the paths (all comparisons are textual). An exemple should make things
+   sufficiently clear
+
+           [/home/me/.recoll/xapiandb]
+           /this/directory/moved = /to/this/place
+
+           [/path/to/additional/xapiandb]
+           /server/volume1/docdir = /net/server/volume1/docdir
+           /server/volume2/docdir = /net/server/volume2/docdir
+        
+
+  5.4.7. Examples of configuration adjustments
+
+    5.4.7.1. Adding an external viewer for an non-indexed type
+
+   Imagine that you have some kind of file which does not have indexable
+   content, but for which you would like to have a functional Open link in
+   the result list (when found by file name). The file names end in .blob and
+   can be displayed by application blobviewer.
+
+   You need two entries in the configuration files for this to work:
+
+     o In $RECOLL_CONFDIR/mimemap (typically ~/.recoll/mimemap), add the
+       following line:
+
+ .blob = application/x-blobapp
+
+       Note that the mime type is made up here, and you could call it
+       diesel/oil just the same.
+
+     o In $RECOLL_CONFDIR/mimeview under the [view] section, add:
+
+ application/x-blobapp = blobviewer %f
+
+       We are supposing that blobviewer wants a file name parameter here, you
+       would use %u if it liked URLs better.
+
+   If you just wanted to change the application used by Recoll to display a
+   mime type which it already knows, you would just need to edit mimeview.
+   The entries you add in your personal file override those in the central
+   configuration, which you do not need to alter. mimeview can also be
+   modified from the Gui.
+
+    5.4.7.2. Adding indexing support for a new file type
+
+   Let us now imagine that the above .blob files actually contain indexable
+   text and that you know how to extract it with a command line program.
+   Getting Recoll to index the files is easy. You need to perform the above
+   alteration, and also to add data to the mimeconf file (typically in
+   ~/.recoll/mimeconf):
+
+     o Under the [index] section, add the following line (more about the
+       rclblob indexing script later):
+
+ application/x-blobapp = exec rclblob
+
+     o Under the [icons] section, you should choose an icon to be displayed
+       for the files inside the result lists. Icons are normally 64x64 pixels
+       PNG files which live in /usr/[local/]share/recoll/images.
+
+     o Under the [categories] section, you should add the mime type where it
+       makes sense (you can also create a category). Categories may be used
+       for filtering in advanced search.
+
+   The rclblob filter should be an executable program or script which exists
+   inside /usr/[local/]share/recoll/filters. It will be given a file name as
+   argument and should output the text or html contents on the standard
+   output.
+
+   The filter programming section describes in more detail how to write a
+   filter.
diff --git a/src/VERSION b/src/VERSION
new file mode 100644
index 00000000..66e2ae6c
--- /dev/null
+++ b/src/VERSION
@@ -0,0 +1 @@
+1.19.1
diff --git a/src/aspell/Makefile b/src/aspell/Makefile
new file mode 100644
index 00000000..554cd226
--- /dev/null
+++ b/src/aspell/Makefile
@@ -0,0 +1,19 @@
+depth = ..
+include $(depth)/mk/sysconf
+
+PROGS = rclaspell
+SRCS = rclaspell.cpp
+
+all: depend $(PROGS) librecoll
+
+RCLASPELL_OBJS= trrclaspell.o 
+rclaspell : $(RCLASPELL_OBJS)
+	$(CXX) $(ALL_CXXFLAGS) -o rclaspell $(RCLASPELL_OBJS) \
+          $(LIBRECOLL)  $(LIBXAPIAN) $(LIBICONV)
+trrclaspell.o : rclaspell.cpp
+	$(CXX) $(ALL_CXXFLAGS) -DTEST_RCLASPELL -c -o trrclaspell.o \
+	       rclaspell.cpp
+
+include $(depth)/mk/commontargets
+
+include alldeps
diff --git a/src/aspell/aspell-local.h b/src/aspell/aspell-local.h
new file mode 100644
index 00000000..421c9380
--- /dev/null
+++ b/src/aspell/aspell-local.h
@@ -0,0 +1,729 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#ifndef ASPELL_ASPELL__H
+#define ASPELL_ASPELL__H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/******************************* type id *******************************/
+
+
+union AspellTypeId {
+
+  unsigned int num;
+
+  char str[4];
+
+};
+
+
+typedef union AspellTypeId AspellTypeId;
+
+
+/************************** mutable container **************************/
+
+
+typedef struct AspellMutableContainer AspellMutableContainer;
+
+
+int aspell_mutable_container_add(struct AspellMutableContainer * ths, const char * to_add);
+
+int aspell_mutable_container_remove(struct AspellMutableContainer * ths, const char * to_rem);
+
+void aspell_mutable_container_clear(struct AspellMutableContainer * ths);
+
+struct AspellMutableContainer * aspell_mutable_container_to_mutable_container(struct AspellMutableContainer * ths);
+
+
+
+/******************************* key info *******************************/
+
+
+
+enum AspellKeyInfoType {AspellKeyInfoString, AspellKeyInfoInt, AspellKeyInfoBool, AspellKeyInfoList};
+typedef enum AspellKeyInfoType AspellKeyInfoType;
+
+
+struct AspellKeyInfo {
+
+  /* The name of the key. */
+  const char * name;
+
+  /* The key type. */
+  enum AspellKeyInfoType type;
+
+  /* The default value of the key. */
+  const char * def;
+
+  /* A brief description of the key or NULL if internal value. */
+  const char * desc;
+
+  int flags;
+
+  int other_data;
+
+};
+
+
+typedef struct AspellKeyInfo AspellKeyInfo;
+
+
+/******************************** config ********************************/
+
+
+typedef struct AspellKeyInfoEnumeration AspellKeyInfoEnumeration;
+
+
+int aspell_key_info_enumeration_at_end(const struct AspellKeyInfoEnumeration * ths);
+
+const struct AspellKeyInfo * aspell_key_info_enumeration_next(struct AspellKeyInfoEnumeration * ths);
+
+void delete_aspell_key_info_enumeration(struct AspellKeyInfoEnumeration * ths);
+
+struct AspellKeyInfoEnumeration * aspell_key_info_enumeration_clone(const struct AspellKeyInfoEnumeration * ths);
+
+void aspell_key_info_enumeration_assign(struct AspellKeyInfoEnumeration * ths, const struct AspellKeyInfoEnumeration * other);
+
+
+
+typedef struct AspellConfig AspellConfig;
+
+
+struct AspellConfig * new_aspell_config();
+
+void delete_aspell_config(struct AspellConfig * ths);
+
+struct AspellConfig * aspell_config_clone(const struct AspellConfig * ths);
+
+void aspell_config_assign(struct AspellConfig * ths, const struct AspellConfig * other);
+
+unsigned int aspell_config_error_number(const struct AspellConfig * ths);
+
+const char * aspell_config_error_message(const struct AspellConfig * ths);
+
+const struct AspellError * aspell_config_error(const struct AspellConfig * ths);
+
+/* Sets extra keys which this config class should
+ * accept. begin and end are expected to point to
+ * the beginning and ending of an array of Aspell
+ * Key Info. */
+void aspell_config_set_extra(struct AspellConfig * ths, const struct AspellKeyInfo * begin, const struct AspellKeyInfo * end);
+
+/* Returns the KeyInfo object for the
+ * corresponding key or returns NULL and sets
+ * error_num to PERROR_UNKNOWN_KEY if the key is
+ * not valid. The pointer returned is valid for
+ * the lifetime of the object. */
+const struct AspellKeyInfo * aspell_config_keyinfo(struct AspellConfig * ths, const char * key);
+
+/* Returns a newly allocated enumeration of all
+ * the possible objects this config class uses. */
+struct AspellKeyInfoEnumeration * aspell_config_possible_elements(struct AspellConfig * ths, int include_extra);
+
+/* Returns the default value for given key which
+ * may involve substituting variables, thus it is
+ * not the same as keyinfo(key)->def returns NULL
+ * and sets error_num to PERROR_UNKNOWN_KEY if
+ * the key is not valid. Uses the temporary
+ * string. */
+const char * aspell_config_get_default(struct AspellConfig * ths, const char * key);
+
+/* Returns a newly allocated enumeration of all
+ * the key/value pairs. This DOES not include ones
+ * which are set to their default values. */
+struct AspellStringPairEnumeration * aspell_config_elements(struct AspellConfig * ths);
+
+/* Inserts an item, if the item already exists it
+ * will be replaced. Returns TRUE if it succeeded
+ * or FALSE on error. If the key in not valid it
+ * sets error_num to PERROR_UNKNOWN_KEY, if the
+ * value is not valid it will set error_num to
+ * PERROR_BAD_VALUE, if the value can not be
+ * changed it sets error_num to
+ * PERROR_CANT_CHANGE_VALUE, and if the value is
+ * a list and you are trying to set its directory,
+ * it sets error_num to PERROR_LIST_SET */
+int aspell_config_replace(struct AspellConfig * ths, const char * key, const char * value);
+
+/* Remove a key and returns TRUE if it exists
+ * otherwise return FALSE. This effectively sets
+ * the key to its default value. Calling replace
+ * with a value of "" will also call
+ * remove. If the key does not exist then it sets
+ * error_num to 0 or PERROR_NOT, if the key is
+ * not valid then it sets error_num to
+ * PERROR_UNKNOWN_KEY, if the value can not be
+ * changed then it sets error_num to
+ * PERROR_CANT_CHANGE_VALUE */
+int aspell_config_remove(struct AspellConfig * ths, const char * key);
+
+int aspell_config_have(const struct AspellConfig * ths, const char * key);
+
+/* Returns NULL on error. */
+const char * aspell_config_retrieve(struct AspellConfig * ths, const char * key);
+
+int aspell_config_retrieve_list(struct AspellConfig * ths, const char * key, struct AspellMutableContainer * lst);
+
+/* Return -1 on error, 0 if false, 1 if true. */
+int aspell_config_retrieve_bool(struct AspellConfig * ths, const char * key);
+
+/* Return -1 on error. */
+int aspell_config_retrieve_int(struct AspellConfig * ths, const char * key);
+
+
+
+/******************************** error ********************************/
+
+
+struct AspellError {
+
+  const char * mesg;
+
+  const struct AspellErrorInfo * err;
+
+};
+
+
+typedef struct AspellError AspellError;
+
+int aspell_error_is_a(const struct AspellError * ths, const struct AspellErrorInfo * e);
+
+
+struct AspellErrorInfo {
+
+  const struct AspellErrorInfo * isa;
+
+  const char * mesg;
+
+  unsigned int num_parms;
+
+  const char * parms[3];
+
+};
+
+
+typedef struct AspellErrorInfo AspellErrorInfo;
+
+
+/**************************** can have error ****************************/
+
+
+typedef struct AspellCanHaveError AspellCanHaveError;
+
+
+unsigned int aspell_error_number(const struct AspellCanHaveError * ths);
+
+const char * aspell_error_message(const struct AspellCanHaveError * ths);
+
+const struct AspellError * aspell_error(const struct AspellCanHaveError * ths);
+
+void delete_aspell_can_have_error(struct AspellCanHaveError * ths);
+
+
+
+/******************************** errors ********************************/
+
+
+extern const struct AspellErrorInfo * const aerror_other;
+extern const struct AspellErrorInfo * const aerror_operation_not_supported;
+extern const struct AspellErrorInfo * const   aerror_cant_copy;
+extern const struct AspellErrorInfo * const   aerror_unimplemented_method;
+extern const struct AspellErrorInfo * const aerror_file;
+extern const struct AspellErrorInfo * const   aerror_cant_open_file;
+extern const struct AspellErrorInfo * const     aerror_cant_read_file;
+extern const struct AspellErrorInfo * const     aerror_cant_write_file;
+extern const struct AspellErrorInfo * const   aerror_invalid_name;
+extern const struct AspellErrorInfo * const   aerror_bad_file_format;
+extern const struct AspellErrorInfo * const aerror_dir;
+extern const struct AspellErrorInfo * const   aerror_cant_read_dir;
+extern const struct AspellErrorInfo * const aerror_config;
+extern const struct AspellErrorInfo * const   aerror_unknown_key;
+extern const struct AspellErrorInfo * const   aerror_cant_change_value;
+extern const struct AspellErrorInfo * const   aerror_bad_key;
+extern const struct AspellErrorInfo * const   aerror_bad_value;
+extern const struct AspellErrorInfo * const   aerror_duplicate;
+extern const struct AspellErrorInfo * const   aerror_key_not_string;
+extern const struct AspellErrorInfo * const   aerror_key_not_int;
+extern const struct AspellErrorInfo * const   aerror_key_not_bool;
+extern const struct AspellErrorInfo * const   aerror_key_not_list;
+extern const struct AspellErrorInfo * const   aerror_no_value_reset;
+extern const struct AspellErrorInfo * const   aerror_no_value_enable;
+extern const struct AspellErrorInfo * const   aerror_no_value_disable;
+extern const struct AspellErrorInfo * const   aerror_no_value_clear;
+extern const struct AspellErrorInfo * const aerror_language_related;
+extern const struct AspellErrorInfo * const   aerror_unknown_language;
+extern const struct AspellErrorInfo * const   aerror_unknown_soundslike;
+extern const struct AspellErrorInfo * const   aerror_language_not_supported;
+extern const struct AspellErrorInfo * const   aerror_no_wordlist_for_lang;
+extern const struct AspellErrorInfo * const   aerror_mismatched_language;
+extern const struct AspellErrorInfo * const aerror_affix;
+extern const struct AspellErrorInfo * const   aerror_corrupt_affix;
+extern const struct AspellErrorInfo * const   aerror_invalid_cond;
+extern const struct AspellErrorInfo * const   aerror_invalid_cond_strip;
+extern const struct AspellErrorInfo * const   aerror_incorrect_encoding;
+extern const struct AspellErrorInfo * const aerror_encoding;
+extern const struct AspellErrorInfo * const   aerror_unknown_encoding;
+extern const struct AspellErrorInfo * const   aerror_encoding_not_supported;
+extern const struct AspellErrorInfo * const   aerror_conversion_not_supported;
+extern const struct AspellErrorInfo * const aerror_pipe;
+extern const struct AspellErrorInfo * const   aerror_cant_create_pipe;
+extern const struct AspellErrorInfo * const   aerror_process_died;
+extern const struct AspellErrorInfo * const aerror_bad_input;
+extern const struct AspellErrorInfo * const   aerror_invalid_string;
+extern const struct AspellErrorInfo * const   aerror_invalid_word;
+extern const struct AspellErrorInfo * const   aerror_invalid_affix;
+extern const struct AspellErrorInfo * const   aerror_inapplicable_affix;
+extern const struct AspellErrorInfo * const   aerror_unknown_unichar;
+extern const struct AspellErrorInfo * const   aerror_word_list_flags;
+extern const struct AspellErrorInfo * const     aerror_invalid_flag;
+extern const struct AspellErrorInfo * const     aerror_conflicting_flags;
+extern const struct AspellErrorInfo * const aerror_version_control;
+extern const struct AspellErrorInfo * const   aerror_bad_version_string;
+extern const struct AspellErrorInfo * const aerror_filter;
+extern const struct AspellErrorInfo * const   aerror_cant_dlopen_file;
+extern const struct AspellErrorInfo * const   aerror_empty_filter;
+extern const struct AspellErrorInfo * const   aerror_no_such_filter;
+extern const struct AspellErrorInfo * const   aerror_confusing_version;
+extern const struct AspellErrorInfo * const   aerror_bad_version;
+extern const struct AspellErrorInfo * const   aerror_identical_option;
+extern const struct AspellErrorInfo * const   aerror_options_only;
+extern const struct AspellErrorInfo * const   aerror_invalid_option_modifier;
+extern const struct AspellErrorInfo * const   aerror_cant_describe_filter;
+extern const struct AspellErrorInfo * const aerror_filter_mode_file;
+extern const struct AspellErrorInfo * const   aerror_mode_option_name;
+extern const struct AspellErrorInfo * const   aerror_no_filter_to_option;
+extern const struct AspellErrorInfo * const   aerror_bad_mode_key;
+extern const struct AspellErrorInfo * const   aerror_expect_mode_key;
+extern const struct AspellErrorInfo * const   aerror_mode_version_requirement;
+extern const struct AspellErrorInfo * const   aerror_confusing_mode_version;
+extern const struct AspellErrorInfo * const   aerror_bad_mode_version;
+extern const struct AspellErrorInfo * const   aerror_missing_magic_expression;
+extern const struct AspellErrorInfo * const   aerror_empty_file_ext;
+extern const struct AspellErrorInfo * const aerror_filter_mode_expand;
+extern const struct AspellErrorInfo * const   aerror_unknown_mode;
+extern const struct AspellErrorInfo * const   aerror_mode_extend_expand;
+extern const struct AspellErrorInfo * const aerror_filter_mode_magic;
+extern const struct AspellErrorInfo * const   aerror_file_magic_pos;
+extern const struct AspellErrorInfo * const   aerror_file_magic_range;
+extern const struct AspellErrorInfo * const   aerror_missing_magic;
+extern const struct AspellErrorInfo * const   aerror_bad_magic;
+extern const struct AspellErrorInfo * const aerror_expression;
+extern const struct AspellErrorInfo * const   aerror_invalid_expression;
+
+
+/******************************* speller *******************************/
+
+
+typedef struct AspellSpeller AspellSpeller;
+
+
+struct AspellCanHaveError * new_aspell_speller(struct AspellConfig * config);
+
+struct AspellSpeller * to_aspell_speller(struct AspellCanHaveError * obj);
+
+void delete_aspell_speller(struct AspellSpeller * ths);
+
+unsigned int aspell_speller_error_number(const struct AspellSpeller * ths);
+
+const char * aspell_speller_error_message(const struct AspellSpeller * ths);
+
+const struct AspellError * aspell_speller_error(const struct AspellSpeller * ths);
+
+struct AspellConfig * aspell_speller_config(struct AspellSpeller * ths);
+
+/* Returns 0 if it is not in the dictionary,
+ * 1 if it is, or -1 on error. */
+int aspell_speller_check(struct AspellSpeller * ths, const char * word, int word_size);
+
+/* Add this word to your own personal word list. */
+int aspell_speller_add_to_personal(struct AspellSpeller * ths, const char * word, int word_size);
+
+/* Add this word to the current spelling session. */
+int aspell_speller_add_to_session(struct AspellSpeller * ths, const char * word, int word_size);
+
+/* This is your own personal word list file plus
+ * any extra words added during this session to
+ * your own personal word list. */
+const struct AspellWordList * aspell_speller_personal_word_list(struct AspellSpeller * ths);
+
+/* This is a list of words added to this session
+ * that are not in the main word list or in your
+ * own personal list but are considered valid for
+ * this spelling session. */
+const struct AspellWordList * aspell_speller_session_word_list(struct AspellSpeller * ths);
+
+/* This is the main list of words used during this
+ * spelling session. */
+const struct AspellWordList * aspell_speller_main_word_list(struct AspellSpeller * ths);
+
+int aspell_speller_save_all_word_lists(struct AspellSpeller * ths);
+
+int aspell_speller_clear_session(struct AspellSpeller * ths);
+
+/* Return NULL on error.
+ * The word list returned by suggest is only
+ * valid until the next call to suggest. */
+const struct AspellWordList * aspell_speller_suggest(struct AspellSpeller * ths, const char * word, int word_size);
+
+int aspell_speller_store_replacement(struct AspellSpeller * ths, const char * mis, int mis_size, const char * cor, int cor_size);
+
+
+
+/******************************** filter ********************************/
+
+
+typedef struct AspellFilter AspellFilter;
+
+
+void delete_aspell_filter(struct AspellFilter * ths);
+
+unsigned int aspell_filter_error_number(const struct AspellFilter * ths);
+
+const char * aspell_filter_error_message(const struct AspellFilter * ths);
+
+const struct AspellError * aspell_filter_error(const struct AspellFilter * ths);
+
+struct AspellFilter * to_aspell_filter(struct AspellCanHaveError * obj);
+
+
+
+/*************************** document checker ***************************/
+
+
+struct AspellToken {
+
+  unsigned int offset;
+
+  unsigned int len;
+
+};
+
+
+typedef struct AspellToken AspellToken;
+
+
+typedef struct AspellDocumentChecker AspellDocumentChecker;
+
+
+void delete_aspell_document_checker(struct AspellDocumentChecker * ths);
+
+unsigned int aspell_document_checker_error_number(const struct AspellDocumentChecker * ths);
+
+const char * aspell_document_checker_error_message(const struct AspellDocumentChecker * ths);
+
+const struct AspellError * aspell_document_checker_error(const struct AspellDocumentChecker * ths);
+
+/* Creates a new document checker.
+ * The speller class is expected to last until
+ * this class is destroyed.
+ * If config is given it will be used to override
+ * any relevent options set by this speller class.
+ * The config class is not once this function is done.
+ * If filter is given then it will take ownership of
+ * the filter class and use it to do the filtering.
+ * You are expected to free the checker when done. */
+struct AspellCanHaveError * new_aspell_document_checker(struct AspellSpeller * speller);
+
+struct AspellDocumentChecker * to_aspell_document_checker(struct AspellCanHaveError * obj);
+
+/* Reset the internal state of the filter.
+ * Should be called whenever a new document is
+ * being filtered. */
+void aspell_document_checker_reset(struct AspellDocumentChecker * ths);
+
+/* Process a string.
+ * The string passed in should only be split on
+ * white space characters.  Furthermore, between
+ * calls to reset, each string should be passed
+ * in exactly once and in the order they appeared
+ * in the document.  Passing in strings out of
+ * order, skipping strings or passing them in
+ * more than once may lead to undefined results. */
+void aspell_document_checker_process(struct AspellDocumentChecker * ths, const char * str, int size);
+
+/* Returns the next misspelled word in the
+ * processed string.  If there are no more
+ * misspelled words, then token.word will be
+ * NULL and token.size will be 0 */
+struct AspellToken aspell_document_checker_next_misspelling(struct AspellDocumentChecker * ths);
+
+/* Returns the underlying filter class. */
+struct AspellFilter * aspell_document_checker_filter(struct AspellDocumentChecker * ths);
+
+
+
+/****************************** word list ******************************/
+
+
+typedef struct AspellWordList AspellWordList;
+
+
+int aspell_word_list_empty(const struct AspellWordList * ths);
+
+unsigned int aspell_word_list_size(const struct AspellWordList * ths);
+
+struct AspellStringEnumeration * aspell_word_list_elements(const struct AspellWordList * ths);
+
+
+
+/************************** string enumeration **************************/
+
+
+typedef struct AspellStringEnumeration AspellStringEnumeration;
+
+
+void delete_aspell_string_enumeration(struct AspellStringEnumeration * ths);
+
+struct AspellStringEnumeration * aspell_string_enumeration_clone(const struct AspellStringEnumeration * ths);
+
+void aspell_string_enumeration_assign(struct AspellStringEnumeration * ths, const struct AspellStringEnumeration * other);
+
+int aspell_string_enumeration_at_end(const struct AspellStringEnumeration * ths);
+
+const char * aspell_string_enumeration_next(struct AspellStringEnumeration * ths);
+
+
+
+/********************************* info *********************************/
+
+
+struct AspellModuleInfo {
+
+  const char * name;
+
+  double order_num;
+
+  const char * lib_dir;
+
+  struct AspellStringList * dict_dirs;
+
+  struct AspellStringList * dict_exts;
+
+};
+
+
+typedef struct AspellModuleInfo AspellModuleInfo;
+
+
+struct AspellDictInfo {
+
+  /* The Name to identify this dictionary by. */
+  const char * name;
+
+  /* The language code to identify this dictionary.
+   * A two letter UPPER-CASE ISO 639 language code
+   * and an optional two letter ISO 3166 country
+   * code after a dash or underscore. */
+  const char * code;
+
+  /* Any extra information to distinguish this
+   * variety of dictionary from other dictionaries
+   * which may have the same language and size. */
+  const char * jargon;
+
+  int size;
+
+  /* A two char digit code describing the size of
+   * the dictionary: 10=tiny, 20=really small,
+   * 30=small, 40=med-small, 50=med, 60=med-large,
+   * 70=large, 80=huge, 90=insane.  Please check
+   * the README in aspell-lang-200?????.tar.bz2 or
+   * see SCOWL (http://wordlist.sourceforge.net)
+   * for an example of how these sizes are used. */
+  const char * size_str;
+
+  struct AspellModuleInfo * module;
+
+};
+
+
+typedef struct AspellDictInfo AspellDictInfo;
+
+
+typedef struct AspellModuleInfoList AspellModuleInfoList;
+
+
+struct AspellModuleInfoList * get_aspell_module_info_list(struct AspellConfig * config);
+
+int aspell_module_info_list_empty(const struct AspellModuleInfoList * ths);
+
+unsigned int aspell_module_info_list_size(const struct AspellModuleInfoList * ths);
+
+struct AspellModuleInfoEnumeration * aspell_module_info_list_elements(const struct AspellModuleInfoList * ths);
+
+
+
+typedef struct AspellDictInfoList AspellDictInfoList;
+
+
+struct AspellDictInfoList * get_aspell_dict_info_list(struct AspellConfig * config);
+
+int aspell_dict_info_list_empty(const struct AspellDictInfoList * ths);
+
+unsigned int aspell_dict_info_list_size(const struct AspellDictInfoList * ths);
+
+struct AspellDictInfoEnumeration * aspell_dict_info_list_elements(const struct AspellDictInfoList * ths);
+
+
+
+typedef struct AspellModuleInfoEnumeration AspellModuleInfoEnumeration;
+
+
+int aspell_module_info_enumeration_at_end(const struct AspellModuleInfoEnumeration * ths);
+
+const struct AspellModuleInfo * aspell_module_info_enumeration_next(struct AspellModuleInfoEnumeration * ths);
+
+void delete_aspell_module_info_enumeration(struct AspellModuleInfoEnumeration * ths);
+
+struct AspellModuleInfoEnumeration * aspell_module_info_enumeration_clone(const struct AspellModuleInfoEnumeration * ths);
+
+void aspell_module_info_enumeration_assign(struct AspellModuleInfoEnumeration * ths, const struct AspellModuleInfoEnumeration * other);
+
+
+
+typedef struct AspellDictInfoEnumeration AspellDictInfoEnumeration;
+
+
+int aspell_dict_info_enumeration_at_end(const struct AspellDictInfoEnumeration * ths);
+
+const struct AspellDictInfo * aspell_dict_info_enumeration_next(struct AspellDictInfoEnumeration * ths);
+
+void delete_aspell_dict_info_enumeration(struct AspellDictInfoEnumeration * ths);
+
+struct AspellDictInfoEnumeration * aspell_dict_info_enumeration_clone(const struct AspellDictInfoEnumeration * ths);
+
+void aspell_dict_info_enumeration_assign(struct AspellDictInfoEnumeration * ths, const struct AspellDictInfoEnumeration * other);
+
+
+
+/***************************** string list *****************************/
+
+
+typedef struct AspellStringList AspellStringList;
+
+
+struct AspellStringList * new_aspell_string_list();
+
+int aspell_string_list_empty(const struct AspellStringList * ths);
+
+unsigned int aspell_string_list_size(const struct AspellStringList * ths);
+
+struct AspellStringEnumeration * aspell_string_list_elements(const struct AspellStringList * ths);
+
+int aspell_string_list_add(struct AspellStringList * ths, const char * to_add);
+
+int aspell_string_list_remove(struct AspellStringList * ths, const char * to_rem);
+
+void aspell_string_list_clear(struct AspellStringList * ths);
+
+struct AspellMutableContainer * aspell_string_list_to_mutable_container(struct AspellStringList * ths);
+
+void delete_aspell_string_list(struct AspellStringList * ths);
+
+struct AspellStringList * aspell_string_list_clone(const struct AspellStringList * ths);
+
+void aspell_string_list_assign(struct AspellStringList * ths, const struct AspellStringList * other);
+
+
+
+/****************************** string map ******************************/
+
+
+typedef struct AspellStringMap AspellStringMap;
+
+
+struct AspellStringMap * new_aspell_string_map();
+
+int aspell_string_map_add(struct AspellStringMap * ths, const char * to_add);
+
+int aspell_string_map_remove(struct AspellStringMap * ths, const char * to_rem);
+
+void aspell_string_map_clear(struct AspellStringMap * ths);
+
+struct AspellMutableContainer * aspell_string_map_to_mutable_container(struct AspellStringMap * ths);
+
+void delete_aspell_string_map(struct AspellStringMap * ths);
+
+struct AspellStringMap * aspell_string_map_clone(const struct AspellStringMap * ths);
+
+void aspell_string_map_assign(struct AspellStringMap * ths, const struct AspellStringMap * other);
+
+int aspell_string_map_empty(const struct AspellStringMap * ths);
+
+unsigned int aspell_string_map_size(const struct AspellStringMap * ths);
+
+struct AspellStringPairEnumeration * aspell_string_map_elements(const struct AspellStringMap * ths);
+
+/* Insert a new element.
+ * Will NOT overwrite an existing entry.
+ * Returns FALSE if the element already exists. */
+int aspell_string_map_insert(struct AspellStringMap * ths, const char * key, const char * value);
+
+/* Insert a new element.
+ * Will overwrite an existing entry.
+ * Always returns TRUE. */
+int aspell_string_map_replace(struct AspellStringMap * ths, const char * key, const char * value);
+
+/* Looks up an element and returns the value.
+ * Returns NULL if the element does not exist.
+ * Returns an empty string if the element exists
+ * but has a NULL value. */
+const char * aspell_string_map_lookup(const struct AspellStringMap * ths, const char * key);
+
+
+
+/***************************** string pair *****************************/
+
+
+struct AspellStringPair {
+
+  const char * first;
+
+  const char * second;
+
+};
+
+
+typedef struct AspellStringPair AspellStringPair;
+
+
+/*********************** string pair enumeration ***********************/
+
+
+typedef struct AspellStringPairEnumeration AspellStringPairEnumeration;
+
+
+int aspell_string_pair_enumeration_at_end(const struct AspellStringPairEnumeration * ths);
+
+struct AspellStringPair aspell_string_pair_enumeration_next(struct AspellStringPairEnumeration * ths);
+
+void delete_aspell_string_pair_enumeration(struct AspellStringPairEnumeration * ths);
+
+struct AspellStringPairEnumeration * aspell_string_pair_enumeration_clone(const struct AspellStringPairEnumeration * ths);
+
+void aspell_string_pair_enumeration_assign(struct AspellStringPairEnumeration * ths, const struct AspellStringPairEnumeration * other);
+
+
+
+/******************************** cache ********************************/
+
+
+/* Reset the global cache(s) so that cache queries will
+ * create a new object. If existing objects are still in
+ * use they are not deleted. If which is NULL then all
+ * caches will be reset. Current caches are "encode",
+ * "decode", "dictionary", "language", and "keyboard". */
+int aspell_reset_cache(const char * which);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* ASPELL_ASPELL__H */
diff --git a/src/aspell/rclaspell.cpp b/src/aspell/rclaspell.cpp
new file mode 100644
index 00000000..1db433f7
--- /dev/null
+++ b/src/aspell/rclaspell.cpp
@@ -0,0 +1,588 @@
+#ifndef TEST_RCLASPELL
+/* Copyright (C) 2006 J.F.Dockes
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+#ifdef HAVE_CONFIG_H
+#include "autoconfig.h"
+#endif
+
+#ifdef RCL_USE_ASPELL
+
+#include 
+#include 
+#include 
+
+using namespace std;
+
+#include ASPELL_INCLUDE
+
+#include "pathut.h"
+#include "execmd.h"
+#include "rclaspell.h"
+#include "debuglog.h"
+#include "unacpp.h"
+#include "ptmutex.h"
+
+// Just a place where we keep the Aspell library entry points together
+class AspellApi {
+public:
+    struct AspellConfig *(*new_aspell_config)();
+    int (*aspell_config_replace)(struct AspellConfig *, const char * key, 
+				 const char * value);
+    struct AspellCanHaveError *(*new_aspell_speller)(struct AspellConfig *);
+    void (*delete_aspell_config)(struct AspellConfig *);
+    void (*delete_aspell_can_have_error)(struct AspellCanHaveError *);
+    struct AspellSpeller * (*to_aspell_speller)(struct AspellCanHaveError *);
+    struct AspellConfig * (*aspell_speller_config)(struct AspellSpeller *);
+    const struct AspellWordList * (*aspell_speller_suggest)
+	(struct AspellSpeller *, const char *, int);
+    int (*aspell_speller_check)(struct AspellSpeller *, const char *, int);
+    struct AspellStringEnumeration * (*aspell_word_list_elements)
+	(const struct AspellWordList * ths);
+    const char * (*aspell_string_enumeration_next)
+	(struct AspellStringEnumeration * ths);
+    void (*delete_aspell_string_enumeration)(struct AspellStringEnumeration *);
+    const struct AspellError *(*aspell_error)
+	(const struct AspellCanHaveError *);
+    const char *(*aspell_error_message)(const struct AspellCanHaveError *);
+    const char *(*aspell_speller_error_message)(const struct AspellSpeller *);
+    void (*delete_aspell_speller)(struct AspellSpeller *);
+
+};
+static AspellApi aapi;
+static PTMutexInit o_aapi_mutex;
+
+#define NMTOPTR(NM, TP)							\
+    if ((aapi.NM = TP dlsym(m_data->m_handle, #NM)) == 0) {		\
+	badnames += #NM + string(" ");					\
+    }
+
+static const char *aspell_lib_suffixes[] = {
+  ".so",
+  ".so.15",
+  ".so.16"
+};
+static const unsigned int nlibsuffs  = sizeof(aspell_lib_suffixes) / sizeof(char *);
+
+// Stuff that we don't wish to see in the .h (possible sysdeps, etc.)
+class AspellData {
+public:
+    AspellData() 
+        : m_handle(0), m_speller(0) 
+    {}
+    ~AspellData() {
+        LOGDEB2(("~AspellData\n"));
+	if (m_handle) {
+	    dlclose(m_handle);
+            m_handle = 0;
+        }
+        if (m_speller) {
+            // Dumps core if I do this?? 
+            //aapi.delete_aspell_speller(m_speller);
+            m_speller = 0;
+            LOGDEB2(("~AspellData: speller done\n"));
+        }
+    }
+
+    void  *m_handle;
+    string m_exec;
+    AspellSpeller *m_speller;    
+};
+
+Aspell::Aspell(RclConfig *cnf)
+    : m_config(cnf), m_data(0) 
+{
+}
+
+Aspell::~Aspell()
+{
+    deleteZ(m_data);
+}
+
+bool Aspell::init(string &reason)
+{
+    PTMutexLocker locker(o_aapi_mutex);
+    deleteZ(m_data);
+
+    // Language: we get this from the configuration, else from the NLS
+    // environment. The aspell language names used for selecting language 
+    // definition files (used to create dictionaries) are like en, fr
+    if (!m_config->getConfParam("aspellLanguage", m_lang) || m_lang.empty()) {
+	string lang = "en";
+	const char *cp;
+	if ((cp = getenv("LC_ALL")))
+	    lang = cp;
+	else if ((cp = getenv("LANG")))
+	    lang = cp;
+	if (!lang.compare("C"))
+	    lang = "en";
+	m_lang = lang.substr(0, lang.find_first_of("_"));
+    }
+
+    m_data = new AspellData;
+
+    const char *aspell_prog_from_env = getenv("ASPELL_PROG");
+    if (aspell_prog_from_env && access(aspell_prog_from_env, X_OK) == 0) {
+	m_data->m_exec = aspell_prog_from_env;
+#ifdef ASPELL_PROG
+    } else if (access(ASPELL_PROG, X_OK) == 0) {
+	m_data->m_exec = ASPELL_PROG;
+#endif // ASPELL_PROG
+    } else {
+	ExecCmd::which("aspell", m_data->m_exec);
+    }
+
+    if (m_data->m_exec.empty()) {
+	reason = "aspell program not found or not executable";
+        deleteZ(m_data);
+	return false;
+    }
+
+    // We first look for the aspell library in libdir, and also try to
+    // be clever with ASPELL_PROG.
+    vector libdirs;
+    libdirs.push_back(LIBDIR);
+    // If not in the standard place, the aspell library has to live
+    // under the same prefix as the aspell program.
+    {
+	string aspellPrefix = path_getfather(path_getfather(m_data->m_exec));
+	// This would probably require some more tweaking on solaris/irix etc.
+	string dir = sizeof(long) > 4 ? "lib64" : "lib";
+	string libaspell = path_cat(aspellPrefix, dir);
+	if (libaspell != LIBDIR)
+	    libdirs.push_back(libaspell);
+    }
+
+    reason = "Could not open shared library ";
+    for (vector::iterator it = libdirs.begin(); 
+	 it != libdirs.end(); it++) {
+	string libbase = path_cat(*it, "libaspell");
+	string lib;
+	for (unsigned int i = 0; i < nlibsuffs; i++) {
+	    lib = libbase + aspell_lib_suffixes[i];
+	    reason += string("[") + lib + "] ";
+	    if ((m_data->m_handle = dlopen(lib.c_str(), RTLD_LAZY)) != 0) {
+		reason.erase();
+		goto found;
+	    }
+	}
+    }
+    
+ found:
+    if (m_data->m_handle == 0) {
+        reason += string(" : ") + dlerror();
+        deleteZ(m_data);
+        return false;
+    }
+
+    string badnames;
+    NMTOPTR(new_aspell_config, (struct AspellConfig *(*)()));
+    NMTOPTR(aspell_config_replace, (int (*)(struct AspellConfig *, 
+					    const char *, const char *)));
+    NMTOPTR(new_aspell_speller, 
+	    (struct AspellCanHaveError *(*)(struct AspellConfig *)));
+    NMTOPTR(delete_aspell_config, 
+	    (void (*)(struct AspellConfig *)));
+    NMTOPTR(delete_aspell_can_have_error, 
+	    (void (*)(struct AspellCanHaveError *)));
+    NMTOPTR(to_aspell_speller, 
+	    (struct AspellSpeller *(*)(struct AspellCanHaveError *)));
+    NMTOPTR(aspell_speller_config, 
+	    (struct AspellConfig *(*)(struct AspellSpeller *)));
+    NMTOPTR(aspell_speller_suggest, 
+	    (const struct AspellWordList *(*)(struct AspellSpeller *, 
+					       const char *, int)));
+    NMTOPTR(aspell_speller_check, 
+	    (int (*)(struct AspellSpeller *, const char *, int)));
+    NMTOPTR(aspell_word_list_elements, 
+	    (struct AspellStringEnumeration *(*)
+	     (const struct AspellWordList *)));
+    NMTOPTR(aspell_string_enumeration_next, 
+	    (const char * (*)(struct AspellStringEnumeration *)));
+    NMTOPTR(delete_aspell_string_enumeration, 
+	    (void (*)(struct AspellStringEnumeration *)));
+    NMTOPTR(aspell_error, 
+	    (const struct AspellError*(*)(const struct AspellCanHaveError *)));
+    NMTOPTR(aspell_error_message,
+	    (const char *(*)(const struct AspellCanHaveError *)));
+    NMTOPTR(aspell_speller_error_message, 
+	    (const char *(*)(const struct AspellSpeller *)));
+    NMTOPTR(delete_aspell_speller, (void (*)(struct AspellSpeller *)));
+
+    if (!badnames.empty()) {
+	reason = string("Aspell::init: symbols not found:") + badnames;
+        deleteZ(m_data);
+	return false;
+    }
+
+    return true;
+}
+
+bool Aspell::ok() const
+{
+    return m_data != 0 && m_data->m_handle != 0;
+}
+
+string Aspell::dicPath()
+{
+    return path_cat(m_config->getConfDir(), 
+		    string("aspdict.") + m_lang + string(".rws"));
+}
+
+
+// The data source for the create dictionary aspell command. We walk
+// the term list, filtering out things that are probably not words.
+// Note that the manual for the current version (0.60) of aspell
+// states that utf-8 is not well supported, so that we should maybe
+// also filter all 8bit chars.
+class AspExecPv : public ExecCmdProvide {
+public:
+    string *m_input; // pointer to string used as input buffer to command
+    Rcl::TermIter *m_tit;
+    Rcl::Db &m_db;
+    AspExecPv(string *i, Rcl::TermIter *tit, Rcl::Db &db) 
+	: m_input(i), m_tit(tit), m_db(db)
+    {}
+    void newData() {
+	while (m_db.termWalkNext(m_tit, *m_input)) {
+	    LOGDEB2(("Aspell::buildDict: term: [%s]\n", m_input->c_str()));
+	    if (!Rcl::Db::isSpellingCandidate(*m_input)) {
+		LOGDEB2(("Aspell::buildDict: SKIP\n"));
+		continue;
+	    }
+	    if (!o_index_stripchars) {
+		string lower;
+		if (!unacmaybefold(*m_input, lower, "UTF-8", UNACOP_FOLD))
+		    continue;
+		m_input->swap(lower);
+	    }
+	    // Got a non-empty sort-of appropriate term, let's send it to
+	    // aspell
+	    LOGDEB2(("Apell::buildDict: SEND\n"));
+	    m_input->append("\n");
+	    return;
+	}
+	// End of data. Tell so. Exec will close cmd.
+	m_input->erase();
+    }
+};
+
+
+bool Aspell::buildDict(Rcl::Db &db, string &reason)
+{
+    if (!ok())
+	return false;
+
+    // We create the dictionary by executing the aspell command:
+    // aspell --lang=[lang] create master [dictApath]
+    ExecCmd aspell;
+    vector args;
+    args.push_back(string("--lang=")+ m_lang);
+    args.push_back("--encoding=utf-8");
+    args.push_back("create");
+    args.push_back("master");
+    args.push_back(dicPath());
+
+    // Have to disable stderr, as numerous messages about bad strings are
+    // printed. We'd like to keep errors about missing databases though, so
+    // make it configurable for diags
+    bool keepStderr = false;
+    m_config->getConfParam("aspellKeepStderr", &keepStderr);
+    if (!keepStderr)
+	aspell.setStderr("/dev/null");
+
+    Rcl::TermIter *tit = db.termWalkOpen();
+    if (tit == 0) {
+	reason = "termWalkOpen failed\n";
+	return false;
+    }
+    string termbuf;
+    AspExecPv pv(&termbuf, tit, db);
+    aspell.setProvide(&pv);
+    
+    if (aspell.doexec(m_data->m_exec, args, &termbuf)) {
+	ExecCmd cmd;
+	args.clear();
+	args.push_back("dicts");
+	string dicts;
+	bool hasdict = false;
+	if (cmd.doexec(m_data->m_exec, args, 0, &dicts)) {
+	    vector vdicts;
+	    stringToTokens(dicts, vdicts, "\n\r\t ");
+	    if (find(vdicts.begin(), vdicts.end(), m_lang) != vdicts.end()) {
+		hasdict = true;
+	    }
+	}
+	if (hasdict)
+	    reason = string(
+		"\naspell dictionary creation command failed. Reason unknown.\n"
+		"Try to set aspellKeepStderr = 1 in recoll.conf, and execute \n"
+		"the indexing command in a terminal to see the aspell "
+		"diagnostic output.\n");
+	else
+	    reason = string("aspell dictionary creation command failed.\n"
+			    "One possible reason might be missing language "
+			    "data files for lang = ") + m_lang;
+	return false;
+    }
+    db.termWalkClose(tit);
+    return true;
+}
+
+
+bool Aspell::make_speller(string& reason)
+{
+    if (!ok())
+	return false;
+    if (m_data->m_speller != 0)
+        return true;
+
+    AspellCanHaveError *ret;
+
+    AspellConfig *config = aapi.new_aspell_config();
+    aapi.aspell_config_replace(config, "lang", m_lang.c_str());
+    aapi.aspell_config_replace(config, "encoding", "utf-8");
+    aapi.aspell_config_replace(config, "master", dicPath().c_str());
+    aapi.aspell_config_replace(config, "sug-mode", "fast");
+    //    aapi.aspell_config_replace(config, "sug-edit-dist", "2");
+    ret = aapi.new_aspell_speller(config);
+    aapi.delete_aspell_config(config);
+
+    if (aapi.aspell_error(ret) != 0) {
+	reason = aapi.aspell_error_message(ret);
+	aapi.delete_aspell_can_have_error(ret);
+	return false;
+    }
+    m_data->m_speller = aapi.to_aspell_speller(ret);
+    return true;
+}
+
+bool Aspell::check(const string &iterm, string& reason)
+{
+    LOGDEB2(("Aspell::check [%s]\n", iterm.c_str()));
+    string mterm(iterm);
+
+    if (!ok() || !make_speller(reason))
+	return false;
+    if (iterm.empty())
+        return true; //??
+
+    if (!o_index_stripchars) {
+	string lower;
+	if (!unacmaybefold(mterm, lower, "UTF-8", UNACOP_FOLD)) {
+	    LOGERR(("Aspell::check : cant lowercase input\n"));
+	    return false;
+	}
+	mterm.swap(lower);
+    }
+
+    int ret = aapi.aspell_speller_check(m_data->m_speller, 
+                                        mterm.c_str(), mterm.length());
+    reason.clear();
+    switch (ret) {
+    case 0: return false;
+    case 1: return true;
+    default:
+    case -1:
+        reason.append("Aspell error: ");
+        reason.append(aapi.aspell_speller_error_message(m_data->m_speller));
+        return false;
+    }
+}
+
+bool Aspell::suggest(Rcl::Db &db, const string &_term, 
+                     list& suggestions, string& reason)
+{
+    if (!ok() || !make_speller(reason))
+	return false;
+    string mterm(_term);
+    if (mterm.empty())
+        return true; //??
+
+    if (!o_index_stripchars) {
+	string lower;
+	if (!unacmaybefold(mterm, lower, "UTF-8", UNACOP_FOLD)) {
+	    LOGERR(("Aspell::check : cant lowercase input\n"));
+	    return false;
+	}
+	mterm.swap(lower);
+    }
+
+    AspellCanHaveError *ret;
+
+    const AspellWordList *wl = 
+	aapi.aspell_speller_suggest(m_data->m_speller, 
+                                    mterm.c_str(), mterm.length());
+    if (wl == 0) {
+	reason = aapi.aspell_speller_error_message(m_data->m_speller);
+	return false;
+    }
+    AspellStringEnumeration *els = aapi.aspell_word_list_elements(wl);
+    const char *word;
+    while ((word = aapi.aspell_string_enumeration_next(els)) != 0) {
+	// Check that the word exists in the index (we don't want
+	// aspell computed stuff, only exact terms from the
+	// dictionary).  We used to also check that it stems
+	// differently from the base word but this is complicated
+	// (stemming on/off + language), so we now leave this to the
+	// caller.
+	if (db.termExists(word))
+	    suggestions.push_back(word);
+    }
+    aapi.delete_aspell_string_enumeration(els);
+    return true;
+}
+
+#endif // RCL_USE_ASPELL
+
+#else // TEST_RCLASPELL test driver ->
+
+#ifdef HAVE_CONFIG_H
+#include "autoconfig.h"
+#endif
+
+#ifdef RCL_USE_ASPELL
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+using namespace std;
+
+#include "rclinit.h"
+#include "rclconfig.h"
+#include "rcldb.h"
+#include "rclaspell.h"
+
+static char *thisprog;
+RclConfig *rclconfig;
+
+static char usage [] =
+" -b : build dictionary\n"
+" -s : suggestions for term\n"
+" -c : check term\n"
+"\n"
+;
+static void
+Usage(void)
+{
+    fprintf(stderr, "%s: usage:\n%s", thisprog, usage);
+    exit(1);
+}
+
+static int     op_flags;
+#define OPT_MOINS 0x1
+#define OPT_s	  0x2 
+#define OPT_b	  0x4 
+#define OPT_c     0x8
+
+int main(int argc, char **argv)
+{
+    string word;
+    
+    thisprog = argv[0];
+    argc--; argv++;
+
+    while (argc > 0 && **argv == '-') {
+	(*argv)++;
+	if (!(**argv))
+	    /* Cas du "adb - core" */
+	    Usage();
+	while (**argv)
+	    switch (*(*argv)++) {
+	    case 'b':	op_flags |= OPT_b; break;
+	    case 'c':	op_flags |= OPT_c; if (argc < 2)  Usage();
+		word = *(++argv);
+		argc--; 
+		goto b1;
+	    case 's':	op_flags |= OPT_s; if (argc < 2)  Usage();
+		word = *(++argv);
+		argc--; 
+		goto b1;
+	    default: Usage();	break;
+	    }
+    b1: argc--; argv++;
+    }
+
+    if (argc != 0 || op_flags == 0)
+	Usage();
+
+    string reason;
+    rclconfig = recollinit(0, 0, reason);
+    if (!rclconfig || !rclconfig->ok()) {
+	fprintf(stderr, "Configuration problem: %s\n", reason.c_str());
+	exit(1);
+    }
+
+    string dbdir = rclconfig->getDbDir();
+    if (dbdir.empty()) {
+	fprintf(stderr, "No db directory in configuration");
+	exit(1);
+    }
+
+    Rcl::Db rcldb(rclconfig);
+
+    if (!rcldb.open(Rcl::Db::DbRO, 0)) {
+	fprintf(stderr, "Could not open database in %s\n", dbdir.c_str());
+	exit(1);
+    }
+
+    Aspell aspell(rclconfig);
+
+    if (!aspell.init(reason)) {
+	cerr << "Init failed: " << reason << endl;
+	exit(1);
+    }
+    if (op_flags & OPT_b) {
+	if (!aspell.buildDict(rcldb, reason)) {
+	    cerr << "buildDict failed: " << reason << endl;
+	    exit(1);
+	}
+    } else if (op_flags & OPT_c) {
+	bool ret = aspell.check(word, reason);
+	if (!ret && reason.size()) {
+	    cerr << "Aspell error: " << reason << endl;
+	    return 1;
+	}
+	cout << word;
+	if (ret) {
+	    cout << " is in dictionary" << endl;
+	} else {
+	    cout << " not in dictionary" << endl;
+	}
+    } else {
+	list suggs;
+	if (!aspell.suggest(rcldb, word, suggs, reason)) {
+	    cerr << "suggest failed: " << reason << endl;
+	    exit(1);
+	}
+	cout << "Suggestions for " << word << ":" << endl;
+	for (list::iterator it = suggs.begin(); 
+	     it != suggs.end(); it++) {
+	    cout << *it << endl;
+	}
+    }
+    exit(0);
+}
+#else
+int main(int argc, char **argv)
+{return 1;}
+#endif // RCL_USE_ASPELL
+
+#endif // TEST_RCLASPELL test driver
diff --git a/src/aspell/rclaspell.h b/src/aspell/rclaspell.h
new file mode 100644
index 00000000..a493b5d9
--- /dev/null
+++ b/src/aspell/rclaspell.h
@@ -0,0 +1,79 @@
+/* Copyright (C) 2006 J.F.Dockes
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+#ifndef _RCLASPELL_H_INCLUDED_
+#define _RCLASPELL_H_INCLUDED_
+
+/* autoconfig.h must be included before this file */
+#ifdef RCL_USE_ASPELL
+
+/**
+ * Aspell speller interface class.
+ *
+ * Aspell is used to let the user find about spelling variations that may 
+ * exist in the document set for a given word.
+ * A specific aspell dictionary is created out of all the terms in the 
+ * xapian index, and we then use it to expand a term to spelling neighbours.
+ * We use the aspell C api for term expansion, but have 
+ * to execute the program to create dictionaries.
+ */
+
+#include 
+#include 
+
+#include "rclconfig.h"
+#include "rcldb.h"
+
+class AspellData;
+
+class Aspell {
+ public:
+    Aspell(RclConfig *cnf);
+    ~Aspell();
+
+    /** Check health */
+    bool ok() const;
+
+    /** Find the aspell command and shared library, init function pointers */
+    bool init(std::string &reason); 
+
+    /**  Build dictionary out of index term list. This is done at the end
+     * of an indexing pass. */
+    bool buildDict(Rcl::Db &db, std::string &reason);
+
+    /** Check that word is in dictionary. Note that this would mean
+     * that the EXACT word is: aspell just does a lookup, no
+     * grammatical, case or diacritics magic of any kind
+     *
+     * @return true if word in dic, false if not. reason.size() -> error
+     */
+    bool check(const std::string& term, std::string& reason);
+
+    /** Return a list of possible expansions for a given word */
+    bool suggest(Rcl::Db &db, const std::string& term, 
+		 std::list &suggestions, std::string &reason);
+
+ private:
+    std::string dicPath();
+    RclConfig  *m_config;
+    std::string      m_lang;
+    AspellData *m_data;
+
+    bool make_speller(std::string& reason);
+};
+
+#endif /* RCL_USE_ASPELL */
+#endif /* _RCLASPELL_H_INCLUDED_ */
diff --git a/src/bincimapmime/00README.recoll b/src/bincimapmime/00README.recoll
new file mode 100644
index 00000000..38fb36c8
--- /dev/null
+++ b/src/bincimapmime/00README.recoll
@@ -0,0 +1,3 @@
+Most of the code in this directory was taken from the Binc IMAP project
+(http://www.bincimap.org/), version 1.3.3
+
diff --git a/src/bincimapmime/AUTHORS b/src/bincimapmime/AUTHORS
new file mode 100644
index 00000000..1ece119f
--- /dev/null
+++ b/src/bincimapmime/AUTHORS
@@ -0,0 +1,45 @@
+The following parties have participated in writing code or otherwise
+contributed to the Binc IMAP project:
+
+Author:
+Andreas Aardal Hanssen                  
+
+Several users have been very helpful with bug reports and suggestions, and
+the author is very grateful for their contributions.
+
+Some users have also gone to the extra effort of debugging the cause of a
+bug, or have found a way of implementing a feature, and have either provided
+a very good description of what is needed, or they have actually provided a
+patch that has been added to Binc IMAP.
+
+While adding extra value to the discussion around the discovery of a bug or
+the evaluation of a new feature, these contributors also take some load of
+the author's back, so they deserve extra thanks.
+
+In this list are also included people who have contributed with mirrors and
+translations of the web pages.
+
+Henry Baragar                           
+Jrgen Botz                             
+Charlie Brady                           
+Caskey Dickson                          
+Ketil Froyn                             
+Gary Gordon                             
+Marek Gutkowski                         
+Daniel James                            
+Zak Johnson                             
+Sergei Kolobov                          
+Rafal Kupka                             
+Eivind Kvedalen                         
+HIROSHIMA Naoki                         
+Greger Stolt Nilsen			
+John Starks                             
+Peter Stuge                             
+Gerrit Pape                             
+Jeremy Rossi                            
+Dale Woolridge                          
+
+If you have contributed to the Binc IMAP project but are not listed here
+(this happens quite often), please send a mail to andreas-binc@bincimap.org
+and I'll add you to the list.
+
diff --git a/src/bincimapmime/COPYING b/src/bincimapmime/COPYING
new file mode 100644
index 00000000..e4397077
--- /dev/null
+++ b/src/bincimapmime/COPYING
@@ -0,0 +1,356 @@
+This software is released under the GPL. Find a full copy of the GNU
+General Public License below.
+
+In addition, as a special exception, Andreas Aardal Hanssen, author of
+Binc IMAP, gives permission to link the code of this program with the
+OpenSSL library (or with modified versions of OpenSSL that use the
+same license as OpenSSL, listed in the included COPYING.OpenSSL file),
+and distribute linked combinations including the two.
+
+You must obey the GNU General Public License in all respects for all
+of the code used other than OpenSSL.  If you modify this file, you may
+extend this exception to your version of the file, but you are not
+obligated to do so. If you do not wish to do so, delete this exception
+statement from your version.
+
+---------------------------------------------------------------------
+                   GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    
+    Copyright (C)   
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  , 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/src/bincimapmime/Makefile b/src/bincimapmime/Makefile
new file mode 100644
index 00000000..1faa5898
--- /dev/null
+++ b/src/bincimapmime/Makefile
@@ -0,0 +1,31 @@
+# @(#$Id: Makefile,v 1.6 2006-01-19 12:01:42 dockes Exp $  (C) 2005 J.F.Dockes
+
+depth = ..
+include $(depth)/mk/sysconf
+
+LIBS = libmime.a
+PROGS = trbinc
+
+all: depend $(LIBS) 
+
+SRCS = mime-parsefull.cc mime-parseonlyheader.cc \
+     mime-printbody.cc mime.cc \
+     convert.cc iodevice.cc iofactory.cc
+
+OBJS = mime-parsefull.o mime-parseonlyheader.o \
+     mime-printbody.o mime.o  \
+     convert.o iodevice.o iofactory.o
+
+libmime.a : $(OBJS)
+	 $(AR) ru libmime.a $(OBJS)
+
+.cc.o:
+	$(CXX) $(ALL_CXXFLAGS) -c $<
+
+TRBINCOBJS = trbinc.o
+trbinc: trbinc.o
+	$(CXX) -o trbinc trbinc.o libmime.a 
+
+include $(depth)/mk/commontargets
+
+include alldeps
diff --git a/src/bincimapmime/config.h b/src/bincimapmime/config.h
new file mode 100644
index 00000000..e69de29b
diff --git a/src/bincimapmime/convert.cc b/src/bincimapmime/convert.cc
new file mode 100644
index 00000000..90e7c1ca
--- /dev/null
+++ b/src/bincimapmime/convert.cc
@@ -0,0 +1,133 @@
+/* -*- mode:c++;c-basic-offset:2 -*- */
+/*  --------------------------------------------------------------------
+ *  Filename:
+ *    convert.cc
+ *  
+ *  Description:
+ *    Implementation of miscellaneous convertion functions.
+ *  --------------------------------------------------------------------
+ *  Copyright 2002-2005 Andreas Aardal Hanssen
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *  --------------------------------------------------------------------
+ */
+#ifdef HAVE_CONFIG_H
+#include 
+#endif
+
+#include "convert.h"
+#include 
+
+#ifndef NO_NAMESPACES
+using namespace ::std;
+using namespace Binc;
+#endif /* NO_NAMESPACES */
+
+//------------------------------------------------------------------------
+BincStream::BincStream(void)
+{
+}
+
+//------------------------------------------------------------------------
+BincStream::~BincStream(void)
+{
+  clear();
+}
+
+//------------------------------------------------------------------------
+string BincStream::popString(unsigned int size)
+{
+  if (size > nstr.length())
+    size = nstr.length();
+  string tmp = nstr.substr(0, size);
+  nstr = nstr.substr(size);
+  return tmp;
+}
+
+//------------------------------------------------------------------------
+char BincStream::popChar(void)
+{
+  if (nstr.length() == 0)
+    return '\0';
+
+  char c = nstr[0];
+  nstr = nstr.substr(1);
+  return c;
+}
+
+//------------------------------------------------------------------------
+void BincStream::unpopChar(char c)
+{
+  nstr = c + nstr;
+}
+
+//------------------------------------------------------------------------
+void BincStream::unpopStr(const string &s)
+{
+  nstr = s + nstr;
+}
+
+//------------------------------------------------------------------------
+const string &BincStream::str(void) const
+{
+  return nstr;
+}
+
+//------------------------------------------------------------------------
+void BincStream::clear(void)
+{
+  nstr.clear();
+}
+
+//------------------------------------------------------------------------
+unsigned int BincStream::getSize(void) const
+{
+  return (unsigned int) nstr.length();
+}
+
+//------------------------------------------------------------------------
+BincStream &BincStream::operator << (std::ostream&(*)(std::ostream&))
+{
+  nstr += "\r\n";
+  return *this;
+}
+
+//------------------------------------------------------------------------
+BincStream &BincStream::operator << (const string &t)
+{
+  nstr += t;
+  return *this;
+}
+
+//------------------------------------------------------------------------
+BincStream &BincStream::operator << (int t)
+{
+  nstr += toString(t);
+  return *this;
+}
+
+//------------------------------------------------------------------------
+BincStream &BincStream::operator << (unsigned int t)
+{
+  nstr += toString(t);
+  return *this;
+}
+
+//------------------------------------------------------------------------
+BincStream &BincStream::operator << (char t)
+{
+  nstr += t;
+  return *this;
+}
diff --git a/src/bincimapmime/convert.h b/src/bincimapmime/convert.h
new file mode 100644
index 00000000..04a41acb
--- /dev/null
+++ b/src/bincimapmime/convert.h
@@ -0,0 +1,320 @@
+/* -*- mode:c++;c-basic-offset:2 -*- */
+/*  --------------------------------------------------------------------
+ *  Filename:
+ *    src/util/convert.h
+ *  
+ *  Description:
+ *    Declaration of miscellaneous convertion functions.
+ *  --------------------------------------------------------------------
+ *  Copyright 2002-2005 Andreas Aardal Hanssen
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *  --------------------------------------------------------------------
+ */
+#ifdef HAVE_CONFIG_H
+#include 
+#endif
+
+#ifndef convert_h_included
+#define convert_h_included
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+
+namespace Binc {
+
+  //----------------------------------------------------------------------
+  inline std::string toString(int i_in)
+  {
+    char intbuf[16];
+    snprintf(intbuf, sizeof(intbuf), "%d", i_in);
+    return std::string(intbuf);
+  }
+
+  //----------------------------------------------------------------------
+  inline std::string toString(unsigned int i_in)
+  {
+    char intbuf[16];
+    snprintf(intbuf, sizeof(intbuf), "%u", i_in);
+    return std::string(intbuf);
+  }
+
+  //----------------------------------------------------------------------
+  inline std::string toString(unsigned long i_in)
+  {
+    char longbuf[40];
+    snprintf(longbuf, sizeof(longbuf), "%lu", i_in);
+    return std::string(longbuf);
+  }
+
+  //----------------------------------------------------------------------
+  inline std::string toString(const char *i_in)
+  {
+    return std::string(i_in);
+  }
+
+  //----------------------------------------------------------------------
+  inline int atoi(const std::string &s_in)
+  {
+    return ::atoi(s_in.c_str());
+  }
+
+  //----------------------------------------------------------------------
+  inline std::string toHex(const std::string &s)
+  {
+    const char hexchars[] = "0123456789abcdef";
+    std::string tmp;
+    for (std::string::const_iterator i = s.begin(); i != s.end(); ++i) {
+      unsigned char c = (unsigned char)*i;
+      tmp += hexchars[((c & 0xf0) >> 4)];
+      tmp += hexchars[c & 0x0f];
+    }
+    
+    return tmp;
+  }
+
+  //----------------------------------------------------------------------
+  inline std::string fromHex(const std::string &s)
+  {
+    const char hexchars[] = "0123456789abcdef";
+    std::string tmp;
+    for (std::string::const_iterator i = s.begin();
+	 i != s.end() && i + 1 != s.end(); i += 2) {
+      int n;
+      unsigned char c = *i;
+      unsigned char d = *(i + 1);
+      
+      const char *t;
+      if ((t = strchr(hexchars, c)) == 0)
+	return "out of range";
+      n = (t - hexchars) << 4;
+      
+      
+      if ((t = strchr(hexchars, d)) == 0)
+	return "out of range";
+      n += (t - hexchars);
+      
+      if (n >= 0 && n <= 255)
+	tmp += (char) n;
+      else
+	return "out of range";
+    }
+    
+    return tmp;
+  }
+  
+  //----------------------------------------------------------------------
+  inline std::string toImapString(const std::string &s_in)
+  {
+    for (std::string::const_iterator i = s_in.begin(); i != s_in.end(); ++i) {
+      unsigned char c = (unsigned char)*i;
+      if (c <= 31 || c >= 127 || c == '\"' || c == '\\')
+	return "{" + toString(s_in.length()) + "}\r\n" + s_in;
+    }
+    
+    return "\"" + s_in + "\"";
+  }
+
+  //----------------------------------------------------------------------
+  inline void uppercase(std::string &input)
+  {
+    for (std::string::iterator i = input.begin(); i != input.end(); ++i)
+      *i = toupper(*i);
+  }
+
+  //----------------------------------------------------------------------
+  inline void lowercase(std::string &input)
+  {
+    for (std::string::iterator i = input.begin(); i != input.end(); ++i)
+      *i = tolower(*i);
+  }
+
+  //----------------------------------------------------------------------
+  inline void chomp(std::string &s_in, const std::string &chars = " \t\r\n")
+  {
+    int n = s_in.length();
+    while (n > 1 && chars.find(s_in[n - 1]) != std::string::npos)
+      s_in.resize(n-- - 1);
+  }
+
+  //----------------------------------------------------------------------
+  inline void trim(std::string &s_in, const std::string &chars = " \t\r\n")
+  {
+    while (s_in != "" && chars.find(s_in[0]) != std::string::npos)
+      s_in = s_in.substr(1);
+    chomp(s_in, chars);
+  }
+
+  //----------------------------------------------------------------------
+  inline const std::string unfold(const std::string &a, 
+				  bool removecomment = true)
+  {
+    std::string tmp;
+    bool incomment = false;
+    bool inquotes = false;
+    for (std::string::const_iterator i = a.begin(); i != a.end(); ++i) {
+      unsigned char c = (unsigned char)*i;
+      if (!inquotes && removecomment) {
+	if (c == '(') {
+	  incomment = true; 
+	  tmp += " ";
+	} else if (c == ')') {
+	  incomment = false; 
+	} else if (c != 0x0a && c != 0x0d) {
+	  tmp += *i;
+        }
+      } else if (c != 0x0a && c != 0x0d) {
+	tmp += *i;
+      }
+
+      if (!incomment) {
+        if (*i == '\"') 
+          inquotes = !inquotes;
+      }
+    }
+
+    trim(tmp);
+    return tmp;
+  }
+  
+  //----------------------------------------------------------------------
+  inline void split(const std::string &s_in, const std::string &delim, 
+	     std::vector &dest, bool skipempty = true)
+  {
+    std::string token;
+    for (std::string::const_iterator i = s_in.begin(); i != s_in.end(); ++i) {
+      if (delim.find(*i) != std::string::npos) {
+	if (!skipempty || token != "")
+	  dest.push_back(token);
+	token.clear();
+      } else
+	token += *i;
+    }
+
+    if (token != "")
+      dest.push_back(token);
+  }
+
+  //----------------------------------------------------------------------
+  inline void splitAddr(const std::string &s_in,
+			std::vector &dest, bool skipempty = true)
+  {
+    static const std::string delim = ",";
+    std::string token;
+    bool inquote = false;
+    for (std::string::const_iterator i = s_in.begin(); i != s_in.end(); ++i) {
+      if (inquote && *i == '\"') inquote = false;
+      else if (!inquote && *i == '\"') inquote = true;
+
+      if (!inquote && delim.find(*i) != std::string::npos) {
+	if (!skipempty || token != "")
+	  dest.push_back(token);
+	token.clear();
+      } else
+	token += *i;
+    }
+    if (token != "")
+      dest.push_back(token);
+  }
+
+  //----------------------------------------------------------------------
+  inline std::string toCanonMailbox(const std::string &s_in)
+  {
+    if (s_in.find("..") != std::string::npos) return std::string();
+
+    if (s_in.length() >= 5) {
+      std::string a = s_in.substr(0, 5);
+      uppercase(a);
+      return a == "INBOX" ?
+	a + (s_in.length() > 5 ? s_in.substr(5) : std::string()) : s_in;
+    }
+    
+    return s_in;
+  }
+
+  //------------------------------------------------------------------------
+  inline std::string toRegex(const std::string &s_in, char delimiter)
+  {
+    std::string regex = "^";
+    for (std::string::const_iterator i = s_in.begin(); i != s_in.end(); ++i) {
+      if (*i == '.' || *i == '[' || *i == ']' || *i == '{' || *i == '}' ||
+	  *i == '(' || *i == ')' || *i == '^' || *i == '$' || *i == '?' ||
+	  *i == '+' || *i == '\\') {
+	regex += "\\";
+	regex += *i;
+      } else if (*i == '*')
+	regex += ".*?";
+       else if (*i == '%') {
+        regex += "(\\";
+        regex += delimiter;
+        regex += "){0,1}";
+	regex += "[^\\";
+	regex += delimiter;
+	regex += "]*?";
+      } else regex += *i;
+    }
+    
+    if (regex[regex.length() - 1] == '?')
+      regex[regex.length() - 1] = '$';
+    else
+      regex += "$";
+
+    return regex;
+  }
+
+  //------------------------------------------------------------------------
+  class BincStream {
+  private:
+    std::string nstr;
+
+  public:
+
+    //--
+    BincStream &operator << (std::ostream&(*)(std::ostream&));
+    BincStream &operator << (const std::string &t);
+    BincStream &operator << (unsigned int t);
+    BincStream &operator << (int t);
+    BincStream &operator << (char t);
+
+    //--
+    std::string popString(unsigned int size);
+
+    //--
+    char popChar(void);
+    void unpopChar(char c);
+    void unpopStr(const std::string &s);
+
+    //--
+    const std::string &str(void) const;
+
+    //--
+    unsigned int getSize(void) const;
+
+    //--
+    void clear(void);
+
+    //--
+    BincStream(void);
+    ~BincStream(void);
+  };
+}
+
+#endif
diff --git a/src/bincimapmime/iodevice.cc b/src/bincimapmime/iodevice.cc
new file mode 100644
index 00000000..6561f0ca
--- /dev/null
+++ b/src/bincimapmime/iodevice.cc
@@ -0,0 +1,322 @@
+/*-*-mode:c++-*-*/
+/*  --------------------------------------------------------------------
+ *  Filename:
+ *    src/iodevice.cc
+ *  
+ *  Description:
+ *    Implementation of the IODevice class.
+ *  --------------------------------------------------------------------
+ *  Copyright 2002, 2003 Andreas Aardal Hanssen
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *  --------------------------------------------------------------------
+ */
+#include "iodevice.h"
+#include "convert.h" // BincStream
+//#include "session.h" // getEnv/hasEnv
+
+#include 
+#include 
+
+#ifndef NO_NAMESPACES
+using namespace ::std;
+using namespace ::Binc;
+#endif /* NO_NAMESPACES */
+
+//------------------------------------------------------------------------
+IODevice::IODevice(int f) : flags(f | IsEnabled),
+			      maxInputBufferSize(0),
+			      maxOutputBufferSize(0),
+			      timeout(0), 
+			      readCount(0), writeCount(0),
+			      outputLevel(ErrorLevel),
+			      outputLevelLimit(ErrorLevel),
+			      error(Unknown), errorString("Unknown error"),
+			      dumpfd(0)
+{
+}
+
+//------------------------------------------------------------------------
+IODevice::~IODevice(void)
+{
+}
+
+//------------------------------------------------------------------------
+IODevice &IODevice::operator <<(ostream &(*source)(ostream &))
+{
+  if (!(flags & IsEnabled) || outputLevel > outputLevelLimit)
+    return *this;
+
+  static std::ostream &(*endl_funcptr)(ostream &) = endl;
+  
+  if (source != endl_funcptr)
+    return *this;
+
+  outputBuffer << "\r\n";
+
+  if (dumpfd)
+    ::write(dumpfd, "\r\n", 2);
+
+  if (flags & FlushesOnEndl)
+    flush();
+  else if (flags & HasOutputLimit)
+    if (outputBuffer.getSize() > maxOutputBufferSize)
+      flush();
+
+  return *this;
+}
+
+//------------------------------------------------------------------------
+bool IODevice::canRead(void) const
+{
+  return false;
+}
+
+//------------------------------------------------------------------------
+void IODevice::clear()
+{
+  if (!(flags & IsEnabled))
+    return;
+
+  inputBuffer.clear();
+  outputBuffer.clear();
+}
+
+//------------------------------------------------------------------------
+bool IODevice::flush()
+{
+  if (!(flags & IsEnabled))
+    return true;
+
+  WriteResult writeResult = WriteWait;
+  do {
+    unsigned int s = outputBuffer.getSize();
+    if (s == 0)
+      break;
+
+    if (!waitForWrite())
+      return false;
+    
+    writeResult = write();
+    if (writeResult == WriteError)
+      return false;
+
+    writeCount += s - outputBuffer.getSize();
+  } while (outputBuffer.getSize() > 0 && writeResult == WriteWait);
+
+  outputBuffer.clear();
+  return true;
+}
+
+//------------------------------------------------------------------------
+void IODevice::setFlags(unsigned int f)
+{
+  flags |= f;
+}
+
+//------------------------------------------------------------------------
+void IODevice::clearFlags(unsigned int f)
+{
+  flags &= ~f;
+}
+
+//------------------------------------------------------------------------
+void IODevice::setMaxInputBufferSize(unsigned int max)
+{
+  maxInputBufferSize = max;
+}
+
+//------------------------------------------------------------------------
+void IODevice::setMaxOutputBufferSize(unsigned int max)
+{
+  maxOutputBufferSize = max;
+}
+
+//------------------------------------------------------------------------
+void IODevice::setTimeout(unsigned int t)
+{
+  timeout = t;
+
+  if (t)
+    flags |= HasTimeout;
+  else
+    flags &= ~HasTimeout;
+}
+
+//------------------------------------------------------------------------
+unsigned int IODevice::getTimeout(void) const
+{
+  return timeout;
+}
+
+//------------------------------------------------------------------------
+void IODevice::setOutputLevel(LogLevel level)
+{
+  outputLevel = level;
+}
+
+//------------------------------------------------------------------------
+IODevice::LogLevel IODevice::getOutputLevel(void) const
+{
+  return outputLevel;
+}
+
+//------------------------------------------------------------------------
+void IODevice::setOutputLevelLimit(LogLevel level)
+{
+  outputLevelLimit = level;
+}
+
+//------------------------------------------------------------------------
+IODevice::LogLevel IODevice::getOutputLevelLimit(void) const
+{
+  return outputLevelLimit;
+}
+
+//------------------------------------------------------------------------
+bool IODevice::readStr(string *dest, unsigned int max)
+{
+  // If max is 0, fill the input buffer once only if it's empty.
+  if (!max && inputBuffer.getSize() == 0 && !fillInputBuffer())
+    return false;
+
+  // If max is != 0, wait until we have max.
+  while (max && inputBuffer.getSize() < max) {
+      if (!fillInputBuffer())
+	  return false;
+  }
+
+  unsigned int bytesToRead = max ? max : inputBuffer.getSize();
+  *dest += inputBuffer.str().substr(0, bytesToRead);
+  if (dumpfd) {
+      ::write(dumpfd, inputBuffer.str().substr(0, bytesToRead).c_str(), 
+	      bytesToRead);
+  }
+  
+  inputBuffer.popString(bytesToRead);
+  readCount += bytesToRead;
+  return true;
+}
+
+//------------------------------------------------------------------------
+bool IODevice::readChar(char *dest)
+{
+  if (inputBuffer.getSize() == 0 && !fillInputBuffer())
+    return false;
+
+  char c = inputBuffer.popChar();
+  if (dest)
+    *dest = c;
+  if (dumpfd)
+    ::write(dumpfd, &c, 1);
+
+  ++readCount;
+  return true;
+}
+
+//------------------------------------------------------------------------
+void IODevice::unreadChar(char c)
+{
+  inputBuffer.unpopChar(c);
+}
+
+//------------------------------------------------------------------------
+void IODevice::unreadStr(const string &s)
+{
+  inputBuffer.unpopStr(s);
+}
+
+//------------------------------------------------------------------------
+bool IODevice::skipTo(char c)
+{
+  char dest = '\0';
+  do {
+    if (!readChar(&dest))
+      return false;
+    if (dumpfd)
+      ::write(dumpfd, &dest, 1);
+  } while (c != dest);
+
+  return true;
+}
+
+//------------------------------------------------------------------------
+string IODevice::service(void) const
+{
+  return "nul";
+}
+
+//------------------------------------------------------------------------
+bool IODevice::waitForWrite(void) const
+{
+  return false;
+}
+
+//------------------------------------------------------------------------
+bool IODevice::waitForRead(void) const
+{
+  return false;
+}
+
+//------------------------------------------------------------------------
+IODevice::WriteResult IODevice::write(void)
+{
+  return WriteError;
+}
+
+//------------------------------------------------------------------------
+bool IODevice::fillInputBuffer(void)
+{
+  return false;
+}
+
+//------------------------------------------------------------------------
+IODevice::Error IODevice::getLastError(void) const
+{
+  return error;
+}
+
+//------------------------------------------------------------------------
+string IODevice::getLastErrorString(void) const
+{
+  return errorString;
+}
+
+//------------------------------------------------------------------------
+unsigned int IODevice::getReadCount(void) const
+{
+  return readCount;
+}
+
+//------------------------------------------------------------------------
+unsigned int IODevice::getWriteCount(void) const
+{
+  return writeCount;
+}
+
+//------------------------------------------------------------------------
+void IODevice::enableProtocolDumping(void)
+{
+#if 0
+  BincStream ss;
+  ss << "/tmp/bincimap-dump-" << (int) time(0) << "-" 
+     << Session::getInstance().getIP() << "-XXXXXX";
+  char *safename = strdup(ss.str().c_str());
+  dumpfd = mkstemp(safename);
+  if (dumpfd == -1)
+    dumpfd = 0;
+  delete safename;
+#endif
+}
diff --git a/src/bincimapmime/iodevice.h b/src/bincimapmime/iodevice.h
new file mode 100644
index 00000000..a7bd0528
--- /dev/null
+++ b/src/bincimapmime/iodevice.h
@@ -0,0 +1,401 @@
+/*-*-mode:c++;c-basic-offset:2-*-*/
+/*  --------------------------------------------------------------------
+ *  Filename:
+ *    src/iodevice.h
+ *  
+ *  Description:
+ *    Declaration of the IODevice class.
+ *  --------------------------------------------------------------------
+ *  Copyright 2002, 2003 Andreas Aardal Hanssen
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *  --------------------------------------------------------------------
+ */
+#ifndef iodevice_h_included
+#define iodevice_h_included
+#ifdef HAVE_CONFIG_H
+#include 
+#endif
+
+#include "convert.h" // BincStream
+#include 
+#include  // ::write
+
+namespace Binc {
+  /*!
+    \class IODevice
+    \brief The IODevice class provides a framework for reading and
+    writing to device.
+
+    Implement new devices by inheriting this class and overloading all
+    virtual methods.
+
+    service() returns the service that the specific device is used
+    for. Two values are "log" and "client".
+
+    \sa IOFactory, MultilogDevice, SyslogDevice, StdIODevice, SSLDevice
+  */
+  class IODevice {
+  public:
+    /*!
+      Standard options for an IODevice.
+    */
+    enum Flags {
+      None = 0,
+      FlushesOnEndl = 1 << 0,
+      HasInputLimit = 1 << 1,
+      HasOutputLimit = 1 << 2,
+      IsEnabled = 1 << 3,
+      HasTimeout = 1 << 4
+    };
+
+    /*!
+      Errors from when an operation returned false.
+    */
+    enum Error {
+      Unknown,
+      Timeout
+    };
+
+    /*!
+      Constructs an invalid IODevice.      
+
+      Instances of IODevice perform no operations, and all boolean
+      functions always return false. This constructor is only useful
+      if called from a subclass that reimplements all virtual methods.
+    */
+    IODevice(int f = 0);
+
+    /*!
+      Destructs an IODevice; does nothing.
+    */
+    virtual ~IODevice(void);
+
+    /*!
+      Clears all data in the input and output buffers.
+    */
+    void clear(void);
+
+    /*!
+      Sets one or more flags.
+      \param f A bitwise OR of flags from the Flags enum.
+    */
+    void setFlags(unsigned int f);
+
+    /*!
+      Clears one or more flags.
+      \param f A bitwise OR of flags from the Flags enum.
+    */
+    void clearFlags(unsigned int f);
+
+    /*!
+      Sets the maximum allowed input buffer size. If this size is
+      non-zero and exceeded, reading from the device will fail. This
+      functionality is used to prevent clients from forcing this class
+      to consume so much memory that the program crashes.
+
+      Setting the max input buffer size to 0 disables the input size
+      limit.
+
+      \param max The maximum input buffer size in bytes.
+    */
+    void setMaxInputBufferSize(unsigned int max);
+
+    /*!
+      Sets the maximum allowed output buffer size. If this size is
+      non-zero and exceeded, flush() is called implicitly.
+
+      Setting the max output buffer size to 0 disables the output size
+      limit. This is generally discouraged.
+
+      As a contrast to setMaxInputBufferSize(), this function is used
+      to bundle up consequent write calls, allowing more efficient use
+      of the underlying device as larger blocks of data are written at
+      a time.
+
+      \param max The maximum output buffer size in bytes.
+    */
+    void setMaxOutputBufferSize(unsigned int max);
+
+    /*!
+      Sets the device's internal timeout in seconds. This timeout is
+      used both when waiting for data to read and for waiting for the
+      ability to write.
+
+      If this timeout is exceeded, the read or write function that
+      triggered the timeout will fail.
+
+      Setting the timeout to 0 disables the timeout.
+
+      \param t The timeout in seconds.
+      \sa getTimeout()
+    */
+    void setTimeout(unsigned int t);
+
+    /*!
+      Returns the timeout in seconds, or 0 if there is no timeout.
+
+      \sa setTimeout()
+    */
+    unsigned int getTimeout(void) const;
+
+    enum LogLevel {
+      ErrorLevel,
+      InfoLevel,
+      WarningLevel,
+      DebugLevel
+    };
+    
+    /*!
+      Sets the output level for the following write operations on this
+      device.
+
+      The output level is a number which gives the following write
+      operations a priority. You can use setOutputLevelLimit() to
+      filter the write operations valid for different operating modes.
+      This enables you to have certain write operations ignored.
+
+      For instance, if the output level is set to 0, then "Hello" is
+      written, and the output level is set to 1, followed by writing
+      "Daisy", the output level limit value will decive wether only
+      "Hello" is written, or if also "Daisy" is written.
+
+      A low value of the level gives higher priority, and a high level
+      will give low priority. The default value is 0, and write
+      operations that are done with output level 0 are never ignored.
+
+      \param level The output level
+      \sa getOutputLevel(), setOutputLevelLimit()
+    */
+    void setOutputLevel(LogLevel level);
+
+    /*!
+      Returns the current output level.
+
+      \sa setOutputLevel()
+    */
+    LogLevel getOutputLevel(void) const;
+
+    /*!
+      Sets the current output level limit. Write operations with a
+      level higher than the output level limit are ignored.
+
+      \param level The output level limit
+      \sa setOutputLevel()
+    */
+    void setOutputLevelLimit(LogLevel level);
+
+    /*!
+      Returns the current output level limit.
+
+      \sa setOutputLevelLimit()
+    */
+    LogLevel getOutputLevelLimit(void) const;
+
+    /*!
+      Returns the number of bytes that have been read from this device
+      since it was created.
+    */
+    unsigned int getReadCount(void) const;
+
+    /*!
+      Returns the number of bytes that have been written to this
+      device since it was created.
+    */
+    unsigned int getWriteCount(void) const;
+
+    /*!
+      Calling this function enables the built-in protocol dumping feature in
+      the device. All input and output to this device will be dumped to a file
+      in /tmp.
+    */
+    void enableProtocolDumping(void);
+
+    /*!
+      Writes data to the device. Depending on the value of the max
+      output buffer size, the data may not be written immediately.
+
+      \sa setMaxOutputBufferSize()
+    */
+    template  IODevice &operator <<(const T &source);
+
+    /*!
+      Writes data to the device. This function specializes on standard
+      ostream derivates, such as std::endl.
+     */
+    IODevice &operator <<(std::ostream &(*source)(std::ostream &));
+
+    /*!
+      Returns true if data can be read from the device; otherwise
+      returns false.
+    */
+    virtual bool canRead(void) const;
+
+    /*!
+      Reads data from the device, and stores this in a string. Returns
+      true on success; otherwise returns false.
+      
+      \param dest The incoming data is stored in this string.
+      \param max No more than this number of bytes is read from the
+      device.
+    */
+    bool readStr(std::string *dest, unsigned int max = 0);
+
+    /*!
+      Reads exactly one byte from the device and stores this in a
+      char. Returns true on success; otherwise returns false.
+
+      \param dest The incoming byte is stored in this char.
+    */
+    bool readChar(char *dest = 0);
+
+    /*!
+      FIXME: add docs
+    */
+    void unreadChar(char c);
+
+    /*!
+      FIXME: add docs
+    */
+    void unreadStr(const std::string &s);
+
+    /*!
+      Reads characters from the device, until and including one
+      certain character is found. All read characters are discarded.
+
+      This function can be used to skip to the beginning of a line,
+      with the terminating character being '\n'.
+
+      \param The certain character.
+    */
+    bool skipTo(char c);
+
+    /*!
+      Flushes the output buffer. Writes all data in the output buffer
+      to the device.
+    */
+    bool flush(void);
+
+    /*!
+      Returns the type of error that most recently occurred.
+    */
+    Error getLastError(void) const;
+
+    /*!
+      Returns a human readable description of the error that most
+      recently occurred. If no known error has occurred, this method
+      returns "Unknown error".
+    */
+    std::string getLastErrorString(void) const;
+
+    /*!
+      Returns the type of service provided by this device. Two valid
+      return values are "client" and "log".
+    */
+    virtual std::string service(void) const;
+    
+  protected:
+    /*!
+      Waits until data can be written to the device. If the timeout is
+      0, this function waits indefinitely. Otherwise, it waits until
+      the timeout has expired.
+
+      If this function returns true, data can be written to the
+      device; otherwise, getLastError() must be checked to determine
+      whether a timeout occurred or whether an error with the device
+      prevents further writing.
+    */
+    virtual bool waitForWrite(void) const;
+
+    /*!
+      Waits until data can be read from the device.
+
+      \sa waitForWrite()
+    */
+    virtual bool waitForRead(void) const;
+
+    /*!
+      Types of results from a write. 
+    */
+    enum WriteResult {
+      WriteWait = 0,
+      WriteDone = 1 << 0,
+      WriteError = 1 << 1
+    };
+
+    /*!
+      Writes as much data as possible to the device. If some but not
+      all data was written, returns WriteWait. If all data was
+      written, returns WriteDone.  If an error occurred, returns
+      WriteError.
+    */
+    virtual WriteResult write(void);
+
+    /*!
+      Reads data from the device, and stores it in the input buffer.
+      Returns true on success; otherwise returns false.
+      
+      This method will fail if there is no more data available, if a
+      timeout occurred or if an error with the device prevents more
+      data from being read.
+
+      The number of bytes read from the device is undefined.
+    */
+    virtual bool fillInputBuffer(void);
+
+    BincStream inputBuffer;
+    BincStream outputBuffer;
+
+  protected:
+    unsigned int flags;
+    unsigned int maxInputBufferSize;
+    unsigned int maxOutputBufferSize;
+
+    unsigned int timeout;
+
+    unsigned int readCount;
+    unsigned int writeCount;
+
+    LogLevel outputLevel;
+    LogLevel outputLevelLimit;
+
+    mutable Error error;
+    mutable std::string errorString;
+
+    int dumpfd;
+  };
+
+  //----------------------------------------------------------------------
+  template  IODevice &IODevice::operator <<(const T &source)
+  {
+    if ((flags & IsEnabled) && outputLevel <= outputLevelLimit) {
+      outputBuffer << source;
+
+      if (dumpfd) {
+	BincStream ss;
+	ss << source;
+	::write(dumpfd, ss.str().c_str(), ss.getSize());
+      }
+
+      if (flags & HasInputLimit)
+	if (outputBuffer.getSize() > maxOutputBufferSize)
+	  flush();
+    }
+
+    return *this;
+  }
+}
+
+#endif
diff --git a/src/bincimapmime/iofactory.cc b/src/bincimapmime/iofactory.cc
new file mode 100644
index 00000000..04b6999e
--- /dev/null
+++ b/src/bincimapmime/iofactory.cc
@@ -0,0 +1,87 @@
+/*-*-mode:c++-*-*/
+/*  --------------------------------------------------------------------
+ *  Filename:
+ *    src/iofactory.cc
+ *  
+ *  Description:
+ *    Implementation of the IOFactory class.
+ *  --------------------------------------------------------------------
+ *  Copyright 2002, 2003 Andreas Aardal Hanssen
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *  --------------------------------------------------------------------
+ */
+#include "iofactory.h"
+#include "iodevice.h"
+
+#ifndef NO_NAMESPACES
+using namespace ::Binc;
+using namespace ::std;
+#endif /* NO_NAMESPACES */
+
+//------------------------------------------------------------------------
+IOFactory::IOFactory(void)
+{
+}
+
+//------------------------------------------------------------------------
+IOFactory::~IOFactory(void)
+{
+}
+
+//------------------------------------------------------------------------
+IOFactory &IOFactory::getInstance(void)
+{
+  static IOFactory ioFactory;
+  return ioFactory;
+}
+
+//------------------------------------------------------------------------
+void IOFactory::addDevice(IODevice *dev)
+{
+  IODevice *ioDevice = IOFactory::getInstance().devices[dev->service()];
+
+  // FIXME: Delete correct object. Now, only IODevice's destructor is
+  // called, and only IODevice's memory is freed.
+  if (ioDevice)
+    delete ioDevice;
+
+  IOFactory::getInstance().devices[dev->service()] = dev;
+}
+
+//------------------------------------------------------------------------
+IODevice &IOFactory::getClient(void)
+{
+  static IODevice nulDevice;
+
+  IOFactory &ioFactory = IOFactory::getInstance();
+
+  if (ioFactory.devices.find("client") != ioFactory.devices.end())
+    return *ioFactory.devices["client"];
+
+  return nulDevice;
+}
+
+//------------------------------------------------------------------------
+IODevice &IOFactory::getLogger(void)
+{
+  static IODevice nulDevice;
+
+  IOFactory &ioFactory = IOFactory::getInstance();
+
+  if (ioFactory.devices.find("log") != ioFactory.devices.end())
+    return *ioFactory.devices["log"];
+  return nulDevice;
+}
diff --git a/src/bincimapmime/iofactory.h b/src/bincimapmime/iofactory.h
new file mode 100644
index 00000000..2c7b8157
--- /dev/null
+++ b/src/bincimapmime/iofactory.h
@@ -0,0 +1,69 @@
+/*-*-mode:c++-*-*/
+/*  --------------------------------------------------------------------
+ *  Filename:
+ *    src/iofactory.h
+ *  
+ *  Description:
+ *    Declaration of the IOFactory class.
+ *  --------------------------------------------------------------------
+ *  Copyright 2002, 2003 Andreas Aardal Hanssen
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *  --------------------------------------------------------------------
+ */
+#ifndef IOFACTORY_H_INCLUDED
+#define IOFACTORY_H_INCLUDED
+#include 
+#include 
+
+#include "iodevice.h"
+
+namespace Binc {
+  class IOFactory {
+  public:
+    ~IOFactory(void);
+
+    static void addDevice(IODevice *dev);
+    static IOFactory &getInstance(void);
+    static IODevice &getClient(void);
+    static IODevice &getLogger(void);
+
+  private:
+    IOFactory(void);
+    
+    std::map devices;
+  };
+}
+
+#define bincClient \
+  IOFactory::getClient()
+
+#if !defined (DEBUG)
+#define bincError if (false) std::cout
+#define bincWarning if (false) std::cout
+#define bincDebug if (false) std::cout
+#else
+#define bincError \
+  IOFactory::getLogger().setOutputLevel(IODevice::ErrorLevel);IOFactory::getLogger()
+#define bincWarning \
+  IOFactory::getLogger().setOutputLevel(IODevice::WarningLevel);IOFactory::getLogger()
+#define bincDebug \
+  IOFactory::getLogger().setOutputLevel(IODevice::DebugLevel);IOFactory::getLogger()
+#endif
+
+#define bincInfo \
+  IOFactory::getLogger().setOutputLevel(IODevice::InfoLevel);IOFactory::getLogger()
+
+#endif
diff --git a/src/bincimapmime/mime-inputsource.h b/src/bincimapmime/mime-inputsource.h
new file mode 100644
index 00000000..49752b39
--- /dev/null
+++ b/src/bincimapmime/mime-inputsource.h
@@ -0,0 +1,216 @@
+/* -*- mode:c++;c-basic-offset:2 -*- */
+/*  --------------------------------------------------------------------
+ *  Filename:
+ *    src/mime-inputsource.h
+ *  
+ *  Description:
+ *    The base class of the MIME input source
+ *  --------------------------------------------------------------------
+ *  Copyright 2002-2005 Andreas Aardal Hanssen
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *  --------------------------------------------------------------------
+ */
+#ifndef mime_inputsource_h_included
+#define mime_inputsource_h_included
+
+#ifdef HAVE_CONFIG_H
+#include 
+#endif
+
+#include 
+#include 
+
+#include 
+
+namespace Binc {
+
+  class MimeInputSource {
+  public:
+    // Note that we do NOT take ownership of fd, won't close it on delete
+    inline MimeInputSource(int fd, unsigned int start = 0);
+    virtual inline ~MimeInputSource(void);
+
+    virtual inline size_t fillRaw(char *raw, size_t nbytes);
+    virtual inline void reset(void);
+
+    virtual inline bool fillInputBuffer(void);
+    inline void seek(unsigned int offset);
+    inline bool getChar(char *c);
+    inline void ungetChar(void);
+    inline int getFileDescriptor(void) const;
+
+    inline unsigned int getOffset(void) const;
+
+  private:
+    int fd;
+    char data[16384];
+    unsigned int offset;
+    unsigned int tail;
+    unsigned int head;
+    unsigned int start;
+    char lastChar;
+  };
+
+  inline MimeInputSource::MimeInputSource(int fd, unsigned int start)
+  {
+    this->fd = fd;
+    this->start = start;
+    offset = 0;
+    tail = 0;
+    head = 0;
+    lastChar = '\0';
+    memset(data, '\0', sizeof(data));
+
+    seek(start);
+  }
+
+  inline MimeInputSource::~MimeInputSource(void)
+  {
+  }
+
+  inline size_t MimeInputSource::fillRaw(char *raw, size_t nbytes)
+  {
+      return read(fd, raw, nbytes);
+  }
+
+  inline bool MimeInputSource::fillInputBuffer(void)
+  {
+    char raw[4096];
+    ssize_t nbytes = fillRaw(raw, 4096);
+    if (nbytes <= 0) {
+      // FIXME: If ferror(crlffile) we should log this.
+      return false;
+    }
+
+    for (ssize_t i = 0; i < nbytes; ++i) {
+      const char c = raw[i];
+      if (c == '\r') {
+	if (lastChar == '\r') {
+	  data[tail++ & (0x4000-1)] = '\r';
+	  data[tail++ & (0x4000-1)] = '\n';
+	}
+      } else if (c == '\n') {
+	data[tail++ & (0x4000-1)] = '\r';
+	data[tail++ & (0x4000-1)] = '\n';
+      } else {
+	if (lastChar == '\r') {
+	  data[tail++ & (0x4000-1)] = '\r';
+	  data[tail++ & (0x4000-1)] = '\n';
+	}
+
+	data[tail++ & (0x4000-1)] = c;
+      }
+      
+      lastChar = c;
+    }
+
+    return true;
+  }
+
+  inline void MimeInputSource::reset(void)
+  {
+    offset = head = tail = 0;
+    lastChar = '\0';
+
+    if (fd != -1)
+      lseek(fd, 0, SEEK_SET);
+  }
+
+  inline void MimeInputSource::seek(unsigned int seekToOffset)
+  {
+    if (offset > seekToOffset)
+      reset();
+   
+    char c;
+    int n = 0;
+    while (seekToOffset > offset) {
+      if (!getChar(&c))
+	break;
+      ++n;
+    }
+  }
+
+  inline bool MimeInputSource::getChar(char *c)
+  {
+    if (head == tail && !fillInputBuffer())
+      return false;
+
+    *c = data[head++ & (0x4000-1)];
+    ++offset;
+    return true;
+  }
+
+  inline void MimeInputSource::ungetChar()
+  {
+    --head;
+    --offset;
+  }
+
+  inline int MimeInputSource::getFileDescriptor(void) const
+  {
+    return fd;
+  }
+
+  inline unsigned int MimeInputSource::getOffset(void) const
+  {
+    return offset;
+  }
+
+    ///////////////////////////////////
+    class MimeInputSourceStream : public MimeInputSource {
+  public:
+    inline MimeInputSourceStream(istream& s, unsigned int start = 0);
+    virtual inline size_t fillRaw(char *raw, size_t nb);
+    virtual inline void reset(void);
+  private:
+      istream& s;
+  };
+
+  inline MimeInputSourceStream::MimeInputSourceStream(istream& si, 
+						      unsigned int start)
+      : MimeInputSource(-1, start), s(si)
+  {
+  }
+
+  inline size_t MimeInputSourceStream::fillRaw(char *raw, size_t nb)
+  {
+    // Why can't streams tell how many characters were actually read
+    // when hitting eof ?
+    std::streampos st = s.tellg();
+    s.seekg(0, ios::end);
+    std::streampos lst = s.tellg();
+    s.seekg(st);
+    size_t nbytes = lst - st;
+    if (nbytes > nb) {
+	nbytes = nb;
+    }
+    if (nbytes <= 0) {
+	return (size_t)-1;
+    }
+
+    s.read(raw, nbytes);
+    return nbytes;
+  }
+
+  inline void MimeInputSourceStream::reset(void)
+  {
+      MimeInputSource::reset();
+      s.seekg(0);
+  }
+
+}
+
+#endif
diff --git a/src/bincimapmime/mime-parsefull.cc b/src/bincimapmime/mime-parsefull.cc
new file mode 100644
index 00000000..9e9a43e3
--- /dev/null
+++ b/src/bincimapmime/mime-parsefull.cc
@@ -0,0 +1,629 @@
+ /* -*- mode:c++;c-basic-offset:2 -*- */
+/*  --------------------------------------------------------------------
+ *  Filename:
+ *    mime-parsefull.cc
+ *  
+ *  Description:
+ *    Implementation of main mime parser components
+ *  --------------------------------------------------------------------
+ *  Copyright 2002-2005 Andreas Aardal Hanssen
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *  --------------------------------------------------------------------
+ */
+#ifdef HAVE_CONFIG_H
+#include 
+#endif
+
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#ifndef NO_NAMESPACES
+using namespace ::std;
+#endif /* NO_NAMESPACES */
+
+#include "mime.h"
+#include "mime-utils.h"
+#include "mime-inputsource.h"
+#include "convert.h"
+
+// #define MPF
+#ifdef MPF
+#define MPFDEB(X) fprintf X
+#else
+#define MPFDEB(X)
+#endif
+
+//------------------------------------------------------------------------
+void Binc::MimeDocument::parseFull(int fd)
+{
+  if (allIsParsed)
+    return;
+
+  allIsParsed = true;
+
+  delete doc_mimeSource;
+  doc_mimeSource = new MimeInputSource(fd);
+
+  headerstartoffsetcrlf = 0;
+  headerlength = 0;
+  bodystartoffsetcrlf = 0;
+  bodylength = 0;
+  size = 0;
+  messagerfc822 = false;
+  multipart = false;
+
+  int bsize = 0;
+  string bound;
+  doParseFull(doc_mimeSource, bound, bsize);
+
+  // eat any trailing junk to get the correct size
+  char c;
+  while (doc_mimeSource->getChar(&c));
+
+  size = doc_mimeSource->getOffset();
+}
+
+void Binc::MimeDocument::parseFull(istream& s)
+{
+  if (allIsParsed)
+    return;
+
+  allIsParsed = true;
+
+  delete doc_mimeSource;
+  doc_mimeSource = new MimeInputSourceStream(s);
+
+  headerstartoffsetcrlf = 0;
+  headerlength = 0;
+  bodystartoffsetcrlf = 0;
+  bodylength = 0;
+  size = 0;
+  messagerfc822 = false;
+  multipart = false;
+
+  int bsize = 0;
+  string bound;
+  doParseFull(doc_mimeSource, bound, bsize);
+
+  // eat any trailing junk to get the correct size
+  char c;
+  while (doc_mimeSource->getChar(&c));
+
+  size = doc_mimeSource->getOffset();
+}
+
+//------------------------------------------------------------------------
+bool Binc::MimePart::parseOneHeaderLine(Binc::Header *header, 
+					unsigned int *nlines)
+{
+  using namespace ::Binc;
+  char c;
+  bool eof = false;
+  char cqueue[4];
+  string name;
+  string content;
+
+  while (mimeSource->getChar(&c)) {
+    // If we encounter a \r before we got to the first ':', then
+    // rewind back to the start of the line and assume we're at the
+    // start of the body.
+    if (c == '\r') {
+      for (int i = 0; i < (int) name.length() + 1; ++i)
+	mimeSource->ungetChar();
+      return false;
+    }
+
+    // A colon marks the end of the header name
+    if (c == ':') break;
+
+    // Otherwise add to the header name
+    name += c;
+  }
+
+  cqueue[0] = '\0';
+  cqueue[1] = '\0';
+  cqueue[2] = '\0';
+  cqueue[3] = '\0';
+
+  // Read until the end of the header.
+  bool endOfHeaders = false;
+  while (!endOfHeaders) {
+    if (!mimeSource->getChar(&c)) {
+      eof = true;
+      break;
+    }
+
+    if (c == '\n') ++*nlines;
+
+    for (int i = 0; i < 3; ++i)
+      cqueue[i] = cqueue[i + 1];
+    cqueue[3] = c;
+
+    if (strncmp(cqueue, "\r\n\r\n", 4) == 0) {
+      endOfHeaders = true;
+      break;
+    }
+
+    // If the last character was a newline, and the first now is not
+    // whitespace, then rewind one character and store the current
+    // key,value pair.
+    if (cqueue[2] == '\n' && c != ' ' && c != '\t') {
+      if (content.length() > 2)
+	content.resize(content.length() - 2);
+
+      trim(content);
+      header->add(name, content);
+
+      if (c != '\r') {
+	mimeSource->ungetChar();
+	if (c == '\n') --*nlines;
+	return true;
+      }
+	
+      mimeSource->getChar(&c);
+      return false;
+    }
+
+    content += c;
+  }
+
+  if (name != "") {
+    if (content.length() > 2)
+      content.resize(content.length() - 2);
+    header->add(name, content);
+  }
+
+  return !(eof || endOfHeaders);
+}
+
+//------------------------------------------------------------------------
+void Binc::MimePart::parseHeader(Binc::Header *header, unsigned int *nlines)
+{
+  while (parseOneHeaderLine(header, nlines))
+  { }
+}
+
+//------------------------------------------------------------------------
+void Binc::MimePart::analyzeHeader(Binc::Header *header, bool *multipart,
+				   bool *messagerfc822, string *subtype,
+				   string *boundary)
+{
+  using namespace ::Binc;
+
+  // Do simple parsing of headers to determine the
+  // type of message (multipart,messagerfc822 etc)
+  HeaderItem ctype;
+  if (header->getFirstHeader("content-type", ctype)) {
+    vector types;
+    split(ctype.getValue(), ";", types);
+
+    if (types.size() > 0) {
+      // first element should describe content type
+      string tmp = types[0];
+      trim(tmp);
+      vector v;
+      split(tmp, "/", v);
+      string key, value;
+
+      key = (v.size() > 0) ? v[0] : "text";
+      value = (v.size() > 1) ? v[1] : "plain";
+      lowercase(key);
+
+      if (key == "multipart") {
+	*multipart = true;
+	lowercase(value);
+	*subtype = value;
+      } else if (key == "message") {
+	lowercase(value);
+	if (value == "rfc822")
+	  *messagerfc822 = true;
+      }
+    }
+
+    for (vector::const_iterator i = types.begin();
+	 i != types.end(); ++i) {
+      string element = *i;
+      trim(element);
+
+      if (element.find("=") != string::npos) {
+	string::size_type pos = element.find('=');
+	string key = element.substr(0, pos);
+	string value = element.substr(pos + 1);
+	
+	lowercase(key);
+	trim(key);
+
+	if (key == "boundary") {
+	  trim(value, " \"");
+	  *boundary = value;
+	}
+      }
+    }
+  }
+}
+
+void Binc::MimePart::parseMessageRFC822(vector *members,
+					bool *foundendofpart,
+					unsigned int *bodylength,
+					unsigned int *nbodylines,
+					const string &toboundary)
+{
+  using namespace ::Binc;
+
+  // message rfc822 means a completely enclosed mime document. we
+  // call the parser recursively, and pass on the boundary string
+  // that we got. when parse() finds this boundary, it returns 0. if
+  // it finds the end boundary (boundary + "--"), it returns != 0.
+  MimePart m;
+
+  unsigned int bodystartoffsetcrlf = mimeSource->getOffset();
+    
+  // parsefull returns the number of bytes that need to be removed
+  // from the body because of the terminating boundary string.
+  int bsize = 0;
+  if (m.doParseFull(mimeSource, toboundary, bsize))
+    *foundendofpart = true;
+
+  // make sure bodylength doesn't overflow    
+  *bodylength = mimeSource->getOffset();
+  if (*bodylength >= bodystartoffsetcrlf) {
+    *bodylength -= bodystartoffsetcrlf;
+    if (*bodylength >= (unsigned int) bsize) {
+      *bodylength -= (unsigned int) bsize;
+    } else {
+      *bodylength = 0;
+    }
+  } else {
+    *bodylength = 0;
+  }
+
+  *nbodylines += m.getNofLines();
+
+  members->push_back(m);
+}
+
+bool Binc::MimePart::skipUntilBoundary(const string &delimiter,
+				       unsigned int *nlines, bool *eof)
+{
+  int endpos = delimiter.length();
+  char *delimiterqueue = 0;
+  int delimiterpos = 0;
+  const char *delimiterStr = delimiter.c_str();
+  if (delimiter != "") {
+    delimiterqueue = new char[endpos];
+    memset(delimiterqueue, 0, endpos);
+  }
+
+  // first, skip to the first delimiter string. Anything between the
+  // header and the first delimiter string is simply ignored (it's
+  // usually a text message intended for non-mime clients)
+  char c;
+
+  bool foundBoundary = false;
+  for (;;) {    
+    if (!mimeSource->getChar(&c)) {
+      *eof = true;
+      break;
+    }
+
+    if (c == '\n')
+      ++*nlines;
+
+    // if there is no delimiter, we just read until the end of the
+    // file.
+    if (!delimiterqueue)
+      continue;
+
+    delimiterqueue[delimiterpos++] = c;
+    if (delimiterpos ==  endpos)
+      delimiterpos = 0;
+      
+    if (compareStringToQueue(delimiterStr, delimiterqueue,
+			     delimiterpos, endpos)) {
+      foundBoundary = true;
+      break;
+    }
+  }
+
+  delete [] delimiterqueue;
+  delimiterqueue = 0;
+
+  return foundBoundary;
+}
+
+// JFD: Things we do after finding a boundary (something like CRLF--somestring)
+// Need to see if this is a final one (with an additional -- at the end),
+// and need to check if it is immediately followed by another boundary 
+// (in this case, we give up our final CRLF in its favour)
+inline void Binc::MimePart::postBoundaryProcessing(bool *eof,
+						   unsigned int *nlines,
+						   int *boundarysize,
+						   bool *foundendofpart)
+{
+    // Read two more characters. This may be CRLF, it may be "--" and
+    // it may be any other two characters.
+    char a = '\0';
+    if (!mimeSource->getChar(&a))
+      *eof = true;
+    if (a == '\n')
+      ++*nlines; 
+
+    char b = '\0';
+    if (!mimeSource->getChar(&b))
+      *eof = true;
+    if (b == '\n')
+      ++*nlines;
+    
+    // If eof, we're done here
+    if (*eof)
+      return;
+
+    // If we find two dashes after the boundary, then this is the end
+    // of boundary marker, and we need to get 2 more chars
+    if (a == '-' && b == '-') {
+      *foundendofpart = true;
+      *boundarysize += 2;
+	
+      if (!mimeSource->getChar(&a))
+	*eof = true;
+      if (a == '\n')
+	++*nlines; 
+	
+      if (!mimeSource->getChar(&b))
+	*eof = true;
+      if (b == '\n')
+	++*nlines;
+    }
+
+    // If the boundary is followed by CRLF, we need to handle the
+    // special case where another boundary line follows
+    // immediately. In this case we consider the CRLF to be part of
+    // the NEXT boundary.
+    if (a == '\r' && b == '\n') {
+      // Get 2 more
+      if (!mimeSource->getChar(&a) || !mimeSource->getChar(&b)) {
+	*eof = true; 
+      } else if (a == '-' && b == '-') {
+	MPFDEB((stderr, "BINC: consecutive delimiters, giving up CRLF\n"));
+	mimeSource->ungetChar();
+	mimeSource->ungetChar();
+	mimeSource->ungetChar();
+	mimeSource->ungetChar();
+      } else {
+	// We unget the 2 chars, and keep our crlf (increasing our own size)
+	MPFDEB((stderr, "BINC: keeping my CRLF\n"));
+	mimeSource->ungetChar();
+	mimeSource->ungetChar();
+	*boundarysize += 2;
+      }
+
+    } else {
+      // Boundary string not followed by CRLF, don't read more and let
+      // others skip the rest. Note that this is allowed but quite uncommon
+      mimeSource->ungetChar();
+      mimeSource->ungetChar();
+    }
+}
+
+void Binc::MimePart::parseMultipart(const string &boundary,
+				    const string &toboundary,
+				    bool *eof,
+				    unsigned int *nlines,
+				    int *boundarysize,
+				    bool *foundendofpart,
+				    unsigned int *bodylength,
+				    vector *members)
+{
+  MPFDEB((stderr, "BINC: ParseMultipart: boundary [%s], toboundary[%s]\n", 
+	  boundary.c_str(),
+	  toboundary.c_str()));
+  using namespace ::Binc;
+  unsigned int bodystartoffsetcrlf = mimeSource->getOffset();
+
+  // multipart parsing starts with skipping to the first
+  // boundary. then we call parse() for all parts. the last parse()
+  // command will return a code indicating that it found the last
+  // boundary of this multipart. Note that the first boundary does
+  // not have to start with CRLF.
+  string delimiter = "--" + boundary;
+
+  skipUntilBoundary(delimiter, nlines, eof);
+
+  if (!eof)
+    *boundarysize = delimiter.size();
+
+  postBoundaryProcessing(eof, nlines, boundarysize, foundendofpart);
+
+  // read all mime parts.
+  if (!*foundendofpart && !*eof) {
+    bool quit = false;
+    do {
+      MimePart m;
+
+      // If parseFull returns != 0, then it encountered the multipart's
+      // final boundary.
+      int bsize = 0;
+      if (m.doParseFull(mimeSource, boundary, bsize)) {
+	quit = true;
+	*boundarysize = bsize;
+      }
+
+      members->push_back(m);
+
+    } while (!quit);
+  }
+
+  if (!*foundendofpart && !*eof) {
+    // multipart parsing starts with skipping to the first
+    // boundary. then we call parse() for all parts. the last parse()
+    // command will return a code indicating that it found the last
+    // boundary of this multipart. Note that the first boundary does
+    // not have to start with CRLF.
+    string delimiter = "\r\n--" + toboundary;
+    skipUntilBoundary(delimiter, nlines, eof);
+
+    if (!*eof)
+      *boundarysize = delimiter.size();
+
+    postBoundaryProcessing(eof, nlines, boundarysize, foundendofpart);
+  }
+
+  // make sure bodylength doesn't overflow    
+  *bodylength = mimeSource->getOffset();
+  if (*bodylength >= bodystartoffsetcrlf) {
+    *bodylength -= bodystartoffsetcrlf;
+    if (*bodylength >= (unsigned int) *boundarysize) {
+      *bodylength -= (unsigned int) *boundarysize;
+    } else {
+      *bodylength = 0;
+    }
+  } else {
+    *bodylength = 0;
+  }
+  MPFDEB((stderr, "BINC: ParseMultipart return\n"));
+}
+
+void Binc::MimePart::parseSinglePart(const string &toboundary,
+			    int *boundarysize,
+			    unsigned int *nbodylines,
+			    unsigned int *nlines,
+			    bool *eof, bool *foundendofpart,
+			    unsigned int *bodylength)
+{
+  MPFDEB((stderr, "BINC: parseSinglePart, boundary [%s]\n", 
+	  toboundary.c_str()));
+  using namespace ::Binc;
+  unsigned int bodystartoffsetcrlf = mimeSource->getOffset();
+
+  // If toboundary is empty, then we read until the end of the
+  // file. Otherwise we will read until we encounter toboundary.
+  string _toboundary; 
+  if (toboundary != "") {
+    _toboundary = "\r\n--";
+    _toboundary += toboundary;
+  }
+
+  //  if (skipUntilBoundary(_toboundary, nlines, eof))
+  //    *boundarysize = _toboundary.length();
+
+  char *boundaryqueue = 0;
+  int endpos = _toboundary.length();
+  if (toboundary != "") {
+    boundaryqueue = new char[endpos];
+    memset(boundaryqueue, 0, endpos);
+  }
+
+  *boundarysize = 0;
+
+  const char *_toboundaryStr = _toboundary.c_str();
+  string line;
+  bool toboundaryIsEmpty = (toboundary == "");
+  char c;
+  int boundarypos = 0;
+  while (mimeSource->getChar(&c)) {
+    if (c == '\n') { ++*nbodylines; ++*nlines; }
+
+    if (toboundaryIsEmpty)
+      continue;
+
+    // find boundary
+    boundaryqueue[boundarypos++] = c;
+    if (boundarypos == endpos)
+      boundarypos = 0;
+      
+    if (compareStringToQueue(_toboundaryStr, boundaryqueue,
+			     boundarypos, endpos)) {
+      *boundarysize = _toboundary.length();
+      break;
+    }
+  }
+
+  delete [] boundaryqueue;
+
+  if (toboundary != "") {
+    postBoundaryProcessing(eof, nlines, boundarysize, foundendofpart);
+  } else {
+    // Recoll: in the case of a multipart body with a null
+    // boundary (probably illegal but wtf), eof was not set and
+    // multipart went into a loop until bad alloc.
+    *eof = true;
+  }
+
+  // make sure bodylength doesn't overflow    
+  *bodylength = mimeSource->getOffset();
+  if (*bodylength >= bodystartoffsetcrlf) {
+    *bodylength -= bodystartoffsetcrlf;
+    if (*bodylength >= (unsigned int) *boundarysize) {
+      *bodylength -= (unsigned int) *boundarysize;
+    } else {
+      *bodylength = 0;
+    }
+  } else {
+    *bodylength = 0;
+  }
+  MPFDEB((stderr, "BINC: parseSimple ret: bodylength %d, boundarysize %d\n",
+	  *bodylength, *boundarysize));
+}
+
+//------------------------------------------------------------------------
+int Binc::MimePart::doParseFull(MimeInputSource *ms, const string &toboundary,
+				int &boundarysize)
+{
+  MPFDEB((stderr, "BINC: doParsefull, toboundary[%s]\n", toboundary.c_str()));
+  mimeSource = ms;
+  headerstartoffsetcrlf = mimeSource->getOffset();
+
+  // Parse the header of this mime part.
+  parseHeader(&h, &nlines);
+
+  // Headerlength includes the seperating CRLF. Body starts after the
+  // CRLF.
+  headerlength = mimeSource->getOffset() - headerstartoffsetcrlf;
+  bodystartoffsetcrlf = mimeSource->getOffset();
+  MPFDEB((stderr, "BINC: doParsefull, bodystartoffsetcrlf %d\n", bodystartoffsetcrlf));
+  bodylength = 0;
+
+  // Determine the type of mime part by looking at fields in the
+  // header.
+  analyzeHeader(&h, &multipart, &messagerfc822, &subtype, &boundary);
+
+  bool eof = false;
+  bool foundendofpart = false;
+
+  if (messagerfc822) {
+    parseMessageRFC822(&members, &foundendofpart, &bodylength,
+		       &nbodylines, toboundary);
+
+  } else if (multipart) {
+    parseMultipart(boundary, toboundary, &eof, &nlines, &boundarysize,
+		   &foundendofpart, &bodylength,
+		   &members);
+  } else {
+    parseSinglePart(toboundary, &boundarysize, &nbodylines, &nlines,
+		    &eof, &foundendofpart, &bodylength);
+  }
+
+  MPFDEB((stderr, "BINC: doParsefull ret, toboundary[%s]\n", toboundary.c_str()));
+  return (eof || foundendofpart) ? 1 : 0;
+}
diff --git a/src/bincimapmime/mime-parseonlyheader.cc b/src/bincimapmime/mime-parseonlyheader.cc
new file mode 100644
index 00000000..b65f9fa9
--- /dev/null
+++ b/src/bincimapmime/mime-parseonlyheader.cc
@@ -0,0 +1,193 @@
+/* -*- mode:c++;c-basic-offset:2 -*- */
+/*  --------------------------------------------------------------------
+ *  Filename:
+ *    mime-parseonlyheader.cc
+ *  
+ *  Description:
+ *    Implementation of main mime parser components
+ *  --------------------------------------------------------------------
+ *  Copyright 2002-2005 Andreas Aardal Hanssen
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *  --------------------------------------------------------------------
+ */
+#ifdef HAVE_CONFIG_H
+#include 
+#endif
+
+#include "mime.h"
+#include "mime-utils.h"
+#include "mime-inputsource.h"
+#include "convert.h"
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+
+#ifndef NO_NAMESPACES
+using namespace ::std;
+#endif /* NO_NAMESPACES */
+
+//------------------------------------------------------------------------
+void Binc::MimeDocument::parseOnlyHeader(int fd)
+{
+  if (allIsParsed || headerIsParsed)
+    return;
+  
+  headerIsParsed = true;
+
+  delete doc_mimeSource;
+  doc_mimeSource = new MimeInputSource(fd);
+
+  headerstartoffsetcrlf = 0;
+  headerlength = 0;
+  bodystartoffsetcrlf = 0;
+  bodylength = 0;
+  messagerfc822 = false;
+  multipart = false;
+
+  nlines = 0;
+  nbodylines = 0;
+
+  doParseOnlyHeader(doc_mimeSource, "");
+}
+
+void Binc::MimeDocument::parseOnlyHeader(istream& s)
+{
+  if (allIsParsed || headerIsParsed)
+    return;
+  
+  headerIsParsed = true;
+
+  delete doc_mimeSource;
+  doc_mimeSource = new MimeInputSourceStream(s);
+
+  headerstartoffsetcrlf = 0;
+  headerlength = 0;
+  bodystartoffsetcrlf = 0;
+  bodylength = 0;
+  messagerfc822 = false;
+  multipart = false;
+
+  nlines = 0;
+  nbodylines = 0;
+
+  doParseOnlyHeader(doc_mimeSource, "");
+}
+
+//------------------------------------------------------------------------
+int Binc::MimePart::doParseOnlyHeader(MimeInputSource *ms, 
+				      const string &toboundary)
+{
+  mimeSource = ms;
+  string name;
+  string content;
+  char cqueue[4];
+  memset(cqueue, 0, sizeof(cqueue));
+
+  headerstartoffsetcrlf = mimeSource->getOffset();
+
+  bool quit = false;
+  char c = '\0';
+
+  while (!quit) {
+    // read name
+    while (1) {
+      if (!mimeSource->getChar(&c)) {
+	quit = true;
+	break;
+      }
+
+      if (c == '\n') ++nlines;
+      if (c == ':') break;
+      if (c == '\n') {
+	for (int i = name.length() - 1; i >= 0; --i)
+	  mimeSource->ungetChar();
+
+	quit = true;
+	name.clear();
+	break;
+      }
+
+      name += c;
+
+      if (name.length() == 2 && name.substr(0, 2) == "\r\n") {
+	name.clear();
+	quit = true;
+	break;
+      }
+    }
+
+    if (name.length() == 1 && name[0] == '\r') {
+      name.clear();
+      break;
+    }
+
+    if (quit) break;
+
+    while (!quit) {
+      if (!mimeSource->getChar(&c)) {
+	quit = true;
+	break;
+      }
+
+      if (c == '\n') ++nlines;
+
+      for (int i = 0; i < 3; ++i)
+	cqueue[i] = cqueue[i + 1];
+      cqueue[3] = c;
+
+      if (strncmp(cqueue, "\r\n\r\n", 4) == 0) {
+	quit = true;
+	break;
+      }
+
+      if (cqueue[2] == '\n') {
+
+	// guess the mime rfc says what can not appear on the beginning
+	// of a line.
+	if (!isspace(cqueue[3])) {
+	  if (content.length() > 2)
+	    content.resize(content.length() - 2);
+
+	  trim(content);
+	  h.add(name, content);
+
+	  name = c;
+	  content.clear();
+	  break;
+	}
+      }
+
+      content += c;
+    }
+  }
+
+  if (name != "") {
+    if (content.length() > 2)
+      content.resize(content.length() - 2);
+    h.add(name, content);
+  }
+
+  headerlength = mimeSource->getOffset() - headerstartoffsetcrlf;
+
+  return 1;
+}
diff --git a/src/bincimapmime/mime-printbody.cc b/src/bincimapmime/mime-printbody.cc
new file mode 100644
index 00000000..39d5b650
--- /dev/null
+++ b/src/bincimapmime/mime-printbody.cc
@@ -0,0 +1,90 @@
+/* -*- mode:c++;c-basic-offset:2 -*- */
+/*  --------------------------------------------------------------------
+ *  Filename:
+ *    mime-printbody.cc
+ *  
+ *  Description:
+ *    Implementation of main mime parser components
+ *  --------------------------------------------------------------------
+ *  Copyright 2002-2005 Andreas Aardal Hanssen
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *  --------------------------------------------------------------------
+ */
+#ifdef HAVE_CONFIG_H
+#include 
+#endif
+
+#include "mime.h"
+#include "mime-utils.h"
+#include "mime-inputsource.h"
+
+#include "convert.h"
+#include "iodevice.h"
+#include "iofactory.h"
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+
+#ifndef NO_NAMESPACES
+using namespace ::std;
+#endif /* NO_NAMESPACES */
+
+//------------------------------------------------------------------------
+void Binc::MimePart::printBody(IODevice &output,
+			       unsigned int startoffset,
+			       unsigned int length) const
+{
+  mimeSource->reset();
+  mimeSource->seek(bodystartoffsetcrlf + startoffset);
+
+  if (startoffset + length > bodylength)
+    length = bodylength - startoffset;
+
+  char c = '\0';
+  for (unsigned int i = 0; i < length; ++i) {
+    if (!mimeSource->getChar(&c))
+      break;
+
+    output << (char)c;
+  }
+}
+
+void Binc::MimePart::getBody(string &s,
+			     unsigned int startoffset,
+			     unsigned int length) const
+{
+  mimeSource->reset();
+  mimeSource->seek(bodystartoffsetcrlf + startoffset);
+  s.reserve(length);
+  if (startoffset + length > bodylength)
+    length = bodylength - startoffset;
+
+  char c = '\0';
+  for (unsigned int i = 0; i < length; ++i) {
+    if (!mimeSource->getChar(&c))
+      break;
+
+    s += (char)c;
+  }
+}
diff --git a/src/bincimapmime/mime-utils.h b/src/bincimapmime/mime-utils.h
new file mode 100644
index 00000000..19b10b63
--- /dev/null
+++ b/src/bincimapmime/mime-utils.h
@@ -0,0 +1,55 @@
+/* -*- mode:c++;c-basic-offset:2 -*- */
+/*  --------------------------------------------------------------------
+ *  Filename:
+ *    mime.cc
+ *  
+ *  Description:
+ *    Implementation of main mime parser components
+ *  --------------------------------------------------------------------
+ *  Copyright 2002-2005 Andreas Aardal Hanssen
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *  --------------------------------------------------------------------
+ */
+#ifndef mime_utils_h_included
+#define mime_utils_h_included
+
+#ifdef HAVE_CONFIG_H
+#include 
+#endif
+
+#include 
+#include 
+#include 
+#include 
+
+#ifndef NO_NAMESPACES
+using namespace ::std;
+#endif /* NO_NAMESPACES */
+
+inline bool compareStringToQueue(const char *s_in, char *bqueue,
+				 int pos, int size)
+{
+  for (int i = 0; i < size; ++i)  {
+    if (s_in[i] != bqueue[pos])
+      return false;
+    if (++pos == size)
+      pos = 0;
+  }
+
+  return true;
+}
+
+#endif
diff --git a/src/bincimapmime/mime.cc b/src/bincimapmime/mime.cc
new file mode 100644
index 00000000..dfe858f7
--- /dev/null
+++ b/src/bincimapmime/mime.cc
@@ -0,0 +1,168 @@
+/* -*- mode:c++;c-basic-offset:2 -*- */
+/*  --------------------------------------------------------------------
+ *  Filename:
+ *    mime.cc
+ *  
+ *  Description:
+ *    Implementation of main mime parser components
+ *  --------------------------------------------------------------------
+ *  Copyright 2002-2005 Andreas Aardal Hanssen
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *  --------------------------------------------------------------------
+ */
+#ifdef HAVE_CONFIG_H
+#include 
+#endif
+
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#ifndef NO_NAMESPACES
+using namespace ::std;
+#endif /* NO_NAMESPACES */
+
+
+#include "mime.h"
+#include "convert.h"
+#include "mime-inputsource.h"
+
+//------------------------------------------------------------------------
+Binc::MimeDocument::MimeDocument(void)
+{
+  allIsParsed = false;
+  headerIsParsed = false;
+  doc_mimeSource = 0;
+}
+
+//------------------------------------------------------------------------
+Binc::MimeDocument::~MimeDocument(void)
+{
+  delete doc_mimeSource;
+  doc_mimeSource = 0;
+}
+
+//------------------------------------------------------------------------
+void Binc::MimeDocument::clear(void)
+{
+  members.clear();
+  h.clear();
+  headerIsParsed = false;
+  allIsParsed = false;
+  delete doc_mimeSource;
+  doc_mimeSource = 0;
+}
+
+//------------------------------------------------------------------------
+void Binc::MimePart::clear(void)
+{
+  members.clear();
+  h.clear();
+  mimeSource = 0;
+}
+
+//------------------------------------------------------------------------
+Binc::MimePart::MimePart(void)
+{
+  size = 0;
+  messagerfc822 = false;
+  multipart = false;
+
+  nlines = 0;
+  nbodylines = 0;
+  mimeSource = 0;
+}
+
+//------------------------------------------------------------------------
+Binc::MimePart::~MimePart(void)
+{
+}
+
+//------------------------------------------------------------------------
+Binc::HeaderItem::HeaderItem(void)
+{
+}
+
+//------------------------------------------------------------------------
+Binc::HeaderItem::HeaderItem(const string &key, const string &value)
+{
+  this->key = key;
+  this->value = value;
+}
+
+//------------------------------------------------------------------------
+Binc::Header::Header(void)
+{
+}
+
+//------------------------------------------------------------------------
+Binc::Header::~Header(void)
+{
+}
+
+//------------------------------------------------------------------------
+bool Binc::Header::getFirstHeader(const string &key, HeaderItem &dest) const
+{
+  string k = key;
+  lowercase(k);
+
+  for (vector::const_iterator i = content.begin();
+       i != content.end(); ++i) {
+    string tmp = (*i).getKey();
+    lowercase(tmp);
+
+    if (tmp == k) {
+      dest = *i;
+      return true;
+    }
+  }
+  return false;
+}
+
+//------------------------------------------------------------------------
+bool Binc::Header::getAllHeaders(const string &key, vector &dest) const
+{
+  string k = key;
+  lowercase(k);
+
+  for (vector::const_iterator i = content.begin();
+       i != content.end(); ++i) {
+    string tmp = (*i).getKey();
+    lowercase(tmp);
+    if (tmp == k)
+      dest.push_back(*i);
+  }
+
+  return (dest.size() != 0);
+}
+
+//------------------------------------------------------------------------
+void Binc::Header::clear(void)
+{
+  content.clear();
+}
+
+//------------------------------------------------------------------------
+void Binc::Header::add(const string &key, const string &value)
+{
+  content.push_back(HeaderItem(key, value));
+}
diff --git a/src/bincimapmime/mime.h b/src/bincimapmime/mime.h
new file mode 100644
index 00000000..75de6008
--- /dev/null
+++ b/src/bincimapmime/mime.h
@@ -0,0 +1,191 @@
+/* -*- mode:c++;c-basic-offset:2 -*- */
+/*  --------------------------------------------------------------------
+ *  Filename:
+ *    src/parsers/mime/mime.h
+ *  
+ *  Description:
+ *    Declaration of main mime parser components
+ *  --------------------------------------------------------------------
+ *  Copyright 2002-2005 Andreas Aardal Hanssen
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *  --------------------------------------------------------------------
+ */
+#ifdef HAVE_CONFIG_H
+#include 
+#endif
+
+#ifndef mime_h_included
+#define mime_h_included
+#include 
+#include 
+#include 
+#include 
+
+namespace Binc {
+
+  class MimeInputSource;
+
+
+  //---------------------------------------------------------------------- 
+  class HeaderItem {
+  private:
+    mutable std::string key;
+    mutable std::string value;
+
+  public:
+    inline const std::string &getKey(void) const { return key; }
+    inline const std::string &getValue(void) const { return value; }
+
+    //--
+    HeaderItem(void);
+    HeaderItem(const std::string &key, const std::string &value);
+  };
+
+  //---------------------------------------------------------------------- 
+  class Header {
+  private:
+    mutable std::vector content;
+
+  public:
+    bool getFirstHeader(const std::string &key, HeaderItem &dest) const;
+    bool getAllHeaders(const std::string &key, std::vector &dest) const;
+    void add(const std::string &name, const std::string &content);
+    void clear(void);
+
+    //--
+    Header(void);
+    ~Header(void);
+  };
+
+  //----------------------------------------------------------------------
+  class IODevice;
+  class MimeDocument;
+  class MimePart {
+  protected:
+  public:
+    mutable bool multipart;
+    mutable bool messagerfc822;
+    mutable std::string subtype;
+    mutable std::string boundary;
+
+    mutable unsigned int headerstartoffsetcrlf;
+    mutable unsigned int headerlength;
+
+    mutable unsigned int bodystartoffsetcrlf;
+    mutable unsigned int bodylength;
+    mutable unsigned int nlines;
+    mutable unsigned int nbodylines;
+    mutable unsigned int size;
+
+  public:
+    enum FetchType {
+      FetchBody,
+      FetchHeader,
+      FetchMime
+    };
+
+    mutable Header h;
+
+    mutable std::vector members;
+
+    inline const std::string &getSubType(void) const { return subtype; }
+    inline bool isMultipart(void) const { return multipart; }
+    inline bool isMessageRFC822(void) const { return messagerfc822; }
+    inline unsigned int getSize(void) const { return bodylength; }
+    inline unsigned int getNofLines(void) const { return nlines; }
+    inline unsigned int getNofBodyLines(void) const { return nbodylines; }
+    inline unsigned int getBodyLength(void) const { return bodylength; }
+    inline unsigned int getBodyStartOffset(void) const { return bodystartoffsetcrlf; }
+
+    void printBody(Binc::IODevice &output, unsigned int startoffset, unsigned int length) const;
+      void getBody(std::string& s, unsigned int startoffset, unsigned int length) const;
+    virtual void clear(void);
+
+    virtual int doParseOnlyHeader(MimeInputSource *ms, 
+				  const std::string &toboundary);
+    virtual int doParseFull(MimeInputSource *ms, 
+			    const std::string &toboundary, int &boundarysize);
+
+    MimePart(void);
+    virtual ~MimePart(void);
+
+  private:
+    MimeInputSource *mimeSource;
+
+    bool parseOneHeaderLine(Binc::Header *header, unsigned int *nlines);
+
+    bool skipUntilBoundary(const std::string &delimiter,
+			   unsigned int *nlines, bool *eof);
+    inline void postBoundaryProcessing(bool *eof,
+				       unsigned int *nlines,
+				       int *boundarysize,
+				       bool *foundendofpart);
+      void parseMultipart(const std::string &boundary,
+			   const std::string &toboundary,
+			   bool *eof,
+			   unsigned int *nlines,
+			   int *boundarysize,
+			   bool *foundendofpart,
+			   unsigned int *bodylength,
+			  std::vector *members);
+      void parseSinglePart(const std::string &toboundary,
+			    int *boundarysize,
+			    unsigned int *nbodylines,
+			    unsigned int *nlines,
+			    bool *eof, bool *foundendofpart,
+			   unsigned int *bodylength);
+    void parseHeader(Binc::Header *header, unsigned int *nlines);
+    void analyzeHeader(Binc::Header *header, bool *multipart,
+		       bool *messagerfc822, std::string *subtype,
+		       std::string *boundary);
+    void parseMessageRFC822(std::vector *members,
+			    bool *foundendofpart,
+			    unsigned int *bodylength,
+			    unsigned int *nbodylines,
+			    const std::string &toboundary);
+  };
+
+  //----------------------------------------------------------------------
+  class MimeDocument : public MimePart {
+  public:
+    MimeDocument(void);
+    ~MimeDocument(void);
+
+    void parseOnlyHeader(int fd);
+    void parseFull(int fd);
+    void parseOnlyHeader(std::istream& s);
+    void parseFull(std::istream& s);
+
+    void clear(void);
+    
+    bool isHeaderParsed(void) const 
+    {
+      return headerIsParsed; 
+    }
+    bool isAllParsed(void) const 
+    { 
+      return allIsParsed; 
+    }
+
+  private:
+    bool headerIsParsed;
+    bool allIsParsed;
+    MimeInputSource *doc_mimeSource;
+  };
+
+};
+
+#endif
diff --git a/src/bincimapmime/trbinc.cc b/src/bincimapmime/trbinc.cc
new file mode 100644
index 00000000..d11c4930
--- /dev/null
+++ b/src/bincimapmime/trbinc.cc
@@ -0,0 +1,126 @@
+/* Copyright (C) 2006 J.F.Dockes */
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+#ifndef NO_NAMESPACES
+using namespace std;
+#endif /* NO_NAMESPACES */
+
+#include "mime.h"
+
+static char *thisprog;
+
+static char usage [] =
+    "trbinc  \n\n"
+    ;
+static void
+Usage(void)
+{
+    fprintf(stderr, "%s: usage:\n%s", thisprog, usage);
+    exit(1);
+}
+
+static int     op_flags;
+#define OPT_MOINS 0x1
+#define OPT_s	  0x2 
+#define OPT_b	  0x4 
+
+#define DEFCOUNT 10
+
+const char *hnames[] = {"Subject", "Content-type"};
+int nh = sizeof(hnames) / sizeof(char *);
+
+int main(int argc, char **argv)
+{
+    int count = DEFCOUNT;
+    
+    thisprog = argv[0];
+    argc--; argv++;
+
+    while (argc > 0 && **argv == '-') {
+	(*argv)++;
+	if (!(**argv))
+	    /* Cas du "adb - core" */
+	    Usage();
+	while (**argv)
+	    switch (*(*argv)++) {
+	    case 's':	op_flags |= OPT_s; break;
+	    case 'b':	op_flags |= OPT_b; if (argc < 2)  Usage();
+		if ((sscanf(*(++argv), "%d", &count)) != 1) 
+		    Usage(); 
+		argc--; 
+		goto b1;
+	    default: Usage();	break;
+	    }
+    b1: argc--; argv++;
+    }
+
+    if (argc != 1)
+	Usage();
+
+    char *mfile = *argv++;argc--;
+    int fd;
+    if ((fd = open(mfile, 0)) < 0) {
+	perror("Opening");
+	exit(1);
+    }
+    Binc::MimeDocument doc;
+
+#if 0
+    doc.parseFull(fd);
+#else
+    char *cp;
+    int size = lseek(fd, 0, SEEK_END);
+    lseek(fd, 0, 0);
+    fprintf(stderr, "Size: %d\n", size);
+    cp = (char *)malloc(size);
+    if (cp==0) {
+	fprintf(stderr, "Malloc %d failed\n", size);
+	exit(1);
+    }
+    int n;
+    if ((n=read(fd, cp, size)) != size) {
+	fprintf(stderr, "Read failed: requested %d, got %d\n", size, n);
+	exit(1);
+    }
+    std::stringstream s(string(cp, size), ios::in);
+    doc.parseFull(s);
+#endif
+
+    if (!doc.isHeaderParsed() && !doc.isAllParsed()) {
+	fprintf(stderr, "Parse error\n");
+	exit(1);
+    }
+    close(fd);
+    Binc::HeaderItem hi;
+    for (int i = 0; i < nh ; i++) {
+	if (!doc.h.getFirstHeader(hnames[i], hi)) {
+	    fprintf(stderr, "No %s\n", hnames[i]);
+	    exit(1);
+	}
+	printf("%s: %s\n", hnames[i], hi.getValue().c_str());
+    }
+    exit(0);
+}
diff --git a/src/common/Makefile b/src/common/Makefile
new file mode 100644
index 00000000..cd37018e
--- /dev/null
+++ b/src/common/Makefile
@@ -0,0 +1,33 @@
+depth = ..
+include $(depth)/mk/sysconf
+
+# Only test executables get build in here
+PROGS = unacpp textsplit rclconfig
+
+all: librecoll $(PROGS) 
+
+UNACPP_OBJS= trunacpp.o
+unacpp : $(UNACPP_OBJS)
+	$(CXX) $(ALL_CXXFLAGS) -o unacpp $(UNACPP_OBJS) \
+	       $(LIBRECOLL)  $(LIBICONV)
+trunacpp.o : unacpp.cpp unacpp.h
+	$(CXX) $(ALL_CXXFLAGS) -DTEST_UNACPP -c -o trunacpp.o unacpp.cpp
+
+TEXTSPLIT_OBJS= trtextsplit.o  
+textsplit : $(TEXTSPLIT_OBJS)
+	$(CXX) $(ALL_CXXFLAGS) -o textsplit $(TEXTSPLIT_OBJS) \
+        $(LIBRECOLL) $(LIBICONV)
+trtextsplit.o : textsplit.cpp 
+	$(CXX) $(ALL_CXXFLAGS) -DTEST_TEXTSPLIT -c -o trtextsplit.o \
+	       textsplit.cpp
+
+RCLCONFIG_OBJS= trrclconfig.o 
+rclconfig : $(RCLCONFIG_OBJS) 
+	$(CXX) $(ALL_CXXFLAGS) -o rclconfig $(RCLCONFIG_OBJS) \
+	       $(LIBRECOLL) $(LIBICONV) $(LIBSYS)
+trrclconfig.o : rclconfig.cpp 
+	$(CXX) $(ALL_CXXFLAGS) -DTEST_RCLCONFIG -c -o trrclconfig.o \
+	       rclconfig.cpp
+
+include $(depth)/mk/commontargets
+
diff --git a/src/common/autoconfig.h.in b/src/common/autoconfig.h.in
new file mode 100644
index 00000000..eb3dd173
--- /dev/null
+++ b/src/common/autoconfig.h.in
@@ -0,0 +1,121 @@
+/* common/autoconfig.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Path to the aspell api include file */
+#undef ASPELL_INCLUDE
+
+/* Path to the aspell program */
+#undef ASPELL_PROG
+
+/* No X11 session monitoring support */
+#undef DISABLE_X11MON
+
+/* Path to the fam api include file */
+#undef FAM_INCLUDE
+
+/* Path to the file program */
+#undef FILE_PROG
+
+/* Define to 1 if you have the  header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the  header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mkdtemp' function. */
+#undef HAVE_MKDTEMP
+
+/* Define to 1 if you have the  header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the  header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the  header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the  header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the  header file. */
+#undef HAVE_SYS_MOUNT_H
+
+/* Define to 1 if you have the  header file. */
+#undef HAVE_SYS_STATFS_H
+
+/* Define to 1 if you have the  header file. */
+#undef HAVE_SYS_STATVFS_H
+
+/* Define to 1 if you have the  header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the  header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the  header file. */
+#undef HAVE_SYS_VFS_H
+
+/* Define to 1 if you have the  header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* putenv parameter is const */
+#undef PUTENV_ARG_CONST
+
+/* iconv parameter 2 is const char** */
+#undef RCL_ICONV_INBUF_CONST
+
+/* Real time monitoring option */
+#undef RCL_MONITOR
+
+/* Split camelCase words */
+#undef RCL_SPLIT_CAMELCASE
+
+/* Compile the aspell interface */
+#undef RCL_USE_ASPELL
+
+/* Compile the fam interface */
+#undef RCL_USE_FAM
+
+/* Compile the inotify interface */
+#undef RCL_USE_INOTIFY
+
+/* Use file extended attributes */
+#undef RCL_USE_XATTR
+
+/* Use multiple threads for indexing */
+#undef IDX_THREADS
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Enable using the system's 'file' command to id mime if we fail internally
+   */
+#undef USE_SYSTEM_FILE_COMMAND
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#undef X_DISPLAY_MISSING
+
+#undef _FILE_OFFSET_BITS
+#undef _LARGE_FILES
+
+/* The __FreeBSD_kernel__ thing is for debian/kfreebsd. */
+#if _FILE_OFFSET_BITS == 64 || defined(__APPLE__) || defined(__OpenBSD__) ||\
+    defined(__FreeBSD_kernel__) || (defined(__FreeBSD__) && __FreeBSD__ >= 9)
+#define OFFTPC "%lld"
+#else
+#define OFFTPC "%ld"
+#endif
diff --git a/src/common/beaglequeuecache.cpp b/src/common/beaglequeuecache.cpp
new file mode 100644
index 00000000..939368d1
--- /dev/null
+++ b/src/common/beaglequeuecache.cpp
@@ -0,0 +1,95 @@
+/* Copyright (C) 2011 J.F.Dockes
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#include "autoconfig.h"
+
+#include "cstr.h"
+#include "beaglequeuecache.h"
+#include "circache.h"
+#include "debuglog.h"
+#include "rclconfig.h"
+#include "pathut.h"
+#include "rcldoc.h"
+
+const string cstr_bgc_mimetype("mimetype");
+
+BeagleQueueCache::BeagleQueueCache(RclConfig *cnf) 
+{
+    string ccdir;
+    cnf->getConfParam("webcachedir", ccdir);
+    if (ccdir.empty())
+        ccdir = "webcache";
+    ccdir = path_tildexpand(ccdir);
+    // If not an absolute path, compute relative to config dir
+    if (ccdir.at(0) != '/')
+        ccdir = path_cat(cnf->getConfDir(), ccdir);
+
+    int maxmbs = 40;
+    cnf->getConfParam("webcachemaxmbs", &maxmbs);
+    if ((m_cache = new CirCache(ccdir)) == 0) {
+	LOGERR(("BeagleQueueCache: cant create CirCache object\n"));
+	return;
+    }
+    if (!m_cache->create(off_t(maxmbs)*1000*1024, CirCache::CC_CRUNIQUE)) {
+	LOGERR(("BeagleQueueCache: cache file creation failed: %s\n",
+		m_cache->getReason().c_str()));
+	delete m_cache;
+	m_cache = 0;
+	return;
+    }
+}
+
+BeagleQueueCache::~BeagleQueueCache()
+{
+    delete m_cache;
+}
+
+// Read  document from cache. Return the metadata as an Rcl::Doc
+// @param htt Beagle Hit Type 
+bool BeagleQueueCache::getFromCache(const string& udi, Rcl::Doc &dotdoc, 
+				    string& data, string *htt)
+{
+    string dict;
+
+    if (m_cache == 0) {
+	LOGERR(("BeagleQueueCache::getFromCache: cache is null\n"));
+	return false;
+    }
+    if (!m_cache->get(udi, dict, data)) {
+	LOGDEB(("BeagleQueueCache::getFromCache: get failed\n"));
+	return false;
+    }
+
+    ConfSimple cf(dict, 1);
+    
+    if (htt)
+        cf.get(Rcl::Doc::keybght, *htt, cstr_null);
+
+    // Build a doc from saved metadata 
+    cf.get(cstr_url, dotdoc.url, cstr_null);
+    cf.get(cstr_bgc_mimetype, dotdoc.mimetype, cstr_null);
+    cf.get(cstr_fmtime, dotdoc.fmtime, cstr_null);
+    cf.get(cstr_fbytes, dotdoc.pcbytes, cstr_null);
+    dotdoc.sig.clear();
+    vector names = cf.getNames(cstr_null);
+    for (vector::const_iterator it = names.begin();
+         it != names.end(); it++) {
+        cf.get(*it, dotdoc.meta[*it], cstr_null);
+    }
+    dotdoc.meta[Rcl::Doc::keyudi] = udi;
+    return true;
+}
diff --git a/src/common/beaglequeuecache.h b/src/common/beaglequeuecache.h
new file mode 100644
index 00000000..5297d61c
--- /dev/null
+++ b/src/common/beaglequeuecache.h
@@ -0,0 +1,50 @@
+/* Copyright (C) 2009 J.F.Dockes
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+#ifndef _beaglequeuecache_h_included_
+#define _beaglequeuecache_h_included_
+
+#include 
+using std::string;
+
+class RclConfig;
+namespace Rcl {
+    class Db;
+    class Doc;
+}
+class CirCache;
+
+/**
+ * Manage the CirCache for the Beagle Queue indexer. Separated from the main
+ * indexer code because it's also used for querying (getting the data for a
+ * preview 
+ */
+class BeagleQueueCache {
+public:
+    BeagleQueueCache(RclConfig *config);
+    ~BeagleQueueCache();
+
+    bool getFromCache(const string& udi, Rcl::Doc &doc, string& data,
+                      string *hittype = 0);
+    // We could write proxies for all the circache ops, but why bother?
+    CirCache *cc() {return m_cache;}
+
+private:
+    CirCache *m_cache;
+};
+extern const string cstr_bgc_mimetype;
+
+#endif /* _beaglequeuecache_h_included_ */
diff --git a/src/common/cstr.cpp b/src/common/cstr.cpp
new file mode 100644
index 00000000..0119e809
--- /dev/null
+++ b/src/common/cstr.cpp
@@ -0,0 +1,6 @@
+
+#include "cstr.h"
+#define RCLIN_CSTR_CPPFILE
+#undef _CSTR_H_INCLUDED_
+#include "cstr.h"
+
diff --git a/src/common/cstr.h b/src/common/cstr.h
new file mode 100644
index 00000000..c3c55ca1
--- /dev/null
+++ b/src/common/cstr.h
@@ -0,0 +1,86 @@
+/* Copyright (C) 2011 J.F.Dockes
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef _CSTR_H_INCLUDED_
+#define _CSTR_H_INCLUDED_
+
+// recoll mostly uses STL strings. In many places we had automatic
+// conversion from a C string to an STL one. This costs, and can
+// become significant if used often.
+//
+// This file and the associated .cpp file declares/defines constant
+// strings used in the program. Strings are candidates for a move here
+// when they are used in a fast loop or are shared.
+
+#include 
+using std::string;
+
+// The following slightly hacky preprocessing directives and the
+// companion code in the cpp file looks complicated, but it just
+// ensures that we only have to write the strings once to get the
+// extern declaration and the definition.
+#ifdef RCLIN_CSTR_CPPFILE
+#undef DEF_CSTR
+#define DEF_CSTR(NM, STR) const string cstr_##NM(STR)
+#else
+#define DEF_CSTR(NM, STR) extern const string cstr_##NM
+#endif
+
+DEF_CSTR(caption, "caption");
+DEF_CSTR(colon, ":");
+DEF_CSTR(dmtime, "dmtime");
+DEF_CSTR(dquote, "\"");
+DEF_CSTR(fbytes, "fbytes");
+DEF_CSTR(fileu, "file://");
+DEF_CSTR(fmtime, "fmtime");
+DEF_CSTR(iso_8859_1, "ISO-8859-1");
+DEF_CSTR(utf8, "UTF-8");
+DEF_CSTR(cp1252, "CP1252");
+DEF_CSTR(minwilds, "*?[");
+DEF_CSTR(newline, "\n");
+DEF_CSTR(null, "");
+DEF_CSTR(plus, "+");
+DEF_CSTR(textplain, "text/plain");
+DEF_CSTR(url, "url");
+// Marker for HTML format fields
+DEF_CSTR(fldhtm, "\007");
+// Characters that can -begin- a wildcard or regexp expression. 
+DEF_CSTR(wildSpecStChars, "*?[");
+DEF_CSTR(regSpecStChars, "(.[{");
+
+// Values used as keys inside Dijon::Filter::metaData[]. This structure is 
+// used to store all data generated by format-translating filters. It is
+// different from Rcl::Doc for mostly historical reasons. The translation
+// from Filter to Doc occurs inside internfile.cpp
+DEF_CSTR(dj_keyds, "description");
+DEF_CSTR(dj_keyfn, "filename");
+DEF_CSTR(dj_keymd, "modificationdate");
+DEF_CSTR(dj_keyorigcharset, "origcharset");
+DEF_CSTR(dj_keytitle, "title");
+DEF_CSTR(dj_keyrecipient, "recipient");
+DEF_CSTR(dj_keymsgid, "msgid");
+DEF_CSTR(dj_keyabstract, "abstract");
+DEF_CSTR(dj_keyauthor, "author");
+DEF_CSTR(dj_keycharset, "charset");
+DEF_CSTR(dj_keycontent, "content");
+DEF_CSTR(dj_keyipath, "ipath");
+DEF_CSTR(dj_keymd5, "md5");
+DEF_CSTR(dj_keymt, "mimetype");
+DEF_CSTR(dj_keydocsize, "docsize");
+DEF_CSTR(dj_keyanc, "rclanc");
+
+#endif /* _CSTR_H_INCLUDED_ */
diff --git a/src/common/rclconfig.cpp b/src/common/rclconfig.cpp
new file mode 100644
index 00000000..1b8aeae7
--- /dev/null
+++ b/src/common/rclconfig.cpp
@@ -0,0 +1,1525 @@
+/* Copyright (C) 2004 J.F.Dockes 
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+#ifndef TEST_RCLCONFIG
+#include "autoconfig.h"
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+using std::list;
+
+#include 
+#include 
+#ifdef __FreeBSD__
+#include 
+#endif
+
+#include 
+#include 
+#include 
+#include 
+using namespace std;
+
+#include "cstr.h"
+#include "pathut.h"
+#include "rclconfig.h"
+#include "conftree.h"
+#include "debuglog.h"
+#include "smallut.h"
+#include "textsplit.h"
+#include "readfile.h"
+#include "fstreewalk.h"
+#include "cpuconf.h"
+
+typedef pair RclPII;
+
+// Static, logically const, RclConfig members are initialized once from the
+// first object build during process initialization.
+
+// We default to a case- and diacritics-less index for now
+bool o_index_stripchars = true;
+
+string RclConfig::o_localecharset; 
+
+bool ParamStale::needrecompute()
+{
+    LOGDEB2(("ParamStale:: needrecompute. parent gen %d mine %d\n", 
+	     parent->m_keydirgen, savedkeydirgen));
+    if (parent->m_keydirgen != savedkeydirgen) {
+	LOGDEB2(("ParamState:: needrecompute. conffile %p\n", conffile));
+
+        savedkeydirgen = parent->m_keydirgen;
+        string newvalue;
+        if (!conffile)
+            return false;
+        conffile->get(paramname, newvalue, parent->m_keydir);
+        if (newvalue.compare(savedvalue)) {
+            savedvalue = newvalue;
+	    LOGDEB2(("ParamState:: needrecompute. return true newvalue [%s]\n",
+		     newvalue.c_str()));
+            return true;
+        }
+    }
+    return false;
+}
+
+void ParamStale::init(RclConfig *rconf, ConfNull *cnf, const string& nm)
+{
+    parent = rconf;
+    conffile = cnf;
+    paramname = nm;
+    savedkeydirgen = -1;
+}
+
+void RclConfig::zeroMe() {
+    m_ok = false; 
+    m_keydirgen = 0;
+    m_conf = 0; 
+    mimemap = 0; 
+    mimeconf = 0; 
+    mimeview = 0; 
+    m_fields = 0;
+    m_ptrans = 0;
+    m_stopsuffixes = 0;
+    m_maxsufflen = 0;
+    m_stpsuffstate.init(this, 0, "recoll_noindex");
+    m_skpnstate.init(this, 0, "skippedNames");
+    m_rmtstate.init(this, 0, "indexedmimetypes");
+}
+
+bool RclConfig::isDefaultConfig() const
+{
+    string defaultconf = path_cat(path_canon(path_home()), ".recoll/");
+    string specifiedconf = path_canon(m_confdir);
+    path_catslash(specifiedconf);
+    return !defaultconf.compare(specifiedconf);
+}
+
+RclConfig::RclConfig(const string *argcnf)
+{
+    zeroMe();
+    // Compute our data dir name, typically /usr/local/share/recoll
+    const char *cdatadir = getenv("RECOLL_DATADIR");
+    if (cdatadir == 0) {
+	// If not in environment, use the compiled-in constant. 
+	m_datadir = RECOLL_DATADIR;
+    } else {
+	m_datadir = cdatadir;
+    }
+
+    // We only do the automatic configuration creation thing for the default
+    // config dir, not if it was specified through -c or RECOLL_CONFDIR
+    bool autoconfdir = false;
+
+    // Command line config name overrides environment
+    if (argcnf && !argcnf->empty()) {
+	m_confdir = path_absolute(*argcnf);
+	if (m_confdir.empty()) {
+	    m_reason = 
+		string("Cant turn [") + *argcnf + "] into absolute path";
+	    return;
+	}
+    } else {
+	const char *cp = getenv("RECOLL_CONFDIR");
+	if (cp) {
+	    m_confdir = path_canon(cp);
+	} else {
+	    autoconfdir = true;
+	    m_confdir = path_cat(path_home(), ".recoll/");
+	}
+    }
+
+    // Note: autoconfdir and isDefaultConfig() are normally the same. We just 
+    // want to avoid the imperfect test in isDefaultConfig() if we actually know
+    // this is the default conf
+    if (!autoconfdir && !isDefaultConfig()) {
+	if (access(m_confdir.c_str(), 0) < 0) {
+	    m_reason = "Explicitly specified configuration "
+		"directory must exist"
+		" (won't be automatically created). Use mkdir first";
+	    return;
+	}
+    }
+
+    if (access(m_confdir.c_str(), 0) < 0) {
+	if (!initUserConfig()) 
+	    return;
+    }
+
+    // This can't change once computed inside a process. It would be
+    // nicer to move this to a static class initializer to avoid
+    // possible threading issues but this doesn't work (tried) as
+    // things would not be ready. In practise we make sure that this
+    // is called from the main thread at once, by constructing a config
+    // from recollinit
+    if (o_localecharset.empty()) {
+	const char *cp;
+	cp = nl_langinfo(CODESET);
+	// We don't keep US-ASCII. It's better to use a superset
+	// Ie: me have a C locale and some french file names, and I
+	// can't imagine a version of iconv that couldn't translate
+	// from iso8859?
+	// The 646 thing is for solaris. 
+	if (cp && *cp && strcmp(cp, "US-ASCII") 
+#ifdef sun
+	    && strcmp(cp, "646")
+#endif
+	    ) {
+	    o_localecharset = string(cp);
+	} else {
+	    // Use cp1252 instead of iso-8859-1, it's a superset.
+	    o_localecharset = string(cstr_cp1252);
+	}
+	LOGDEB1(("RclConfig::getDefCharset: localecharset [%s]\n",
+		 o_localecharset.c_str()));
+    }
+
+    m_cdirs.push_back(m_confdir);
+    m_cdirs.push_back(path_cat(m_datadir, "examples"));
+    string cnferrloc = m_confdir + " or " + path_cat(m_datadir, "examples");
+
+    // Read and process "recoll.conf"
+    if (!updateMainConfig())
+	return;
+    // Other files
+    mimemap = new ConfStack("mimemap", m_cdirs, true);
+    if (mimemap == 0 || !mimemap->ok()) {
+	m_reason = string("No or bad mimemap file in: ") + cnferrloc;
+	return;
+    }
+    mimeconf = new ConfStack("mimeconf", m_cdirs, true);
+    if (mimeconf == 0 || !mimeconf->ok()) {
+	m_reason = string("No/bad mimeconf in: ") + cnferrloc;
+	return;
+    }
+    mimeview = new ConfStack("mimeview", m_cdirs, false);
+    if (mimeview == 0)
+	mimeview = new ConfStack("mimeview", m_cdirs, true);
+    if (mimeview == 0 || !mimeview->ok()) {
+	m_reason = string("No/bad mimeview in: ") + cnferrloc;
+	return;
+    }
+    if (!readFieldsConfig(cnferrloc))
+	return;
+
+    // Default is no threading
+    m_thrConf = create_vector
+	(RclPII(-1, 0))(RclPII(-1, 0))(RclPII(-1, 0));
+
+    m_ptrans = new ConfSimple(path_cat(m_confdir, "ptrans").c_str());
+
+    m_ok = true;
+    setKeyDir(cstr_null);
+
+    m_stpsuffstate.init(this, mimemap, "recoll_noindex");
+    m_skpnstate.init(this, m_conf, "skippedNames");
+    m_rmtstate.init(this, m_conf, "indexedmimetypes");
+    return;
+}
+
+bool RclConfig::updateMainConfig()
+{
+    ConfStack *newconf = 
+	new ConfStack("recoll.conf", m_cdirs, true);
+    if (newconf == 0 || !newconf->ok()) {
+	if (m_conf)
+	    return false;
+	string where;
+	stringsToString(m_cdirs, where);
+	m_reason = string("No/bad main configuration file in: ") + where;
+	m_ok = false;
+        m_skpnstate.init(this, 0, "skippedNames");
+        m_rmtstate.init(this, 0, "indexedmimetypes");
+	return false;
+    }
+    delete m_conf;
+    m_conf = newconf;
+    m_skpnstate.init(this, m_conf, "skippedNames");
+    m_rmtstate.init(this, m_conf, "indexedmimetypes");
+
+
+    setKeyDir(cstr_null);
+    bool nocjk = false;
+    if (getConfParam("nocjk", &nocjk) && nocjk == true) {
+	TextSplit::cjkProcessing(false);
+    } else {
+	int ngramlen;
+	if (getConfParam("cjkngramlen", &ngramlen)) {
+	    TextSplit::cjkProcessing(true, (unsigned int)ngramlen);
+	} else {
+	    TextSplit::cjkProcessing(true);
+	}
+    }
+
+    bool nonum = false;
+    if (getConfParam("nonumbers", &nonum) && nonum == true) {
+	TextSplit::noNumbers();
+    }
+
+    bool fnmpathname = true;
+    if (getConfParam("skippedPathsFnmPathname", &fnmpathname)
+	&& fnmpathname == false) {
+	FsTreeWalker::setNoFnmPathname();
+    }
+
+    static int m_index_stripchars_init = 0;
+    if (!m_index_stripchars_init) {
+	getConfParam("indexStripChars", &o_index_stripchars);
+	m_index_stripchars_init = 1;
+    }
+
+    return true;
+}
+
+ConfNull *RclConfig::cloneMainConfig()
+{
+    ConfNull *conf = new ConfStack("recoll.conf", m_cdirs, false);
+    if (conf == 0 || !conf->ok()) {
+	m_reason = string("Can't read config");
+	return 0;
+    }
+    return conf;
+}
+
+// Remember what directory we're under (for further conf->get()s), and 
+// prefetch a few common values.
+void RclConfig::setKeyDir(const string &dir) 
+{
+    if (!dir.compare(m_keydir))
+        return;
+
+    m_keydirgen++;
+    m_keydir = dir;
+    if (m_conf == 0)
+	return;
+
+    if (!m_conf->get("defaultcharset", m_defcharset, m_keydir))
+	m_defcharset.erase();
+}
+
+bool RclConfig::getConfParam(const string &name, int *ivp) const
+{
+    string value;
+    if (!getConfParam(name, value))
+	return false;
+    errno = 0;
+    long lval = strtol(value.c_str(), 0, 0);
+    if (lval == 0 && errno)
+	return 0;
+    if (ivp)
+	*ivp = int(lval);
+    return true;
+}
+
+bool RclConfig::getConfParam(const string &name, bool *bvp) const
+{
+    if (!bvp) 
+	return false;
+
+    *bvp = false;
+    string s;
+    if (!getConfParam(name, s))
+	return false;
+    *bvp = stringToBool(s);
+    return true;
+}
+
+bool RclConfig::getConfParam(const string &name, vector *svvp) const
+{
+    if (!svvp) 
+	return false;
+    svvp->clear();
+    string s;
+    if (!getConfParam(name, s))
+	return false;
+    return stringToStrings(s, *svvp);
+}
+
+bool RclConfig::getConfParam(const string &name, vector *vip) const
+{
+    if (!vip) 
+	return false;
+    vip->clear();
+    vector vs;
+    if (!getConfParam(name, &vs))
+	return false;
+    vip->reserve(vs.size());
+    for (unsigned int i = 0; i < vs.size(); i++) {
+	char *ep;
+	vip->push_back(strtol(vs[i].c_str(), &ep, 0));
+	if (ep == vs[i].c_str()) {
+	    LOGDEB(("RclConfig::getConfParam: bad int value in [%s]\n",
+		    name.c_str()));
+	    return false;
+	}
+    }
+    return true;
+}
+
+void RclConfig::initThrConf()
+{
+    // Default is no threading
+    m_thrConf = create_vector
+	(RclPII(-1, 0))(RclPII(-1, 0))(RclPII(-1, 0));
+
+    vector vq;
+    vector vt;
+    if (!getConfParam("thrQSizes", &vq)) {
+	LOGINFO(("RclConfig::initThrConf: no thread info (queues)\n"));
+	goto out;
+    }
+
+    // If the first queue size is 0, autoconf is requested.
+    if (vq.size() > 0 && vq[0] == 0) {
+	LOGDEB(("RclConfig::initThrConf: autoconf requested\n"));
+	CpuConf cpus;
+	if (!getCpuConf(cpus) || cpus.ncpus < 1) {
+	    LOGERR(("RclConfig::initThrConf: could not retrieve cpu conf\n"));
+	    cpus.ncpus = 1;
+	}
+	// Arbitrarily set threads config based on number of CPUS. This also
+	// depends on the IO setup actually, so we're bound to be wrong...
+	if (cpus.ncpus == 1) {
+	    // Somewhat counter-intuitively (because of possible IO//)
+	    // it seems that the best config here is no threading
+	} else if (cpus.ncpus < 4) {
+	    // Untested so let's guess...
+	    m_thrConf = create_vector
+		(RclPII(2, 2))(RclPII(2, 2))(RclPII(2, 1));
+	} else if (cpus.ncpus < 6) {
+	    m_thrConf = create_vector
+		(RclPII(2, 4))(RclPII(2, 2))(RclPII(2, 1));
+	} else {
+	    m_thrConf = create_vector
+		(RclPII(2, 5))(RclPII(2, 3))(RclPII(2, 1));
+	}
+	goto out;
+    } else if (vq.size() > 0 && vq[0] < 0) {
+	// threads disabled by config
+	goto out;
+    }
+
+    if (!getConfParam("thrTCounts", &vt) ) {
+	LOGINFO(("RclConfig::initThrConf: no thread info (threads)\n"));
+	goto out;
+    }
+
+    if (vq.size() != 3 || vt.size() != 3) {
+	LOGINFO(("RclConfig::initThrConf: bad thread info vector sizes\n"));
+	goto out;
+    }
+
+    // Normal case: record info from config
+    m_thrConf.clear();
+    for (unsigned int i = 0; i < 3; i++) {
+	m_thrConf.push_back(RclPII(vq[i], vt[i]));
+    }
+
+out:
+    ostringstream sconf;
+    for (unsigned int i = 0; i < 3; i++) {
+	sconf << "(" << m_thrConf[i].first << ", " << m_thrConf[i].second <<
+	    ") ";
+    }
+
+    LOGDEB(("RclConfig::initThrConf: chosen config (ql,nt): %s\n", 
+	    sconf.str().c_str()));
+}
+
+pair RclConfig::getThrConf(ThrStage who) const
+{
+    if (m_thrConf.size() != 3) {
+	LOGERR(("RclConfig::getThrConf: bad data in rclconfig\n"));
+	return pair(-1,-1);
+    }
+    return m_thrConf[who];
+}
+
+vector RclConfig::getTopdirs() const
+{
+    vector tdl;
+    if (!getConfParam("topdirs", &tdl)) {
+	LOGERR(("RclConfig::getTopdirs: no top directories in config or "
+		"bad list format\n"));
+	return tdl;
+    }
+
+    for (vector::iterator it = tdl.begin(); it != tdl.end(); it++) {
+	*it = path_tildexpand(*it);
+	*it = path_canon(*it);
+    }
+    return tdl;
+}
+
+// Get charset to be used for transcoding to utf-8 if unspecified by doc
+// For document contents:
+//  If defcharset was set (from the config or a previous call, this
+//   is done in setKeydir), use it.
+//  Else, try to guess it from the locale
+//  Use cp1252 (as a superset of iso8859-1) as ultimate default
+//
+// For filenames, same thing except that we do not use the config file value
+// (only the locale).
+const string& RclConfig::getDefCharset(bool filename) const
+{
+    if (filename) {
+	return o_localecharset;
+    } else {
+	return m_defcharset.empty() ? o_localecharset : m_defcharset;
+    }
+}
+
+// Get all known document mime values. We get them from the mimeconf
+// 'index' submap.
+// It's quite possible that there are other mime types in the index
+// (defined in mimemap and not mimeconf, or output by "file -i"). We
+// just ignore them, because there may be myriads, and their contents
+// are not indexed. 
+//
+// This unfortunately means that searches by file names and mime type
+// filtering don't work well together.
+vector RclConfig::getAllMimeTypes() const
+{
+    return mimeconf ? mimeconf->getNames("index") : vector();
+}
+
+// Things for suffix comparison. We define a string class and string 
+// comparison with suffix-only sensitivity
+class SfString {
+public:
+    SfString(const string& s) : m_str(s) {}
+    bool operator==(const SfString& s2) {
+	string::const_reverse_iterator r1 = m_str.rbegin(), re1 = m_str.rend(),
+	    r2 = s2.m_str.rbegin(), re2 = s2.m_str.rend();
+	while (r1 != re1 && r2 != re2) {
+	    if (*r1 != *r2) {
+		return 0;
+	    }
+	    ++r1; ++r2;
+	}
+	return 1;
+    }
+    string m_str;
+};
+
+class SuffCmp {
+public:
+    int operator()(const SfString& s1, const SfString& s2) {
+	//cout << "Comparing " << s1.m_str << " and " << s2.m_str << endl;
+	string::const_reverse_iterator 
+	    r1 = s1.m_str.rbegin(), re1 = s1.m_str.rend(),
+	    r2 = s2.m_str.rbegin(), re2 = s2.m_str.rend();
+	while (r1 != re1 && r2 != re2) {
+	    if (*r1 != *r2) {
+		return *r1 < *r2 ? 1 : 0;
+	    }
+	    ++r1; ++r2;
+	}
+	return 0;
+    }
+};
+typedef multiset SuffixStore;
+
+#define STOPSUFFIXES ((SuffixStore *)m_stopsuffixes)
+
+bool RclConfig::inStopSuffixes(const string& fni)
+{
+    LOGDEB2(("RclConfig::inStopSuffixes(%s)\n", fni.c_str()));
+    // Beware: needrecompute() needs to be called always. 2nd test stays back.
+    if (m_stpsuffstate.needrecompute() || m_stopsuffixes == 0) {
+	// Need to initialize the suffixes
+        delete STOPSUFFIXES;
+	if ((m_stopsuffixes = new SuffixStore) == 0) {
+	    LOGERR(("RclConfig::inStopSuffixes: out of memory\n"));
+	    return false;
+	}
+	list stoplist;
+        stringToStrings(m_stpsuffstate.savedvalue, stoplist);
+	for (list::const_iterator it = stoplist.begin(); 
+	     it != stoplist.end(); it++) {
+	    STOPSUFFIXES->insert(SfString(stringtolower(*it)));
+	    if (m_maxsufflen < it->length())
+		m_maxsufflen = it->length();
+	}
+    }
+
+    // Only need a tail as long as the longest suffix.
+    int pos = MAX(0, int(fni.length() - m_maxsufflen));
+    string fn(fni, pos);
+
+    stringtolower(fn);
+    SuffixStore::const_iterator it = STOPSUFFIXES->find(fn);
+    if (it != STOPSUFFIXES->end()) {
+	LOGDEB2(("RclConfig::inStopSuffixes: Found (%s) [%s]\n", 
+		fni.c_str(), (*it).m_str.c_str()));
+	return true;
+    } else {
+	LOGDEB2(("RclConfig::inStopSuffixes: not found [%s]\n", fni.c_str()));
+	return false;
+    }
+}
+
+string RclConfig::getMimeTypeFromSuffix(const string& suff) const
+{
+    string mtype;
+    mimemap->get(suff, mtype, m_keydir);
+    return mtype;
+}
+
+string RclConfig::getSuffixFromMimeType(const string &mt) const
+{
+    string suffix;
+    vectorsfs = mimemap->getNames(cstr_null);
+    string mt1;
+    for (vector::const_iterator it = sfs.begin(); 
+	 it != sfs.end(); it++) {
+	if (mimemap->get(*it, mt1, cstr_null))
+	    if (!stringicmp(mt, mt1))
+		return *it;
+    }
+    return cstr_null;
+}
+
+/** Get list of file categories from mimeconf */
+bool RclConfig::getMimeCategories(vector& cats) const
+{
+    if (!mimeconf)
+	return false;
+    cats = mimeconf->getNames("categories");
+    return true;
+}
+
+bool RclConfig::isMimeCategory(string& cat) const
+{
+    vectorcats;
+    getMimeCategories(cats);
+    for (vector::iterator it = cats.begin(); it != cats.end(); it++) {
+	if (!stringicmp(*it,cat))
+	    return true;
+    }
+    return false;
+}
+
+/** Get list of mime types for category from mimeconf */
+bool RclConfig::getMimeCatTypes(const string& cat, vector& tps) const
+{
+    tps.clear();
+    if (!mimeconf)
+	return false;
+    string slist;
+    if (!mimeconf->get(cat, slist, "categories"))
+	return false;
+
+    stringToStrings(slist, tps);
+    return true;
+}
+
+string RclConfig::getMimeHandlerDef(const string &mtype, bool filtertypes)
+{
+    string hs;
+    if (filtertypes && m_rmtstate.needrecompute()) {
+        m_restrictMTypes.clear();
+        stringToStrings(stringtolower((const string&)m_rmtstate.savedvalue), 
+                        m_restrictMTypes);
+    }
+    if (filtertypes && !m_restrictMTypes.empty()) {
+	string mt = mtype;
+        stringtolower(mt);
+	if (m_restrictMTypes.find(mt) == m_restrictMTypes.end())
+	    return hs;
+    }
+    if (!mimeconf->get(mtype, hs, "index")) {
+	LOGDEB1(("getMimeHandler: no handler for '%s'\n", mtype.c_str()));
+    }
+    return hs;
+}
+
+bool RclConfig::getGuiFilterNames(vector& cats) const
+{
+    if (!mimeconf)
+	return false;
+    cats = mimeconf->getNamesShallow("guifilters");
+    return true;
+}
+
+bool RclConfig::getGuiFilter(const string& catfiltername, string& frag) const
+{
+    frag.clear();
+    if (!mimeconf)
+	return false;
+    if (!mimeconf->get(catfiltername, frag, "guifilters"))
+	return false;
+    return true;
+}
+
+bool RclConfig::valueSplitAttributes(const string& whole, string& value, 
+				     ConfSimple& attrs)
+{
+    /* There is currently no way to escape a semi-colon */
+    string::size_type semicol0 = whole.find_first_of(";");
+    value = whole.substr(0, semicol0);
+    trimstring(value);
+    string attrstr;
+    if (semicol0 != string::npos && semicol0 < whole.size() - 1) {
+        attrstr = whole.substr(semicol0+1);
+    }
+
+    // Handle additional attributes. We substitute the semi-colons
+    // with newlines and use a ConfSimple
+    if (!attrstr.empty()) {
+        for (string::size_type i = 0; i < attrstr.size(); i++) {
+            if (attrstr[i] == ';')
+                attrstr[i] = '\n';
+	}
+        attrs.reparse(attrstr);
+    } else {
+	attrs.clear();
+    }
+    
+    return true;
+}
+
+bool RclConfig::getMissingHelperDesc(string& out) const
+{
+    string fmiss = path_cat(getConfDir(), "missing");
+    out.clear();
+    if (!file_to_string(fmiss, out))
+	return false;
+    return true;
+}
+
+void RclConfig::storeMissingHelperDesc(const string &s)
+{
+    string fmiss = path_cat(getConfDir(), "missing");
+    FILE *fp = fopen(fmiss.c_str(), "w");
+    if (fp) {
+	if (s.size() > 0 && fwrite(s.c_str(), s.size(), 1, fp) != 1) {
+            LOGERR(("storeMissingHelperDesc: fwrite failed\n"));
+        }
+	fclose(fp);
+    }
+}
+
+// Read definitions for field prefixes, aliases, and hierarchy and arrange 
+// things for speed (theses are used a lot during indexing)
+bool RclConfig::readFieldsConfig(const string& cnferrloc)
+{
+    LOGDEB2(("RclConfig::readFieldsConfig\n"));
+    m_fields = new ConfStack("fields", m_cdirs, true);
+    if (m_fields == 0 || !m_fields->ok()) {
+	m_reason = string("No/bad fields file in: ") + cnferrloc;
+	return false;
+    }
+
+    // Build a direct map avoiding all indirections for field to
+    // prefix translation
+    // Add direct prefixes from the [prefixes] section
+    vectortps = m_fields->getNames("prefixes");
+    for (vector::const_iterator it = tps.begin(); 
+	 it != tps.end(); it++) {
+	string val;
+	m_fields->get(*it, val, "prefixes");
+	ConfSimple attrs;
+	FieldTraits ft;
+	if (!valueSplitAttributes(val, ft.pfx, attrs)) {
+	    LOGERR(("readFieldsConfig: bad config line for [%s]: [%s]\n", 
+		    it->c_str(), val.c_str()));
+	    return 0;
+	}
+	string tval;
+	if (attrs.get("wdfinc", tval))
+	    ft.wdfinc = atoi(tval.c_str());
+	if (attrs.get("boost", tval))
+	    ft.boost = atof(tval.c_str());
+	m_fldtotraits[stringtolower(*it)] = ft;
+	LOGDEB2(("readFieldsConfig: [%s] -> [%s] %d %.1f\n", 
+		it->c_str(), ft.pfx.c_str(), ft.wdfinc, ft.boost));
+    }
+
+    // Add prefixes for aliases  an build alias-to-canonic map while we're at it
+    // Having the aliases in the prefix map avoids an additional indirection
+    // at index time.
+    tps = m_fields->getNames("aliases");
+    for (vector::const_iterator it = tps.begin(); it != tps.end();it++) {
+	string canonic = stringtolower(*it); // canonic name
+	FieldTraits ft;
+	map::const_iterator pit = 
+	    m_fldtotraits.find(canonic);
+	if (pit != m_fldtotraits.end()) {
+	    ft = pit->second;
+	}
+	string aliases;
+	m_fields->get(canonic, aliases, "aliases");
+	vector l;
+	stringToStrings(aliases, l);
+	for (vector::const_iterator ait = l.begin();
+	     ait != l.end(); ait++) {
+	    if (pit != m_fldtotraits.end())
+		m_fldtotraits[stringtolower(*ait)] = ft;
+	    m_aliastocanon[stringtolower(*ait)] = canonic;
+	}
+    }
+
+#if 0
+    for (map::const_iterator it = m_fldtotraits.begin();
+	 it != m_fldtotraits.end(); it++) {
+	LOGDEB(("readFieldsConfig: [%s] -> [%s] %d %.1f\n", 
+		it->c_str(), it->second.pfx.c_str(), it->second.wdfinc, 
+		it->second.boost));
+    }
+#endif
+
+    vector sl = m_fields->getNames("stored");
+    if (!sl.empty()) {
+	for (vector::const_iterator it = sl.begin(); 
+	     it != sl.end(); it++) {
+	    string fld = fieldCanon(stringtolower(*it));
+	    m_storedFields.insert(fld);
+	}
+    }
+
+    // Extended file attribute to field translations
+    vectorxattrs = m_fields->getNames("xattrtofields");
+    for (vector::const_iterator it = xattrs.begin(); 
+	 it != xattrs.end(); it++) {
+	string val;
+	m_fields->get(*it, val, "xattrtofields");
+	m_xattrtofld[*it] = val;
+    }
+
+    return true;
+}
+
+// Return specifics for field name:
+bool RclConfig::getFieldTraits(const string& _fld, const FieldTraits **ftpp)
+    const
+{
+    string fld = fieldCanon(_fld);
+    map::const_iterator pit = m_fldtotraits.find(fld);
+    if (pit != m_fldtotraits.end()) {
+	*ftpp = &pit->second;
+	LOGDEB1(("RclConfig::getFieldTraits: [%s]->[%s]\n", 
+		 _fld.c_str(), pit->second.pfx.c_str()));
+	return true;
+    } else {
+	LOGDEB1(("RclConfig::getFieldTraits: no prefix for field [%s]\n",
+		 fld.c_str()));
+	*ftpp = 0;
+	return false;
+    }
+}
+
+set RclConfig::getIndexedFields() const
+{
+    set flds;
+    if (m_fields == 0)
+	return flds;
+
+    vector sl = m_fields->getNames("prefixes");
+    flds.insert(sl.begin(), sl.end());
+    return flds;
+}
+
+string RclConfig::fieldCanon(const string& f) const
+{
+    string fld = stringtolower(f);
+    map::const_iterator it = m_aliastocanon.find(fld);
+    if (it != m_aliastocanon.end()) {
+	LOGDEB1(("RclConfig::fieldCanon: [%s] -> [%s]\n", 
+		 f.c_str(), it->second.c_str()));
+	return it->second;
+    }
+    LOGDEB1(("RclConfig::fieldCanon: [%s] -> [%s]\n", f.c_str(), fld.c_str()));
+    return fld;
+}
+
+vector RclConfig::getFieldSectNames(const string &sk, const char* patrn)
+    const
+{
+    if (m_fields == 0)
+        return vector();
+    return m_fields->getNames(sk, patrn);
+}
+
+bool RclConfig::getFieldConfParam(const string &name, const string &sk, 
+                                  string &value) const
+{
+    if (m_fields == 0)
+        return false;
+    return m_fields->get(name, value, sk);
+}
+
+string RclConfig::getMimeViewerAllEx() const
+{
+    string hs;
+    if (mimeview == 0)
+	return hs;
+    mimeview->get("xallexcepts", hs, "");
+    return hs;
+}
+
+bool RclConfig::setMimeViewerAllEx(const string& allex)
+{
+    if (mimeview == 0)
+        return false;
+    if (!mimeview->set("xallexcepts", allex, "")) {
+	m_reason = string("RclConfig:: cant set value. Readonly?");
+	return false;
+    }
+
+    return true;
+}
+
+string RclConfig::getMimeViewerDef(const string &mtype, const string& apptag,
+				   bool useall) const
+{
+    LOGDEB2(("RclConfig::getMimeViewerDef: mtype [%s] apptag [%s]\n",
+	     mtype.c_str(), apptag.c_str()));
+    string hs;
+    if (mimeview == 0)
+	return hs;
+
+    if (useall) {
+	// Check for exception
+	string excepts = getMimeViewerAllEx();
+	vector vex;
+	stringToTokens(excepts, vex);
+	bool isexcept = false;
+	for (vector::iterator it = vex.begin();
+	     it != vex.end(); it++) {
+	    vector mita;
+	    stringToTokens(*it, mita, "|");
+	    if ((mita.size() == 1 && apptag.empty() && mita[0] == mtype) ||
+		(mita.size() == 2 && mita[1] == apptag && mita[0] == mtype)) {
+		// Exception to x-all
+		isexcept = true;
+		break;
+	    }
+	}
+
+	if (isexcept == false) {
+	    mimeview->get("application/x-all", hs, "view");
+	    return hs;
+	}
+	// Fallthrough to normal case.
+    }
+
+    if (apptag.empty() || !mimeview->get(mtype + string("|") + apptag,
+                                         hs, "view"))
+        mimeview->get(mtype, hs, "view");
+    return hs;
+}
+
+bool RclConfig::getMimeViewerDefs(vector >& defs) const
+{
+    if (mimeview == 0)
+	return false;
+    vectortps = mimeview->getNames("view");
+    for (vector::const_iterator it = tps.begin(); 
+	 it != tps.end();it++) {
+	defs.push_back(pair(*it, getMimeViewerDef(*it, "", 0)));
+    }
+    return true;
+}
+
+bool RclConfig::setMimeViewerDef(const string& mt, const string& def)
+{
+    if (mimeview == 0)
+        return false;
+    bool status;
+    if (!def.empty()) 
+	status = mimeview->set(mt, def, "view");
+    else 
+	status = mimeview->erase(mt, "view");
+
+    if (!status) {
+	m_reason = string("RclConfig:: cant set value. Readonly?");
+	return false;
+    }
+    return true;
+}
+
+bool RclConfig::mimeViewerNeedsUncomp(const string &mimetype) const
+{
+    string s;
+    vector v;
+    if (mimeview != 0 && mimeview->get("nouncompforviewmts", s, "") && 
+        stringToStrings(s, v) && 
+        find_if(v.begin(), v.end(), StringIcmpPred(mimetype)) != v.end()) 
+        return false;
+    return true;
+}
+
+string RclConfig::getMimeIconPath(const string &mtype, const string &apptag)
+    const
+{
+    string iconname;
+    if (!apptag.empty())
+	mimeconf->get(mtype + string("|") + apptag, iconname, "icons");
+    if (iconname.empty())
+        mimeconf->get(mtype, iconname, "icons");
+    if (iconname.empty())
+	iconname = "document";
+
+    string iconpath;
+#if defined (__FreeBSD__) && __FreeBSD_version < 500000
+    // gcc 2.95 dies if we call getConfParam here ??
+    if (m_conf) m_conf->get(string("iconsdir"), iconpath, m_keydir);
+#else
+    getConfParam("iconsdir", iconpath);
+#endif
+
+    if (iconpath.empty()) {
+	iconpath = path_cat(m_datadir, "images");
+    } else {
+	iconpath = path_tildexpand(iconpath);
+    }
+    return path_cat(iconpath, iconname) + ".png";
+}
+
+string RclConfig::getDbDir() const
+{
+    string dbdir;
+    if (!getConfParam("dbdir", dbdir)) {
+	LOGERR(("RclConfig::getDbDir: no db directory in configuration\n"));
+    } else {
+	dbdir = path_tildexpand(dbdir);
+	// If not an absolute path, compute relative to config dir
+	if (dbdir.at(0) != '/') {
+	    LOGDEB1(("Dbdir not abs, catting with confdir\n"));
+	    dbdir = path_cat(getConfDir(), dbdir);
+	}
+    }
+    LOGDEB1(("RclConfig::getDbDir: dbdir: [%s]\n", dbdir.c_str()));
+    return path_canon(dbdir);
+}
+
+void RclConfig::urlrewrite(const string& dbdir, string& url) const
+{
+    LOGDEB2(("RclConfig::urlrewrite: dbdir [%s] url [%s]\n",
+	    dbdir.c_str(), url.c_str()));
+
+    // Do path translations exist for this index ?
+    if (m_ptrans == 0 || !m_ptrans->hasSubKey(dbdir)) {
+	LOGDEB2(("RclConfig::urlrewrite: no paths translations (m_ptrans %p)\n",
+		m_ptrans));
+	return;
+    }
+
+    string path = fileurltolocalpath(url);
+    if (path.empty()) {
+	LOGDEB2(("RclConfig::urlrewrite: not file url\n"));
+	return;
+    }
+
+    // For each translation check if the prefix matches the input path,
+    // replace and return the result if it does.
+    vector opaths = m_ptrans->getNames(dbdir);
+    for (vector::const_iterator it = opaths.begin(); 
+	 it != opaths.end(); it++) {
+	if (it->size() <= path.size() && !path.compare(0, it->size(), *it)) {
+	    string npath;
+	    // This call always succeeds because the key comes from getNames()
+	    if (m_ptrans->get(*it, npath, dbdir)) { 
+		path = path.replace(0, it->size(), npath);
+		url = "file://" + path;
+	    }
+	    break;
+	}
+    }
+}
+
+bool RclConfig::sourceChanged() const
+{
+    if (m_conf && m_conf->sourceChanged())
+	return true;
+    if (mimemap && mimemap->sourceChanged())
+	return true;
+    if (mimeconf && mimeconf->sourceChanged())
+	return true;
+    if (mimeview && mimeview->sourceChanged())
+	return true;
+    if (m_fields && m_fields->sourceChanged())
+	return true;
+    if (m_ptrans && m_ptrans->sourceChanged())
+	return true;
+    return false;
+}
+
+string RclConfig::getStopfile() const
+{
+    return path_cat(getConfDir(), "stoplist.txt");
+}
+string RclConfig::getPidfile() const
+{
+    return path_cat(getConfDir(), "index.pid");
+}
+
+// The index status file is fast changing, so it's possible to put it outside
+// of the config directory (for ssds, not sure this is really useful).
+string RclConfig::getIdxStatusFile() const
+{
+    string path;
+    if (!getConfParam("idxstatusfile", path)) {
+	return path_cat(getConfDir(), "idxstatus.txt");
+    } else {
+	path = path_tildexpand(path);
+	// If not an absolute path, compute relative to config dir
+	if (path.at(0) != '/') {
+	    path = path_cat(getConfDir(), path);
+	}
+	return path_canon(path);
+    }
+}
+
+string RclConfig::getWebQueueDir() const
+{
+    string webqueuedir;
+    if (!getConfParam("webqueuedir", webqueuedir))
+	webqueuedir = "~/.recollweb/ToIndex/";
+    webqueuedir = path_tildexpand(webqueuedir);
+    return webqueuedir;
+}
+
+vector& RclConfig::getSkippedNames()
+{
+    if (m_skpnstate.needrecompute()) {
+	stringToStrings(m_skpnstate.savedvalue, m_skpnlist);
+    }
+    return m_skpnlist;
+}
+
+vector RclConfig::getSkippedPaths() const
+{
+    vector skpl;
+    getConfParam("skippedPaths", &skpl);
+
+    // Always add the dbdir and confdir to the skipped paths. This is 
+    // especially important for the rt monitor which will go into a loop if we
+    // don't do this.
+    skpl.push_back(getDbDir());
+    skpl.push_back(getConfDir());
+    // And the web queue dir
+    skpl.push_back(getWebQueueDir());
+    for (vector::iterator it = skpl.begin(); it != skpl.end(); it++) {
+	*it = path_tildexpand(*it);
+	*it = path_canon(*it);
+    }
+    sort(skpl.begin(), skpl.end());
+    vector::iterator uit = unique(skpl.begin(), skpl.end());
+    skpl.resize(uit - skpl.begin());
+    return skpl;
+}
+
+vector RclConfig::getDaemSkippedPaths() const
+{
+    vector dskpl;
+    getConfParam("daemSkippedPaths", &dskpl);
+
+    for (vector::iterator it = dskpl.begin(); it != dskpl.end(); it++) {
+	*it = path_tildexpand(*it);
+	*it = path_canon(*it);
+    }
+
+    vector skpl1 = getSkippedPaths();
+    vector skpl;
+    if (dskpl.empty()) {
+	skpl = skpl1;
+    } else {
+	sort(dskpl.begin(), dskpl.end());
+	merge(dskpl.begin(), dskpl.end(), skpl1.begin(), skpl1.end(), 
+	      skpl.begin());
+	vector::iterator uit = unique(skpl.begin(), skpl.end());
+	skpl.resize(uit - skpl.begin());
+    }
+    return skpl;
+}
+
+
+// Look up an executable filter.  We look in $RECOLL_FILTERSDIR,
+// filtersdir in config file, then let the system use the PATH
+string RclConfig::findFilter(const string &icmd) const
+{
+    // If the path is absolute, this is it
+    if (icmd[0] == '/')
+	return icmd;
+
+    string cmd;
+    const char *cp;
+
+    // Filters dir from environment ?
+    if ((cp = getenv("RECOLL_FILTERSDIR"))) {
+	cmd = path_cat(cp, icmd);
+	if (access(cmd.c_str(), X_OK) == 0)
+	    return cmd;
+    } 
+    // Filters dir as configuration parameter?
+    if (getConfParam(string("filtersdir"), cmd)) {
+	cmd = path_cat(cmd, icmd);
+	if (access(cmd.c_str(), X_OK) == 0)
+	    return cmd;
+    } 
+
+    // Filters dir as datadir subdir. Actually the standard case, but
+    // this is normally the same value found in config file (previous step)
+    cmd = path_cat(m_datadir, "filters");
+    cmd = path_cat(cmd, icmd);
+    if (access(cmd.c_str(), X_OK) == 0)
+	return cmd;
+
+    // Last resort for historical reasons: check in personal config
+    // directory
+    cmd = path_cat(getConfDir(), icmd);
+    if (access(cmd.c_str(), X_OK) == 0)
+	return cmd;
+
+    // Let the shell try to find it...
+    return icmd;
+}
+
+/** 
+ * Return decompression command line for given mime type
+ */
+bool RclConfig::getUncompressor(const string &mtype, vector& cmd) const
+{
+    string hs;
+
+    mimeconf->get(mtype, hs, cstr_null);
+    if (hs.empty())
+	return false;
+    vector tokens;
+    stringToStrings(hs, tokens);
+    if (tokens.empty()) {
+	LOGERR(("getUncompressor: empty spec for mtype %s\n", mtype.c_str()));
+	return false;
+    }
+    vector::iterator it = tokens.begin();
+    if (tokens.size() < 2)
+	return false;
+    if (stringlowercmp("uncompress", *it++)) 
+	return false;
+    cmd.clear();
+    cmd.push_back(findFilter(*it++));
+    cmd.insert(cmd.end(), it, tokens.end());
+    return true;
+}
+
+static const char blurb0[] = 
+"# The system-wide configuration files for recoll are located in:\n"
+"#   %s\n"
+"# The default configuration files are commented, you should take a look\n"
+"# at them for an explanation of what can be set (you could also take a look\n"
+"# at the manual instead).\n"
+"# Values set in this file will override the system-wide values for the file\n"
+"# with the same name in the central directory. The syntax for setting\n"
+"# values is identical.\n"
+    ;
+
+// Use uni2ascii -a K to generate these from the utf-8 strings
+// Swedish and Danish. 
+static const char swedish_ex[] = "unac_except_trans = \303\244\303\244 \303\204\303\244 \303\266\303\266 \303\226\303\266 \303\274\303\274 \303\234\303\274 \303\237ss \305\223oe \305\222oe \303\246ae \303\206ae \357\254\201fi \357\254\202fl \303\245\303\245 \303\205\303\245";
+// German:
+static const char german_ex[] = "unac_except_trans = \303\244\303\244 \303\204\303\244 \303\266\303\266 \303\226\303\266 \303\274\303\274 \303\234\303\274 \303\237ss \305\223oe \305\222oe \303\246ae \303\206ae \357\254\201fi \357\254\202fl";
+
+// Create initial user config by creating commented empty files
+static const char *configfiles[] = {"recoll.conf", "mimemap", "mimeconf", 
+				    "mimeview"};
+static int ncffiles = sizeof(configfiles) / sizeof(char *);
+bool RclConfig::initUserConfig()
+{
+    // Explanatory text
+    const int bs = sizeof(blurb0)+PATH_MAX+1;
+    char blurb[bs];
+    string exdir = path_cat(m_datadir, "examples");
+    snprintf(blurb, bs, blurb0, exdir.c_str());
+
+    // Use protective 700 mode to create the top configuration
+    // directory: documents can be reconstructed from index data.
+    if (access(m_confdir.c_str(), 0) < 0 && 
+	mkdir(m_confdir.c_str(), 0700) < 0) {
+	m_reason += string("mkdir(") + m_confdir + ") failed: " + 
+	    strerror(errno);
+	return false;
+    }
+    string lang = localelang();
+    for (int i = 0; i < ncffiles; i++) {
+	string dst = path_cat(m_confdir, string(configfiles[i])); 
+	if (access(dst.c_str(), 0) < 0) {
+	    FILE *fp = fopen(dst.c_str(), "w");
+	    if (fp) {
+		fprintf(fp, "%s\n", blurb);
+		if (!strcmp(configfiles[i], "recoll.conf")) {
+		    // Add improved unac_except_trans for some languages
+		    if (lang == "se" || lang == "dk" || lang == "no" || 
+			lang == "fi") {
+			fprintf(fp, "%s\n", swedish_ex);
+		    } else if (lang == "de") {
+			fprintf(fp, "%s\n", german_ex);
+		    }
+		}
+		fclose(fp);
+	    } else {
+		m_reason += string("fopen ") + dst + ": " + strerror(errno);
+		return false;
+	    }
+	}
+    }
+    return true;
+}
+
+void RclConfig::freeAll() 
+{
+    delete m_conf;
+    delete mimemap;
+    delete mimeconf; 
+    delete mimeview; 
+    delete m_fields;
+    delete m_ptrans;
+    delete STOPSUFFIXES;
+    // just in case
+    zeroMe();
+}
+
+void RclConfig::initFrom(const RclConfig& r)
+{
+    zeroMe();
+    if (!(m_ok = r.m_ok))
+	return;
+    m_reason = r.m_reason;
+    m_confdir = r.m_confdir;
+    m_datadir = r.m_datadir;
+    m_keydir = r.m_keydir;
+    m_cdirs = r.m_cdirs;
+    if (r.m_conf)
+	m_conf = new ConfStack(*(r.m_conf));
+    if (r.mimemap)
+	mimemap = new ConfStack(*(r.mimemap));
+    if (r.mimeconf)
+	mimeconf = new ConfStack(*(r.mimeconf));
+    if (r.mimeview)
+	mimeview = new ConfStack(*(r.mimeview));
+    if (r.m_fields)
+	m_fields = new ConfStack(*(r.m_fields));
+    if (r.m_ptrans)
+	m_ptrans = new ConfSimple(*(r.m_ptrans));
+    m_fldtotraits = r.m_fldtotraits;
+    m_aliastocanon = r.m_aliastocanon;
+    m_storedFields = r.m_storedFields;
+    m_xattrtofld = r.m_xattrtofld;
+    if (r.m_stopsuffixes)
+	m_stopsuffixes = new SuffixStore(*((SuffixStore*)r.m_stopsuffixes));
+    m_maxsufflen = r.m_maxsufflen;
+    m_defcharset = r.m_defcharset;
+
+    m_stpsuffstate.init(this, mimemap, r.m_stpsuffstate.paramname);
+    m_skpnstate.init(this, m_conf, r.m_skpnstate.paramname);
+    m_rmtstate.init(this, m_conf, r.m_rmtstate.paramname);
+    m_thrConf = r.m_thrConf;
+}
+
+#else // -> Test
+
+#include 
+#include 
+
+#include 
+#include 
+#include 
+
+using namespace std;
+
+#include "debuglog.h"
+#include "rclinit.h"
+#include "rclconfig.h"
+#include "cstr.h"
+
+static char *thisprog;
+
+static char usage [] = "\n"
+"-c: check a few things in the configuration files\n"
+"[-s subkey] -q param : query parameter value\n"
+"-f : print some field data\n"
+"  : default: print parameters\n"
+
+;
+static void
+Usage(void)
+{
+    fprintf(stderr, "%s: usage: %s\n", thisprog, usage);
+    exit(1);
+}
+
+static int     op_flags;
+#define OPT_MOINS 0x1
+#define OPT_s	  0x2 
+#define OPT_q	  0x4 
+#define OPT_c     0x8
+#define OPT_f     0x10
+
+int main(int argc, char **argv)
+{
+    string pname, skey;
+    
+    thisprog = argv[0];
+    argc--; argv++;
+
+    while (argc > 0 && **argv == '-') {
+	(*argv)++;
+	if (!(**argv))
+	    /* Cas du "adb - core" */
+	    Usage();
+	while (**argv)
+	    switch (*(*argv)++) {
+	    case 'c':	op_flags |= OPT_c; break;
+	    case 'f':	op_flags |= OPT_f; break;
+	    case 's':	op_flags |= OPT_s; if (argc < 2)  Usage();
+		skey = *(++argv);
+		argc--; 
+		goto b1;
+	    case 'q':	op_flags |= OPT_q; if (argc < 2)  Usage();
+		pname = *(++argv);
+		argc--; 
+		goto b1;
+	    default: Usage();	break;
+	    }
+    b1: argc--; argv++;
+    }
+
+    if (argc != 0)
+	Usage();
+
+    string reason;
+    RclConfig *config = recollinit(0, 0, reason);
+    if (config == 0 || !config->ok()) {
+	cerr << "Configuration problem: " << reason << endl;
+	exit(1);
+    }
+    if (op_flags & OPT_s)
+	config->setKeyDir(skey);
+    if (op_flags & OPT_q) {
+	string value;
+	if (!config->getConfParam(pname, value)) {
+	    fprintf(stderr, "getConfParam failed for [%s]\n", pname.c_str());
+	    exit(1);
+	}
+	printf("[%s] -> [%s]\n", pname.c_str(), value.c_str());
+    } else if (op_flags & OPT_f) {
+	set stored = config->getStoredFields();
+	set indexed = config->getIndexedFields();
+	cout << "Stored fields: ";
+        for (set::const_iterator it = stored.begin(); 
+             it != stored.end(); it++) {
+            cout << "[" << *it << "] ";
+        }
+	cout << endl;	
+	cout << "Indexed fields: ";
+        for (set::const_iterator it = indexed.begin(); 
+             it != indexed.end(); it++) {
+	    const FieldTraits *ftp;
+	    config->getFieldTraits(*it, &ftp);
+	    if (ftp)
+		cout << "[" << *it << "]" << " -> [" << ftp->pfx << "] ";
+	    else 
+		cout << "[" << *it << "]" << " -> [" << "(none)" << "] ";
+
+        }
+	cout << endl;	
+    } else if (op_flags & OPT_c) {
+	// Checking the configuration consistency
+	
+	// Find and display category names
+        vector catnames;
+        config->getMimeCategories(catnames);
+        cout << "Categories: ";
+        for (vector::const_iterator it = catnames.begin(); 
+             it != catnames.end(); it++) {
+            cout << *it << " ";
+        }
+        cout << endl;
+
+	// Compute union of all types from each category. Check that there
+	// are no duplicates while we are at it.
+        set allmtsfromcats;
+        for (vector::const_iterator it = catnames.begin(); 
+             it != catnames.end(); it++) {
+            vector cts;
+            config->getMimeCatTypes(*it, cts);
+            for (vector::const_iterator it1 = cts.begin(); 
+                 it1 != cts.end(); it1++) {
+                // Already in map -> duplicate
+                if (allmtsfromcats.find(*it1) != allmtsfromcats.end()) {
+                    cout << "Duplicate: [" << *it1 << "]" << endl;
+                }
+                allmtsfromcats.insert(*it1);
+            }
+        }
+
+	// Retrieve complete list of mime types 
+        vector mtypes = config->getAllMimeTypes();
+
+	// And check that each mime type is found in exactly one category
+        for (vector::const_iterator it = mtypes.begin();
+             it != mtypes.end(); it++) {
+            if (allmtsfromcats.find(*it) == allmtsfromcats.end()) {
+                cout << "Not found in catgs: [" << *it << "]" << endl;
+            }
+        }
+
+	// List mime types not in mimeview
+        for (vector::const_iterator it = mtypes.begin();
+             it != mtypes.end(); it++) {
+	    if (config->getMimeViewerDef(*it, "", false).empty()) {
+		cout << "No viewer: [" << *it << "]" << endl;
+	    }
+        }
+
+	// Check that each mime type has an indexer
+        for (vector::const_iterator it = mtypes.begin();
+             it != mtypes.end(); it++) {
+	    if (config->getMimeHandlerDef(*it, false).empty()) {
+		cout << "No filter: [" << *it << "]" << endl;
+	    }
+        }
+
+	// Check that each mime type has a defined icon
+        for (vector::const_iterator it = mtypes.begin();
+             it != mtypes.end(); it++) {
+	    if (config->getMimeIconPath(*it, "") == "document") {
+		cout << "No or generic icon: [" << *it << "]" << endl;
+	    }
+        }
+
+    } else {
+        config->setKeyDir(cstr_null);
+	vector names = config->getConfNames();
+	for (vector::iterator it = names.begin(); 
+	     it != names.end();it++) {
+	    string value;
+	    config->getConfParam(*it, value);
+	    cout << *it << " -> [" << value << "]" << endl;
+	}
+    }
+    exit(0);
+}
+
+#endif // TEST_RCLCONFIG
diff --git a/src/common/rclconfig.h b/src/common/rclconfig.h
new file mode 100644
index 00000000..3b5dbd8e
--- /dev/null
+++ b/src/common/rclconfig.h
@@ -0,0 +1,332 @@
+/* Copyright (C) 2004 J.F.Dockes
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+#ifndef _RCLCONFIG_H_INCLUDED_
+#define _RCLCONFIG_H_INCLUDED_
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+using std::string;
+using std::vector;
+using std::pair;
+using std::set;
+using std::map;
+
+
+#include "conftree.h"
+#include "smallut.h"
+
+class RclConfig;
+
+// A small class used for parameters that need to be computed from the
+// config string, and which can change with the keydir. Minimize work
+// by using the keydirgen and a saved string to avoid unneeded
+// recomputations
+class ParamStale {
+public:
+    RclConfig *parent;
+    ConfNull  *conffile;
+    string    paramname;
+    int       savedkeydirgen;
+    string    savedvalue;
+
+    void init(RclConfig *rconf, ConfNull *cnf, const string& nm);
+    bool needrecompute();
+};
+
+// Data associated to a indexed field name: 
+struct FieldTraits {
+    string pfx; // indexing prefix, 
+    int    wdfinc; // Index time term frequency increment (default 1)
+    double boost; // Query time boost (default 1.0)
+    FieldTraits(int i, double f) {wdfinc = i; boost = f;}
+    FieldTraits() : wdfinc(1), boost(1.0) {}
+    FieldTraits(const string& s) : pfx(s), wdfinc(1), boost(1.0) {}
+};
+
+class RclConfig {
+ public:
+
+    // Constructor: we normally look for a configuration file, except
+    // if this was specified on the command line and passed through
+    // argcnf
+    RclConfig(const string *argcnf = 0);
+
+    // Return a writable clone of the main config. This belongs to the
+    // caller (must delete it when done)
+    ConfNull *cloneMainConfig();
+
+    /** (re)Read recoll.conf */
+    bool updateMainConfig();
+
+    bool ok() const {return m_ok;}
+    const string &getReason() const {return m_reason;}
+
+    /** Return the directory where this configuration is stored. 
+     *  This was possibly silently created by the rclconfig
+     *  constructor it it is the default one (~/.recoll) and it did 
+     *  not exist yet. */
+    string getConfDir() const {return m_confdir;}
+
+    /** Check if the config files were modified since we read them */
+    bool sourceChanged() const;
+
+    /** Returns true if this is ~/.recoll */
+    bool isDefaultConfig() const;
+    /** Get the local value for /usr/local/share/recoll/ */
+    const string& getDatadir() const {return m_datadir;}
+
+    /** Set current directory reference, and fetch automatic parameters. */
+    void setKeyDir(const string &dir);
+    string getKeyDir() const {return m_keydir;}
+
+    /** Get generic configuration parameter according to current keydir */
+    bool getConfParam(const string &name, string &value) const
+    {
+	if (m_conf == 0)
+	    return false;
+	return m_conf->get(name, value, m_keydir);
+    }
+    /** Variant with autoconversion to int */
+    bool getConfParam(const string &name, int *value) const;
+    /** Variant with autoconversion to bool */
+    bool getConfParam(const string &name, bool *value) const;
+    /** Variant with conversion to vector
+     *  (stringToStrings). Can fail if the string is malformed. */
+    bool getConfParam(const string &name, vector *value) const;
+    /** Variant with conversion to vector */
+    bool getConfParam(const string &name, vector *value) const;
+
+    enum ThrStage {ThrIntern=0, ThrSplit=1, ThrDbWrite=2};
+    pair getThrConf(ThrStage who) const;
+
+    /** 
+     * Get list of config names under current sk, with possible 
+     * wildcard filtering 
+     */
+    vector getConfNames(const char *pattern = 0) const
+    {
+	return m_conf->getNames(m_keydir, pattern);
+    }
+
+    /** Check if name exists anywhere in config */
+    bool hasNameAnywhere(const string& nm) const
+    {
+        return m_conf? m_conf->hasNameAnywhere(nm) : false;
+    }
+
+
+    /** Get default charset for current keydir (was set during setKeydir) 
+     * filenames are handled differently */
+    const string &getDefCharset(bool filename = false) const;
+
+    /** Get list of top directories. This is needed from a number of places
+     * and needs some cleaning-up code. An empty list is always an error, no
+     * need for other status */
+    vector getTopdirs() const;
+
+    /** Get database directory */
+    string getDbDir() const;
+    /** Get stoplist file name */
+    string getStopfile() const;
+    /** Get indexing pid file name */
+    string getPidfile() const;
+    /** Get indexing status file name */
+    string getIdxStatusFile() const;
+    /** Do path translation according to the ptrans table */
+    void urlrewrite(const string& dbdir, string& url) const;
+    ConfSimple *getPTrans()
+    {
+	return m_ptrans;
+    }
+    /** Get Web Queue directory name */
+    string getWebQueueDir() const;
+
+    /** Get list of skipped file names for current keydir */
+    vector& getSkippedNames();
+
+    /** Get list of skipped paths patterns. Doesn't depend on the keydir */
+    vector getSkippedPaths() const;
+    /** Get list of skipped paths patterns, daemon version (may add some)
+	Doesn't depend on the keydir */
+    vector getDaemSkippedPaths() const;
+
+    /** 
+     * mimemap: Check if file name should be ignored because of suffix
+     *
+     * The list of ignored suffixes is initialized on first call, and
+     * not changed for subsequent setKeydirs.
+     */
+    bool inStopSuffixes(const string& fn);
+
+    /** 
+     * Check in mimeconf if input mime type is a compressed one, and
+     * return command to uncompress if it is.
+     *
+     * The returned command has substitutable places for input file name 
+     * and temp dir name, and will return output name
+     */
+    bool getUncompressor(const string &mtpe, vector& cmd) const;
+
+    /** mimemap: compute mimetype */
+    string getMimeTypeFromSuffix(const string &suffix) const;
+    /** mimemap: get a list of all indexable mime types defined */
+    vector getAllMimeTypes() const;
+    /** mimemap: Get appropriate suffix for mime type. This is inefficient */
+    string getSuffixFromMimeType(const string &mt) const;
+
+    /** mimeconf: get input filter for mimetype */
+    string getMimeHandlerDef(const string &mimetype, bool filtertypes=false);
+
+    /** For lines like: "name = some value; attr1 = value1; attr2 = val2"
+     * Separate the value and store the attributes in a ConfSimple 
+     * @param whole the raw value. No way to escape a semi-colon in there.
+     */
+    static bool valueSplitAttributes(const string& whole, string& value, 
+				     ConfSimple& attrs) ;
+
+    /** Return icon path for mime type and tag */
+    string getMimeIconPath(const string &mt, const string& apptag) const;
+
+    /** mimeconf: get list of file categories */
+    bool getMimeCategories(vector&) const;
+    /** mimeconf: is parameter one of the categories ? */
+    bool isMimeCategory(string&) const;
+    /** mimeconf: get list of mime types for category */
+    bool getMimeCatTypes(const string& cat, vector&) const;
+
+    /** mimeconf: get list of gui filters (doc cats by default */
+    bool getGuiFilterNames(vector&) const;
+    /** mimeconf: get query lang frag for named filter */
+    bool getGuiFilter(const string& filtername, string& frag) const;
+
+    /** fields: get field prefix from field name */
+    bool getFieldTraits(const string& fldname, const FieldTraits **) const;
+    const set& getStoredFields() const {return m_storedFields;}
+    set getIndexedFields() const;
+    /** Get canonic name for possible alias */
+    string fieldCanon(const string& fld) const;
+    /** Get xattr name to field names translations */
+    const map& getXattrToField() const {return m_xattrtofld;}
+    /** Get value of a parameter inside the "fields" file. Only some filters 
+        use this (ie: mh_mail). The information specific to a given filter
+        is typically stored in a separate section(ie: [mail]) */
+    vector getFieldSectNames(const string &sk, const char* = 0) const;
+    bool getFieldConfParam(const string &name, const string &sk, string &value)
+    const;
+
+    /** mimeview: get/set external viewer exec string(s) for mimetype(s) */
+    string getMimeViewerDef(const string &mimetype, const string& apptag, 
+			    bool useall) const;
+    string getMimeViewerAllEx() const;
+    bool setMimeViewerAllEx(const string& allex);
+    bool getMimeViewerDefs(vector >&) const;
+    bool setMimeViewerDef(const string& mimetype, const string& cmd);
+    /** Check if mime type is designated as needing no uncompress before view
+     * (if a file of this type is found compressed). Default is true,
+     *  exceptions are found in the nouncompforviewmts mimeview list */
+    bool mimeViewerNeedsUncomp(const string &mimetype) const;
+
+    /** Store/retrieve missing helpers description string */
+    bool getMissingHelperDesc(string&) const;
+    void storeMissingHelperDesc(const string &s);
+
+    /** Find exec file for external filter. cmd is the command name from the
+     * command string returned by getMimeHandlerDef */
+    string findFilter(const string& cmd) const;
+
+    /** Thread config init is not done automatically because not all
+	programs need it and it uses debuglog so that it's better to
+	call it after primary init */
+    void initThrConf();
+
+    ~RclConfig() {
+	freeAll();
+    }
+
+    RclConfig(const RclConfig &r) {
+	initFrom(r);
+    }
+    RclConfig& operator=(const RclConfig &r) {
+	if (this != &r) {
+	    freeAll();
+	    initFrom(r);
+	}
+	return *this;
+    }
+
+    friend class ParamStale;
+
+ private:
+    int m_ok;
+    string m_reason;    // Explanation for bad state
+    string m_confdir;   // User directory where the customized files are stored
+    string m_datadir;   // Example: /usr/local/share/recoll
+    string m_keydir;    // Current directory used for parameter fetches.
+    int    m_keydirgen; // To help with knowing when to update computed data.
+
+    vector m_cdirs; // directory stack for the confstacks
+
+    ConfStack *m_conf;   // Parsed configuration files
+    ConfStack *mimemap;  // The files don't change with keydir, 
+    ConfStack *mimeconf; // but their content may depend on it.
+    ConfStack *mimeview; // 
+    ConfStack *m_fields;
+    ConfSimple            *m_ptrans; // Paths translations
+    map  m_fldtotraits; // Field to field params
+    map  m_aliastocanon;
+    set          m_storedFields;
+    map  m_xattrtofld;
+
+    void        *m_stopsuffixes;
+    unsigned int m_maxsufflen;
+    ParamStale   m_stpsuffstate;
+
+    ParamStale   m_skpnstate;
+    vector m_skpnlist;
+
+    // Parameters auto-fetched on setkeydir
+    string m_defcharset;
+    static string o_localecharset;
+    // Limiting set of mime types to be processed. Normally empty.
+    ParamStale    m_rmtstate;
+    set   m_restrictMTypes; 
+    vector > m_thrConf;
+
+    /** Create initial user configuration */
+    bool initUserConfig();
+    /** Copy from other */
+    void initFrom(const RclConfig& r);
+    /** Init pointers to 0 */
+    void zeroMe();
+    /** Free data then zero pointers */
+    void freeAll();
+    bool readFieldsConfig(const string& errloc);
+};
+
+// This global variable defines if we are running with an index
+// stripped of accents and case or a raw one. Ideally, it should be
+// constant, but it needs to be initialized from the configuration, so
+// there is no way to do this. It never changes after initialization
+// of course. Changing the value on a given index imposes a
+// reset. When using multiple indexes, all must have the same value
+extern bool o_index_stripchars;
+
+#endif /* _RCLCONFIG_H_INCLUDED_ */
diff --git a/src/common/rclinit.cpp b/src/common/rclinit.cpp
new file mode 100644
index 00000000..91b61d7d
--- /dev/null
+++ b/src/common/rclinit.cpp
@@ -0,0 +1,196 @@
+/* Copyright (C) 2004 J.F.Dockes
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+#include "autoconfig.h"
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#if !defined(PUTENV_ARG_CONST)
+#include 
+#endif
+
+#include "debuglog.h"
+#include "rclconfig.h"
+#include "rclinit.h"
+#include "pathut.h"
+#include "unac.h"
+#include "smallut.h"
+#include "execmd.h"
+
+static const int catchedSigs[] = {SIGINT, SIGQUIT, SIGTERM, SIGUSR1, SIGUSR2};
+
+static pthread_t mainthread_id;
+
+static void siglogreopen(int)
+{
+    if (recoll_ismainthread())
+	DebugLog::reopen();
+}
+
+RclConfig *recollinit(RclInitFlags flags, 
+		      void (*cleanup)(void), void (*sigcleanup)(int), 
+		      string &reason, const string *argcnf)
+{
+    if (cleanup)
+	atexit(cleanup);
+
+    // We ignore SIGPIPE always. All pieces of code which can write to a pipe
+    // must check write() return values.
+    signal(SIGPIPE, SIG_IGN);
+    
+    // Make sure the locale is set. This is only for converting file names 
+    // to utf8 for indexing.
+    setlocale(LC_CTYPE, "");
+
+    // We would like to block SIGCHLD globally, but we can't because
+    // QT uses it. Have to block it inside execmd.cpp
+
+    // Install app signal handler
+    if (sigcleanup) {
+	struct sigaction action;
+	action.sa_handler = sigcleanup;
+	action.sa_flags = 0;
+	sigemptyset(&action.sa_mask);
+	for (unsigned int i = 0; i < sizeof(catchedSigs) / sizeof(int); i++)
+	    if (signal(catchedSigs[i], SIG_IGN) != SIG_IGN) {
+		if (sigaction(catchedSigs[i], &action, 0) < 0) {
+		    perror("Sigaction failed");
+		}
+	    }
+    }
+
+    DebugLog::getdbl()->setloglevel(DEBDEB1);
+    DebugLog::setfilename("stderr");
+    RclConfig *config = new RclConfig(argcnf);
+    if (!config || !config->ok()) {
+	reason = "Configuration could not be built:\n";
+	if (config)
+	    reason += config->getReason();
+	else
+	    reason += "Out of memory ?";
+	return 0;
+    }
+
+    // Retrieve the log file name and level
+    string logfilename, loglevel;
+    if (flags & RCLINIT_DAEMON) {
+	config->getConfParam(string("daemlogfilename"), logfilename);
+	config->getConfParam(string("daemloglevel"), loglevel);
+    }
+    if (logfilename.empty())
+	config->getConfParam(string("logfilename"), logfilename);
+    if (loglevel.empty())
+	config->getConfParam(string("loglevel"), loglevel);
+
+    // Initialize logging
+    if (!logfilename.empty()) {
+	logfilename = path_tildexpand(logfilename);
+	// If not an absolute path or , compute relative to config dir
+	if (logfilename.at(0) != '/' && 
+	    !DebugLog::DebugLog::isspecialname(logfilename.c_str())) {
+	    logfilename = path_cat(config->getConfDir(), logfilename);
+	}
+	DebugLog::setfilename(logfilename.c_str());
+    }
+    if (!loglevel.empty()) {
+	int lev = atoi(loglevel.c_str());
+	DebugLog::getdbl()->setloglevel(lev);
+    }
+    // Install log rotate sig handler
+    {
+	struct sigaction action;
+	action.sa_handler = siglogreopen;
+	action.sa_flags = 0;
+	sigemptyset(&action.sa_mask);
+	if (signal(SIGHUP, SIG_IGN) != SIG_IGN) {
+	    if (sigaction(SIGHUP, &action, 0) < 0) {
+		perror("Sigaction failed");
+	    }
+	}
+    }
+
+    // Make sure the locale charset is initialized (so that multiple
+    // threads don't try to do it at once).
+    config->getDefCharset();
+
+    mainthread_id = pthread_self();
+
+    // Init unac locking
+    unac_init_mt();
+    // Init smallut and pathut static values
+    pathut_init_mt();
+    smallut_init_mt();
+
+    // Init Unac translation exceptions
+    string unacex;
+    if (config->getConfParam("unac_except_trans", unacex) && !unacex.empty()) 
+	unac_set_except_translations(unacex.c_str());
+
+#ifndef IDX_THREADS
+    ExecCmd::useVfork(true);
+#else
+    // Keep threads init behind log init, but make sure it's done before
+    // we do the vfork choice !
+    config->initThrConf();
+    bool intern_noThr = config->getThrConf(RclConfig::ThrIntern).first == -1;
+    bool split_noThr =  config->getThrConf(RclConfig::ThrSplit).first == -1;
+    bool write_noThr = config->getThrConf(RclConfig::ThrDbWrite).first == -1;
+    if (intern_noThr && split_noThr && write_noThr) {
+	LOGDEB0(("rclinit: single-threaded execution: use vfork\n"));
+	ExecCmd::useVfork(true);
+    } else {
+	LOGDEB0(("rclinit: multi-threaded execution: do not use vfork\n"));
+	ExecCmd::useVfork(false);
+    }
+#endif
+
+    int flushmb;
+    if (config->getConfParam("idxflushmb", &flushmb) && flushmb > 0) {
+	LOGDEB1(("rclinit: idxflushmb=%d, set XAPIAN_FLUSH_THRESHOLD to 10E6\n",
+		 flushmb));
+	static const char *cp = "XAPIAN_FLUSH_THRESHOLD=1000000";
+#ifdef PUTENV_ARG_CONST
+	::putenv(cp);
+#else
+	::putenv(strdup(cp));
+#endif
+    }
+
+    return config;
+}
+
+// Signals are handled by the main thread. All others should call this routine
+// to block possible signals
+void recoll_threadinit()
+{
+    sigset_t sset;
+    sigemptyset(&sset);
+
+    for (unsigned int i = 0; i < sizeof(catchedSigs) / sizeof(int); i++)
+	sigaddset(&sset, catchedSigs[i]);
+    sigaddset(&sset, SIGHUP);
+    pthread_sigmask(SIG_BLOCK, &sset, 0);
+}
+
+bool recoll_ismainthread()
+{
+    return pthread_equal(pthread_self(), mainthread_id);
+}
+
+
diff --git a/src/common/rclinit.h b/src/common/rclinit.h
new file mode 100644
index 00000000..82916f94
--- /dev/null
+++ b/src/common/rclinit.h
@@ -0,0 +1,60 @@
+/* Copyright (C) 2004 J.F.Dockes
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+#ifndef _RCLINIT_H_INCLUDED_
+#define _RCLINIT_H_INCLUDED_
+
+#include 
+#ifndef NO_NAMESPACES
+using std::string;
+#endif
+
+class RclConfig;
+/**
+ * Initialize by reading configuration, opening log file, etc.
+ * 
+ * This must be called from the main thread before starting any others. It sets
+ * up the global signal handling. other threads must call recoll_threadinit()
+ * when starting.
+ *
+ * @param flags   misc modifiers
+ * @param cleanup function to call before exiting (atexit)
+ * @param sigcleanup function to call on terminal signal (INT/HUP...) This 
+ *       should typically set a flag which tells the program (recoll, 
+ *       recollindex etc.. to exit as soon as possible (after closing the db, 
+ *       etc.). cleanup will then be called by exit().
+ * @param reason in case of error: output string explaining things
+ * @param argcnf Configuration directory name from the command line (overriding
+ *               default and environment
+ * @return the parsed configuration.
+ */
+enum RclInitFlags {RCLINIT_NONE=0, RCLINIT_DAEMON=1};
+extern RclConfig *recollinit(RclInitFlags flags,
+			     void (*cleanup)(void), void (*sigcleanup)(int), 
+			     string &reason, const string *argcnf = 0);
+inline RclConfig *recollinit(void (*cleanup)(void), void (*sigcleanup)(int), 
+			     string &reason, const string *argcnf = 0) {
+    return recollinit(RCLINIT_NONE, cleanup, sigcleanup, reason, argcnf);
+}
+
+// Threads need to call this to block signals.  
+// The main thread handles all signals.
+extern void recoll_threadinit();
+
+// Check if main thread
+extern bool recoll_ismainthread();
+
+#endif /* _RCLINIT_H_INCLUDED_ */
diff --git a/src/common/rclversion.h.in b/src/common/rclversion.h.in
new file mode 100644
index 00000000..4b8fe507
--- /dev/null
+++ b/src/common/rclversion.h.in
@@ -0,0 +1 @@
+static const char *rclversionstr = "@RCLVERSION@";
diff --git a/src/common/textsplit.cpp b/src/common/textsplit.cpp
new file mode 100644
index 00000000..7380c144
--- /dev/null
+++ b/src/common/textsplit.cpp
@@ -0,0 +1,1096 @@
+/* Copyright (C) 2004 J.F.Dockes
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+#ifndef TEST_TEXTSPLIT
+#include "autoconfig.h"
+
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "textsplit.h"
+#include "debuglog.h"
+//#define UTF8ITER_CHECK
+#include "utf8iter.h"
+#include "uproplist.h"
+
+using std::tr1::unordered_set;
+using namespace std;
+
+
+/**
+ * Splitting a text into words. The code in this file works with utf-8
+ * in a semi-clean way (see uproplist.h). Ascii still gets special treatment.
+ */
+
+// Character classes: we have three main groups, and then some chars
+// are their own class because they want special handling.
+// 
+// We have an array with 256 slots where we keep the character types. 
+// The array could be fully static, but we use a small function to fill it 
+// once.
+// The array is actually a remnant of the original version which did no utf8.
+// Only the lower 127 slots are  now used, but keep it at 256
+// because it makes some tests in the code simpler.
+const unsigned int charclasses_size = 256;
+enum CharClass {LETTER=256, SPACE=257, DIGIT=258, WILD=259, 
+                A_ULETTER=260, A_LLETTER=261, SKIP=262};
+static int charclasses[charclasses_size];
+
+// Real UTF-8 characters are handled with sets holding all characters
+// with interesting properties. This is far from full-blown management
+// of Unicode properties, but seems to do the job well enough in most
+// common cases
+static vector vpuncblocks;
+static unordered_set spunc;
+static unordered_set visiblewhite;
+static unordered_set sskip;
+
+class CharClassInit {
+public:
+    CharClassInit() 
+    {
+	unsigned int i;
+
+	// Set default value for all: SPACE
+	for (i = 0 ; i < 256 ; i ++)
+	    charclasses[i] = SPACE;
+
+	char digits[] = "0123456789";
+	for (i = 0; i  < strlen(digits); i++)
+	    charclasses[int(digits[i])] = DIGIT;
+
+	char upper[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+	for (i = 0; i  < strlen(upper); i++)
+	    charclasses[int(upper[i])] = A_ULETTER;
+
+	char lower[] = "abcdefghijklmnopqrstuvwxyz";
+	for (i = 0; i  < strlen(lower); i++)
+	    charclasses[int(lower[i])] = A_LLETTER;
+
+	char wild[] = "*?[]";
+	for (i = 0; i  < strlen(wild); i++)
+	    charclasses[int(wild[i])] = WILD;
+
+	char special[] = ".@+-#'_\n\r\f";
+	for (i = 0; i  < strlen(special); i++)
+	    charclasses[int(special[i])] = special[i];
+
+	for (i = 0; i < sizeof(unipunc) / sizeof(int); i++) {
+	    spunc.insert(unipunc[i]);
+	}
+	spunc.insert((unsigned int)-1);
+
+	for (i = 0; i < sizeof(unipuncblocks) / sizeof(int); i++) {
+	    vpuncblocks.push_back(unipuncblocks[i]);
+	}
+	assert((vpuncblocks.size() % 2) == 0);
+
+	for (i = 0; i < sizeof(avsbwht) / sizeof(int); i++) {
+	    visiblewhite.insert(avsbwht[i]);
+	}
+	for (i = 0; i < sizeof(uniskip) / sizeof(int); i++) {
+	    sskip.insert(uniskip[i]);
+	}
+    }
+};
+static const CharClassInit charClassInitInstance;
+
+static inline int whatcc(unsigned int c)
+{
+    if (c <= 127) {
+	return charclasses[c]; 
+    } else {
+	if (sskip.find(c) != sskip.end()) {
+	    return SKIP;
+	} else if (spunc.find(c) != spunc.end()) {
+	    return SPACE;
+	} else {
+	    vector::iterator it = 
+		lower_bound(vpuncblocks.begin(), vpuncblocks.end(), c);
+	    if (c == *it)
+		return SPACE;
+	    if ((it - vpuncblocks.begin()) % 2 == 1) {
+		return SPACE;
+	    } else {
+		return LETTER;
+	    }
+	} 
+    }
+}
+
+// testing whatcc...
+#if 0
+  unsigned int testvalues[] = {'a', '0', 0x80, 0xbf, 0xc0, 0x05c3, 0x1000, 
+			       0x2000, 0x2001, 0x206e, 0x206f, 0x20d0, 0x2399, 
+			       0x2400, 0x2401, 0x243f, 0x2440, 0xff65};
+  int ntest = sizeof(testvalues) / sizeof(int);
+  for (int i = 0; i < ntest; i++) {
+      int ret = whatcc(testvalues[i]);
+      printf("Tested value 0x%x, returned value %d %s\n",
+	     testvalues[i], ret, ret == LETTER ? "LETTER" : 
+	     ret == SPACE ? "SPACE" : "OTHER");
+  }
+#endif
+
+// CJK Unicode character detection:
+//
+// 2E80..2EFF; CJK Radicals Supplement
+// 3000..303F; CJK Symbols and Punctuation
+// 3040..309F; Hiragana
+// 30A0..30FF; Katakana
+// 3100..312F; Bopomofo
+// 3130..318F; Hangul Compatibility Jamo
+// 3190..319F; Kanbun
+// 31A0..31BF; Bopomofo Extended
+// 31C0..31EF; CJK Strokes
+// 31F0..31FF; Katakana Phonetic Extensions
+// 3200..32FF; Enclosed CJK Letters and Months
+// 3300..33FF; CJK Compatibility
+// 3400..4DBF; CJK Unified Ideographs Extension A
+// 4DC0..4DFF; Yijing Hexagram Symbols
+// 4E00..9FFF; CJK Unified Ideographs
+// A700..A71F; Modifier Tone Letters
+// AC00..D7AF; Hangul Syllables
+// F900..FAFF; CJK Compatibility Ideographs
+// FE30..FE4F; CJK Compatibility Forms
+// FF00..FFEF; Halfwidth and Fullwidth Forms
+// 20000..2A6DF; CJK Unified Ideographs Extension B
+// 2F800..2FA1F; CJK Compatibility Ideographs Supplement
+// Note: the p > 127 test is not necessary, but optimizes away the ascii case
+#define UNICODE_IS_CJK(p)						\
+    ((p) > 127 &&							\
+     (((p) >= 0x2E80 && (p) <= 0x2EFF) ||				\
+      ((p) >= 0x3000 && (p) <= 0x9FFF) ||				\
+      ((p) >= 0xA700 && (p) <= 0xA71F) ||				\
+      ((p) >= 0xAC00 && (p) <= 0xD7AF) ||				\
+      ((p) >= 0xF900 && (p) <= 0xFAFF) ||				\
+      ((p) >= 0xFE30 && (p) <= 0xFE4F) ||				\
+      ((p) >= 0xFF00 && (p) <= 0xFFEF) ||				\
+      ((p) >= 0x20000 && (p) <= 0x2A6DF) ||				\
+      ((p) >= 0x2F800 && (p) <= 0x2FA1F)))
+
+bool TextSplit::isCJK(int c)
+{
+    return UNICODE_IS_CJK(c);
+}
+
+bool          TextSplit::o_processCJK = true;
+unsigned int  TextSplit::o_CJKNgramLen = 2;
+bool          TextSplit::o_noNumbers = false;
+
+// Do some checking (the kind which is simpler to do here than in the
+// main loop), then send term to our client.
+inline bool TextSplit::emitterm(bool isspan, string &w, int pos, 
+				int btstart, int btend)
+{
+    LOGDEB3(("TextSplit::emitterm: [%s] pos %d\n", w.c_str(), pos));
+
+    unsigned int l = w.length();
+
+#ifdef TEXTSPLIT_STATS
+    // Update word length statistics. Do this before we filter out
+    // long words because stats are used to detect bad text
+    if (!isspan || m_wordLen == m_span.length())
+	m_stats.newsamp(m_wordChars);
+#endif
+
+    if (l > 0 && l < (unsigned)m_maxWordLength) {
+	// 1 byte word: we index single ascii letters and digits, but
+	// nothing else. We might want to turn this into a test for a
+	// single utf8 character instead ?
+	if (l == 1) {
+	    unsigned int c = ((unsigned int)w[0]) & 0xff;
+	    if (charclasses[c] != A_ULETTER && charclasses[c] != A_LLETTER && 
+                charclasses[c] != DIGIT &&
+		(!(m_flags & TXTS_KEEPWILD) || charclasses[c] != WILD)
+		) {
+		//cerr << "ERASING single letter term " << c << endl;
+		return true;
+	    }
+	}
+	if (pos != m_prevpos || l != m_prevlen) {
+	    bool ret = takeword(w, pos, btstart, btend);
+	    m_prevpos = pos;
+	    m_prevlen = w.length();
+	    return ret;
+	}
+	LOGDEB2(("TextSplit::emitterm:dup: [%s] pos %d\n", w.c_str(), pos));
+    }
+    return true;
+}
+
+/**
+ * A routine called from different places in text_to_words(), to
+ * adjust the current state of the parser, and call the word
+ * handler/emitter. Emit and reset the current word, possibly emit the current
+ * span (if different). In query mode, words are not emitted, only final spans
+ * 
+ * This is purely for factoring common code from different places in
+ * text_to_words(). 
+ * 
+ * @return true if ok, false for error. Splitting should stop in this case.
+ * @param spanerase Set if the current span is at its end. Reset it.
+ * @param bp        The current BYTE position in the stream
+ * @param spanemit  This is set for intermediate spans: glue char changed.
+ */
+inline bool TextSplit::doemit(bool spanerase, int bp, bool spanemit)
+{
+    LOGDEB2(("TextSplit::doemit: sper %d bp %d spem %d. spp %d wS %d wL %d "
+	     "inn %d span [%s]\n",
+	     spanerase, bp, spanemit, m_spanpos, m_wordStart, m_wordLen,
+	     m_inNumber, m_span.c_str()));
+
+    // Emit span? When splitting for query, we only emit final spans
+    // (spanerase)
+    bool spanemitted = false;
+    if (!(m_flags & TXTS_NOSPANS) && 
+        !((m_wordLen == m_span.length()) && 
+          (o_noNumbers) && m_inNumber) &&
+	((spanemit && !(m_flags & TXTS_ONLYSPANS)) || spanerase) ) {
+
+	// Check for an acronym/abbreviation ie I.B.M.
+	if (spanerase && m_wordLen != m_span.length() && m_span.length() > 2
+	    && m_span.length() <= 20) {
+	    bool acron = true;
+	    for (unsigned int i = 1 ; i < m_span.length(); i += 2) {
+		if (m_span[i] != '.') {
+		    acron = false;
+		    break;
+		}
+	    }
+	    if (acron) {
+		string acronym;
+		for (unsigned int i = 0; i < m_span.length(); i += 2) {
+		    acronym += m_span[i];
+		}
+		if (!emitterm(false, acronym, m_spanpos, bp - m_span.length(), 
+			      bp))
+		    return false;
+	    }
+	} 
+
+	// Maybe trim at end. These are chars that we would keep inside 
+	// a span, but not at the end
+	while (m_span.length() > 0) {
+	    switch (m_span[m_span.length()-1]) {
+	    case '.':
+	    case '-':
+	    case ',':
+	    case '@':
+	    case '_':
+	    case '\'':
+		m_span.resize(m_span.length()-1);
+		if (--bp < 0) 
+		    bp = 0;
+		break;
+	    default:
+		goto breakloop1;
+	    }
+	}
+    breakloop1:
+	spanemitted = true;
+	if (!emitterm(true, m_span, m_spanpos, bp - m_span.length(), bp))
+	    return false;
+    }
+
+    // Emit word if different from span and not 'no words' mode
+    if (!(m_flags & TXTS_ONLYSPANS) && m_wordLen && 
+        !(o_noNumbers && m_inNumber) &&
+	(!spanemitted || m_wordLen != m_span.length())) {
+	string s(m_span.substr(m_wordStart, m_wordLen));
+	if (!emitterm(false, s, m_wordpos, bp - m_wordLen, bp))
+	    return false;
+    }
+
+    // Adjust state
+    if (m_wordLen) {
+	m_wordpos++;
+	m_wordLen = m_wordChars = 0;
+    }
+    if (spanerase) {
+	discardspan();
+    } else {
+	m_wordStart = m_span.length();
+    }
+
+    return true;
+}
+
+void TextSplit::discardspan()
+{
+    m_span.erase();
+    m_spanpos = m_wordpos;
+    m_wordStart = 0;
+    m_wordLen = m_wordChars = 0;
+}
+
+static inline bool isalphanum(int what, unsigned int flgs)
+{
+    return what == A_LLETTER || what == A_ULETTER ||
+	what == DIGIT || what == LETTER ||
+	((flgs & TextSplit::TXTS_KEEPWILD) && what == WILD);
+}
+static inline bool isdigit(int what, unsigned int flgs)
+{
+    return what == DIGIT || ((flgs & TextSplit::TXTS_KEEPWILD) && what == WILD);
+}
+
+#ifdef TEXTSPLIT_STATS
+#define INC_WORDCHARS ++m_wordChars
+#else
+#define INC_WORDCHARS
+#endif
+
+/** 
+ * Splitting a text into terms to be indexed.
+ * We basically emit a word every time we see a separator, but some chars are
+ * handled specially so that special cases, ie, c++ and jfd@recoll.com etc, 
+ * are handled properly,
+ */
+bool TextSplit::text_to_words(const string &in)
+{
+    LOGDEB1(("TextSplit::text_to_words: docjk %d (%d) %s%s%s [%s]\n", 
+	     o_processCJK, o_CJKNgramLen,
+	     m_flags & TXTS_NOSPANS ? " nospans" : "",
+	     m_flags & TXTS_ONLYSPANS ? " onlyspans" : "",
+	     m_flags & TXTS_KEEPWILD ? " keepwild" : "",
+	     in.substr(0,50).c_str()));
+
+    if (in.empty())
+	return true;
+
+    m_span.erase();
+    m_inNumber = false;
+    m_wordStart = m_wordLen = m_wordChars = m_prevpos = m_prevlen = m_wordpos 
+	= m_spanpos = 0;
+    int curspanglue = 0;
+    bool pagepending = false;
+    bool softhyphenpending = false;
+
+    // Running count of non-alphanum chars. Reset when we see one;
+    int nonalnumcnt = 0;
+
+    Utf8Iter it(in);
+
+    for (; !it.eof(); it++) {
+	unsigned int c = *it;
+	nonalnumcnt++;
+
+	if (c == (unsigned int)-1) {
+	    LOGERR(("Textsplit: error occured while scanning UTF-8 string\n"));
+	    return false;
+	}
+
+	if (o_processCJK && UNICODE_IS_CJK(c)) {
+	    // CJK character hit. 
+	    // Do like at EOF with the current non-cjk data.
+	    if (m_wordLen || m_span.length()) {
+		if (!doemit(true, it.getBpos()))
+		    return false;
+	    }
+
+	    // Hand off situation to the cjk routine.
+	    if (!cjk_to_words(&it, &c)) {
+		LOGERR(("Textsplit: scan error in cjk handler\n"));
+		return false;
+	    }
+
+	    // Check for eof, else c contains the first non-cjk
+	    // character after the cjk sequence, just go on.
+	    if (it.eof())
+		break;
+	}
+
+	int cc = whatcc(c);
+	switch (cc) {
+	case SKIP:
+	    // Special-case soft-hyphen. To work, this depends on the
+	    // fact that only SKIP calls "continue" inside the
+	    // switch. All the others will do the softhyphenpending
+	    // reset after the switch
+	    if (c == 0xad) {
+		softhyphenpending = true;
+	    } else {
+		softhyphenpending = false;
+	    }
+	    // Skips the softhyphenpending reset
+	    continue;
+	case DIGIT:
+	    if (m_wordLen == 0)
+		m_inNumber = true;
+	    m_wordLen += it.appendchartostring(m_span);
+	    INC_WORDCHARS;
+	    nonalnumcnt = 0;
+	    break;
+
+	case SPACE:
+	SPACE:
+	    curspanglue = 0;
+	    nonalnumcnt = 0;
+	    if (m_wordLen || m_span.length()) {
+		if (!doemit(true, it.getBpos()))
+		    return false;
+		m_inNumber = false;
+	    }
+	    if (pagepending) {
+		pagepending = false;
+		newpage(m_wordpos);
+	    }
+	    break;
+
+	case WILD:
+	    if (m_flags & TXTS_KEEPWILD)
+		goto NORMALCHAR;
+	    else
+		goto SPACE;
+	    break;
+
+	case '-':
+	case '+':
+	    curspanglue = cc;
+	    if (m_wordLen == 0) {
+		// + or - don't start a term except if this looks like
+		// it's going to be to be a number
+		if (isdigit(whatcc(it[it.getCpos()+1]), m_flags)) {
+		    // -10
+		    m_inNumber = true;
+		    m_wordLen += it.appendchartostring(m_span);
+		    INC_WORDCHARS;
+		} else {
+		    goto SPACE;
+		} 
+	    } else if (m_inNumber && (m_span[m_span.length() - 1] == 'e' ||
+				      m_span[m_span.length() - 1] == 'E')) {
+		if (isdigit(whatcc(it[it.getCpos()+1]), m_flags)) {
+		    m_wordLen += it.appendchartostring(m_span);
+		    INC_WORDCHARS;
+		} else {
+		    goto SPACE;
+		}
+	    } else {
+		goto SPACE;
+	    }
+	    break;
+
+	case '.':
+	{
+	    // Need a little lookahead here. At worse this gets the end null
+	    int nextc = it[it.getCpos()+1];
+	    int nextwhat = whatcc(nextc);
+	    if (m_inNumber) {
+		if (!isdigit(nextwhat, m_flags))
+		    goto SPACE;
+		m_wordLen += it.appendchartostring(m_span);
+		INC_WORDCHARS;
+		curspanglue = cc;
+		break;
+	    } else {
+		// If . inside a word, it's spanglue, else, it's whitespace. 
+		// We also keep an initial '.' for catching .net, but this adds
+		// quite a few spurious terms !
+                // Another problem is that something like .x-errs 
+		// will be split as .x-errs, x, errs but not x-errs
+		// A final comma in a word will be removed by doemit
+
+		// Only letters and digits make sense after
+		if (!isalphanum(nextwhat, m_flags))
+		    goto SPACE;
+
+		if (cc == '.') {
+                    // Check for number like .1
+                    if (m_span.length() == 0 && isdigit(nextwhat, m_flags)) {
+                        m_inNumber = true;
+                        m_wordLen += it.appendchartostring(m_span);
+			INC_WORDCHARS;
+                        curspanglue = cc;
+                        break;
+                    }
+                            
+		    if (m_wordLen) {
+			// Disputable special case: set spanemit to
+			// true when encountering a '.' while spanglue
+			// is '_'. Think of a_b.c Done to
+			// avoid breaking stuff after changing '_'
+			// from wordchar to spanglue
+			if (!doemit(false, it.getBpos(), curspanglue == '_'))
+			    return false;
+			curspanglue = cc;
+			// span length could have been adjusted by trimming
+			// inside doemit
+			if (m_span.length())
+			    m_wordStart += it.appendchartostring(m_span);
+			break;
+		    } else {
+			m_wordStart += it.appendchartostring(m_span);
+			curspanglue = cc;
+			break;
+		    }
+		}
+	    }
+	    goto SPACE;
+	}
+	    break;
+
+	case '@':
+	    if (m_wordLen) {
+		if (!doemit(false, it.getBpos()))
+		    return false;
+		curspanglue = cc;
+		m_inNumber = false;
+		m_wordStart += it.appendchartostring(m_span);
+	    } else {
+		goto SPACE;
+	    }
+	    break;
+	case '_':
+	    if (m_wordLen) {
+		if (!doemit(false, it.getBpos()))
+		    return false;
+		curspanglue = cc;
+		m_inNumber = false;
+	    }
+	    m_wordStart += it.appendchartostring(m_span);
+	    break;
+	case '\'':
+	    // If in word, potential span: o'brien, else, this is more 
+	    // whitespace
+	    if (m_wordLen) {
+		if (!doemit(false, it.getBpos()))
+		    return false;
+		curspanglue = cc;
+		m_inNumber = false;
+		m_wordStart += it.appendchartostring(m_span);
+	    }
+	    break;
+	case '#': 
+	    // Keep it only at end of word ... Special case for c# you see...
+	    if (m_wordLen > 0) {
+		int w = whatcc(it[it.getCpos()+1]);
+		if (w == SPACE || w == '\n' || w == '\r') {
+		    m_wordLen += it.appendchartostring(m_span);
+		    INC_WORDCHARS;
+		    break;
+		}
+	    }
+	    goto SPACE;
+	    break;
+	case '\n':
+	case '\r':
+	    if ((m_span.length() && m_span[m_span.length() - 1] == '-') ||
+		softhyphenpending) {
+		// if '-' is the last char before end of line, just
+		// ignore the line change. This is the right thing to
+		// do almost always. We'd then need a way to check if
+		// the - was added as part of the word hyphenation, or was 
+		// there in the first place, but this would need a dictionary.
+		// Don't reset soft-hyphen
+		continue;
+	    } else {
+		// Handle like a normal separator
+		goto SPACE;
+	    }
+	    break;
+	case '\f':
+	    pagepending = true;
+	    goto SPACE;
+	    break;
+#ifdef RCL_SPLIT_CAMELCASE
+            // Camelcase handling. 
+            // If we get uppercase ascii after lowercase ascii, emit word.
+            // This emits "camel" when hitting the 'C' of camelCase
+            // Not enabled by defaults as this makes phrase searches quite 
+            // confusing. 
+            // ie "MySQL manual" is matched by "MySQL manual" and 
+            // "my sql manual" but not "mysql manual"
+	case A_ULETTER:
+	    if (m_span.length() && 
+                charclasses[(unsigned char)m_span[m_span.length() - 1]] == 
+                A_LLETTER) {
+                if (m_wordLen) {
+                    if (!doemit(false, it.getBpos()))
+                        return false;
+                }
+            }
+            goto NORMALCHAR;
+
+            // CamelCase handling.
+            // If we get lowercase after uppercase and the current
+            // word length is bigger than one, it means we had a
+            // string of several upper-case letters:  an
+            // acronym (readHTML) or a single letter article (ALittleHelp).
+            // Emit the uppercase word before proceeding
+        case A_LLETTER:
+	    if (m_span.length() && 
+                charclasses[(unsigned char)m_span[m_span.length() - 1]] == 
+                A_ULETTER && m_wordLen > 1) {
+                // Multiple upper-case letters. Single letter word
+                // or acronym which we want to emit now
+                m_wordLen--;
+                if (!doemit(false, it.getBpos()))
+                    return false;
+                m_wordStart--;
+                m_wordLen++;
+            }
+            goto NORMALCHAR;
+#endif /* CAMELCASE */
+
+
+	default:
+	NORMALCHAR:
+            if (m_inNumber && c != 'e' && c != 'E') {
+                m_inNumber = false;
+            }
+	    m_wordLen += it.appendchartostring(m_span);
+	    INC_WORDCHARS;
+	    nonalnumcnt = 0;
+	    break;
+	}
+	softhyphenpending = false;
+    }
+    if (m_wordLen || m_span.length()) {
+	if (!doemit(true, it.getBpos()))
+	    return false;
+    }
+    return true;
+}
+
+// Using an utf8iter pointer just to avoid needing its definition in
+// textsplit.h
+//
+// We output ngrams for exemple for char input a b c and ngramlen== 2, 
+// we generate: a ab b bc c as words
+//
+// This is very different from the normal behaviour, so we don't use
+// the doemit() and emitterm() routines
+//
+// The routine is sort of a mess and goes to show that we'd probably
+// be better off converting the whole buffer to utf32 on entry...
+bool TextSplit::cjk_to_words(Utf8Iter *itp, unsigned int *cp)
+{
+    LOGDEB1(("cjk_to_words: m_wordpos %d\n", m_wordpos));
+    Utf8Iter &it = *itp;
+
+    // We use an offset buffer to remember the starts of the utf-8
+    // characters which we still need to use.
+    assert(o_CJKNgramLen < o_CJKMaxNgramLen);
+    unsigned int boffs[o_CJKMaxNgramLen+1];
+
+    // Current number of valid offsets;
+    unsigned int nchars = 0;
+    unsigned int c = 0;
+    for (; !it.eof(); it++) {
+	c = *it;
+	if (!UNICODE_IS_CJK(c)) {
+	    // Return to normal handler
+	    break;
+	}
+	if (whatcc(c) == SPACE) {
+	    // Flush the ngram buffer and go on
+	    nchars = 0;
+	    continue;
+	}
+	if (nchars == o_CJKNgramLen) {
+	    // Offset buffer full, shift it. Might be more efficient
+	    // to have a circular one, but things are complicated
+	    // enough already...
+	    for (unsigned int i = 0; i < nchars-1; i++) {
+		boffs[i] = boffs[i+1];
+	    }
+	}  else {
+	    nchars++;
+	}
+
+	// Take note of byte offset for this character.
+	boffs[nchars-1] = it.getBpos();
+
+	// Output all new ngrams: they begin at each existing position
+	// and end after the new character. onlyspans->only output
+	// maximum words, nospans=> single chars
+	if (!(m_flags & TXTS_ONLYSPANS) || nchars == o_CJKNgramLen) {
+	    unsigned int btend = it.getBpos() + it.getBlen();
+	    unsigned int loopbeg = (m_flags & TXTS_NOSPANS) ? nchars-1 : 0;
+	    unsigned int loopend = (m_flags & TXTS_ONLYSPANS) ? 1 : nchars;
+	    for (unsigned int i = loopbeg; i < loopend; i++) {
+		if (!takeword(it.buffer().substr(boffs[i], 
+						       btend-boffs[i]),
+				m_wordpos - (nchars-i-1), boffs[i], btend)) {
+		    return false;
+		}
+	    }
+
+	    if ((m_flags & TXTS_ONLYSPANS)) {
+		// Only spans: don't overlap: flush buffer
+		nchars = 0;
+	    }
+	}
+	// Increase word position by one, other words are at an
+	// existing position. This could be subject to discussion...
+	m_wordpos++;
+    }
+
+    // If onlyspans is set, there may be things to flush in the buffer
+    // first
+    if ((m_flags & TXTS_ONLYSPANS) && nchars > 0 && nchars != o_CJKNgramLen)  {
+	unsigned int btend = it.getBpos(); // Current char is out
+	if (!takeword(it.buffer().substr(boffs[0], btend-boffs[0]),
+			    m_wordpos - nchars,
+			    boffs[0], btend)) {
+	    return false;
+	}
+    }
+
+    m_span.erase();
+    m_inNumber = false;
+    m_wordStart = m_wordLen = m_wordChars = m_prevpos = m_prevlen = 0;
+    m_spanpos = m_wordpos;
+    *cp = c;
+    return true;
+}
+
+// Specialization for countWords 
+class TextSplitCW : public TextSplit {
+ public:
+    int wcnt;
+    TextSplitCW(Flags flags) : TextSplit(flags), wcnt(0) {}
+    bool takeword(const string &, int, int, int) {
+	wcnt++;
+	return true;
+    }
+};
+
+int TextSplit::countWords(const string& s, TextSplit::Flags flgs)
+{
+    TextSplitCW splitter(flgs);
+    splitter.text_to_words(s);
+    return splitter.wcnt;
+}
+
+bool TextSplit::hasVisibleWhite(const string &in)
+{
+    Utf8Iter it(in);
+    for (; !it.eof(); it++) {
+	unsigned int c = (unsigned char)*it;
+	LOGDEB3(("TextSplit::hasVisibleWhite: testing 0x%04x\n", c));
+	if (c == (unsigned int)-1) {
+	    LOGERR(("hasVisibleWhite: error while scanning UTF-8 string\n"));
+	    return false;
+	}
+	if (visiblewhite.find(c) != visiblewhite.end())
+	    return true;
+    }
+    return false;
+}
+
+template  bool u8stringToStrings(const string &s, T &tokens)
+{
+    Utf8Iter it(s);
+
+    string current;
+    tokens.clear();
+    enum states {SPACE, TOKEN, INQUOTE, ESCAPE};
+    states state = SPACE;
+    for (; !it.eof(); it++) {
+	unsigned int c = *it;
+	if (visiblewhite.find(c) != visiblewhite.end()) 
+	    c = ' ';
+	LOGDEB3(("TextSplit::stringToStrings: 0x%04x\n", c));
+	if (c == (unsigned int)-1) {
+	    LOGERR(("TextSplit::stringToStrings: error while "
+		    "scanning UTF-8 string\n"));
+	    return false;
+	}
+
+	switch (c) {
+	    case '"': 
+	    switch(state) {
+	    case SPACE: state = INQUOTE; continue;
+	    case TOKEN: goto push_char;
+	    case ESCAPE: state = INQUOTE; goto push_char;
+	    case INQUOTE: tokens.push_back(current);current.clear();
+		state = SPACE; continue;
+	    }
+	    break;
+	    case '\\': 
+	    switch(state) {
+	    case SPACE: 
+	    case TOKEN: state=TOKEN; goto push_char;
+	    case INQUOTE: state = ESCAPE; continue;
+	    case ESCAPE: state = INQUOTE; goto push_char;
+	    }
+	    break;
+
+	    case ' ': 
+	    case '\t': 
+	    case '\n': 
+	    case '\r': 
+	    switch(state) {
+	      case SPACE: continue;
+	      case TOKEN: tokens.push_back(current); current.clear();
+		state = SPACE; continue; 
+	    case INQUOTE: 
+	    case ESCAPE: goto push_char;
+	    }
+	    break;
+
+	    default:
+	    switch(state) {
+	      case ESCAPE: state = INQUOTE; break;
+	      case SPACE:  state = TOKEN;  break;
+	      case TOKEN: 
+	      case INQUOTE: break;
+	    }
+	push_char:
+	    it.appendchartostring(current);
+	}
+    }
+
+    // End of string. Process residue, and possible error (unfinished quote)
+    switch(state) {
+    case SPACE: break;
+    case TOKEN: tokens.push_back(current); break;
+    case INQUOTE: 
+    case ESCAPE: return false;
+    }
+    return true;
+}
+
+bool TextSplit::stringToStrings(const string &s, vector &tokens)
+{
+    return u8stringToStrings >(s, tokens);
+}
+
+#else  // TEST driver ->
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+#include "textsplit.h"
+#include "readfile.h"
+#include "debuglog.h"
+#include "transcode.h"
+#include "unacpp.h"
+#include "termproc.h"
+
+using namespace std;
+
+class myTermProc : public Rcl::TermProc {
+    int first;
+    bool nooutput;
+public:
+    myTermProc() : TermProc(0), first(1), nooutput(false) {}
+    void setNoOut(bool val) {nooutput = val;}
+    virtual bool takeword(const string &term, int pos, int bs, int be)
+    {
+	if (nooutput)
+	    return true;
+	FILE *fp = stdout;
+	if (first) {
+	    fprintf(fp, "%3s %-20s %4s %4s\n", "pos", "Term", "bs", "be");
+	    first = 0;
+	}
+	fprintf(fp, "%3d %-20s %4d %4d\n", pos, term.c_str(), bs, be);
+	return true;
+    }
+};
+
+static string teststring = 
+	    "Un bout de texte \nnormal. 2eme phrase.3eme;quatrieme.\n"
+	    "\"Jean-Francois Dockes\" \n"
+	    "n@d @net .net t@v@c c# c++ o'brien 'o'brien' l'ami\n"
+            "data123\n"
+	    "134 +134 -14 0.1 .1 2. -1.5 +1.5 1,2 1.54e10 1,2e30 .1e10 1.e-8\n"
+	    "@^#$(#$(*)\n"
+	    "192.168.4.1 one\n\rtwo\r"
+	    "Debut-\ncontinue\n" 
+	    "[olala][ululu]  (valeur) (23)\n"
+	    "utf-8 ucs-4© \\nodef\n"
+            "A b C 2 . +"
+	    "','this\n"
+	    " ,able,test-domain "
+	    " -wl,--export-dynamic "
+	    " ~/.xsession-errors "
+    "soft\xc2\xadhyphen "
+    "soft\xc2\xad\nhyphen "
+    "soft\xc2\xad\n\rhyphen "
+    "hard-\nhyphen "
+;
+
+static string teststring1 = " nouvel-an ";
+
+static string thisprog;
+
+static string usage =
+    " textsplit [opts] [filename]\n"
+    "   -q : no output\n"
+    "   -s :  only spans\n"
+    "   -w :  only words\n"
+    "   -n :  no numbers\n"
+    "   -k :  preserve wildcards (?*)\n"
+    "   -c : just count words\n"
+    "   -u : use unac\n"
+    "   -C [charset] : input charset\n"
+    "   -S [stopfile] : stopfile to use for commongrams\n"
+    " if filename is 'stdin', will read stdin for data (end with ^D)\n"
+    "  \n\n"
+    ;
+
+static void
+Usage(void)
+{
+    cerr << thisprog  << ": usage:\n" << usage;
+    exit(1);
+}
+
+static int        op_flags;
+#define OPT_s	  0x1 
+#define OPT_w	  0x2
+#define OPT_q	  0x4
+#define OPT_c     0x8
+#define OPT_k     0x10
+#define OPT_C     0x20
+#define OPT_n     0x40
+#define OPT_S     0x80
+#define OPT_u     0x100
+
+int main(int argc, char **argv)
+{
+    string charset, stopfile;
+
+    thisprog = argv[0];
+    argc--; argv++;
+
+    while (argc > 0 && **argv == '-') {
+	(*argv)++;
+	if (!(**argv))
+	    /* Cas du "adb - core" */
+	    Usage();
+	while (**argv)
+	    switch (*(*argv)++) {
+	    case 'c':	op_flags |= OPT_c; break;
+            case 'C':	op_flags |= OPT_C; if (argc < 2)  Usage();
+                charset = *(++argv); argc--; 
+                goto b1;
+	    case 'k':	op_flags |= OPT_k; break;
+	    case 'n':	op_flags |= OPT_n; break;
+	    case 'q':	op_flags |= OPT_q; break;
+	    case 's':	op_flags |= OPT_s; break;
+            case 'S':	op_flags |= OPT_S; if (argc < 2)  Usage();
+                stopfile = *(++argv); argc--; 
+                goto b1;
+	    case 'u':	op_flags |= OPT_u; break;
+	    case 'w':	op_flags |= OPT_w; break;
+	    default: Usage();	break;
+	    }
+    b1: argc--; argv++;
+    }
+    DebugLog::getdbl()->setloglevel(DEBDEB1);
+    DebugLog::setfilename("stderr");
+
+    TextSplit::Flags flags = TextSplit::TXTS_NONE;
+
+    if (op_flags&OPT_s)
+	flags = TextSplit::TXTS_ONLYSPANS;
+    else if (op_flags&OPT_w)
+	flags = TextSplit::TXTS_NOSPANS;
+    if (op_flags & OPT_k) 
+	flags = (TextSplit::Flags)(flags | TextSplit::TXTS_KEEPWILD); 
+    if (op_flags & OPT_n)
+	TextSplit::noNumbers();
+
+    Rcl::StopList stoplist;
+    if (op_flags & OPT_S) {
+	if (!stoplist.setFile(stopfile)) {
+	    cerr << "Can't read stopfile: " << stopfile << endl;
+	    exit(1);
+	}
+    }
+    string odata, reason;
+    if (argc == 1) {
+	const char *filename = *argv++;	argc--;
+	if (!strcmp(filename, "stdin")) {
+	    char buf[1024];
+	    int nread;
+	    while ((nread = read(0, buf, 1024)) > 0) {
+		odata.append(buf, nread);
+	    }
+	} else if (!file_to_string(filename, odata, &reason)) {
+            cerr << "Failed: file_to_string(" << filename << ") failed: " 
+                 << reason << endl;
+	    exit(1);
+        }
+    } else {
+	cout << endl << teststring << endl << endl;  
+	odata = teststring;
+    }
+    string& data = odata;
+    string ndata;
+    if ((op_flags & OPT_C)) {
+        if (!transcode(odata, ndata, charset, "UTF-8")) {
+            cerr << "Failed: transcode error" << endl;
+            exit(1);
+        } else {
+            data = ndata;
+        }
+    }
+
+    if (op_flags & OPT_c) {
+	int n = TextSplit::countWords(data, flags);
+	cout << n << " words" << endl;
+    } else {
+	myTermProc printproc;
+
+	Rcl::TermProc *nxt = &printproc;
+
+	Rcl::TermProcCommongrams commonproc(nxt, stoplist);
+	if (op_flags & OPT_S)
+	    nxt = &commonproc;
+
+	Rcl::TermProcPrep preproc(nxt);
+	if (op_flags & OPT_u) 
+	    nxt = &preproc;
+
+	Rcl::TextSplitP splitter(nxt, flags);
+
+        if (op_flags & OPT_q)
+            printproc.setNoOut(true);
+
+	splitter.text_to_words(data);
+#ifdef TEXTSPLIT_STATS
+	TextSplit::Stats::Values v = splitter.getStats();
+	cout << "Average length: " 
+	     <<  v.avglen
+	     << " Standard deviation: " 
+	     << v.sigma
+	     << " Coef of variation "
+	     << v.sigma / v.avglen
+	     << endl;
+#endif
+    }    
+}
+#endif // TEST
diff --git a/src/common/textsplit.h b/src/common/textsplit.h
new file mode 100644
index 00000000..fd30ea9a
--- /dev/null
+++ b/src/common/textsplit.h
@@ -0,0 +1,214 @@
+/* Copyright (C) 2004 J.F.Dockes
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+#ifndef _TEXTSPLIT_H_INCLUDED_
+#define _TEXTSPLIT_H_INCLUDED_
+
+#include 
+
+#include 
+#include 
+
+using std::string;
+using std::vector;
+
+class Utf8Iter;
+
+/** 
+ * Split text into words. 
+ * See comments at top of .cpp for more explanations.
+ * This uses a callback function. It could be done with an iterator instead,
+ * but 'ts much simpler this way...
+ */
+class TextSplit {
+public:
+    // Should we activate special processing of Chinese characters ? This
+    // needs a little more cpu, so it can be turned off globally. This is set
+    // by rclconfig, changing it means reindexing
+    static bool o_processCJK;
+    static unsigned int  o_CJKNgramLen;
+    static const unsigned int o_CJKMaxNgramLen =  5;
+    static void cjkProcessing(bool onoff, unsigned int ngramlen = 2) 
+    {
+	o_processCJK = onoff;
+	o_CJKNgramLen = ngramlen <= o_CJKMaxNgramLen ? 
+	    ngramlen : o_CJKMaxNgramLen;
+    }
+
+    // Are we indexing numbers ? Set by rclconfig. Change needs reindex
+    static bool o_noNumbers;
+    static void noNumbers()
+    {
+	o_noNumbers = true;
+    }
+
+    enum Flags {TXTS_NONE = 0, 
+		TXTS_ONLYSPANS = 1,  // Only return maximum spans (a@b.com) 
+		TXTS_NOSPANS = 2,  // Only return atomic words (a, b, com)
+		TXTS_KEEPWILD = 4 // Handle wildcards as letters
+    };
+
+    
+    TextSplit(Flags flags = Flags(TXTS_NONE))
+	: m_flags(flags), m_maxWordLength(40), m_prevpos(-1)
+    {
+    }
+    virtual ~TextSplit() {}
+
+    virtual void setMaxWordLength(int l)
+    {
+	m_maxWordLength = l;
+    }
+    /** Split text, emit words and positions. */
+    virtual bool text_to_words(const string &in);
+
+    /** Process one output word: to be implemented by the actual user class */
+    virtual bool takeword(const string& term, 
+			  int pos,  // term pos
+			  int bts,  // byte offset of first char in term
+			  int bte   // byte offset of first char after term
+			  ) = 0; 
+
+    /** Called when we encounter formfeed \f 0x0c. Override to use the event.
+     * Mostly or exclusively used with pdftoxx output. Other filters mostly 
+     * just don't know about pages. */
+    virtual void newpage(int /*pos*/)
+    {
+    }
+
+    // Static utility functions:
+
+    /** Count words in string, as the splitter would generate them */
+    static int countWords(const string &in, Flags flgs = TXTS_ONLYSPANS);
+
+    /** Check if this is visibly not a single block of text */
+    static bool hasVisibleWhite(const string &in);
+
+    /** Split text span into strings, at white space, allowing for substrings
+     * quoted with " . Escaping with \ works as usual inside the quoted areas.
+     * This has to be kept separate from smallut.cpp's stringsToStrings, which
+     * basically works only if whitespace is ascii, and which processes 
+     * non-utf-8 input (iso-8859 config files work ok). This hopefully
+     * handles all Unicode whitespace, but needs correct utf-8 input
+     */
+    static bool stringToStrings(const string &s, vector &tokens);
+
+    /** Is char CJK ? */
+    static bool isCJK(int c);
+
+    /** Statistics about word length (average and dispersion) can
+     * detect bad data like undecoded base64 or other mis-identified
+     * pieces of data taken as text. In practise, this keeps some junk out 
+     * of the index, but does not decrease the index size much, and is
+     * probably not worth the trouble in general. Code kept because it
+     * probably can be useful in special cases. Base64 data does has
+     * word separators in it (+/) and is characterised by high average
+     * word length (>10, often close to 20) and high word length
+     * dispersion (avg/sigma > 0.8). In my tests, most natural
+     * language text has average word lengths around 5-8 and avg/sigma
+     * < 0.7
+     */
+#ifdef TEXTSPLIT_STATS
+    class Stats {
+    public:
+	Stats()
+	{
+	    reset();
+	}
+	void reset()
+	{
+	    count = 0;
+	    totlen = 0;
+	    sigma_acc = 0;
+	}
+	void newsamp(unsigned int len)
+	{
+	    ++count;
+	    totlen += len;
+	    double avglen = double(totlen) / double(count);
+	    sigma_acc += (avglen - len) * (avglen - len);
+	}
+	struct Values {
+	    int count;
+	    double avglen;
+	    double sigma;
+	};
+	Values get()
+	{
+	    Values v;
+	    v.count = count;
+	    v.avglen = double(totlen) / double(count);
+	    v.sigma = sqrt(sigma_acc / count);
+	    return v;
+	}
+    private:
+	int count;
+	int totlen;
+	double sigma_acc;
+    };
+
+    Stats::Values getStats()
+    {
+	return m_stats.get();
+    }
+    void resetStats()
+    {
+	m_stats.reset();
+    }
+#endif // TEXTSPLIT_STATS
+
+private:
+    Flags         m_flags;
+    int           m_maxWordLength;
+
+    // Current span. Might be jf.dockes@wanadoo.f
+    string        m_span; 
+
+    // Current word: no punctuation at all in there. Byte offset
+    // relative to the current span and byte length
+    int           m_wordStart;
+    unsigned int  m_wordLen;
+
+    // Currently inside number
+    bool          m_inNumber;
+
+    // Term position of current word and span
+    int           m_wordpos; 
+    int           m_spanpos;
+
+    // It may happen that our cleanup would result in emitting the
+    // same term twice. We try to avoid this
+    int           m_prevpos;
+    unsigned int  m_prevlen;
+
+#ifdef TEXTSPLIT_STATS
+    // Stats counters. These are processed in TextSplit rather than by a 
+    // TermProc so that we can take very long words (not emitted) into
+    // account.
+    Stats         m_stats;
+#endif
+    // Word length in characters. Declared but not updated if !TEXTSPLIT_STATS
+    unsigned int  m_wordChars;
+
+    // This processes cjk text:
+    bool cjk_to_words(Utf8Iter *it, unsigned int *cp);
+
+    bool emitterm(bool isspan, string &term, int pos, int bs, int be);
+    bool doemit(bool spanerase, int bp, bool spanemit=false);
+    void discardspan();
+};
+
+#endif /* _TEXTSPLIT_H_INCLUDED_ */
diff --git a/src/common/unacpp.cpp b/src/common/unacpp.cpp
new file mode 100644
index 00000000..837786de
--- /dev/null
+++ b/src/common/unacpp.cpp
@@ -0,0 +1,249 @@
+/* Copyright (C) 2004 J.F.Dockes
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef TEST_UNACPP
+#include 
+#include 
+#include 
+
+#include 
+
+#include "unacpp.h"
+#include "unac.h"
+#include "debuglog.h"
+#include "utf8iter.h"
+
+bool unacmaybefold(const string &in, string &out, 
+		   const char *encoding, UnacOp what)
+{
+    char *cout = 0;
+    size_t out_len;
+    int status = -1;
+
+    switch (what) {
+    case UNACOP_UNAC:
+	status = unac_string(encoding, in.c_str(), in.length(), 
+			     &cout, &out_len);
+	break;
+    case UNACOP_UNACFOLD:
+	status = unacfold_string(encoding, in.c_str(), in.length(), 
+				 &cout, &out_len);
+	break;
+    case UNACOP_FOLD:
+	status = fold_string(encoding, in.c_str(), in.length(), 
+			     &cout, &out_len);
+	break;
+    }
+
+    if (status < 0) {
+	if (cout)
+	    free(cout);
+	char cerrno[20];
+	sprintf(cerrno, "%d", errno);
+	out = string("unac_string failed, errno : ") + cerrno;
+	return false;
+    }
+    out.assign(cout, out_len);
+    if (cout)
+	free(cout);
+    return true;
+}
+
+// Functions to determine upper-case or accented status could be implemented
+// hugely more efficiently inside the unac c code, but there only used for
+// testing user-entered terms, so we don't really care.
+bool unaciscapital(const string& in)
+{
+    LOGDEB2(("unaciscapital: [%s]\n", in.c_str()));
+    if (in.empty())
+	return false;
+    Utf8Iter it(in);
+    string shorter;
+    it.appendchartostring(shorter);
+
+    string lower;
+    if (!unacmaybefold(shorter, lower, "UTF-8", UNACOP_FOLD)) {
+	LOGINFO(("unaciscapital: unac/fold failed for [%s]\n", in.c_str()));
+	return false;
+    } 
+    Utf8Iter it1(lower);
+    if (*it != *it1)
+	return true;
+    else
+	return false;
+}
+bool unachasuppercase(const string& in)
+{
+    LOGDEB2(("unachasuppercase: [%s]\n", in.c_str()));
+    if (in.empty())
+	return false;
+
+    string lower;
+    if (!unacmaybefold(in, lower, "UTF-8", UNACOP_FOLD)) {
+	LOGINFO(("unachasuppercase: unac/fold failed for [%s]\n", in.c_str()));
+	return false;
+    } 
+    if (lower != in)
+	return true;
+    else
+	return false;
+}
+bool unachasaccents(const string& in)
+{
+    LOGDEB2(("unachasaccents: [%s]\n", in.c_str()));
+    if (in.empty())
+	return false;
+
+    string noac;
+    if (!unacmaybefold(in, noac, "UTF-8", UNACOP_UNAC)) {
+	LOGINFO(("unachasaccents: unac/unac failed for [%s]\n", in.c_str()));
+	return false;
+    } 
+    if (noac != in)
+	return true;
+    else
+	return false;
+}
+
+#else // not testing
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+using namespace std;
+
+#include "unacpp.h"
+#include "readfile.h"
+#include "rclinit.h"
+
+static char *thisprog;
+
+static char usage [] = "\n"
+    "[-c|-C]   \n"
+    "   Default : unaccent\n"
+    "   -c : unaccent and casefold\n"
+    "   -C : casefold only\n"
+    "-t  test string as capitalized, upper-case anywhere, accents\n"
+    "   the parameter is supposedly utf-8 so this can only work in an utf-8\n"
+    "   locale\n"
+    "\n";
+;
+
+static void
+Usage(void)
+{
+    fprintf(stderr, "%s: usage: %s\n", thisprog, usage);
+    exit(1);
+}
+
+static int     op_flags;
+#define OPT_c	  0x2 
+#define OPT_C	  0x4 
+#define OPT_t     0x8
+
+int main(int argc, char **argv)
+{
+    UnacOp op = UNACOP_UNAC;
+
+    thisprog = argv[0];
+    argc--; argv++;
+
+    while (argc > 0 && **argv == '-') {
+	(*argv)++;
+	if (!(**argv))
+	    /* Cas du "adb - core" */
+	    Usage();
+	while (**argv)
+	    switch (*(*argv)++) {
+	    case 'c':	op_flags |= OPT_c; break;
+	    case 'C':	op_flags |= OPT_C; break;
+	    case 't':	op_flags |= OPT_t; break;
+	    default: Usage();	break;
+	    }
+	argc--; argv++;
+    }
+
+    if (op_flags & OPT_t) {
+	if (argc != 1)
+	    Usage();
+	string in = *argv++;argc--;
+	bool capital, upper, accent;
+	capital = unaciscapital(in);
+	upper = unachasuppercase(in);
+	accent = unachasaccents(in);
+	cout << "[" << in << "] : " << 
+	    "capitalized: " << (capital ? "Yes. " : "No. ") <<
+	    "has uppercase: " << (upper ? "Yes. " : "No. ") <<
+	    "has accents: " << (accent ? "Yes. " : "No. ") << 
+	    endl;
+	return 0;
+    } else {
+	if (argc != 3)
+	    Usage();
+	if (op_flags & OPT_c) {
+	    op = UNACOP_UNACFOLD;
+	} else if (op_flags & OPT_C) {
+	    op = UNACOP_FOLD;
+	}
+
+	const char *encoding = *argv++; argc--;
+	string ifn = *argv++; argc--;
+	if (!ifn.compare("stdin"))
+	    ifn.clear();
+	const char *ofn = *argv++; argc--;
+
+	string reason;
+	(void)recollinit(RCLINIT_NONE, 0, 0, reason, 0);
+
+	string odata;
+	if (!file_to_string(ifn, odata)) {
+	    cerr << "file_to_string " << ifn << " : " << odata << endl;
+	    return 1;
+	}
+	string ndata;
+	if (!unacmaybefold(odata, ndata, encoding, op)) {
+	    cerr << "unac: " << ndata << endl;
+	    return 1;
+	}
+    
+	int fd;
+	if (strcmp(ofn, "stdout")) {
+	    fd = open(ofn, O_CREAT|O_EXCL|O_WRONLY, 0666);
+	} else {
+	    fd = 1;
+	}
+	if (fd < 0) {
+	    cerr << "Open/Create " << ofn << " failed: " << strerror(errno) 
+		 << endl;
+	    return 1;
+	}
+	if (write(fd, ndata.c_str(), ndata.length()) != (int)ndata.length()) {
+	    cerr << "Write(2) failed: " << strerror(errno)  << endl;
+	    return 1;
+	}
+	close(fd);
+	return 0;
+    }
+}
+
+#endif
diff --git a/src/common/unacpp.h b/src/common/unacpp.h
new file mode 100644
index 00000000..643b6ad3
--- /dev/null
+++ b/src/common/unacpp.h
@@ -0,0 +1,40 @@
+/* Copyright (C) 2004 J.F.Dockes
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+#ifndef _UNACPP_H_INCLUDED_
+#define _UNACPP_H_INCLUDED_
+
+#include 
+
+#ifndef NO_NAMESPACES
+using std::string;
+#endif /* NO_NAMESPACES */
+
+// A small stringified wrapper for unac.c
+enum UnacOp {UNACOP_UNAC = 1, UNACOP_FOLD = 2, UNACOP_UNACFOLD = 3};
+extern bool unacmaybefold(const string& in, string& out, 
+			  const char *encoding, UnacOp what);
+
+// Utility function to determine if string begins with capital
+extern bool unaciscapital(const string& in);
+// Utility function to determine if string has upper-case anywhere
+extern bool unachasuppercase(const string& in);
+// Utility function to determine if any character is accented. This
+// approprialey ignores the characters from unac_except_chars which
+// are really separate letters
+extern bool unachasaccents(const string& in);
+
+#endif /* _UNACPP_H_INCLUDED_ */
diff --git a/src/common/uproplist.h b/src/common/uproplist.h
new file mode 100644
index 00000000..84267e26
--- /dev/null
+++ b/src/common/uproplist.h
@@ -0,0 +1,200 @@
+/* Copyright (C) 2004 J.F.Dockes
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+#ifndef _PROPLIST_H_INCLUDED_
+#define _PROPLIST_H_INCLUDED_
+
+
+/** 
+ * A subset of Unicode chars that we consider word breaks when we
+ * split text in words. 
+ *
+ * This is used as a quick fix to the ascii-based code, and is not correct.
+ * the correct way would be to do what http://www.unicode.org/reports/tr29/ 
+ * says. 
+*/
+
+// Punctuation chararacters blocks array.  Each block is defined by a
+// starting and ending code point (both included). MUST BE SORTED.
+static const unsigned unipuncblocks[] = {
+    // Start of latin-1 supplement block, up to capital A grave
+    0x0080, 0x00BF,
+    // General punctuation
+    0x2000, 0x206F,
+    // Superscripts and subscripts
+    0x2070, 0x209F,
+    // Currency symbols
+    0x20A0, 0x20CF,
+    // Letterlike symbols
+    0x2100, 0x214f,
+    // Number forms
+    0x2150, 0x218F,
+    // Arrows
+    0x2190, 0x21FF,
+    // Mathematical Operators
+    0x2200, 0x22FF,
+    // Miscellaneous Technical
+    0x2300, 0x23FF,
+    // Control Pictures
+    0x2400, 0x243F,
+    // Optical Character Recognition
+    0x2440, 0x245F,
+    // Enclosed Alphanumerics
+    0x2460, 0x24FF,
+    // Box Drawing
+    0x2500, 0x257F,
+    // Block Elements
+    0x2580, 0x259F,
+    // Geometric Shapes
+    0x25A0, 0x25FF,
+    // Miscellaneous Symbols
+    0x2600, 0x26FF,
+    // Dingbats
+    0x2700, 0x27BF,
+    // Miscellaneous Mathematical Symbols-A 	
+    0x27C0, 0x27EF,
+    // Supplemental Arrows-A
+    0x27F0, 0x27FF,
+    // Supplemental Arrows-B
+    0x2900, 0x297F,
+    // Miscellaneous Mathematical Symbols-B 	
+    0x2980,  0x29FF,
+    // Supplemental Mathematical Operators
+    0x2A00, 0x2AFF,
+    // Miscellaneous Symbols and Arrows
+    0x2B00, 0x2BFF,
+};
+
+// Other punctuation characters list. Not all punctuation is in a
+// separate block some is found in the middle of alphanumeric codes.
+static const unsigned int unipunc[] = {
+    0x00D7, /* MULTIPLICATION SIGN */
+    0x00F7, /* DIVISION SIGN */
+    0x037E, /* GREEK QUESTION MARK */
+    0x0387, /* GREEK ANO TELEIA */
+    0x055C, /* ARMENIAN EXCLAMATION MARK */
+    0x055E, /* ARMENIAN QUESTION MARK */
+    0x0589, /* ARMENIAN FULL STOP */
+    0x058A, /* ARMENIAN HYPHEN */
+    0x05C3, /* HEBREW PUNCTUATION SOF PASUQ */
+    0x060C, /* ARABIC COMMA */
+    0x061B, /* ARABIC SEMICOLON */
+    0x061F, /* ARABIC QUESTION MARK */
+    0x06D4, /* ARABIC FULL STOP */
+    0x166E, /* CANADIAN SYLLABICS FULL STOP */
+    0x1680, /* OGHAM SPACE MARK */
+    0x16EB, /* RUNIC SINGLE PUNCTUATION */
+    0x16EC, /* RUNIC MULTIPLE PUNCTUATION */
+    0x16ED, /* RUNIC CROSS PUNCTUATION */
+    0x1803, /* MONGOLIAN FULL STOP */
+    0x1806, /* MONGOLIAN TODO SOFT HYPHEN */
+    0x1809, /* MONGOLIAN MANCHU FULL STOP */
+    0x180E, /* MONGOLIAN VOWEL SEPARATOR */
+    0x2E2E, /* REVERSED QUESTION MARK;Po;0;ON;;;;;N;;;;; */
+    0x3000, /* IDEOGRAPHIC SPACE*/
+    0x3002, /* IDEOGRAPHIC FULL STOP*/
+    0x300C, /* LEFT CORNER BRACKET*/
+    0x300D, /* RIGHT CORNER BRACKET*/
+    0x300E, /* LEFT WHITE CORNER BRACKET*/
+    0x300F, /* RIGHT WHITE CORNER BRACKET*/
+    0x301C, /* WAVE DASH*/
+    0x301D, /* REVERSED DOUBLE PRIME QUOTATION MARK*/
+    0x301E, /* LOW DOUBLE PRIME QUOTATION MARK*/
+    0x3030, /* WAVY DASH*/
+    0x30FB, /* KATAKANA MIDDLE DOT*/
+    0xC2B6, /* PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;; */
+    0xC3B7, /* DIVISION SIGN;Sm;0;ON;;;;;N;;;;; */
+    0xFE31, /* PRESENTATION FORM FOR VERTICAL EM DASH*/
+    0xFE32, /* PRESENTATION FORM FOR VERTICAL EN DASH*/
+    0xFE41, /* PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET*/
+    0xFE42, /* PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET*/
+    0xFE43, /* PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET*/
+    0xFE44, /* PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET*/
+    0xFE50, /* [3] SMALL COMMA..SMALL FULL STOP*/
+    0xFE51, /* [3] SMALL COMMA..SMALL FULL STOP*/
+    0xFE52, /* STOP*/
+    0xFE52, /* [3] SMALL COMMA..SMALL FULL STOP*/
+    0xFE54, /* [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK*/
+    0xFE55, /* [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK*/
+    0xFE56, /* [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK*/
+    0xFE57, /* [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK*/
+    0xFE58, /* SMALL EM DASH */
+    0xFE63, /* SMALL HYPHEN-MINUS */
+    0xFF01, /* FULLWIDTH EXCLAMATION MARK */
+    0xFF02, /* FULLWIDTH QUOTATION MARK */
+    0xFF03, /* FULLWIDTH NUMBER SIGN */
+    0xFF04, /* FULLWIDTH DOLLAR SIGN */
+    0xFF05, /* FULLWIDTH PERCENT SIGN */
+    0xFF06, /* FULLWIDTH AMPERSAND */
+    0xFF07, /* FULLWIDTH APOSTROPHE */
+    0xFF08, /* FULLWIDTH LEFT PARENTHESIS */
+    0xFF09, /* FULLWIDTH RIGHT PARENTHESIS */
+    0xFF0A, /* FULLWIDTH ASTERISK */
+    0xFF0B, /* FULLWIDTH PLUS SIGN */
+    0xFF0C, /* FULLWIDTH COMMA */
+    0xFF0D, /* FULLWIDTH HYPHEN-MINUS */
+    0xFF0E, /* FULLWIDTH FULL STOP */
+    0xFF0F, /* FULLWIDTH SOLIDUS  */
+    0xFF1A, /* [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON*/
+    0xFF1B, /* [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON*/
+    0xFF1F, /* FULLWIDTH QUESTION MARK*/
+    0xFF61, /* HALFWIDTH IDEOGRAPHIC FULL STOP*/
+    0xFF62, /* HALFWIDTH LEFT CORNER BRACKET*/
+    0xFF63, /* HALFWIDTH RIGHT CORNER BRACKET*/
+    0xFF64, /* HALFWIDTH IDEOGRAPHIC COMMA*/
+    0xFF65, /* HALFWIDTH KATAKANA MIDDLE DOT*/
+};
+
+// Characters that should just be discarded. Some of these are in the
+// above blocks, but this array is tested first, so it's not worth
+// breaking the blocks
+static const unsigned int uniskip[] = {
+    0x00AD, /* SOFT HYPHEN */
+    0x034F, /* COMBINING GRAPHEME JOINER */
+    0x2027, /* HYPHENATION POINT */
+    0x200C, /* ZERO WIDTH NON-JOINER */
+    0x200D, /* ZERO WIDTH JOINER */
+    0x2060, /* WORD JOINER . Actually this should not be ignored but used to 
+	     * prevent a word break... */
+};
+
+/* Things that would visibly break a block of text, rendering obvious the need
+ * of quotation if a phrase search is wanted */
+static const unsigned int avsbwht[] = {
+    0x0009, /* CHARACTER TABULATION */
+    0x000A, /* LINE FEED */
+    0x000D, /* CARRIAGE RETURN */
+    0x0020, /* SPACE;Zs;0;WS */
+    0x00A0, /* NO-BREAK SPACE;Zs;0;CS */
+    0x1680, /* OGHAM SPACE MARK;Zs;0;WS */
+    0x180E, /* MONGOLIAN VOWEL SEPARATOR;Zs;0;WS */
+    0x2000, /* EN QUAD;Zs;0;WS */
+    0x2001, /* EM QUAD;Zs;0;WS */
+    0x2002, /* EN SPACE;Zs;0;WS */
+    0x2003, /* EM SPACE;Zs;0;WS */
+    0x2004, /* THREE-PER-EM SPACE;Zs;0;WS */
+    0x2005, /* FOUR-PER-EM SPACE;Zs;0;WS */
+    0x2006, /* SIX-PER-EM SPACE;Zs;0;WS */
+    0x2007, /* FIGURE SPACE;Zs;0;WS */
+    0x2008, /* PUNCTUATION SPACE;Zs;0;WS */
+    0x2009, /* THIN SPACE;Zs;0;WS */
+    0x200A, /* HAIR SPACE;Zs;0;WS */
+    0x202F, /* NARROW NO-BREAK SPACE;Zs;0;CS */
+    0x205F, /* MEDIUM MATHEMATICAL SPACE;Zs;0;WS */
+    0x3000, /* IDEOGRAPHIC SPACE;Zs;0;WS */
+};
+
+#endif // _PROPLIST_H_INCLUDED_
diff --git a/src/configure b/src/configure
new file mode 100755
index 00000000..ff0148c6
--- /dev/null
+++ b/src/configure
@@ -0,0 +1,7040 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for Recoll 1.19.0.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+	   done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+      if test "x$CONFIG_SHELL" != x; then :
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 &1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='Recoll'
+PACKAGE_TARNAME='recoll'
+PACKAGE_VERSION='1.19.0'
+PACKAGE_STRING='Recoll 1.19.0'
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
+
+ac_unique_file="index/recollindex.cpp"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include 
+#ifdef HAVE_SYS_TYPES_H
+# include 
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include 
+#endif
+#ifdef STDC_HEADERS
+# include 
+# include 
+#else
+# ifdef HAVE_STDLIB_H
+#  include 
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include 
+# endif
+# include 
+#endif
+#ifdef HAVE_STRINGS_H
+# include 
+#endif
+#ifdef HAVE_INTTYPES_H
+# include 
+#endif
+#ifdef HAVE_STDINT_H
+# include 
+#endif
+#ifdef HAVE_UNISTD_H
+# include 
+#endif"
+
+ac_subst_vars='LTLIBOBJS
+LIBOBJS
+RCLLIBVERSION
+RCLVERSION
+NOPYTHON
+NOTHREADS
+NOPIC
+LIBQZEITGEIST
+QMAKE_DISABLE_ZEITGEIST
+QMAKE_ENABLE_ZEITGEIST
+QMAKE_DISABLE_WEBKIT
+QMAKE_ENABLE_WEBKIT
+NOCMDLINE
+NOQTMAKE
+HAVE_MKDTEMP
+XAPIANCXXFLAGS
+QTRECOLL_DATADIR
+QTGUI
+QMAKE
+LIBFAM
+LIBXAPIANSTATICEXTRA
+LIBXAPIANDIR
+LIBXAPIAN
+LIBICONV
+INCICONV
+X_LIBX11
+X_EXTRA_LIBS
+X_LIBS
+X_PRE_LIBS
+X_CFLAGS
+CXXCPP
+XMKMF
+QMAKEPATH
+XAPIAN_CONFIG
+aspellProg
+fileProg
+EGREP
+GREP
+CPP
+ac_ct_CC
+CFLAGS
+CC
+OBJEXT
+EXEEXT
+ac_ct_CXX
+CPPFLAGS
+LDFLAGS
+CXXFLAGS
+CXX
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_largefile
+with_file_command
+with_aspell
+with_inotify
+with_fam
+enable_xattr
+enable_idxthreads
+enable_camelcase
+enable_python_module
+enable_pic
+enable_qtgui
+enable_webkit
+with_qzeitgeist
+enable_x11mon
+with_x
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CXX
+CXXFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CCC
+CC
+CFLAGS
+CPP
+XMKMF
+CXXCPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+    esac
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_myself" : 'X\(//\)[^/]' \| \
+	 X"$as_myself" : 'X\(//\)$' \| \
+	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # 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 Recoll 1.19.0 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking ...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/recoll]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+X features:
+  --x-includes=DIR    X include files are in DIR
+  --x-libraries=DIR   X library files are in DIR
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of Recoll 1.19.0:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-largefile     omit support for large files
+  --disable-xattr         Enable fetching metadata from file extended
+                          attributes. This is only useful if some application
+                          creates them on (part of) your data set. You also
+                          need to set up appropriate mappings in the
+                          configuration.
+  --disable-idxthreads    Disable multithread indexing.
+  --enable-camelcase      Enable splitting camelCase words. This is not
+                          enabled by default as this makes phrase matches more
+                          difficult: you need to use matching case in the
+                          phrase query to get a match. Ie querying for "MySQL
+                          manual" and "my sql manual" are the same, but not
+                          the same as "mysql manual" (in phrases only and you
+                          could raise the phrase slack to get a match).
+  --disable-python-module Do not build the Python module.
+  --disable-pic           Do not compile library objects as position
+                          independant code. This is incompatible with the php
+                          or python extensions.
+  --disable-qtgui         Disable the QT-based graphical user interface.
+  --disable-webkit        Disable use of qt-webkit (only meaningful if qtgui
+                          is enabled).
+  --disable-x11mon        Disable recollindex support for X11 session
+                          monitoring.
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-file-command     Specify version of 'file' command (ie:
+                          --with-file-command=/usr/local/bin/file)
+  --without-aspell        Disable use of aspell spelling package to provide
+                          term expansion to other spellings
+  --with-inotify          Use inotify for almost real time indexing of
+                          modified files (the default is yes on Linux).
+  --with-fam              Use File Alteration Monitor for almost real time
+                          indexing of modified files. Give the fam/gamin
+                          library as argument (ie: /usr/lib/libfam.so) if
+                          configure does not find the right one.
+  --with-qzeitgeist       Enable the use of the qzeitgeist library to send
+                          zeitgeist events.
+  --with-x                use the X Window System
+
+Some influential environment variables:
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  LDFLAGS     linker flags, e.g. -L if you have libraries in a
+              nonstandard directory 
+  LIBS        libraries to pass to the linker, e.g. -l
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I if
+              you have headers in a nonstandard directory 
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  CPP         C preprocessor
+  XMKMF       Path to xmkmf, Makefile generator for X Window System
+  CXXCPP      C++ preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to the package provider.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+Recoll configure 1.19.0
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if eval \${$3+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 test -x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case  declares $2.
+   For example, HP-UX 11i  declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer  to  if __STDC__ is defined, since
+     exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include 
+#else
+# include 
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_cxx_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 test -x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_link
+
+# ac_fn_cxx_try_cpp LINENO
+# ------------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_cpp
+
+# ac_fn_cxx_check_func LINENO FUNC VAR
+# ------------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_cxx_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case  declares $2.
+   For example, HP-UX 11i  declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer  to  if __STDC__ is defined, since
+     exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include 
+#else
+# include 
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_cxx_check_func
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by Recoll $as_me 1.19.0, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    $as_echo "PATH: $as_dir"
+  done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+    2)
+      as_fn_append ac_configure_args1 " '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      as_fn_append ac_configure_args " '$ac_arg'"
+      ;;
+    esac
+  done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	$as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test "$ac_old_val_w" != "$ac_new_val_w"; then
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ac_config_headers="$ac_config_headers common/autoconfig.h"
+
+
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5
+$as_echo_n "checking whether the C++ compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C++ compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5
+$as_echo_n "checking for C++ compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include 
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+else
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+	 CXXFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+if test C$CXX = C ; then
+   as_fn_error $? "C++ compiler needed. Please install one (ie: gnu g++)" "$LINENO" 5
+fi
+
+sys=`uname | tr / _`
+
+if test ! -f mk/$sys ; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}:
+    No system configuration file found in mk/ for uname = '$sys'.
+    Trying with Default file.
+    If the build fails, you'll need to write a configuration file, starting
+    from one of the existing ones." >&5
+$as_echo "$as_me:
+    No system configuration file found in mk/ for uname = '$sys'.
+    Trying with Default file.
+    If the build fails, you'll need to write a configuration file, starting
+    from one of the existing ones." >&6;}
+
+    sys=Default
+fi
+(cd mk; rm -f sysconf; ln -s $sys sysconf)
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include 
+#include 
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Check whether --enable-largefile was given.
+if test "${enable_largefile+set}" = set; then :
+  enableval=$enable_largefile;
+fi
+
+if test "$enable_largefile" != no; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+if ${ac_cv_sys_largefile_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_sys_largefile_CC=no
+     if test "$GCC" != yes; then
+       ac_save_CC=$CC
+       while :; do
+	 # IRIX 6.2 and later do not support large files by default,
+	 # so use the C compiler's -n32 option if that helps.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include 
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+	 if ac_fn_c_try_compile "$LINENO"; then :
+  break
+fi
+rm -f core conftest.err conftest.$ac_objext
+	 CC="$CC -n32"
+	 if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_largefile_CC=' -n32'; break
+fi
+rm -f core conftest.err conftest.$ac_objext
+	 break
+       done
+       CC=$ac_save_CC
+       rm -f conftest.$ac_ext
+    fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+  if test "$ac_cv_sys_largefile_CC" != no; then
+    CC=$CC$ac_cv_sys_largefile_CC
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if ${ac_cv_sys_file_offset_bits+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  while :; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include 
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_file_offset_bits=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _FILE_OFFSET_BITS 64
+#include 
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_file_offset_bits=64; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_cv_sys_file_offset_bits=unknown
+  break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
+;;
+esac
+rm -rf conftest*
+  if test $ac_cv_sys_file_offset_bits = unknown; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+if ${ac_cv_sys_large_files+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  while :; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include 
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_large_files=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _LARGE_FILES 1
+#include 
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_large_files=1; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_cv_sys_large_files=unknown
+  break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+$as_echo "$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
+;;
+esac
+rm -rf conftest*
+  fi
+
+
+fi
+
+
+# OpenBSD needs sys/param.h for mount.h to compile
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if ${ac_cv_prog_CPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer  to  if __STDC__ is defined, since
+  #  exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include 
+#else
+# include 
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include 
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer  to  if __STDC__ is defined, since
+  #  exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include 
+#else
+# include 
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include 
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include 
+#include 
+#include 
+#include 
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include 
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include 
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include 
+#include 
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in sys/param.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_param_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_PARAM_H 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in sys/mount.h sys/statfs.h sys/statvfs.h sys/vfs.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#ifdef HAVE_SYS_PARAM_H
+# include 
+#endif
+
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# Use specific 'file' command ? (Useful on solaris to specify
+# /usr/local/bin/file instead of the system's which doesn't understand '-i'
+
+# Check whether --with-file-command was given.
+if test "${with_file_command+set}" = set; then :
+  withval=$with_file_command; withFileCommand=$withval
+else
+  withFileCommand=file
+fi
+
+case $withFileCommand in
+  file)
+    # Extract the first word of "file", so it can be a program name with args.
+set dummy file; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_fileProg+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $fileProg in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_fileProg="$fileProg" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_fileProg="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+fileProg=$ac_cv_path_fileProg
+if test -n "$fileProg"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $fileProg" >&5
+$as_echo "$fileProg" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+;;
+  *)
+    fileProg=$withFileCommand;;
+esac
+
+if test ! -x "$fileProg"; then
+   as_fn_error $? "$fileProg does not exist or is not executable" "$LINENO" 5
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define FILE_PROG "$fileProg"
+_ACEOF
+
+
+# Can't use Solaris standard 'file' command, it doesn't support -i
+if test X$sys != XSunOS -o X$fileProg != X/usr/bin/file; then
+
+$as_echo "#define USE_SYSTEM_FILE_COMMAND 1" >>confdefs.h
+
+fi
+
+
+# Use aspell to provide spelling expansions ?
+# The default is yes. If we do find an aspell installation, we use it. Else
+# we do compile the aspell module using an internal copy of aspell.h
+# Only --with-aspell=no will completely disable aspell support
+
+# Check whether --with-aspell was given.
+if test "${with_aspell+set}" = set; then :
+  withval=$with_aspell; withAspell=$withval
+else
+  withAspell=yes
+fi
+
+case $withAspell in
+     no);;
+     yes)
+     # Extract the first word of "aspell", so it can be a program name with args.
+set dummy aspell; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_aspellProg+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $aspellProg in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_aspellProg="$aspellProg" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_aspellProg="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+aspellProg=$ac_cv_path_aspellProg
+if test -n "$aspellProg"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $aspellProg" >&5
+$as_echo "$aspellProg" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+     ;;
+     *) # The argument should be the path to the aspell program
+     aspellProg=$withAspell
+     ;;
+esac
+
+if test X$withAspell != Xno ; then
+
+$as_echo "#define RCL_USE_ASPELL 1" >>confdefs.h
+
+   if test X$aspellProg != X ; then
+      aspellBase=`dirname $aspellProg`
+      aspellBase=`dirname $aspellBase`
+
+cat >>confdefs.h <<_ACEOF
+#define ASPELL_PROG "$aspellProg"
+_ACEOF
+
+      if test -f $aspellBase/include/aspell.h ; then
+
+cat >>confdefs.h <<_ACEOF
+#define ASPELL_INCLUDE "$aspellBase/include/aspell.h"
+_ACEOF
+
+      else
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: aspell support enabled but aspell package not found. Compiling with internal aspell interface file" >&5
+$as_echo "$as_me: aspell support enabled but aspell package not found. Compiling with internal aspell interface file" >&6;}
+	 $as_echo "#define ASPELL_INCLUDE \"aspell-local.h\"" >>confdefs.h
+
+      fi
+   else
+     # aspell support enabled but no aspell install yet
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: aspell support enabled but aspell package not found. Compiling with internal aspell interface file" >&5
+$as_echo "$as_me: aspell support enabled but aspell package not found. Compiling with internal aspell interface file" >&6;}
+	$as_echo "#define ASPELL_INCLUDE \"aspell-local.h\"" >>confdefs.h
+
+   fi
+fi
+
+if test -f /usr/include/sys/inotify.h -o -f /usr/include/linux/inotify.h; then
+   inot_default=yes
+else
+   inot_default=no
+fi
+
+# Real time monitoring with inotify
+
+# Check whether --with-inotify was given.
+if test "${with_inotify+set}" = set; then :
+  withval=$with_inotify; withInotify=$withval
+else
+  withInotify=$inot_default
+fi
+
+
+if test X$withInotify != Xno ; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: enabled support for inotify monitoring" >&5
+$as_echo "$as_me: enabled support for inotify monitoring" >&6;}
+
+$as_echo "#define RCL_MONITOR 1" >>confdefs.h
+
+
+$as_echo "#define RCL_USE_INOTIFY 1" >>confdefs.h
+
+else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: inotify not found, inotify monitoring disabled" >&5
+$as_echo "$as_me: inotify not found, inotify monitoring disabled" >&6;}
+fi
+
+# Real time monitoring with FAM
+
+# Check whether --with-fam was given.
+if test "${with_fam+set}" = set; then :
+  withval=$with_fam; withFam=$withval
+else
+  withFam=yes
+fi
+
+
+if test X$withFam != Xno -a X$withInotify != Xno ; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: FAM support enabled but inotify support also enabled. Disabling FAM support and using inotify" >&5
+$as_echo "$as_me: FAM support enabled but inotify support also enabled. Disabling FAM support and using inotify" >&6;}
+   withFam=no
+fi
+
+famLib=""
+case $withFam in
+     no);;
+     yes)
+	for dir in /usr/local/lib ${libdir};do
+	 if test -f $dir/libfam.so ; then famLib=$dir/libfam.so;break;fi
+	done
+        if test X$famLib = X ; then
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: FAM library not found, disabling FAM and real time indexing support" >&5
+$as_echo "$as_me: FAM library not found, disabling FAM and real time indexing support" >&6;}
+	  withFam=no
+        fi
+     ;;
+     *) # The argument should be the path to the fam library
+     famLib=$withFam
+     ;;
+esac
+
+if test X$withFam != Xno ; then
+
+$as_echo "#define RCL_MONITOR 1" >>confdefs.h
+
+
+$as_echo "#define RCL_USE_FAM 1" >>confdefs.h
+
+   if test X$famLib != X ; then
+      famLibDir=`dirname $famLib`
+      famBase=`dirname $famLibDir`
+      famBLib=`basename $famLib .so | sed -e s/lib//`
+      if test ! -f $famBase/include/fam.h ; then
+	 as_fn_error $? "fam.h not found in $famBase/include. Specify --with-fam=no to disable fam support" "$LINENO" 5
+      fi
+      LIBFAM="-L$famLibDir -l$famBLib"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: fam library directive: $LIBFAM" >&5
+$as_echo "$as_me: fam library directive: $LIBFAM" >&6;}
+
+cat >>confdefs.h <<_ACEOF
+#define FAM_INCLUDE "$famBase/include/fam.h"
+_ACEOF
+
+   else
+	as_fn_error $? "fam library not found" "$LINENO" 5
+   fi
+fi
+
+# Disable use of file extended attributes. With xattrs disabled we can use
+# mtime instead of ctime to look for file mods. Default is enabled.
+# Check whether --enable-xattr was given.
+if test "${enable_xattr+set}" = set; then :
+  enableval=$enable_xattr; xattrEnabled=$enableval
+else
+  xattrEnabled=yes
+fi
+
+
+if test X$xattrEnabled = Xyes ; then
+
+$as_echo "#define RCL_USE_XATTR 1" >>confdefs.h
+
+fi
+
+# Enable use of threads in the indexing pipeline.
+# This is disabled by default as we usually care little about indexing
+# absolute performance (more about impact on usability and total
+# resources used).
+# Check whether --enable-idxthreads was given.
+if test "${enable_idxthreads+set}" = set; then :
+  enableval=$enable_idxthreads; idxthreadsEnabled=$enableval
+else
+  idxthreadsEnabled=yes
+fi
+
+
+if test X$idxthreadsEnabled = Xyes ; then
+
+$as_echo "#define IDX_THREADS 1" >>confdefs.h
+
+  NOTHREADS=""
+else
+  NOTHREADS="#"
+fi
+
+# Enable CamelCase word splitting. This is optional because it causes
+# problems with phrases: with camelcase enabled, "MySQL manual"
+# will be matched by "MySQL manual" and "my sql manual" but not
+# "mysql manual" (which would need increased slack as manual is now at pos
+# 2 instead of 1
+# Check whether --enable-camelcase was given.
+if test "${enable_camelcase+set}" = set; then :
+  enableval=$enable_camelcase; camelcaseEnabled=$enableval
+else
+  camelcaseEnabled=no
+fi
+
+
+if test X$camelcaseEnabled = Xyes ; then
+
+$as_echo "#define RCL_SPLIT_CAMELCASE 1" >>confdefs.h
+
+fi
+
+# Disable building the python module. This is built by default, because
+# it's really the easiest way to interface and extend recoll. It forces PIC
+# objects for everything (indexing performance impact: 1%), because it's
+# just not worth building the lib twice
+# You can still have a non-pic recoll with:
+#   configure --disable-python-module; make; make install;make clean
+#   configure; make; cd python/recoll; make install
+#
+# Check whether --enable-python-module was given.
+if test "${enable_python_module+set}" = set; then :
+  enableval=$enable_python_module; pythonEnabled=$enableval
+else
+  pythonEnabled=yes
+fi
+
+if test X$pythonEnabled = Xyes ; then
+  NOPYTHON=""
+else
+  NOPYTHON="#"
+fi
+
+# Build PIC objects for the library ?
+# Check whether --enable-pic was given.
+if test "${enable_pic+set}" = set; then :
+  enableval=$enable_pic; picEnabled=$enableval
+else
+  picEnabled=forpython
+fi
+
+case $picEnabled in
+forpython) picEnabled=$pythonEnabled; NOPIC=$NOPYTHON;;
+yes) NOPIC="";;
+*) NOPIC="#";;
+esac
+
+if test X$pythonEnabled = Xyes -a X$picEnabled != Xyes; then
+   as_fn_error $? "Python build needs PIC library" "$LINENO" 5
+fi
+
+for ac_func in mkdtemp
+do :
+  ac_fn_c_check_func "$LINENO" "mkdtemp" "ac_cv_func_mkdtemp"
+if test "x$ac_cv_func_mkdtemp" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_MKDTEMP 1
+_ACEOF
+
+fi
+done
+
+
+##### Look for iconv. This can exist in either libc (ie: Linux, solaris) or
+##### libiconv. We'd need a --with-libiconv= option
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+LIBICONV=""
+S_LDFLAGS=$LDFLAGS
+S_CPPFLAGS=$CPPFLAGS
+for dir in ${libdir} /opt/local/lib /usr/local/lib ;do
+  CPPFLAGS="$S_CPPFLAGS -I$dir/../include"
+
+  LDFLAGS="$S_LDFLAGS -L$dir"
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include 
+#include 
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  LIBICONV="-L$dir";INCICONV=-I$dir/../include
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test A"$LIBICONV" != A ; then
+     break
+  fi
+
+  LDFLAGS="$S_LDFLAGS -L$dir -liconv"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include 
+#include 
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  LIBICONV="-L$dir -liconv";INCICONV=-I$dir/../include
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test A"$LIBICONV" != A ; then
+     break
+  fi
+
+done
+
+LDFLAGS=$S_LDFLAGS
+CPPFLAGS=$S_CPPFLAGS
+
+if test A"$LIBICONV" = A ; then
+   as_fn_error $? "Cannot find iconv_open anywhere. Please install iconv" "$LINENO" 5
+   exit 1
+fi
+#echo LIBICONV $LIBICONV
+#echo INCICONV $INCICONV
+
+CPPFLAGS="$CPPFLAGS $INCICONV"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for type of inbuf parameter to iconv" >&5
+$as_echo_n "checking for type of inbuf parameter to iconv... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+    #include 
+    #include 
+
+int
+main ()
+{
+
+    iconv(0,(const char **)0,(size_t *)0,(char **)0,(size_t *)0);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  rcl_iconv_inbuf_const="1"
+else
+  rcl_iconv_inbuf_const="0"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+if test X$rcl_iconv_inbuf_const = X1 ; then
+
+$as_echo "#define RCL_ICONV_INBUF_CONST 1" >>confdefs.h
+
+fi
+
+
+############# Putenv
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for type of string parameter to putenv" >&5
+$as_echo_n "checking for type of string parameter to putenv... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+    #include 
+
+int
+main ()
+{
+
+    putenv((const char *)0);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  rcl_putenv_string_const="1"
+else
+  rcl_putenv_string_const="0"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+if test X$rcl_putenv_string_const = X1 ; then
+
+$as_echo "#define PUTENV_ARG_CONST 1" >>confdefs.h
+
+fi
+
+
+#### Look for Xapian
+# Extract the first word of "xapian-config", so it can be a program name with args.
+set dummy xapian-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_XAPIAN_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $XAPIAN_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_XAPIAN_CONFIG="$XAPIAN_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_XAPIAN_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_XAPIAN_CONFIG" && ac_cv_path_XAPIAN_CONFIG="no"
+  ;;
+esac
+fi
+XAPIAN_CONFIG=$ac_cv_path_XAPIAN_CONFIG
+if test -n "$XAPIAN_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XAPIAN_CONFIG" >&5
+$as_echo "$XAPIAN_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test "$XAPIAN_CONFIG" = "no" ; then
+   as_fn_error $? "Cannot find xapian-config command in $PATH. Is
+xapian-core installed ?" "$LINENO" 5
+   exit 1
+fi
+LIBXAPIAN=`$XAPIAN_CONFIG --libs`
+# The --static thing fails with older Xapians. Happily enough they don't
+# need it either (because there are no needed libraries (no uuid and we
+# deal explicitely with libz)
+LIBXAPIANSTATICEXTRA=`$XAPIAN_CONFIG --static --libs 2> /dev/null`
+# Workaround for problem in xapian-config in some versions: wrongly lists
+# libstdc++.la in the lib list
+for i in $LIBXAPIAN ; do
+    case $i in
+    *stdc++*|-lm|-lgcc_s|-lc);;
+    *) tmpxaplib="$tmpxaplib $i";;
+    esac
+done
+LIBXAPIAN=$tmpxaplib
+# Also recent xapian libs need lz even when they think they don't...
+LIBXAPIAN="$LIBXAPIAN -lz"
+LIBXAPIANDIR=`$XAPIAN_CONFIG --libs | awk '{print $1}'`
+case A"$LIBXAPIANDIR" in
+  A-L*) LIBXAPIANDIR=`echo $LIBXAPIANDIR | sed -e 's/-L//'`;;
+  *) LIBXAPIANDIR="";;
+esac
+XAPIANCXXFLAGS=`$XAPIAN_CONFIG --cxxflags`
+
+#echo XAPIAN_CONFIG: $XAPIAN_CONFIG
+#echo LIBXAPIAN: $LIBXAPIAN
+#echo LIBXAPIANDIR: $LIBXAPIANDIR
+#echo LIBXAPIANSTATICEXTRA: $LIBXAPIANSTATICEXTRA
+#echo XAPIANCXXFLAGS: $XAPIANCXXFLAGS
+
+#### QT
+# The way qt and its tools (qmake especially) are installed is very
+# different between systems (and maybe qt versions)
+#
+# In general we need QTDIR to be set, because it is used inside the
+# qmake-generated makefiles. But there are exceptions: ie on debian3.1 (at
+# least on the sourceforge compile farm), QTDIR is not needed because qmake
+# generates hard paths (and is installed in /usr/bin). We don't want to
+# force the user to set QTDIR if it is not needed.
+#
+# The logic is then to first look for qmake, possibly using QTDIR if it is
+# set.
+#
+# If QTDIR is not set, we then generate a bogus qt project and check if
+# QTDIR is needed in the Makefile, in which case we complain.
+#
+# QMAKESPEC: on most Linux system, there is a 'default' link inside the
+# mkspecs directory, so that QMAKESPEC is not needed.
+# If QMAKESPEC is not set and needed, the qmake test at the previous test
+# will have failed, and we tell the user to check his environment.
+#
+# Check whether --enable-qtgui was given.
+if test "${enable_qtgui+set}" = set; then :
+  enableval=$enable_qtgui; enableQT=$enableval
+else
+  enableQT="yes"
+fi
+
+
+if test "$enableQT" != "yes" ; then
+   NOQTMAKE="#"
+   NOCMDLINE=""
+else
+  NOQTMAKE=""
+  NOCMDLINE="#"
+
+  if test X$QTDIR != X ; then
+     PATH=$PATH:$QTDIR/bin
+     export PATH
+  fi
+
+  if test X$QMAKE = X ; then
+     QMAKE=qmake
+  fi
+  case $QMAKE in
+    */*) QMAKEPATH=$QMAKE;;
+    *) # Extract the first word of "$QMAKE", so it can be a program name with args.
+set dummy $QMAKE; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_QMAKEPATH+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $QMAKEPATH in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_QMAKEPATH="$QMAKEPATH" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_QMAKEPATH="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_QMAKEPATH" && ac_cv_path_QMAKEPATH="NOTFOUND"
+  ;;
+esac
+fi
+QMAKEPATH=$ac_cv_path_QMAKEPATH
+if test -n "$QMAKEPATH"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $QMAKEPATH" >&5
+$as_echo "$QMAKEPATH" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+;;
+  esac
+
+  if test X$QMAKEPATH = XNOTFOUND ; then
+     as_fn_error $? "Cannot find the qmake program. Maybe you need to install
+  qt development files and tools and/or set the QTDIR environment variable?" "$LINENO" 5
+  fi
+  QMAKE=$QMAKEPATH
+
+  # MAC OS X: we don't support this (the native search tool is more than
+  # good enough), but we make things work just enough so that the program can
+  # be compiled and roughly installed (not as a .app, but to /usr/local),
+  # basically to enable using a Macbook for development
+  if test X$sys = XDarwin ; then
+     # The default is xcode
+     QMAKE="${QMAKE} -spec macx-g++"
+  fi
+
+  # Discriminate qt3/4. Qt3 qmake prints its version on stderr but we don't
+  # depend on this. We try to detect the qt 4 version string instead.
+  qmakevers="`${QMAKE} --version 2>&1`"
+  #echo "qmake version: $qmakevers"
+  v4=`expr "$qmakevers" : '.*Qt  *version  *4.*'`
+  if test X$v4 = X0 ; then
+     as_fn_error $? "qmake seems to be using Qt version 3 which is not supported any more" "$LINENO" 5
+     QTGUI=qtgui
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: using qt version 4 user interface" >&5
+$as_echo "$as_me: using qt version 4 user interface" >&6;}
+    QTGUI=qtgui
+  fi
+
+  cd $QTGUI
+  # We just want a .pro file: no problem with unsubstituted variables at
+  # this point.
+  test -f recoll.pro && chmod +w recoll.pro
+  cp recoll.pro.in recoll.pro
+  #echo QMAKE ${QMAKE}
+  ${QMAKE} recoll.pro
+  if test $? != 0 ; then
+     as_fn_error $? "Cannot use qmake to generate a Makefile. Maybe you need to
+  check the QTDIR and QMAKESPEC environment variables?" "$LINENO" 5
+  fi
+  # is QTDIR set and do we actually need it ?
+  if test X$QTDIR = X ; then
+     QTDIRNEEDED=`grep INCPATH Makefile | grep = | grep QTDIR`
+     if test "X$QTDIRNEEDED" != "X" ; then
+         as_fn_error $? "You need to set the QTDIR variable to point to the QT
+  installation. If there is no default mkspecs, you should also set QMAKESPEC" "$LINENO" 5
+     fi
+  fi
+  cd ..
+
+
+ ##### Using Qt webkit for reslist display? Else Qt textbrowser
+  # Check whether --enable-webkit was given.
+if test "${enable_webkit+set}" = set; then :
+  enableval=$enable_webkit; enableWebkit=$enableval
+else
+  enableWebkit="yes"
+fi
+
+
+  if test "$enableWebkit" = "yes" ; then
+   QMAKE_ENABLE_WEBKIT=""
+   QMAKE_DISABLE_WEBKIT="#"
+  else
+   QMAKE_ENABLE_WEBKIT="#"
+   QMAKE_DISABLE_WEBKIT=""
+  fi
+
+
+
+ ##### Using QZeitGeist lib ? Default no for now
+
+# Check whether --with-qzeitgeist was given.
+if test "${with_qzeitgeist+set}" = set; then :
+  withval=$with_qzeitgeist; withQZeitgeist=$withval
+else
+  withQZeitgeist="no"
+fi
+
+
+  case "$withQZeitgeist" in
+    no)  LIBQZEITGEIST=;;
+    yes) LIBQZEITGEIST=-lqzeitgeist;;
+    *)   LIBQZEITGEIST=$withQZeitgeist;;
+  esac
+
+  if test "$withQZeitgeist" != "no" ; then
+   QMAKE_ENABLE_ZEITGEIST=""
+   QMAKE_DISABLE_ZEITGEIST="#"
+  else
+   QMAKE_ENABLE_ZEITGEIST="#"
+   QMAKE_DISABLE_ZEITGEIST=""
+  fi
+
+  ac_config_files="$ac_config_files $QTGUI/recoll.pro"
+
+
+  ##################### End QT stuff
+fi
+
+
+### X11: this is needed for the session monitoring code (in recollindex -m)
+# Check whether --enable-x11mon was given.
+if test "${enable_x11mon+set}" = set; then :
+  enableval=$enable_x11mon; enableX11mon=$enableval
+else
+  enableX11mon="yes"
+fi
+
+
+if test X$withInotify = Xno -a X$withFam = Xno ; then
+  enableX11mon=no
+fi
+
+if test "$enableX11mon" = "yes" ; then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
+$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
+if test -z "$CXXCPP"; then
+  if ${ac_cv_prog_CXXCPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer  to  if __STDC__ is defined, since
+  #  exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include 
+#else
+# include 
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include 
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer  to  if __STDC__ is defined, since
+  #  exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include 
+#else
+# include 
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include 
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5
+$as_echo_n "checking for X... " >&6; }
+
+
+# Check whether --with-x was given.
+if test "${with_x+set}" = set; then :
+  withval=$with_x;
+fi
+
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+  # The user explicitly disabled X.
+  have_x=disabled
+else
+  case $x_includes,$x_libraries in #(
+    *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #(
+    *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=no ac_x_libraries=no
+rm -f -r conftest.dir
+if mkdir conftest.dir; then
+  cd conftest.dir
+  cat >Imakefile <<'_ACEOF'
+incroot:
+	@echo incroot='${INCROOT}'
+usrlibdir:
+	@echo usrlibdir='${USRLIBDIR}'
+libdir:
+	@echo libdir='${LIBDIR}'
+_ACEOF
+  if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
+    # GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+    for ac_var in incroot usrlibdir libdir; do
+      eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
+    done
+    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+    for ac_extension in a so sl dylib la dll; do
+      if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
+	 test -f "$ac_im_libdir/libX11.$ac_extension"; then
+	ac_im_usrlibdir=$ac_im_libdir; break
+      fi
+    done
+    # Screen out bogus values from the imake configuration.  They are
+    # bogus both because they are the default anyway, and because
+    # using them would break gcc on systems where it needs fixed includes.
+    case $ac_im_incroot in
+	/usr/include) ac_x_includes= ;;
+	*) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+    esac
+    case $ac_im_usrlibdir in
+	/usr/lib | /usr/lib64 | /lib | /lib64) ;;
+	*) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+    esac
+  fi
+  cd ..
+  rm -f -r conftest.dir
+fi
+
+# Standard set of common directories for X headers.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ac_x_header_dirs='
+/usr/X11/include
+/usr/X11R7/include
+/usr/X11R6/include
+/usr/X11R5/include
+/usr/X11R4/include
+
+/usr/include/X11
+/usr/include/X11R7
+/usr/include/X11R6
+/usr/include/X11R5
+/usr/include/X11R4
+
+/usr/local/X11/include
+/usr/local/X11R7/include
+/usr/local/X11R6/include
+/usr/local/X11R5/include
+/usr/local/X11R4/include
+
+/usr/local/include/X11
+/usr/local/include/X11R7
+/usr/local/include/X11R6
+/usr/local/include/X11R5
+/usr/local/include/X11R4
+
+/usr/X386/include
+/usr/x386/include
+/usr/XFree86/include/X11
+
+/usr/include
+/usr/local/include
+/usr/unsupported/include
+/usr/athena/include
+/usr/local/x11r5/include
+/usr/lpp/Xamples/include
+
+/usr/openwin/include
+/usr/openwin/share/include'
+
+if test "$ac_x_includes" = no; then
+  # Guess where to find include files, by looking for Xlib.h.
+  # First, try using that file with no special directory specified.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include 
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+  for ac_dir in $ac_x_header_dirs; do
+  if test -r "$ac_dir/X11/Xlib.h"; then
+    ac_x_includes=$ac_dir
+    break
+  fi
+done
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+fi # $ac_x_includes = no
+
+if test "$ac_x_libraries" = no; then
+  # Check for the libraries.
+  # See if we find them without any special options.
+  # Don't add to $LIBS permanently.
+  ac_save_LIBS=$LIBS
+  LIBS="-lX11 $LIBS"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include 
+int
+main ()
+{
+XrmInitialize ()
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  LIBS=$ac_save_LIBS
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+  LIBS=$ac_save_LIBS
+for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
+do
+  # Don't even attempt the hair of trying to link an X program!
+  for ac_extension in a so sl dylib la dll; do
+    if test -r "$ac_dir/libX11.$ac_extension"; then
+      ac_x_libraries=$ac_dir
+      break 2
+    fi
+  done
+done
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi # $ac_x_libraries = no
+
+case $ac_x_includes,$ac_x_libraries in #(
+  no,* | *,no | *\'*)
+    # Didn't find X, or a directory has "'" in its name.
+    ac_cv_have_x="have_x=no";; #(
+  *)
+    # Record where we found X for the cache.
+    ac_cv_have_x="have_x=yes\
+	ac_x_includes='$ac_x_includes'\
+	ac_x_libraries='$ac_x_libraries'"
+esac
+fi
+;; #(
+    *) have_x=yes;;
+  esac
+  eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5
+$as_echo "$have_x" >&6; }
+  no_x=yes
+else
+  # If each of the values was on the command line, it overrides each guess.
+  test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+  test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+  # Update the cache value to reflect the command line values.
+  ac_cv_have_x="have_x=yes\
+	ac_x_includes='$x_includes'\
+	ac_x_libraries='$x_libraries'"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5
+$as_echo "libraries $x_libraries, headers $x_includes" >&6; }
+fi
+
+if test "$no_x" = yes; then
+  # Not all programs may use this symbol, but it does not hurt to define it.
+
+$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h
+
+  X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+  if test -n "$x_includes"; then
+    X_CFLAGS="$X_CFLAGS -I$x_includes"
+  fi
+
+  # It would also be nice to do this for all -L options, not just this one.
+  if test -n "$x_libraries"; then
+    X_LIBS="$X_LIBS -L$x_libraries"
+    # For Solaris; some versions of Sun CC require a space after -R and
+    # others require no space.  Words are not sufficient . . . .
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5
+$as_echo_n "checking whether -R must be followed by a space... " >&6; }
+    ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
+    ac_xsave_cxx_werror_flag=$ac_cxx_werror_flag
+    ac_cxx_werror_flag=yes
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+       X_LIBS="$X_LIBS -R$x_libraries"
+else
+  LIBS="$ac_xsave_LIBS -R $x_libraries"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	  X_LIBS="$X_LIBS -R $x_libraries"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5
+$as_echo "neither works" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    ac_cxx_werror_flag=$ac_xsave_cxx_werror_flag
+    LIBS=$ac_xsave_LIBS
+  fi
+
+  # Check for system-dependent libraries X programs must link with.
+  # Do this before checking for the system-independent R6 libraries
+  # (-lICE), since we may need -lsocket or whatever for X linking.
+
+  if test "$ISC" = yes; then
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+  else
+    # Martyn Johnson says this is needed for Ultrix, if the X
+    # libraries were built with DECnet support.  And Karl Berry says
+    # the Alpha needs dnet_stub (dnet does not exist).
+    ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XOpenDisplay ();
+int
+main ()
+{
+return XOpenDisplay ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
+$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
+if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_dnet_dnet_ntoa=yes
+else
+  ac_cv_lib_dnet_dnet_ntoa=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
+if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+fi
+
+    if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
+$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
+if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet_stub  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_dnet_stub_dnet_ntoa=yes
+else
+  ac_cv_lib_dnet_stub_dnet_ntoa=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
+if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+fi
+
+    fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LIBS="$ac_xsave_LIBS"
+
+    # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+    # to get the SysV transport functions.
+    # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
+    # needs -lnsl.
+    # The nsl library prevents programs from opening the X display
+    # on Irix 5.2, according to T.E. Dickey.
+    # The functions gethostbyname, getservbyname, and inet_addr are
+    # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+    ac_fn_cxx_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
+if test "x$ac_cv_func_gethostbyname" = xyes; then :
+
+fi
+
+    if test $ac_cv_func_gethostbyname = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
+$as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
+if ${ac_cv_lib_nsl_gethostbyname+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_nsl_gethostbyname=yes
+else
+  ac_cv_lib_nsl_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
+$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
+if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+fi
+
+      if test $ac_cv_lib_nsl_gethostbyname = no; then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
+$as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
+if ${ac_cv_lib_bsd_gethostbyname+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_bsd_gethostbyname=yes
+else
+  ac_cv_lib_bsd_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
+$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
+if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+fi
+
+      fi
+    fi
+
+    # lieder@skyler.mavd.honeywell.com says without -lsocket,
+    # socket/setsockopt and other routines are undefined under SCO ODT
+    # 2.0.  But -lsocket is broken on IRIX 5.2 (and is not necessary
+    # on later versions), says Simon Leinen: it contains gethostby*
+    # variants that don't use the name server (or something).  -lsocket
+    # must be given before -lnsl if both are needed.  We assume that
+    # if connect needs -lnsl, so does gethostbyname.
+    ac_fn_cxx_check_func "$LINENO" "connect" "ac_cv_func_connect"
+if test "x$ac_cv_func_connect" = xyes; then :
+
+fi
+
+    if test $ac_cv_func_connect = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
+$as_echo_n "checking for connect in -lsocket... " >&6; }
+if ${ac_cv_lib_socket_connect+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char connect ();
+int
+main ()
+{
+return connect ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_socket_connect=yes
+else
+  ac_cv_lib_socket_connect=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
+$as_echo "$ac_cv_lib_socket_connect" >&6; }
+if test "x$ac_cv_lib_socket_connect" = xyes; then :
+  X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+fi
+
+    fi
+
+    # Guillermo Gomez says -lposix is necessary on A/UX.
+    ac_fn_cxx_check_func "$LINENO" "remove" "ac_cv_func_remove"
+if test "x$ac_cv_func_remove" = xyes; then :
+
+fi
+
+    if test $ac_cv_func_remove = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
+$as_echo_n "checking for remove in -lposix... " >&6; }
+if ${ac_cv_lib_posix_remove+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char remove ();
+int
+main ()
+{
+return remove ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_posix_remove=yes
+else
+  ac_cv_lib_posix_remove=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
+$as_echo "$ac_cv_lib_posix_remove" >&6; }
+if test "x$ac_cv_lib_posix_remove" = xyes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+fi
+
+    fi
+
+    # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+    ac_fn_cxx_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
+if test "x$ac_cv_func_shmat" = xyes; then :
+
+fi
+
+    if test $ac_cv_func_shmat = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
+$as_echo_n "checking for shmat in -lipc... " >&6; }
+if ${ac_cv_lib_ipc_shmat+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lipc  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shmat ();
+int
+main ()
+{
+return shmat ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_ipc_shmat=yes
+else
+  ac_cv_lib_ipc_shmat=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
+$as_echo "$ac_cv_lib_ipc_shmat" >&6; }
+if test "x$ac_cv_lib_ipc_shmat" = xyes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+fi
+
+    fi
+  fi
+
+  # Check for libraries that X11R6 Xt/Xaw programs need.
+  ac_save_LDFLAGS=$LDFLAGS
+  test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+  # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+  # check for ICE first), but we must link in the order -lSM -lICE or
+  # we get undefined symbols.  So assume we have SM if we have ICE.
+  # These have to be linked with before -lX11, unlike the other
+  # libraries we check for below, so use a different variable.
+  # John Interrante, Karl Berry
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
+$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
+if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char IceConnectionNumber ();
+int
+main ()
+{
+return IceConnectionNumber ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_ICE_IceConnectionNumber=yes
+else
+  ac_cv_lib_ICE_IceConnectionNumber=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
+if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then :
+  X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+fi
+
+  LDFLAGS=$ac_save_LDFLAGS
+
+fi
+
+  X_LIBX11=-lX11
+else
+
+$as_echo "#define DISABLE_X11MON 1" >>confdefs.h
+
+  X_LIBX11=""
+fi
+#echo X_CFLAGS "'$X_CFLAGS'" X_PRE_LIBS "'$X_PRE_LIBS'" X_LIBS \
+#      "'$X_LIBS'" X_LIBX11 "'$X_LIBX11'" X_EXTRA_LIBS "'$X_EXTRA_LIBS'"
+
+
+# We have to expand prefix in here, couldn't find a way to do it inside
+# the qt gui .pro file or Makefile. This just means that you can't change
+# prefix at build time. It works at install time because we dont' use the
+# qtgui Makefile
+m_prefix=$prefix
+test "X$m_prefix" = "XNONE" && m_prefix=/usr/local
+m_datadir=${m_prefix}/share
+QTRECOLL_DATADIR=${m_datadir}/recoll
+
+RCLVERSION=`cat VERSION`
+RCLLIBVERSION=$RCLVERSION
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# All object files depend on localdefs which has the cc flags. Avoid
+# changing it unless necessary
+ac_config_files="$ac_config_files mk/localdefs.new:mk/localdefs.in"
+
+ac_config_files="$ac_config_files recollinstall"
+
+ac_config_files="$ac_config_files Makefile"
+
+ac_config_files="$ac_config_files sampleconf/recoll.conf"
+
+ac_config_files="$ac_config_files common/rclversion.h"
+
+ac_config_files="$ac_config_files python/recoll/setup.py"
+
+
+for d in bincimapmime index lib query
+do
+    rm -f $d/alldeps.stamp
+    cp -f /dev/null $d/alldeps
+done
+
+(cd lib;RCLLIBVERSION=$RCLLIBVERSION sh mkMake)
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    if test "x$cache_file" != "x/dev/null"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by Recoll $as_me 1.19.0, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Report bugs to the package provider."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+Recoll config.status 1.19.0
+configured by $0, generated by GNU Autoconf 2.69,
+  with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=?*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "common/autoconfig.h") CONFIG_HEADERS="$CONFIG_HEADERS common/autoconfig.h" ;;
+    "$QTGUI/recoll.pro") CONFIG_FILES="$CONFIG_FILES $QTGUI/recoll.pro" ;;
+    "mk/localdefs.new") CONFIG_FILES="$CONFIG_FILES mk/localdefs.new:mk/localdefs.in" ;;
+    "recollinstall") CONFIG_FILES="$CONFIG_FILES recollinstall" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "sampleconf/recoll.conf") CONFIG_FILES="$CONFIG_FILES sampleconf/recoll.conf" ;;
+    "common/rclversion.h") CONFIG_FILES="$CONFIG_FILES common/rclversion.h" ;;
+    "python/recoll/setup.py") CONFIG_FILES="$CONFIG_FILES python/recoll/setup.py" ;;
+
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp= ac_tmp=
+  trap 'exit_status=$?
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' >$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' >$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    "
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$ac_tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+  s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&2;}
+
+  rm -f "$ac_tmp/stdin"
+  case $ac_file in
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$ac_tmp/config.h" "$ac_file" \
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
+  fi
+ ;;
+
+
+  esac
+
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+if cmp -s mk/localdefs mk/localdefs.new ; then
+  rm -f mk/localdefs.new
+else
+  mv -f mk/localdefs.new mk/localdefs
+fi
+
diff --git a/src/configure.ac b/src/configure.ac
new file mode 100644
index 00000000..b322e1a1
--- /dev/null
+++ b/src/configure.ac
@@ -0,0 +1,578 @@
+AC_INIT([Recoll], m4_esyscmd_s(cat VERSION))
+AC_CONFIG_HEADERS([common/autoconfig.h])
+AC_PREREQ(2.53)
+AC_CONFIG_SRCDIR(index/recollindex.cpp)
+
+AC_PROG_CXX
+if test C$CXX = C ; then
+   AC_MSG_ERROR([C++ compiler needed. Please install one (ie: gnu g++)])
+fi
+
+sys=`uname | tr / _`
+
+if test ! -f mk/$sys ; then
+   AC_MSG_NOTICE([
+    No system configuration file found in mk/ for uname = '$sys'. 
+    Trying with Default file. 
+    If the build fails, you'll need to write a configuration file, starting 
+    from one of the existing ones.])
+
+    sys=Default   
+fi
+(cd mk; rm -f sysconf; ln -s $sys sysconf)
+
+AC_SYS_LARGEFILE
+
+# OpenBSD needs sys/param.h for mount.h to compile
+AC_CHECK_HEADERS([sys/param.h])
+
+AC_CHECK_HEADERS([sys/mount.h sys/statfs.h sys/statvfs.h sys/vfs.h], [], [],
+[#ifdef HAVE_SYS_PARAM_H
+# include 
+#endif
+])
+
+# Use specific 'file' command ? (Useful on solaris to specify
+# /usr/local/bin/file instead of the system's which doesn't understand '-i'
+AC_ARG_WITH(file-command, 
+    AC_HELP_STRING([--with-file-command],
+   [Specify version of 'file' command (ie: --with-file-command=/usr/local/bin/file)]),
+        withFileCommand=$withval, withFileCommand=file)
+case $withFileCommand in
+  file)
+    AC_PATH_PROG(fileProg, file);;
+  *) 
+    fileProg=$withFileCommand;;
+esac
+
+if test ! -x "$fileProg"; then
+   AC_MSG_ERROR([$fileProg does not exist or is not executable])
+fi
+AC_DEFINE_UNQUOTED(FILE_PROG, "$fileProg", [Path to the file program])
+
+# Can't use Solaris standard 'file' command, it doesn't support -i
+if test X$sys != XSunOS -o X$fileProg != X/usr/bin/file; then
+   AC_DEFINE(USE_SYSTEM_FILE_COMMAND, 1, [Enable using the system's 'file' command to id mime if we fail internally])
+fi
+
+
+# Use aspell to provide spelling expansions ?
+# The default is yes. If we do find an aspell installation, we use it. Else
+# we do compile the aspell module using an internal copy of aspell.h
+# Only --with-aspell=no will completely disable aspell support
+AC_ARG_WITH(aspell, 
+    AC_HELP_STRING([--without-aspell],
+   [Disable use of aspell spelling package to provide term expansion to other spellings]),
+        withAspell=$withval, withAspell=yes)
+case $withAspell in
+     no);;
+     yes)
+     AC_PATH_PROG(aspellProg, aspell)
+     ;;
+     *) # The argument should be the path to the aspell program
+     aspellProg=$withAspell
+     ;;
+esac
+
+if test X$withAspell != Xno ; then
+   AC_DEFINE(RCL_USE_ASPELL, 1, [Compile the aspell interface])
+   if test X$aspellProg != X ; then
+      aspellBase=`dirname $aspellProg`
+      aspellBase=`dirname $aspellBase`
+      AC_DEFINE_UNQUOTED(ASPELL_PROG, "$aspellProg",
+	[Path to the aspell program])
+      if test -f $aspellBase/include/aspell.h ; then	
+          AC_DEFINE_UNQUOTED(ASPELL_INCLUDE, "$aspellBase/include/aspell.h",
+	    [Path to the aspell api include file])
+      else
+	AC_MSG_NOTICE([aspell support enabled but aspell package not found. Compiling with internal aspell interface file])
+	 AC_DEFINE(ASPELL_INCLUDE, ["aspell-local.h"])
+      fi
+   else
+     # aspell support enabled but no aspell install yet
+	AC_MSG_NOTICE([aspell support enabled but aspell package not found. Compiling with internal aspell interface file])
+	AC_DEFINE(ASPELL_INCLUDE, ["aspell-local.h"])
+   fi
+fi
+
+if test -f /usr/include/sys/inotify.h -o -f /usr/include/linux/inotify.h; then
+   inot_default=yes
+else
+   inot_default=no
+fi
+
+# Real time monitoring with inotify
+AC_ARG_WITH(inotify, 
+    AC_HELP_STRING([--with-inotify],
+   [Use inotify for almost real time indexing of modified files (the default
+    is yes on Linux).]),
+        withInotify=$withval, withInotify=$inot_default)
+
+if test X$withInotify != Xno ; then
+   AC_MSG_NOTICE([enabled support for inotify monitoring])
+   AC_DEFINE(RCL_MONITOR, 1, [Real time monitoring option])
+   AC_DEFINE(RCL_USE_INOTIFY, 1, [Compile the inotify interface])
+else
+   AC_MSG_NOTICE([inotify not found, inotify monitoring disabled])
+fi
+
+# Real time monitoring with FAM
+AC_ARG_WITH(fam, 
+    AC_HELP_STRING([--with-fam],
+   [Use File Alteration Monitor for almost real time indexing of modified files. Give the fam/gamin library as argument (ie: /usr/lib/libfam.so) if configure does not find the right one.]),
+        withFam=$withval, withFam=yes)
+
+if test X$withFam != Xno -a X$withInotify != Xno ; then
+   AC_MSG_NOTICE([FAM support enabled but inotify support also enabled. Disabling FAM support and using inotify])
+   withFam=no
+fi
+
+famLib=""
+case $withFam in
+     no);;
+     yes)
+	for dir in /usr/local/lib ${libdir};do 
+	 if test -f $dir/libfam.so ; then famLib=$dir/libfam.so;break;fi
+	done
+        if test X$famLib = X ; then
+	  AC_MSG_NOTICE([FAM library not found, disabling FAM and real time indexing support])
+	  withFam=no
+        fi
+     ;;
+     *) # The argument should be the path to the fam library
+     famLib=$withFam
+     ;;
+esac
+
+if test X$withFam != Xno ; then
+   AC_DEFINE(RCL_MONITOR, 1, [Real time monitoring option])
+   AC_DEFINE(RCL_USE_FAM, 1, [Compile the fam interface])
+   if test X$famLib != X ; then
+      famLibDir=`dirname $famLib`
+      famBase=`dirname $famLibDir`
+      famBLib=`basename $famLib .so | sed -e s/lib//`
+      if test ! -f $famBase/include/fam.h ; then
+	 AC_MSG_ERROR([fam.h not found in $famBase/include. Specify --with-fam=no to disable fam support])
+      fi
+      LIBFAM="-L$famLibDir -l$famBLib"
+      AC_MSG_NOTICE([fam library directive: $LIBFAM])
+      AC_DEFINE_UNQUOTED(FAM_INCLUDE, "$famBase/include/fam.h",
+	[Path to the fam api include file])
+   else
+	AC_MSG_ERROR([fam library not found])
+   fi
+fi
+
+# Disable use of file extended attributes. With xattrs disabled we can use
+# mtime instead of ctime to look for file mods. Default is enabled.
+AC_ARG_ENABLE(xattr,
+    AC_HELP_STRING([--disable-xattr],
+   [Enable fetching metadata from file extended attributes. This is only
+   useful if some application creates them on (part of) your data set. You also 
+   need to set up appropriate mappings in the configuration.]),
+        xattrEnabled=$enableval, xattrEnabled=yes)
+
+if test X$xattrEnabled = Xyes ; then
+  AC_DEFINE(RCL_USE_XATTR, 1, [Use file extended attributes])
+fi
+
+# Enable use of threads in the indexing pipeline.  
+# This is disabled by default as we usually care little about indexing 
+# absolute performance (more about impact on usability and total 
+# resources used).
+AC_ARG_ENABLE(idxthreads,
+    AC_HELP_STRING([--disable-idxthreads],
+   [Disable multithread indexing.]),
+        idxthreadsEnabled=$enableval, idxthreadsEnabled=yes)
+
+if test X$idxthreadsEnabled = Xyes ; then
+  AC_DEFINE(IDX_THREADS, 1, [Use multiple threads for indexing])
+  NOTHREADS=""
+else
+  NOTHREADS="#"
+fi
+
+# Enable CamelCase word splitting. This is optional because it causes 
+# problems with phrases: with camelcase enabled, "MySQL manual"
+# will be matched by "MySQL manual" and "my sql manual" but not 
+# "mysql manual" (which would need increased slack as manual is now at pos
+# 2 instead of 1
+AC_ARG_ENABLE(camelcase,
+    AC_HELP_STRING([--enable-camelcase],
+   [Enable splitting camelCase words. This is not enabled by default as
+   this makes phrase matches more difficult: you need to use matching
+   case in the phrase query to get a match. Ie querying for 
+   "MySQL manual" and "my sql manual" are the same, but not the same as
+   "mysql manual" (in phrases only and you could raise the phrase slack to
+   get a match).]),
+        camelcaseEnabled=$enableval, camelcaseEnabled=no)
+
+if test X$camelcaseEnabled = Xyes ; then
+  AC_DEFINE(RCL_SPLIT_CAMELCASE, 1, [Split camelCase words])
+fi
+
+# Disable building the python module. This is built by default, because
+# it's really the easiest way to interface and extend recoll. It forces PIC
+# objects for everything (indexing performance impact: 1%), because it's
+# just not worth building the lib twice
+# You can still have a non-pic recoll with:
+#   configure --disable-python-module; make; make install;make clean
+#   configure; make; cd python/recoll; make install
+#
+AC_ARG_ENABLE(python-module,
+    AC_HELP_STRING([--disable-python-module],
+   [Do not build the Python module.]),
+        pythonEnabled=$enableval, pythonEnabled=yes)
+if test X$pythonEnabled = Xyes ; then
+  NOPYTHON=""
+else
+  NOPYTHON="#"
+fi
+
+# Build PIC objects for the library ?
+AC_ARG_ENABLE(pic,
+    AC_HELP_STRING([--disable-pic],
+   [Do not compile library objects as position independant code. 
+    This is incompatible with the php or python extensions.]),
+        picEnabled=$enableval, picEnabled=forpython)
+case $picEnabled in
+forpython) picEnabled=$pythonEnabled; NOPIC=$NOPYTHON;;
+yes) NOPIC="";;
+*) NOPIC="#";;
+esac
+
+if test X$pythonEnabled = Xyes -a X$picEnabled != Xyes; then
+   AC_MSG_ERROR([Python build needs PIC library])
+fi
+
+AC_CHECK_FUNCS(mkdtemp)
+
+##### Look for iconv. This can exist in either libc (ie: Linux, solaris) or
+##### libiconv. We'd need a --with-libiconv= option
+AC_LANG(C++)
+LIBICONV=""
+S_LDFLAGS=$LDFLAGS
+S_CPPFLAGS=$CPPFLAGS
+for dir in ${libdir} /opt/local/lib /usr/local/lib ;do
+  CPPFLAGS="$S_CPPFLAGS -I$dir/../include"
+
+  LDFLAGS="$S_LDFLAGS -L$dir"
+  AC_TRY_LINK([#include 
+#include ],
+      [iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);],
+      LIBICONV="-L$dir";INCICONV=-I$dir/../include)
+  if test A"$LIBICONV" != A ; then
+     break
+  fi
+
+  LDFLAGS="$S_LDFLAGS -L$dir -liconv"
+  AC_TRY_LINK([#include 
+#include ],
+      [iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);],
+      LIBICONV="-L$dir -liconv";INCICONV=-I$dir/../include)
+  if test A"$LIBICONV" != A ; then
+     break
+  fi
+
+done
+
+LDFLAGS=$S_LDFLAGS
+CPPFLAGS=$S_CPPFLAGS
+
+if test A"$LIBICONV" = A ; then
+   AC_MSG_ERROR([Cannot find iconv_open anywhere. Please install iconv])
+   exit 1
+fi
+#echo LIBICONV $LIBICONV
+#echo INCICONV $INCICONV
+
+CPPFLAGS="$CPPFLAGS $INCICONV"
+AC_MSG_CHECKING(for type of inbuf parameter to iconv)
+AC_TRY_COMPILE([
+    #include 
+    #include 
+  ],[
+    iconv(0,(const char **)0,(size_t *)0,(char **)0,(size_t *)0);
+  ], rcl_iconv_inbuf_const="1", rcl_iconv_inbuf_const="0")
+if test X$rcl_iconv_inbuf_const = X1 ; then
+  AC_DEFINE(RCL_ICONV_INBUF_CONST, 1, [iconv parameter 2 is const char**])
+fi
+
+
+############# Putenv
+AC_MSG_CHECKING(for type of string parameter to putenv)
+AC_TRY_COMPILE([
+    #include 
+  ],[
+    putenv((const char *)0);
+  ], rcl_putenv_string_const="1", rcl_putenv_string_const="0")
+if test X$rcl_putenv_string_const = X1 ; then
+  AC_DEFINE(PUTENV_ARG_CONST, 1, [putenv parameter is const])
+fi
+
+
+#### Look for Xapian
+AC_PATH_PROG(XAPIAN_CONFIG, xapian-config, no)
+if test "$XAPIAN_CONFIG" = "no" ; then
+   AC_MSG_ERROR([Cannot find xapian-config command in $PATH. Is
+xapian-core installed ?])
+   exit 1
+fi
+LIBXAPIAN=`$XAPIAN_CONFIG --libs`
+# The --static thing fails with older Xapians. Happily enough they don't
+# need it either (because there are no needed libraries (no uuid and we
+# deal explicitely with libz)
+LIBXAPIANSTATICEXTRA=`$XAPIAN_CONFIG --static --libs 2> /dev/null`
+# Workaround for problem in xapian-config in some versions: wrongly lists
+# libstdc++.la in the lib list
+for i in $LIBXAPIAN ; do
+    case $i in
+    *stdc++*|-lm|-lgcc_s|-lc);;
+    *) tmpxaplib="$tmpxaplib $i";;
+    esac
+done
+LIBXAPIAN=$tmpxaplib
+# Also recent xapian libs need lz even when they think they don't...
+LIBXAPIAN="$LIBXAPIAN -lz"
+LIBXAPIANDIR=`$XAPIAN_CONFIG --libs | awk '{print $1}'`
+case A"$LIBXAPIANDIR" in
+  A-L*) LIBXAPIANDIR=`echo $LIBXAPIANDIR | sed -e 's/-L//'`;;
+  *) LIBXAPIANDIR="";;
+esac
+XAPIANCXXFLAGS=`$XAPIAN_CONFIG --cxxflags`
+
+#echo XAPIAN_CONFIG: $XAPIAN_CONFIG 
+#echo LIBXAPIAN: $LIBXAPIAN
+#echo LIBXAPIANDIR: $LIBXAPIANDIR
+#echo LIBXAPIANSTATICEXTRA: $LIBXAPIANSTATICEXTRA
+#echo XAPIANCXXFLAGS: $XAPIANCXXFLAGS
+
+#### QT
+# The way qt and its tools (qmake especially) are installed is very
+# different between systems (and maybe qt versions)
+#
+# In general we need QTDIR to be set, because it is used inside the
+# qmake-generated makefiles. But there are exceptions: ie on debian3.1 (at
+# least on the sourceforge compile farm), QTDIR is not needed because qmake
+# generates hard paths (and is installed in /usr/bin). We don't want to
+# force the user to set QTDIR if it is not needed.
+#
+# The logic is then to first look for qmake, possibly using QTDIR if it is
+# set.
+# 
+# If QTDIR is not set, we then generate a bogus qt project and check if
+# QTDIR is needed in the Makefile, in which case we complain.
+#
+# QMAKESPEC: on most Linux system, there is a 'default' link inside the
+# mkspecs directory, so that QMAKESPEC is not needed.
+# If QMAKESPEC is not set and needed, the qmake test at the previous test
+# will have failed, and we tell the user to check his environment.
+#
+AC_ARG_ENABLE(qtgui, 
+    AC_HELP_STRING([--disable-qtgui],
+   [Disable the QT-based graphical user interface.]),
+        enableQT=$enableval, enableQT="yes")
+
+if test "$enableQT" != "yes" ; then
+   NOQTMAKE="#"
+   NOCMDLINE=""
+else
+  NOQTMAKE=""
+  NOCMDLINE="#"
+
+  if test X$QTDIR != X ; then
+     PATH=$PATH:$QTDIR/bin
+     export PATH
+  fi
+  
+  if test X$QMAKE = X ; then
+     QMAKE=qmake
+  fi
+  case $QMAKE in
+    */*) QMAKEPATH=$QMAKE;;
+    *) AC_PATH_PROG([QMAKEPATH], $QMAKE, NOTFOUND);;
+  esac
+
+  if test X$QMAKEPATH = XNOTFOUND ; then 
+     AC_MSG_ERROR([Cannot find the qmake program. Maybe you need to install
+  qt development files and tools and/or set the QTDIR environment variable?])
+  fi
+  QMAKE=$QMAKEPATH
+  
+  # MAC OS X: we don't support this (the native search tool is more than
+  # good enough), but we make things work just enough so that the program can
+  # be compiled and roughly installed (not as a .app, but to /usr/local),
+  # basically to enable using a Macbook for development
+  if test X$sys = XDarwin ; then
+     # The default is xcode
+     QMAKE="${QMAKE} -spec macx-g++"
+  fi
+  
+  # Discriminate qt3/4. Qt3 qmake prints its version on stderr but we don't
+  # depend on this. We try to detect the qt 4 version string instead.
+  qmakevers="`${QMAKE} --version 2>&1`"
+  #echo "qmake version: $qmakevers"
+  v4=`expr "$qmakevers" : '.*Qt[ ][ ]*version[ ][ ]*4.*'`
+  if test X$v4 = X0 ; then 
+     AC_MSG_ERROR([qmake seems to be using Qt version 3 which is not supported any more])
+     QTGUI=qtgui
+  else
+    AC_MSG_NOTICE([using qt version 4 user interface])
+    QTGUI=qtgui
+  fi
+  
+  cd $QTGUI
+  # We just want a .pro file: no problem with unsubstituted variables at 
+  # this point.
+  test -f recoll.pro && chmod +w recoll.pro
+  cp recoll.pro.in recoll.pro
+  #echo QMAKE ${QMAKE}
+  ${QMAKE} recoll.pro
+  if test $? != 0 ; then
+     AC_MSG_ERROR([Cannot use qmake to generate a Makefile. Maybe you need to
+  check the QTDIR and QMAKESPEC environment variables?])
+  fi
+  # is QTDIR set and do we actually need it ?
+  if test X$QTDIR = X ; then
+     QTDIRNEEDED=`grep INCPATH Makefile | grep = | grep QTDIR`
+     if test "X$QTDIRNEEDED" != "X" ; then
+         AC_MSG_ERROR([You need to set the QTDIR variable to point to the QT
+  installation. If there is no default mkspecs, you should also set QMAKESPEC])
+     fi
+  fi
+  cd ..
+
+
+ ##### Using Qt webkit for reslist display? Else Qt textbrowser
+  AC_ARG_ENABLE(webkit,
+    AC_HELP_STRING([--disable-webkit],
+      [Disable use of qt-webkit (only meaningful if qtgui is enabled).]),
+        enableWebkit=$enableval, enableWebkit="yes")
+
+  if test "$enableWebkit" = "yes" ; then
+   QMAKE_ENABLE_WEBKIT=""
+   QMAKE_DISABLE_WEBKIT="#"
+  else
+   QMAKE_ENABLE_WEBKIT="#"
+   QMAKE_DISABLE_WEBKIT=""
+  fi
+
+
+
+ ##### Using QZeitGeist lib ? Default no for now
+  AC_ARG_WITH(qzeitgeist,
+    AC_HELP_STRING([--with-qzeitgeist],
+      [Enable the use of the qzeitgeist library to send zeitgeist events.]),
+        withQZeitgeist=$withval, withQZeitgeist="no")
+
+  case "$withQZeitgeist" in 
+    no)  LIBQZEITGEIST=;;
+    yes) LIBQZEITGEIST=-lqzeitgeist;;
+    *)   LIBQZEITGEIST=$withQZeitgeist;;
+  esac	
+
+  if test "$withQZeitgeist" != "no" ; then
+   QMAKE_ENABLE_ZEITGEIST=""
+   QMAKE_DISABLE_ZEITGEIST="#"
+  else
+   QMAKE_ENABLE_ZEITGEIST="#"
+   QMAKE_DISABLE_ZEITGEIST=""
+  fi
+
+  AC_CONFIG_FILES($QTGUI/recoll.pro)
+
+  ##################### End QT stuff
+fi
+
+
+### X11: this is needed for the session monitoring code (in recollindex -m)
+AC_ARG_ENABLE(x11mon, 
+    AC_HELP_STRING([--disable-x11mon],
+   [Disable recollindex support for X11 session monitoring.]),
+        enableX11mon=$enableval, enableX11mon="yes")
+
+if test X$withInotify = Xno -a X$withFam = Xno ; then
+  enableX11mon=no
+fi
+
+if test "$enableX11mon" = "yes" ; then
+  AC_PATH_XTRA
+  X_LIBX11=-lX11
+else
+  AC_DEFINE(DISABLE_X11MON, 1, [No X11 session monitoring support])
+  X_LIBX11=""
+fi
+#echo X_CFLAGS "'$X_CFLAGS'" X_PRE_LIBS "'$X_PRE_LIBS'" X_LIBS \
+#      "'$X_LIBS'" X_LIBX11 "'$X_LIBX11'" X_EXTRA_LIBS "'$X_EXTRA_LIBS'"
+
+
+# We have to expand prefix in here, couldn't find a way to do it inside 
+# the qt gui .pro file or Makefile. This just means that you can't change
+# prefix at build time. It works at install time because we dont' use the
+# qtgui Makefile
+m_prefix=$prefix
+test "X$m_prefix" = "XNONE" && m_prefix=/usr/local
+m_datadir=${m_prefix}/share
+QTRECOLL_DATADIR=${m_datadir}/recoll
+
+RCLVERSION=`cat VERSION`
+RCLLIBVERSION=$RCLVERSION
+
+AC_SUBST(X_CFLAGS)
+AC_SUBST(X_PRE_LIBS)
+AC_SUBST(X_LIBS)
+AC_SUBST(X_LIBX11)
+AC_SUBST(X_EXTRA_LIBS)
+AC_SUBST(INCICONV)
+AC_SUBST(LIBICONV)
+AC_SUBST(LIBXAPIAN)
+AC_SUBST(LIBXAPIANDIR)
+AC_SUBST(LIBXAPIANSTATICEXTRA)
+AC_SUBST(LIBFAM)
+AC_SUBST(QMAKE)
+AC_SUBST(QTGUI)
+AC_SUBST(QTRECOLL_DATADIR)
+AC_SUBST(XAPIANCXXFLAGS)
+AC_SUBST(HAVE_MKDTEMP)
+AC_SUBST(NOQTMAKE)
+AC_SUBST(NOCMDLINE)
+AC_SUBST(QMAKE_ENABLE_WEBKIT)
+AC_SUBST(QMAKE_DISABLE_WEBKIT)
+AC_SUBST(QMAKE_ENABLE_ZEITGEIST)
+AC_SUBST(QMAKE_DISABLE_ZEITGEIST)
+AC_SUBST(LIBQZEITGEIST)
+AC_SUBST(NOPIC)
+AC_SUBST(NOTHREADS)
+AC_SUBST(NOPYTHON)
+AC_SUBST(RCLVERSION)
+AC_SUBST(RCLLIBVERSION)
+
+# All object files depend on localdefs which has the cc flags. Avoid
+# changing it unless necessary
+AC_CONFIG_FILES(mk/localdefs.new:mk/localdefs.in)
+AC_CONFIG_FILES(recollinstall)
+AC_CONFIG_FILES(Makefile)
+AC_CONFIG_FILES(sampleconf/recoll.conf)
+AC_CONFIG_FILES(common/rclversion.h)
+AC_CONFIG_FILES(python/recoll/setup.py)
+
+for d in bincimapmime index lib query
+do 
+    rm -f $d/alldeps.stamp
+    cp -f /dev/null $d/alldeps
+done
+
+(cd lib;RCLLIBVERSION=$RCLLIBVERSION sh mkMake)
+
+AC_OUTPUT
+
+if cmp -s mk/localdefs mk/localdefs.new ; then
+  rm -f mk/localdefs.new
+else
+  mv -f mk/localdefs.new mk/localdefs
+fi
+
diff --git a/src/desktop/hotrecoll.py b/src/desktop/hotrecoll.py
new file mode 100755
index 00000000..28cb7c35
--- /dev/null
+++ b/src/desktop/hotrecoll.py
@@ -0,0 +1,66 @@
+#!/usr/bin/python
+#
+# This script should be linked to a keyboard shortcut. Under gnome,
+# you can do this from the main preferences menu, or directly execute
+# "gnome-keybinding-properties"
+#
+# Make the script executable. Install it somewhere in the executable
+# path ("echo $PATH" to check what's in there), and then just enter
+# its name as the action to perform, or copy it anywhere and copy the
+# full path as the action.
+
+import gtk
+import wnck
+import os
+import sys
+from optparse import OptionParser
+
+def main():
+    parser = OptionParser()
+    parser.add_option("-m", "--move-away", action="store_true", default=False,
+                      dest="clear_workspace", 
+                      help="iconify to other workspace to avoid crowding panel")
+    (options, args) = parser.parse_args()
+
+    screen = wnck.screen_get_default()
+    while gtk.events_pending():
+        gtk.main_iteration()
+
+    recollMain = ""
+    recollwins = [];
+    for window in screen.get_windows():
+        if window.get_class_group().get_name() == "Recoll":
+            if window.get_name() == "Recoll":
+                recollMain = window
+            recollwins.append(window)
+
+    if not recollMain:
+        os.system("recoll&")
+        sys.exit(0)
+
+    # Check the main window state, and either activate or minimize all
+    # recoll windows.
+    workspace = screen.get_active_workspace()
+    if not recollMain.is_visible_on_workspace(workspace):
+        for win in recollwins:
+            win.move_to_workspace(workspace)
+            if win != recollMain:
+                win.unminimize(gtk.get_current_event_time())
+        recollMain.activate(gtk.get_current_event_time())
+    else:
+        otherworkspace = None
+        if options.clear_workspace:
+            # We try to minimize to another workspace
+            wkspcs = screen.get_workspaces()
+            for wkspc in wkspcs:
+                if wkspc.get_number() != workspace.get_number():
+                    otherworkspace = wkspc
+                    break
+        for win in recollwins:
+            if otherworkspace:
+                win.move_to_workspace(otherworkspace)
+            win.minimize()
+
+if __name__ == '__main__':
+  main()
+  
diff --git a/src/desktop/recoll-searchgui.desktop b/src/desktop/recoll-searchgui.desktop
new file mode 100644
index 00000000..225b8c3b
--- /dev/null
+++ b/src/desktop/recoll-searchgui.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Categories=Utility;Filesystem;Database;
+Comment=Find documents by specifying search terms
+Exec=recoll
+GenericName=Local Text Search
+Icon=recoll
+Name=Recoll
+Terminal=false
+Type=Application
diff --git a/src/desktop/recoll.png b/src/desktop/recoll.png
new file mode 100644
index 00000000..42e78483
Binary files /dev/null and b/src/desktop/recoll.png differ
diff --git a/src/desktop/recoll.svg b/src/desktop/recoll.svg
new file mode 100644
index 00000000..b27b9fdc
--- /dev/null
+++ b/src/desktop/recoll.svg
@@ -0,0 +1,275 @@
+
+
+
+
+  
+  
+  
+    
+      
+        image/svg+xml
+        
+        
+      
+    
+  
+  
+    
+      
+      
+      
+      
+      
+    
+    
+      
+      
+      
+      
+      
+    
+    
+      
+      
+      
+      
+      
+    
+    
+      
+      
+      
+      
+      
+    
+    
+      
+      
+      
+      
+      
+    
+  
+
diff --git a/src/desktop/recoll.xcf b/src/desktop/recoll.xcf
new file mode 100644
index 00000000..3c93d9e7
Binary files /dev/null and b/src/desktop/recoll.xcf differ
diff --git a/src/desktop/recoll_index_on_ac.sh b/src/desktop/recoll_index_on_ac.sh
new file mode 100755
index 00000000..751fefce
--- /dev/null
+++ b/src/desktop/recoll_index_on_ac.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+
+# This is a shell script that starts and stops the recollindex daemon
+# depending on whether or not the power supply is plugged in.  It should be
+# called from the file ~/.config/autostart/recollindex.desktop.
+#
+# That is: make the script executable (chmod +x) and replace in
+# recollindex.desk the line:
+#   Exec=recollindex -w 60 -m 
+# With
+#   Exec=/path/to/recoll_index_on_ac.sh
+#
+#
+# By: The Doctor (drwho at virtadpt dot net)
+# License: GPLv3
+# 
+# Modifications by J.F Dockes 
+#  - replaced "acpi" usage with "on_ac_power" which seems to be both
+#    more common and more universal.
+#  - Changed the default to be that we run recollindex if we can't determine
+#    power status (ie: on_ac_power not installed or not working: we're most
+#    probably not running on a laptop). 
+
+INDEXER="recollindex -w 60 -m"
+ACPI=`which on_ac_power`
+
+# If the on_ac_power script isn't installed, warn, but run anyway. Maybe
+# this is not a laptop or not linux.
+if test "x$ACPI" = "x" ; then
+    echo "on_ac_power utility not found. Starting recollindex anyway."
+fi
+
+while true; do
+    # Determine whether or not the power supply is plugged in.
+    if test "x$ACPI" != "x" ; then
+        on_ac_power
+        STATUS=$?
+    else
+        STATUS=0
+    fi
+
+    # Get the PID of the indexing daemon.
+    if test -f ~/.recoll/index.pid ; then 
+       PID=`cat ~/.recoll/index.pid`
+       # Make sure that this is recollindex running. pid could have
+       # been reallocated
+       ps ax | egrep "^[ \t]*$PID " | grep -q recollindex || PID=""
+    fi
+#    echo "Recollindex pid is $PID"
+
+    if test $STATUS -eq 1 ; then
+	# The power supply is not plugged in.  See if the indexing daemon is
+	# running, and if it is, kill it.  The indexing daemon will not be
+	# started.
+        if test x"$PID" != x; then
+	    kill $PID
+	fi
+    else
+	# The power supply is plugged in or we just don't know.  
+        # See if the indexing daemon is running, and if it's not start it.
+        if test -z "$PID" ; then
+	    $INDEXER
+	fi
+    fi
+
+    # Go to sleep for a while.
+    sleep 120
+    continue
+done
diff --git a/src/desktop/recollindex.desktop b/src/desktop/recollindex.desktop
new file mode 100644
index 00000000..ef75ea26
--- /dev/null
+++ b/src/desktop/recollindex.desktop
@@ -0,0 +1,13 @@
+[Desktop Entry]
+Name=Recoll real time indexer
+Comment=Runs in background to extract and index text from modified documents
+Icon=system-run
+Exec=recollindex -w 60 -m
+Terminal=false
+TerminalOptions=
+Type=Application
+Categories=Utility;Filesystem;Database;
+NoDisplay=true
+X-GNOME-Autostart-enabled=true
+X-KDE-autostart-after=panel
+X-KDE-UniqueApplet=true
diff --git a/src/desktop/unity-lens-recoll/AUTHORS b/src/desktop/unity-lens-recoll/AUTHORS
new file mode 100644
index 00000000..3083b9e6
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/AUTHORS
@@ -0,0 +1,3 @@
+Original bliss apps lens Mikkel Kamstrup Erlandsen 
+Recoll version: J.F. Dockes 
+
diff --git a/src/desktop/unity-lens-recoll/COPYING b/src/desktop/unity-lens-recoll/COPYING
new file mode 100644
index 00000000..44325404
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/COPYING
@@ -0,0 +1,676 @@
+
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. 
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+ 
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+  
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    
+    Copyright (C)   
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+      Copyright (C)   
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+.
+
diff --git a/src/desktop/unity-lens-recoll/ChangeLog b/src/desktop/unity-lens-recoll/ChangeLog
new file mode 100644
index 00000000..f82dedb4
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/ChangeLog
@@ -0,0 +1,58 @@
+changeset:   2631:ea84aedd25e0
+parent:      2628:d1665b3a0e57
+user:        Jean-Francois Dockes 
+date:        Fri Mar 23 11:33:27 2012 +0100
+files:       src/desktop/unity-lens-recoll/bin/unity-recoll-daemon.in src/desktop/unity-lens-recoll/recollscope/rclsearch.py
+description:
+unity-lens-recoll with category filtering usable
+
+
+changeset:   2626:adb6eff2a9f6
+user:        Jean-Francois Dockes 
+date:        Fri Mar 23 08:58:34 2012 +0100
+files:       src/desktop/unity-lens-recoll/data/recollbg24.png
+description:
+none
+
+
+changeset:   2622:10162119234f
+user:        Jean-Francois Dockes 
+date:        Fri Mar 23 07:29:53 2012 +0100
+files:       src/desktop/unity-lens-recoll/bin/unity-recoll-daemon.in src/desktop/unity-lens-recoll/recollscope/rclsearch.py
+description:
+removed debug traces
+
+
+changeset:   2621:859ec39916ec
+user:        Jean-Francois Dockes 
+date:        Thu Mar 22 19:13:04 2012 +0100
+files:       src/desktop/unity-lens-recoll/Makefile.am src/desktop/unity-lens-recoll/Makefile.in src/desktop/unity-lens-recoll/README src/desktop/unity-lens-recoll/bin/unity-recoll-daemon.in src/desktop/unity-lens-recoll/data/recoll-lens.svg src/desktop/unity-lens-recoll/data/recoll.lens.in src/desktop/unity-lens-recoll/recollscope/rclsearch.py
+description:
+changed icon. Added filter code, but wont display
+
+
+changeset:   2620:44f1d9457b8c
+user:        Jean-Francois Dockes 
+date:        Thu Mar 22 13:54:14 2012 +0100
+files:       src/desktop/unity-lens-recoll/bin/unity-recoll-daemon.in src/desktop/unity-lens-recoll/recollscope/rclsearch.py
+description:
+usable. Needs new svg icon
+
+
+changeset:   2619:8ae983a1c2b7
+user:        Jean-Francois Dockes 
+date:        Thu Mar 22 08:34:57 2012 +0100
+files:       src/desktop/unity-lens-recoll/Makefile.am src/desktop/unity-lens-recoll/Makefile.in src/desktop/unity-lens-recoll/bin/unity-recoll-daemon.in src/desktop/unity-lens-recoll/configure src/desktop/unity-lens-recoll/configure.ac src/desktop/unity-lens-recoll/data/recoll.lens.in src/desktop/unity-lens-recoll/data/unity-lens-recoll.menu.in src/desktop/unity-lens-recoll/data/unity-lens-recoll.service.in src/desktop/unity-lens-recoll/recoll/__init__.py src/desktop/unity-lens-recoll/recoll/rclsearch.py src/desktop/unity-lens-recoll/recollscope/__init__.py src/desktop/unity-lens-recoll/recollscope/rclsearch.py
+description:
+1st raw version installable and searching
+
+
+changeset:   2618:35b76344948e
+parent:      -1:000000000000
+user:        Jean-Francois Dockes 
+date:        Wed Mar 21 18:44:23 2012 +0100
+files:       src/desktop/unity-lens-recoll/AUTHORS src/desktop/unity-lens-recoll/COPYING src/desktop/unity-lens-recoll/ChangeLog src/desktop/unity-lens-recoll/INSTALL src/desktop/unity-lens-recoll/Makefile.am src/desktop/unity-lens-recoll/Makefile.in src/desktop/unity-lens-recoll/NEWS src/desktop/unity-lens-recoll/README src/desktop/unity-lens-recoll/acinclude.m4 src/desktop/unity-lens-recoll/aclocal.m4 src/desktop/unity-lens-recoll/bin/unity-recoll-daemon.in src/desktop/unity-lens-recoll/configure src/desktop/unity-lens-recoll/configure.ac src/desktop/unity-lens-recoll/data/recoll-lens.svg src/desktop/unity-lens-recoll/data/recoll.lens.in src/desktop/unity-lens-recoll/data/unity-lens-recoll.menu.in src/desktop/unity-lens-recoll/data/unity-lens-recoll.service.in src/desktop/unity-lens-recoll/install-sh src/desktop/unity-lens-recoll/missing src/desktop/unity-lens-recoll/py-compile src/desktop/unity-lens-recoll/recoll/__init__.py src/desktop/unity-lens-recoll/recoll/rclsearch.py
+description:
+initial version after renaming bliss things
+
+
diff --git a/src/desktop/unity-lens-recoll/INSTALL b/src/desktop/unity-lens-recoll/INSTALL
new file mode 100644
index 00000000..7d1c323b
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/INSTALL
@@ -0,0 +1,365 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+
+   Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.  This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+   Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.  Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below.  The lack of an optional feature in a given package is not
+necessarily a bug.  More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+   The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.
+
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package, generally using the just-built uninstalled binaries.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.  When installing into a prefix owned by root, it is
+     recommended that the package be configured and built as a regular
+     user, and only the `make install' phase executed with root
+     privileges.
+
+  5. Optionally, type `make installcheck' to repeat any self-tests, but
+     this time using the binaries in their final installed location.
+     This target does not install anything.  Running this target as a
+     regular user, particularly if the prior `make install' required
+     root privileges, verifies that the installation completed
+     correctly.
+
+  6. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+  7. Often, you can also type `make uninstall' to remove the installed
+     files again.  In practice, not all packages have tested that
+     uninstallation works correctly, even though it is required by the
+     GNU Coding Standards.
+
+  8. Some packages, particularly those that use Automake, provide `make
+     distcheck', which can by used by developers to test that all other
+     targets like `make install' and `make uninstall' work correctly.
+     This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you can use GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.  This
+is known as a "VPATH" build.
+
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+   By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.  In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+   The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+   The first method involves providing an override variable for each
+affected directory.  For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'.  Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated.  The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+   The second method involves providing the `DESTDIR' variable.  For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names.  The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters.  On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+   Some packages offer the ability to configure how verbose the
+execution of `make' will be.  For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `' header file.  The option `-nodtk' can be used as
+a workaround.  If GNU CC is not installed, it is therefore recommended
+to try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
+   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+   On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'.  It is recommended to use the following options:
+
+     ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS
+     KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+   Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug.  Until the bug is fixed you can use this workaround:
+
+     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+     Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
+
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff --git a/src/desktop/unity-lens-recoll/Makefile.am b/src/desktop/unity-lens-recoll/Makefile.am
new file mode 100644
index 00000000..91e4f20f
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/Makefile.am
@@ -0,0 +1,62 @@
+NULL = 
+
+EXTRA_DIST = \
+  bin/unity-recoll-daemon.in \
+  data/recoll.lens.in \
+  data/recollbg24.png \
+  data/unity-lens-recoll.service.in \
+  $(docs_DATA) \
+  $(NULL)
+
+DISTCLEANFILES = 
+
+DISTCHECK_CONFIGURE_FLAGS = 
+
+######################################################
+# Documents
+######################################################
+docsdir = $(datadir)/doc/unity-lens-recoll
+docs_DATA = \
+  AUTHORS \
+  ChangeLog \
+  NEWS \
+  README \
+  $(NULL)
+
+######################################################
+# Lens code
+######################################################
+lensdir = $(datadir)/unity-lens-recoll/recollscope
+lens_PYTHON = \
+  recollscope/__init__.py \
+  recollscope/rclsearch.py \
+  $(NULL)
+
+daemondir = $(datadir)/unity-lens-recoll/
+daemon_SCRIPTS = \
+  bin/unity-recoll-daemon \
+  $(NULL)
+
+######################################################
+# Unity .lens file
+######################################################
+dotlensdir = $(datadir)/unity/lenses/recoll
+dotlens_DATA = \
+  data/recoll.lens \
+  $(NULL)
+
+######################################################
+# Icons
+######################################################
+iconsdir = $(datadir)/unity-lens-recoll
+icons_DATA = \
+  data/recollbg24.png \
+  $(NULL)
+
+######################################################
+# DBus .service file
+######################################################
+dbusdir = $(datadir)/dbus-1/services
+dbus_DATA = \
+  data/unity-lens-recoll.service \
+  $(NULL)
diff --git a/src/desktop/unity-lens-recoll/Makefile.in b/src/desktop/unity-lens-recoll/Makefile.in
new file mode 100644
index 00000000..a2854ab2
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/Makefile.in
@@ -0,0 +1,719 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(lens_PYTHON) \
+	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/bin/unity-recoll-daemon.in \
+	$(top_srcdir)/configure $(top_srcdir)/data/recoll.lens.in \
+	$(top_srcdir)/data/unity-lens-recoll.service.in AUTHORS \
+	COPYING ChangeLog INSTALL NEWS install-sh missing py-compile
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES = bin/unity-recoll-daemon data/recoll.lens \
+	data/unity-lens-recoll.service
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(daemondir)" "$(DESTDIR)$(lensdir)" \
+	"$(DESTDIR)$(dbusdir)" "$(DESTDIR)$(docsdir)" \
+	"$(DESTDIR)$(dotlensdir)" "$(DESTDIR)$(iconsdir)"
+SCRIPTS = $(daemon_SCRIPTS)
+SOURCES =
+DIST_SOURCES =
+py_compile = $(top_srcdir)/py-compile
+DATA = $(dbus_DATA) $(docs_DATA) $(dotlens_DATA) $(icons_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d "$(distdir)" \
+    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr "$(distdir)"; }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CYGPATH_W = @CYGPATH_W@
+DATADIR = @DATADIR@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBEXECDIR = @LIBEXECDIR@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PREFIX = @PREFIX@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+NULL = 
+EXTRA_DIST = \
+  bin/unity-recoll-daemon.in \
+  data/recoll.lens.in \
+  data/recollbg24.png \
+  data/unity-lens-recoll.service.in \
+  $(docs_DATA) \
+  $(NULL)
+
+DISTCLEANFILES = 
+DISTCHECK_CONFIGURE_FLAGS = 
+
+######################################################
+# Documents
+######################################################
+docsdir = $(datadir)/doc/unity-lens-recoll
+docs_DATA = \
+  AUTHORS \
+  ChangeLog \
+  NEWS \
+  README \
+  $(NULL)
+
+
+######################################################
+# Lens code
+######################################################
+lensdir = $(datadir)/unity-lens-recoll/recollscope
+lens_PYTHON = \
+  recollscope/__init__.py \
+  recollscope/rclsearch.py \
+  $(NULL)
+
+daemondir = $(datadir)/unity-lens-recoll/
+daemon_SCRIPTS = \
+  bin/unity-recoll-daemon \
+  $(NULL)
+
+
+######################################################
+# Unity .lens file
+######################################################
+dotlensdir = $(datadir)/unity/lenses/recoll
+dotlens_DATA = \
+  data/recoll.lens \
+  $(NULL)
+
+
+######################################################
+# Icons
+######################################################
+iconsdir = $(datadir)/unity-lens-recoll
+icons_DATA = \
+  data/recollbg24.png \
+  $(NULL)
+
+
+######################################################
+# DBus .service file
+######################################################
+dbusdir = $(datadir)/dbus-1/services
+dbus_DATA = \
+  data/unity-lens-recoll.service \
+  $(NULL)
+
+all: all-am
+
+.SUFFIXES:
+am--refresh:
+	@:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
+	      $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    echo ' $(SHELL) ./config.status'; \
+	    $(SHELL) ./config.status;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	$(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	$(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+bin/unity-recoll-daemon: $(top_builddir)/config.status $(top_srcdir)/bin/unity-recoll-daemon.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+data/recoll.lens: $(top_builddir)/config.status $(top_srcdir)/data/recoll.lens.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+data/unity-lens-recoll.service: $(top_builddir)/config.status $(top_srcdir)/data/unity-lens-recoll.service.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+install-daemonSCRIPTS: $(daemon_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(daemondir)" || $(MKDIR_P) "$(DESTDIR)$(daemondir)"
+	@list='$(daemon_SCRIPTS)'; test -n "$(daemondir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(daemondir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(daemondir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-daemonSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(daemon_SCRIPTS)'; test -n "$(daemondir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(daemondir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(daemondir)" && rm -f $$files
+install-lensPYTHON: $(lens_PYTHON)
+	@$(NORMAL_INSTALL)
+	test -z "$(lensdir)" || $(MKDIR_P) "$(DESTDIR)$(lensdir)"
+	@list='$(lens_PYTHON)'; dlist=; list2=; test -n "$(lensdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \
+	  if test -f $$b$$p; then \
+	    $(am__strip_dir) \
+	    dlist="$$dlist $$f"; \
+	    list2="$$list2 $$b$$p"; \
+	  else :; fi; \
+	done; \
+	for file in $$list2; do echo $$file; done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(lensdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(lensdir)" || exit $$?; \
+	done || exit $$?; \
+	if test -n "$$dlist"; then \
+	  if test -z "$(DESTDIR)"; then \
+	    PYTHON=$(PYTHON) $(py_compile) --basedir "$(lensdir)" $$dlist; \
+	  else \
+	    PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(lensdir)" $$dlist; \
+	  fi; \
+	else :; fi
+
+uninstall-lensPYTHON:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lens_PYTHON)'; test -n "$(lensdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	filesc=`echo "$$files" | sed 's|$$|c|'`; \
+	fileso=`echo "$$files" | sed 's|$$|o|'`; \
+	echo " ( cd '$(DESTDIR)$(lensdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(lensdir)" && rm -f $$files || exit $$?; \
+	echo " ( cd '$(DESTDIR)$(lensdir)' && rm -f" $$filesc ")"; \
+	cd "$(DESTDIR)$(lensdir)" && rm -f $$filesc || exit $$?; \
+	echo " ( cd '$(DESTDIR)$(lensdir)' && rm -f" $$fileso ")"; \
+	cd "$(DESTDIR)$(lensdir)" && rm -f $$fileso
+install-dbusDATA: $(dbus_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(dbusdir)" || $(MKDIR_P) "$(DESTDIR)$(dbusdir)"
+	@list='$(dbus_DATA)'; test -n "$(dbusdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dbusdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(dbusdir)" || exit $$?; \
+	done
+
+uninstall-dbusDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dbus_DATA)'; test -n "$(dbusdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(dbusdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(dbusdir)" && rm -f $$files
+install-docsDATA: $(docs_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(docsdir)" || $(MKDIR_P) "$(DESTDIR)$(docsdir)"
+	@list='$(docs_DATA)'; test -n "$(docsdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docsdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(docsdir)" || exit $$?; \
+	done
+
+uninstall-docsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(docs_DATA)'; test -n "$(docsdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(docsdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(docsdir)" && rm -f $$files
+install-dotlensDATA: $(dotlens_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(dotlensdir)" || $(MKDIR_P) "$(DESTDIR)$(dotlensdir)"
+	@list='$(dotlens_DATA)'; test -n "$(dotlensdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dotlensdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(dotlensdir)" || exit $$?; \
+	done
+
+uninstall-dotlensDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dotlens_DATA)'; test -n "$(dotlensdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(dotlensdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(dotlensdir)" && rm -f $$files
+install-iconsDATA: $(icons_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(iconsdir)" || $(MKDIR_P) "$(DESTDIR)$(iconsdir)"
+	@list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \
+	done
+
+uninstall-iconsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(iconsdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(iconsdir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	$(am__remove_distdir)
+	test -d "$(distdir)" || mkdir "$(distdir)"
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	-test -n "$(am__skip_mode_fix)" \
+	|| find "$(distdir)" -type d ! -perm -755 \
+		-exec chmod u+rwx,go+rx {} \; -o \
+	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+dist-bzip2: distdir
+	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+dist-lzma: distdir
+	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+	$(am__remove_distdir)
+
+dist-xz: distdir
+	tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+	$(am__remove_distdir)
+
+dist-tarZ: distdir
+	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+	$(am__remove_distdir)
+
+dist-shar: distdir
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__remove_distdir)
+
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__remove_distdir)
+
+dist dist-all: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+	case '$(DIST_ARCHIVES)' in \
+	*.tar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+	*.tar.bz2*) \
+	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+	*.tar.lzma*) \
+	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+	*.tar.xz*) \
+	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+	*.tar.Z*) \
+	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+	*.shar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+	*.zip*) \
+	  unzip $(distdir).zip ;;\
+	esac
+	chmod -R a-w $(distdir); chmod a+w $(distdir)
+	mkdir $(distdir)/_build
+	mkdir $(distdir)/_inst
+	chmod a-w $(distdir)
+	test -d $(distdir)/_build || exit 0; \
+	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+	  && am__cwd=`pwd` \
+	  && $(am__cd) $(distdir)/_build \
+	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+	  && $(MAKE) $(AM_MAKEFLAGS) check \
+	  && $(MAKE) $(AM_MAKEFLAGS) install \
+	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+	        distuninstallcheck \
+	  && chmod -R a-w "$$dc_install_base" \
+	  && ({ \
+	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+	  && rm -rf "$$dc_destdir" \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+	  && rm -rf $(DIST_ARCHIVES) \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+	  && cd "$$am__cwd" \
+	  || exit 1
+	$(am__remove_distdir)
+	@(echo "$(distdir) archives ready for distribution: "; \
+	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+	@$(am__cd) '$(distuninstallcheck_dir)' \
+	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	   || { echo "ERROR: files left after uninstall:" ; \
+	        if test -n "$(DESTDIR)"; then \
+	          echo "  (check DESTDIR support)"; \
+	        fi ; \
+	        $(distuninstallcheck_listfiles) ; \
+	        exit 1; } >&2
+distcleancheck: distclean
+	@if test '$(srcdir)' = . ; then \
+	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+	  exit 1 ; \
+	fi
+	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+	  || { echo "ERROR: files left in build directory after distclean:" ; \
+	       $(distcleancheck_listfiles) ; \
+	       exit 1; } >&2
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) $(DATA)
+installdirs:
+	for dir in "$(DESTDIR)$(daemondir)" "$(DESTDIR)$(lensdir)" "$(DESTDIR)$(dbusdir)" "$(DESTDIR)$(docsdir)" "$(DESTDIR)$(dotlensdir)" "$(DESTDIR)$(iconsdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-daemonSCRIPTS install-dbusDATA \
+	install-docsDATA install-dotlensDATA install-iconsDATA \
+	install-lensPYTHON
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-daemonSCRIPTS uninstall-dbusDATA \
+	uninstall-docsDATA uninstall-dotlensDATA uninstall-iconsDATA \
+	uninstall-lensPYTHON
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am am--refresh check check-am clean clean-generic dist \
+	dist-all dist-bzip2 dist-gzip dist-lzma dist-shar dist-tarZ \
+	dist-xz dist-zip distcheck distclean distclean-generic \
+	distcleancheck distdir distuninstallcheck dvi dvi-am html \
+	html-am info info-am install install-am install-daemonSCRIPTS \
+	install-data install-data-am install-dbusDATA install-docsDATA \
+	install-dotlensDATA install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-iconsDATA \
+	install-info install-info-am install-lensPYTHON install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-daemonSCRIPTS uninstall-dbusDATA uninstall-docsDATA \
+	uninstall-dotlensDATA uninstall-iconsDATA uninstall-lensPYTHON
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/desktop/unity-lens-recoll/NEWS b/src/desktop/unity-lens-recoll/NEWS
new file mode 100644
index 00000000..48e0972c
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/NEWS
@@ -0,0 +1 @@
+2012-03-21: unity-lens-recoll cloned from unity-lens-bliss-0.1.3
diff --git a/src/desktop/unity-lens-recoll/README b/src/desktop/unity-lens-recoll/README
new file mode 100644
index 00000000..5f259b3c
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/README
@@ -0,0 +1,36 @@
+ABOUT
+-----
+
+ unity-lens-recoll 
+ Work derived from:
+   unity-lens-bliss,
+   Copyright 2011, Canonical Ltd
+   Authored by Mikkel Kamstrup Erlandsen 
+   Distribute under the terms of the GNU General Public License v3
+
+ Modifications by J.F. Dockes  Copyright 2012, J.F. Dockes
+ License as original work.
+
+    unity-lens-bliss is is a very simple application launcher lens for
+    Unity. Mostly meant to be used as a starting point for users wanting to
+    write their own lens or customize this lens to their needs.
+
+unity-lens-recoll uses the starting point and replaces the search part with
+recoll queries.
+
+Install with:
+
+  ./configure --prefix=/usr --sysconfdir=/etc && make && sudo make install
+
+
+RESOURCES
+---------
+
+The source code is on bitbucket.org: http://bitbucket.org/medoc/recoll/src/
+Look inside src/desktop/unity-lens-recoll
+
+Packages on the recoll PPA:
+         https://launchpad.net/~recoll-backports/+archive/recoll-1.15-on
+
+Bugs should be reported on the bitbucket recoll issues tracker:
+    https://bitbucket.org/medoc/recoll/issues
diff --git a/src/desktop/unity-lens-recoll/acinclude.m4 b/src/desktop/unity-lens-recoll/acinclude.m4
new file mode 100644
index 00000000..0c711739
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/acinclude.m4
@@ -0,0 +1,40 @@
+dnl AS_AC_EXPAND(VAR, CONFIGURE_VAR)
+dnl
+dnl example
+dnl AS_AC_EXPAND(SYSCONFDIR, $sysconfdir)
+dnl will set SYSCONFDIR to /usr/local/etc if prefix=/usr/local
+
+AC_DEFUN([AS_AC_EXPAND],
+[
+  EXP_VAR=[$1]
+  FROM_VAR=[$2]
+
+  dnl first expand prefix and exec_prefix if necessary
+  prefix_save=$prefix
+  exec_prefix_save=$exec_prefix
+
+  dnl if no prefix given, then use /usr/local, the default prefix
+  if test "x$prefix" = "xNONE"; then
+    prefix=$ac_default_prefix
+  fi
+  dnl if no exec_prefix given, then use prefix
+  if test "x$exec_prefix" = "xNONE"; then
+    exec_prefix=$prefix
+  fi
+
+  full_var="$FROM_VAR"
+  dnl loop until it doesn't change anymore
+  while true; do
+    new_full_var="`eval echo $full_var`"
+    if test "x$new_full_var"="x$full_var"; then break; fi
+    full_var=$new_full_var
+  done
+
+  dnl clean up
+  full_var=$new_full_var
+  AC_SUBST([$1], "$full_var")
+
+  dnl restore prefix and exec_prefix
+  prefix=$prefix_save
+  exec_prefix=$exec_prefix_save
+])
diff --git a/src/desktop/unity-lens-recoll/aclocal.m4 b/src/desktop/unity-lens-recoll/aclocal.m4
new file mode 100644
index 00000000..29f83edb
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/aclocal.m4
@@ -0,0 +1,807 @@
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.11.1], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+			     [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+		  [_AM_DEPENDENCIES(CC)],
+		  [define([AC_PROG_CC],
+			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+		  [_AM_DEPENDENCIES(CXX)],
+		  [define([AC_PROG_CXX],
+			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+		  [_AM_DEPENDENCIES(OBJC)],
+		  [define([AC_PROG_OBJC],
+			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# ---------------------------------------------------------------------------
+# Adds support for distributing Python modules and packages.  To
+# install modules, copy them to $(pythondir), using the python_PYTHON
+# automake variable.  To install a package with the same name as the
+# automake package, install to $(pkgpythondir), or use the
+# pkgpython_PYTHON automake variable.
+#
+# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as
+# locations to install python extension modules (shared libraries).
+# Another macro is required to find the appropriate flags to compile
+# extension modules.
+#
+# If your package is configured with a different prefix to python,
+# users will have to add the install directory to the PYTHONPATH
+# environment variable, or create a .pth file (see the python
+# documentation for details).
+#
+# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will
+# cause an error if the version of python installed on the system
+# doesn't meet the requirement.  MINIMUM-VERSION should consist of
+# numbers and dots only.
+AC_DEFUN([AM_PATH_PYTHON],
+ [
+  dnl Find a Python interpreter.  Python versions prior to 2.0 are not
+  dnl supported. (2.0 was released on October 16, 2000).
+  m4_define_default([_AM_PYTHON_INTERPRETER_LIST],
+                    [python python2 python3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 dnl
+python2.1 python2.0])
+
+  m4_if([$1],[],[
+    dnl No version check is needed.
+    # Find any Python interpreter.
+    if test -z "$PYTHON"; then
+      AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :)
+    fi
+    am_display_PYTHON=python
+  ], [
+    dnl A version check is needed.
+    if test -n "$PYTHON"; then
+      # If the user set $PYTHON, use it and don't search something else.
+      AC_MSG_CHECKING([whether $PYTHON version >= $1])
+      AM_PYTHON_CHECK_VERSION([$PYTHON], [$1],
+			      [AC_MSG_RESULT(yes)],
+			      [AC_MSG_ERROR(too old)])
+      am_display_PYTHON=$PYTHON
+    else
+      # Otherwise, try each interpreter until we find one that satisfies
+      # VERSION.
+      AC_CACHE_CHECK([for a Python interpreter with version >= $1],
+	[am_cv_pathless_PYTHON],[
+	for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do
+	  test "$am_cv_pathless_PYTHON" = none && break
+	  AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break])
+	done])
+      # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON.
+      if test "$am_cv_pathless_PYTHON" = none; then
+	PYTHON=:
+      else
+        AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON])
+      fi
+      am_display_PYTHON=$am_cv_pathless_PYTHON
+    fi
+  ])
+
+  if test "$PYTHON" = :; then
+  dnl Run any user-specified action, or abort.
+    m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])])
+  else
+
+  dnl Query Python for its version number.  Getting [:3] seems to be
+  dnl the best way to do this; it's what "site.py" does in the standard
+  dnl library.
+
+  AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version],
+    [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`])
+  AC_SUBST([PYTHON_VERSION], [$am_cv_python_version])
+
+  dnl Use the values of $prefix and $exec_prefix for the corresponding
+  dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX.  These are made
+  dnl distinct variables so they can be overridden if need be.  However,
+  dnl general consensus is that you shouldn't need this ability.
+
+  AC_SUBST([PYTHON_PREFIX], ['${prefix}'])
+  AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}'])
+
+  dnl At times (like when building shared libraries) you may want
+  dnl to know which OS platform Python thinks this is.
+
+  AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform],
+    [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`])
+  AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform])
+
+
+  dnl Set up 4 directories:
+
+  dnl pythondir -- where to install python scripts.  This is the
+  dnl   site-packages directory, not the python standard library
+  dnl   directory like in previous automake betas.  This behavior
+  dnl   is more consistent with lispdir.m4 for example.
+  dnl Query distutils for this directory.  distutils does not exist in
+  dnl Python 1.5, so we fall back to the hardcoded directory if it
+  dnl doesn't work.
+  AC_CACHE_CHECK([for $am_display_PYTHON script directory],
+    [am_cv_python_pythondir],
+    [if test "x$prefix" = xNONE
+     then
+       am_py_prefix=$ac_default_prefix
+     else
+       am_py_prefix=$prefix
+     fi
+     am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null ||
+     echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`
+     case $am_cv_python_pythondir in
+     $am_py_prefix*)
+       am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
+       am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"`
+       ;;
+     *)
+       case $am_py_prefix in
+         /usr|/System*) ;;
+         *)
+	  am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	  ;;
+       esac
+       ;;
+     esac
+    ])
+  AC_SUBST([pythondir], [$am_cv_python_pythondir])
+
+  dnl pkgpythondir -- $PACKAGE directory under pythondir.  Was
+  dnl   PYTHON_SITE_PACKAGE in previous betas, but this naming is
+  dnl   more consistent with the rest of automake.
+
+  AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE])
+
+  dnl pyexecdir -- directory for installing python extension modules
+  dnl   (shared libraries)
+  dnl Query distutils for this directory.  distutils does not exist in
+  dnl Python 1.5, so we fall back to the hardcoded directory if it
+  dnl doesn't work.
+  AC_CACHE_CHECK([for $am_display_PYTHON extension module directory],
+    [am_cv_python_pyexecdir],
+    [if test "x$exec_prefix" = xNONE
+     then
+       am_py_exec_prefix=$am_py_prefix
+     else
+       am_py_exec_prefix=$exec_prefix
+     fi
+     am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null ||
+     echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"`
+     case $am_cv_python_pyexecdir in
+     $am_py_exec_prefix*)
+       am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
+       am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"`
+       ;;
+     *)
+       case $am_py_exec_prefix in
+         /usr|/System*) ;;
+         *)
+	   am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	   ;;
+       esac
+       ;;
+     esac
+    ])
+  AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir])
+
+  dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE)
+
+  AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE])
+
+  dnl Run any user-specified action.
+  $2
+  fi
+
+])
+
+
+# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# ---------------------------------------------------------------------------
+# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
+# Run ACTION-IF-FALSE otherwise.
+# This test uses sys.hexversion instead of the string equivalent (first
+# word of sys.version), in order to cope with versions such as 2.2c1.
+# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000).
+AC_DEFUN([AM_PYTHON_CHECK_VERSION],
+ [prog="import sys
+# split strings by '.' and convert to numeric.  Append some zeros
+# because we need at least 4 digits for the hex conversion.
+# map returns an iterator in Python 3.0 and a list in 2.x
+minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
+minverhex = 0
+# xrange is not present in Python 3.0 and range returns an iterator
+for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
+sys.exit(sys.hexversion < minverhex)"
+  AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
+    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar /dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([acinclude.m4])
diff --git a/src/desktop/unity-lens-recoll/bin/unity-recoll-daemon.in b/src/desktop/unity-lens-recoll/bin/unity-recoll-daemon.in
new file mode 100755
index 00000000..471e3be4
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/bin/unity-recoll-daemon.in
@@ -0,0 +1,84 @@
+#! /usr/bin/python
+
+# Set Python path up to load from the source code dir if we're running out
+# of the source tree, otherwise point at the installed code
+import sys, os
+execpath = os.path.dirname(__file__)
+if os.path.isfile(os.path.join(execpath, "..", "configure.ac")):
+    print "Running from source tree"
+    sys.path.insert (0, os.path.join(execpath, ".."))
+else:
+    sys.path.insert (0, os.path.join("@DATADIR@", "unity-lens-recoll"))
+del execpath
+
+import recollscope.rclsearch
+from gi.repository import GLib, GObject, Gio
+
+# NOTE: If we used the normal 'dbus' module for Python we'll get
+#       slightly odd results because it uses a default connection
+#       to the session bus that is different from the default connection
+#       GDBus (hence libunity) will use. Meaning that the daemon name
+#       will be owned by a connection different from the one all our
+#       Dee + Unity magic is working on...
+#       Still waiting for nice GDBus bindings to land:
+#                        http://www.piware.de/2011/01/na-zdravi-pygi/
+
+#
+# The primary bus name we grab *must* match what we specify in our .lens file
+#
+BUS_NAME = "org.recoll.UnityLensRecoll.Lens"
+
+session_bus_connection = Gio.bus_get_sync (Gio.BusType.SESSION, None)
+session_bus = Gio.DBusProxy.new_sync (session_bus_connection, 0, None,
+                                      'org.freedesktop.DBus',
+                                      '/org/freedesktop/DBus',
+                                      'org.freedesktop.DBus', None)
+result = session_bus.call_sync('RequestName',
+                               GLib.Variant ("(su)", (BUS_NAME, 0x4)),
+                               0, -1, None)
+	                               
+# Unpack variant response with signature "(u)". 1 means we got it.
+result = result.unpack()[0]
+
+if result != 1 :
+  print >> sys.stderr, "Failed to own name %s. Bailing out." % BUS_NAME
+  raise SystemExit (1)
+
+def create_lens ():
+	# The path for the Lens *must* also match the one in our .lens file
+	from gi.repository import Unity
+	lens = Unity.Lens.new ("/org/recoll/unitylensrecoll/lens", "recoll")
+	
+	lens.props.search_hint = "Recoll search string"
+	lens.props.visible = True;
+	lens.props.search_in_global = False;
+	
+	# Populate categories
+	cats = []
+	cats.append (Unity.Category.new ("Documents",
+	                                 Gio.ThemedIcon.new("document"),
+	                                 Unity.CategoryRenderer.HORIZONTAL_TILE))
+	lens.props.categories = cats
+	
+
+	# Populate filters
+        # We should get the categories from the config but the python
+        # module currently has no code for this. CheckOption or RadioOption?
+	filter = Unity.RadioOptionFilter.new("rclcat", "Category",
+                Gio.ThemedIcon.new("input-keyboard-symbolic"), False)
+        filter.add_option("text", "Text", None);
+        filter.add_option("spreadsheet", "Spreadsheet", None);
+        filter.add_option("presentation", "Presentation", None);
+        filter.add_option("media", "Media", None);
+        filter.add_option("message", "Message", None);
+        filter.add_option("other", "Other", None);
+        lens.props.filters = [filter]
+
+	return lens
+
+lens = create_lens ()
+lens.add_local_scope (recollscope.rclsearch.Scope())
+# add more local scopes here (remote dbus scopes added automagically)
+lens.export ()
+
+GObject.MainLoop().run()
diff --git a/src/desktop/unity-lens-recoll/configure b/src/desktop/unity-lens-recoll/configure
new file mode 100755
index 00000000..a14f36b9
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/configure
@@ -0,0 +1,3669 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.68 for unity-lens-recoll 0.1.1.
+#
+# Report bugs to .
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+	   done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+      if test "x$CONFIG_SHELL" != x; then :
+  # We cannot yet assume a decent shell, so we have to provide a
+	# neutralization value for shells without unset; and this also
+	# works around shells that cannot unset nonexistent variables.
+	# Preserve -v and -x to the replacement shell.
+	BASH_ENV=/dev/null
+	ENV=/dev/null
+	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+	export CONFIG_SHELL
+	case $- in # ((((
+	  *v*x* | *x*v* ) as_opts=-vx ;;
+	  *v* ) as_opts=-v ;;
+	  *x* ) as_opts=-x ;;
+	  * ) as_opts= ;;
+	esac
+	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf@gnu.org and
+$0: https://www.recoll.org about your system, including any
+$0: error possibly output before this message. Then install
+$0: a modern shell, or manually run the script under such a
+$0: shell if you do have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in #(
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 &1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='unity-lens-recoll'
+PACKAGE_TARNAME='unity-lens-recoll'
+PACKAGE_VERSION='0.1.1'
+PACKAGE_STRING='unity-lens-recoll 0.1.1'
+PACKAGE_BUGREPORT='https://www.recoll.org'
+PACKAGE_URL=''
+
+ac_subst_vars='LTLIBOBJS
+LIBOBJS
+LIBEXECDIR
+DATADIR
+PREFIX
+pkgpyexecdir
+pyexecdir
+pkgpythondir
+pythondir
+PYTHON_PLATFORM
+PYTHON_EXEC_PREFIX
+PYTHON_PREFIX
+PYTHON_VERSION
+PYTHON
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+    esac
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_myself" : 'X\(//\)[^/]' \| \
+	 X"$as_myself" : 'X\(//\)$' \| \
+	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # 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 unity-lens-recoll 0.1.1 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking ...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root
+                          [DATAROOTDIR/doc/unity-lens-recoll]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of unity-lens-recoll 0.1.1:";;
+   esac
+  cat <<\_ACEOF
+
+Report bugs to .
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+unity-lens-recoll configure 0.1.1
+generated by GNU Autoconf 2.68
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by unity-lens-recoll $as_me 0.1.1, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    $as_echo "PATH: $as_dir"
+  done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+    2)
+      as_fn_append ac_configure_args1 " '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      as_fn_append ac_configure_args " '$ac_arg'"
+      ;;
+    esac
+  done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	$as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test "$ac_old_val_w" != "$ac_new_val_w"; then
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+am__api_version='1.11'
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \	]*)
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if ${ac_cv_path_mkdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in mkdir gmkdir; do
+	 for ac_exec_ext in '' $ac_executable_extensions; do
+	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+	     'mkdir (GNU coreutils) '* | \
+	     'mkdir (coreutils) '* | \
+	     'mkdir (fileutils) '4.1*)
+	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+	       break 3;;
+	   esac
+	 done
+       done
+  done
+IFS=$as_save_IFS
+
+fi
+
+  test -d ./--version && rmdir ./--version
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='unity-lens-recoll'
+ VERSION='0.1.1'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+
+
+
+        # Find any Python interpreter.
+    if test -z "$PYTHON"; then
+      for ac_prog in python python2 python3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PYTHON+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PYTHON in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PYTHON=$ac_cv_path_PYTHON
+if test -n "$PYTHON"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5
+$as_echo "$PYTHON" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$PYTHON" && break
+done
+test -n "$PYTHON" || PYTHON=":"
+
+    fi
+    am_display_PYTHON=python
+
+
+  if test "$PYTHON" = :; then
+      as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5
+  else
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5
+$as_echo_n "checking for $am_display_PYTHON version... " >&6; }
+if ${am_cv_python_version+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"`
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5
+$as_echo "$am_cv_python_version" >&6; }
+  PYTHON_VERSION=$am_cv_python_version
+
+
+
+  PYTHON_PREFIX='${prefix}'
+
+  PYTHON_EXEC_PREFIX='${exec_prefix}'
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5
+$as_echo_n "checking for $am_display_PYTHON platform... " >&6; }
+if ${am_cv_python_platform+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5
+$as_echo "$am_cv_python_platform" >&6; }
+  PYTHON_PLATFORM=$am_cv_python_platform
+
+
+
+
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5
+$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; }
+if ${am_cv_python_pythondir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$prefix" = xNONE
+     then
+       am_py_prefix=$ac_default_prefix
+     else
+       am_py_prefix=$prefix
+     fi
+     am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null ||
+     echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`
+     case $am_cv_python_pythondir in
+     $am_py_prefix*)
+       am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
+       am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"`
+       ;;
+     *)
+       case $am_py_prefix in
+         /usr|/System*) ;;
+         *)
+	  am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	  ;;
+       esac
+       ;;
+     esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5
+$as_echo "$am_cv_python_pythondir" >&6; }
+  pythondir=$am_cv_python_pythondir
+
+
+
+  pkgpythondir=\${pythondir}/$PACKAGE
+
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5
+$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; }
+if ${am_cv_python_pyexecdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$exec_prefix" = xNONE
+     then
+       am_py_exec_prefix=$am_py_prefix
+     else
+       am_py_exec_prefix=$exec_prefix
+     fi
+     am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null ||
+     echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"`
+     case $am_cv_python_pyexecdir in
+     $am_py_exec_prefix*)
+       am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
+       am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"`
+       ;;
+     *)
+       case $am_py_exec_prefix in
+         /usr|/System*) ;;
+         *)
+	   am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	   ;;
+       esac
+       ;;
+     esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5
+$as_echo "$am_cv_python_pyexecdir" >&6; }
+  pyexecdir=$am_cv_python_pyexecdir
+
+
+
+  pkgpyexecdir=\${pyexecdir}/$PACKAGE
+
+
+
+  fi
+
+
+
+
+
+# Variables to escape in .in files
+
+  EXP_VAR=PREFIX
+  FROM_VAR=$prefix
+
+    prefix_save=$prefix
+  exec_prefix_save=$exec_prefix
+
+    if test "x$prefix" = "xNONE"; then
+    prefix=$ac_default_prefix
+  fi
+    if test "x$exec_prefix" = "xNONE"; then
+    exec_prefix=$prefix
+  fi
+
+  full_var="$FROM_VAR"
+    while true; do
+    new_full_var="`eval echo $full_var`"
+    if test "x$new_full_var"="x$full_var"; then break; fi
+    full_var=$new_full_var
+  done
+
+    full_var=$new_full_var
+  PREFIX="$full_var"
+
+
+    prefix=$prefix_save
+  exec_prefix=$exec_prefix_save
+
+
+
+
+  EXP_VAR=DATADIR
+  FROM_VAR=$datarootdir
+
+    prefix_save=$prefix
+  exec_prefix_save=$exec_prefix
+
+    if test "x$prefix" = "xNONE"; then
+    prefix=$ac_default_prefix
+  fi
+    if test "x$exec_prefix" = "xNONE"; then
+    exec_prefix=$prefix
+  fi
+
+  full_var="$FROM_VAR"
+    while true; do
+    new_full_var="`eval echo $full_var`"
+    if test "x$new_full_var"="x$full_var"; then break; fi
+    full_var=$new_full_var
+  done
+
+    full_var=$new_full_var
+  DATADIR="$full_var"
+
+
+    prefix=$prefix_save
+  exec_prefix=$exec_prefix_save
+
+
+
+
+  EXP_VAR=LIBEXECDIR
+  FROM_VAR=$libexecdir
+
+    prefix_save=$prefix
+  exec_prefix_save=$exec_prefix
+
+    if test "x$prefix" = "xNONE"; then
+    prefix=$ac_default_prefix
+  fi
+    if test "x$exec_prefix" = "xNONE"; then
+    exec_prefix=$prefix
+  fi
+
+  full_var="$FROM_VAR"
+    while true; do
+    new_full_var="`eval echo $full_var`"
+    if test "x$new_full_var"="x$full_var"; then break; fi
+    full_var=$new_full_var
+  done
+
+    full_var=$new_full_var
+  LIBEXECDIR="$full_var"
+
+
+    prefix=$prefix_save
+  exec_prefix=$exec_prefix_save
+
+
+
+ac_config_files="$ac_config_files bin/unity-recoll-daemon data/recoll.lens data/unity-lens-recoll.service Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    if test "x$cache_file" != "x/dev/null"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then branch to the quote section.  Otherwise,
+# look for a macro that doesn't take arguments.
+ac_script='
+:mline
+/\\$/{
+ N
+ s,\\\n,,
+ b mline
+}
+t clear
+:clear
+s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*([^)]*)\)[	 ]*\(.*\)/-D\1=\2/g
+t quote
+s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)/-D\1=\2/g
+t quote
+b any
+:quote
+s/[	 `~#$^&*(){}\\|;'\''"<>?]/\\&/g
+s/\[/\\&/g
+s/\]/\\&/g
+s/\$/$$/g
+H
+:any
+${
+	g
+	s/^\n//
+	s/\n/ /g
+	p
+}
+'
+DEFS=`sed -n "$ac_script" confdefs.h`
+
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in #(
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by unity-lens-recoll $as_me 0.1.1, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Report bugs to ."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+unity-lens-recoll config.status 0.1.1
+configured by $0, generated by GNU Autoconf 2.68,
+  with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=?*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h |  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "bin/unity-recoll-daemon") CONFIG_FILES="$CONFIG_FILES bin/unity-recoll-daemon" ;;
+    "data/recoll.lens") CONFIG_FILES="$CONFIG_FILES data/recoll.lens" ;;
+    "data/unity-lens-recoll.service") CONFIG_FILES="$CONFIG_FILES data/unity-lens-recoll.service" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp= ac_tmp=
+  trap 'exit_status=$?
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' >$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+
+eval set X "  :F $CONFIG_FILES      "
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$ac_tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+  s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&2;}
+
+  rm -f "$ac_tmp/stdin"
+  case $ac_file in
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+
+
+
+  esac
+
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}:
+
+  unity-lens-recoll
+  --------------------
+
+  Prefix           : ${prefix}
+
+" >&5
+$as_echo "$as_me:
+
+  unity-lens-recoll
+  --------------------
+
+  Prefix           : ${prefix}
+
+" >&6;}
+
diff --git a/src/desktop/unity-lens-recoll/configure.ac b/src/desktop/unity-lens-recoll/configure.ac
new file mode 100644
index 00000000..0890d0de
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/configure.ac
@@ -0,0 +1,33 @@
+# When releasing also remember to update the soname as instructed below
+AC_INIT(unity-lens-recoll, 0.1.1, https://www.recoll.org)
+AM_INIT_AUTOMAKE([subdir-objects])
+AM_PATH_PYTHON
+
+AC_PREREQ(2.59)
+
+# Variables to escape in .in files
+AS_AC_EXPAND(PREFIX, $prefix)
+AC_SUBST(PREFIX)
+
+AS_AC_EXPAND(DATADIR, $datarootdir)
+AC_SUBST(DATADIR)
+
+AS_AC_EXPAND(LIBEXECDIR, $libexecdir)
+AC_SUBST(LIBEXECDIR)
+
+AC_OUTPUT([
+bin/unity-recoll-daemon
+data/recoll.lens
+data/unity-lens-recoll.service
+Makefile
+])
+
+AC_MSG_NOTICE([
+
+  unity-lens-recoll
+  --------------------
+
+  Prefix           : ${prefix}
+
+])
+
diff --git a/src/desktop/unity-lens-recoll/data/recoll.lens.in b/src/desktop/unity-lens-recoll/data/recoll.lens.in
new file mode 100644
index 00000000..c6d997da
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/data/recoll.lens.in
@@ -0,0 +1,10 @@
+[Lens]
+DBusName=org.recoll.UnityLensRecoll.Lens
+DBusPath=/org/recoll/unitylensrecoll/lens
+Name=Recoll Lens
+Icon=@DATADIR@/unity-lens-recoll/recollbg24.png
+Description=Search documents indexed by Recoll
+SearchHint=Type to search
+
+[Desktop Entry]
+X-Ubuntu-Gettext-Domain=unity-lens-recoll
diff --git a/src/desktop/unity-lens-recoll/data/recollbg24.png b/src/desktop/unity-lens-recoll/data/recollbg24.png
new file mode 100644
index 00000000..e1fe5bca
Binary files /dev/null and b/src/desktop/unity-lens-recoll/data/recollbg24.png differ
diff --git a/src/desktop/unity-lens-recoll/data/unity-lens-recoll.service.in b/src/desktop/unity-lens-recoll/data/unity-lens-recoll.service.in
new file mode 100644
index 00000000..b7eb14c3
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/data/unity-lens-recoll.service.in
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.recoll.UnityLensRecoll.Lens
+Exec=@DATADIR@/unity-lens-recoll/unity-recoll-daemon
diff --git a/src/desktop/unity-lens-recoll/excludefile b/src/desktop/unity-lens-recoll/excludefile
new file mode 100644
index 00000000..246a8593
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/excludefile
@@ -0,0 +1,3 @@
+mkdist.sh
+autom4te.cache
+excludefile
diff --git a/src/desktop/unity-lens-recoll/install-sh b/src/desktop/unity-lens-recoll/install-sh
new file mode 100755
index 00000000..6781b987
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/install-sh
@@ -0,0 +1,520 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2009-04-28.21; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" ""	$nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+	shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
+	shift;;
+
+    -o) chowncmd="$chownprog $2"
+	shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t) dst_arg=$2
+	shift;;
+
+    -T) no_target_directory=true;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)	shift
+	break;;
+
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  trap '(exit $?); exit' 1 2 13 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dst_arg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+	echo "$0: $dst_arg: Is a directory" >&2
+	exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
+
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
+	else
+	  mkdir_mode=
+	fi
+
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writeable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+	/*) prefix='/';;
+	-*) prefix='./';;
+	*)  prefix='';;
+      esac
+
+      eval "$initialize_posix_glob"
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
+      shift
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+	test -z "$d" && continue
+
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
+
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+	# Now remove or move aside any old file at destination location.
+	# We try this two ways since rm can't unlink itself on some
+	# systems and the destination file might be busy for other
+	# reasons.  In this case, the final cleanup might fail but the new
+	# file should still install successfully.
+	{
+	  test ! -f "$dst" ||
+	  $doit $rmcmd -f "$dst" 2>/dev/null ||
+	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+	  } ||
+	  { echo "$0: cannot unlink or rename $dst" >&2
+	    (exit 1); exit 1
+	  }
+	} &&
+
+	# Now rename the file to the real destination.
+	$doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/src/desktop/unity-lens-recoll/missing b/src/desktop/unity-lens-recoll/missing
new file mode 100755
index 00000000..28055d2a
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/missing
@@ -0,0 +1,376 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
+# 2008, 2009 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard , 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see .
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  autom4te     touch the output file, or create a stub one
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
+\`g' are ignored when checking the name.
+
+Send bug reports to ."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# normalize program name to check for.
+program=`echo "$1" | sed '
+  s/^gnu-//; t
+  s/^gnu//; t
+  s/^g//; t'`
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).  This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+  lex*|yacc*)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  tar*)
+    if test -n "$run"; then
+       echo 1>&2 "ERROR: \`tar' requires --run"
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       exit 1
+    fi
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $program in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case $f in
+      *:*) touch_files="$touch_files "`echo "$f" |
+				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+	   sed 's/\.am$/.in/' |
+	   while read f; do touch "$f"; done
+    ;;
+
+  autom4te*)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo "#! /bin/sh"
+	echo "# Created by GNU Automake missing as a replacement of"
+	echo "#  $ $@"
+	echo "exit 0"
+	chmod +x $file
+	exit 1
+    fi
+    ;;
+
+  bison*|yacc*)
+    echo 1>&2 "\
+WARNING: \`$1' $msg.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+	case $LASTARG in
+	*.y)
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" y.tab.c
+	    fi
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" y.tab.h
+	    fi
+	  ;;
+	esac
+    fi
+    if test ! -f y.tab.h; then
+	echo >y.tab.h
+    fi
+    if test ! -f y.tab.c; then
+	echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex*|flex*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+	case $LASTARG in
+	*.l)
+	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" lex.yy.c
+	    fi
+	  ;;
+	esac
+    fi
+    if test ! -f lex.yy.c; then
+	echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+	 you modified a dependency of a manual page.  You may need the
+	 \`Help2man' package in order for those modifications to take
+	 effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo ".ab help2man is required to generate this page"
+	exit $?
+    fi
+    ;;
+
+  makeinfo*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -z "$file"; then
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '
+	/^@setfilename/{
+	  s/.* \([^ ]*\) *$/\1/
+	  p
+	  q
+	}' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+    fi
+    # If the file does not exist, the user really needs makeinfo;
+    # let's fail without touching anything.
+    test -f $file || exit 1
+    touch $file
+    ;;
+
+  tar*)
+    shift
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+	case $firstarg in
+	*o*)
+	    firstarg=`echo "$firstarg" | sed s/o//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+	case $firstarg in
+	*h*)
+	    firstarg=`echo "$firstarg" | sed s/h//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/src/desktop/unity-lens-recoll/mkdist.sh b/src/desktop/unity-lens-recoll/mkdist.sh
new file mode 100644
index 00000000..1b548f75
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/mkdist.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+fatal() {
+    echo $*
+    exit 1
+}
+usage() {
+    echo 'Usage: mkdist.sh '
+    exit 1
+}
+
+VCCMD=hg
+TAR=/usr/bin/tar
+
+VRECOLL=`cat ../../VERSION`
+VLENS=`hg tip | egrep ^changeset: | awk '{print $2}' | awk -F: '{print $1}'`
+VERSION=${VRECOLL}.${VLENS}
+echo $VERSION
+
+targetdir=${targetdir-/tmp}
+
+checkmodified=${checkmodified-yes}
+
+editedfiles=`$VCCMD status . | egrep -v '^\?'`
+if test "$checkmodified" = "yes" -a ! -z "$editedfiles"; then
+  fatal  "Edited files exist: " $editedfiles
+fi
+
+releasename=recoll-lens-${VERSION}
+
+topdir=$targetdir/$releasename
+if test ! -d $topdir ; then
+    mkdir $topdir || exit 1
+else 
+    echo "Removing everything under $topdir Ok ? (y/n)"
+    read rep 
+    if test $rep = 'y';then
+    	rm -rf $topdir/*
+    fi
+fi
+
+# Clean up this dir and copy the dist-specific files 
+make distclean
+yes | clean.O
+
+$TAR chfX - excludefile .  | (cd $topdir;$TAR xf -)
+
+out=$releasename.tar.gz
+(cd $targetdir ; \
+    $TAR chf - $releasename | \
+    	gzip > $out)
+echo "$targetdir/$out created"
diff --git a/src/desktop/unity-lens-recoll/py-compile b/src/desktop/unity-lens-recoll/py-compile
new file mode 100755
index 00000000..3f9d05b6
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/py-compile
@@ -0,0 +1,146 @@
+#!/bin/sh
+# py-compile - Compile a Python program
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2008, 2009 Free Software
+# Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see .
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to  or send patches to
+# .
+
+if [ -z "$PYTHON" ]; then
+  PYTHON=python
+fi
+
+basedir=
+destdir=
+files=
+while test $# -ne 0; do
+  case "$1" in
+    --basedir)
+      basedir=$2
+      if test -z "$basedir"; then
+        echo "$0: Missing argument to --basedir." 1>&2
+        exit 1
+      fi
+      shift
+      ;;
+    --destdir)
+      destdir=$2
+      if test -z "$destdir"; then
+        echo "$0: Missing argument to --destdir." 1>&2
+        exit 1
+      fi
+      shift
+      ;;
+    -h|--h*)
+      cat <<\EOF
+Usage: py-compile [--help] [--version] [--basedir DIR] [--destdir DIR] FILES..."
+
+Byte compile some python scripts FILES.  Use --destdir to specify any
+leading directory path to the FILES that you don't want to include in the
+byte compiled file.  Specify --basedir for any additional path information you
+do want to be shown in the byte compiled file.
+
+Example:
+  py-compile --destdir /tmp/pkg-root --basedir /usr/share/test test.py test2.py
+
+Report bugs to .
+EOF
+      exit $?
+      ;;
+    -v|--v*)
+      echo "py-compile $scriptversion"
+      exit $?
+      ;;
+    *)
+      files="$files $1"
+      ;;
+  esac
+  shift
+done
+
+if test -z "$files"; then
+    echo "$0: No files given.  Try \`$0 --help' for more information." 1>&2
+    exit 1
+fi
+
+# if basedir was given, then it should be prepended to filenames before
+# byte compilation.
+if [ -z "$basedir" ]; then
+    pathtrans="path = file"
+else
+    pathtrans="path = os.path.join('$basedir', file)"
+fi
+
+# if destdir was given, then it needs to be prepended to the filename to
+# byte compile but not go into the compiled file.
+if [ -z "$destdir" ]; then
+    filetrans="filepath = path"
+else
+    filetrans="filepath = os.path.normpath('$destdir' + os.sep + path)"
+fi
+
+$PYTHON -c "
+import sys, os, py_compile
+
+files = '''$files'''
+
+sys.stdout.write('Byte-compiling python modules...\n')
+for file in files.split():
+    $pathtrans
+    $filetrans
+    if not os.path.exists(filepath) or not (len(filepath) >= 3
+                                            and filepath[-3:] == '.py'):
+	    continue
+    sys.stdout.write(file)
+    sys.stdout.flush()
+    py_compile.compile(filepath, filepath + 'c', path)
+sys.stdout.write('\n')" || exit $?
+
+# this will fail for python < 1.5, but that doesn't matter ...
+$PYTHON -O -c "
+import sys, os, py_compile
+
+files = '''$files'''
+sys.stdout.write('Byte-compiling python modules (optimized versions) ...\n')
+for file in files.split():
+    $pathtrans
+    $filetrans
+    if not os.path.exists(filepath) or not (len(filepath) >= 3
+                                            and filepath[-3:] == '.py'):
+	    continue
+    sys.stdout.write(file)
+    sys.stdout.flush()
+    py_compile.compile(filepath, filepath + 'o', path)
+sys.stdout.write('\n')" 2>/dev/null || :
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/src/desktop/unity-lens-recoll/recollscope/__init__.py b/src/desktop/unity-lens-recoll/recollscope/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/src/desktop/unity-lens-recoll/recollscope/rclsearch.py b/src/desktop/unity-lens-recoll/recollscope/rclsearch.py
new file mode 100755
index 00000000..ae4766d2
--- /dev/null
+++ b/src/desktop/unity-lens-recoll/recollscope/rclsearch.py
@@ -0,0 +1,338 @@
+
+import sys
+import subprocess
+import time
+import urllib
+import hashlib
+import os
+import locale
+
+from gi.repository import Unity, GObject, Gio
+
+try:
+    from recoll import recoll
+    from recoll import rclextract
+    hasextract = True
+except:
+    import recoll
+    hasextract = False
+
+BUS_PATH = "/org/recoll/unitylensrecoll/scope/main"
+
+XDGCACHE = os.getenv('XDG_CACHE_DIR', os.path.expanduser("~/.cache"))
+THUMBDIRS = [os.path.join(XDGCACHE, "thumbnails"),
+             os.path.expanduser("~/.thumbnails")]
+             
+def _get_thumbnail_path(url):
+    """Look for a thumbnail for the input url, according to the
+    freedesktop thumbnail storage standard. The input 'url' always
+    begins with file:// and is unencoded. We encode it properly
+    and compute the path inside the thumbnail storage
+    directory. We return the path only if the thumbnail does exist
+    (no generation performed)"""
+    global THUMBDIRS
+
+    # Compute the thumbnail file name by encoding and hashing the url string
+    path = url.replace("file://", "", 1)
+    try:
+        path = "file://" + urllib.quote(path)
+    except:
+        #print "_get_thumbnail_path: urllib.quote failed"
+        return None
+    #print "_get_thumbnail: encoded path: [%s]" % (path,)
+    thumbname = hashlib.md5(path).hexdigest() + ".png"
+
+    # If the "new style" directory exists, we should stop looking in
+    # the "old style" one (there might be interesting files in there,
+    # but they may be stale, so it's best to not touch them). We do
+    # this semi-dynamically so that we catch things up if the
+    # directory gets created while we are running.
+    if os.path.exists(THUMBDIRS[0]):
+        THUMBDIRS = THUMBDIRS[0:1]
+
+    # Check in appropriate directories to see if the thumbnail file exists
+    #print "_get_thumbnail: thumbname: [%s]" % (thumbname,)
+    for topdir in THUMBDIRS:
+        for dir in ("large", "normal"): 
+            tpath = os.path.join(topdir, dir, thumbname)
+            # print "Testing [%s]" % (tpath,)
+            if os.path.exists(tpath):
+                return tpath
+
+    return None
+
+    
+# Icon names for some recoll mime types which don't have standard icon by the
+# normal method
+SPEC_MIME_ICONS = {'application/x-fsdirectory' : 'gnome-fs-directory.svg',
+                   'inode/directory' : 'gnome-fs-directory.svg',
+                   'message/rfc822' : 'mail-read',
+                   'application/x-recoll' : 'recoll'}
+
+# Truncate results here:
+MAX_RESULTS = 30
+
+# These category ids must match the order in which we add them to the lens
+CATEGORY_ALL = 0
+
+# typing timeout: we don't want to start a search for every
+# char? Unity does batch on its side, but we may want more control ?
+# Or not ? I'm not sure this does any good on a moderate size index.
+# Set to 0 to not use it (default). Kept around because this still might be
+# useful with a very big index ?
+TYPING_TIMEOUT = 0
+
+class Scope (Unity.Scope):
+
+    def __init__ (self):
+        Unity.Scope.__init__ (self, dbus_path=BUS_PATH)
+        
+        # Listen for changes and requests
+        self.connect ("activate-uri", self.activate_uri)
+        if Unity._version == "4.0":
+            #print "Setting up for Unity 4.0"
+            self.connect("notify::active-search",
+                     self._on_search_changed)
+            self.connect("notify::active-global-search",
+                     self._on_global_search_changed)
+            self.connect("filters-changed",
+                     self._on_search_changed);
+        else:
+            #print "Setting up for Unity 5.0+"
+            self.connect ("search-changed", self._on_search_changed)
+            self.connect ("filters-changed",
+                      self._on_filters_changed)
+
+        self.last_connect_time = 0
+        self.timeout_id = None
+
+    def _connect_db(self):
+        #print "Connecting to db"
+        self.db = None
+        try:
+            self.db = recoll.connect()
+            self.db.setAbstractParams(maxchars=200, contextwords=4)
+        except Exception, s:
+            print >> sys.stderr, "recoll-lens: Error connecting to db:", s
+            return
+
+    def get_search_string (self):
+        search = self.props.active_search
+        return search.props.search_string if search else None
+    
+    def get_global_search_string (self):
+        search = self.props.active_global_search
+        return search.props.search_string if search else None
+    
+    def search_finished (self):
+        search = self.props.active_search
+        if search:
+            search.emit("finished")
+    
+    def global_search_finished (self):
+        search = self.props.active_global_search
+        if search:
+            search.emit("finished")
+
+    def reset (self):
+        self._do_browse (self.props.results_model)
+        self._do_browse (self.props.global_results_model)
+    
+    def _on_filters_changed (self, scope):
+        #print "_on_filters_changed()"
+        self.queue_search_changed(Unity.SearchType.DEFAULT)
+    
+    if Unity._version == "4.0":
+        def _on_search_changed (self, scope, param_spec=None):
+            search_string = self.get_search_string()
+            results = scope.props.results_model
+            #print "Search 4.0 changed to: '%s'" % search_string
+            self._update_results_model (search_string, results)
+    else:
+        def _on_search_changed (self, scope, search, search_type, cancellable):
+            search_string = search.props.search_string
+            results = search.props.results_model
+            #print "Search 5.0 changed to: '%s'" % search_string
+            if search_string:
+                self._update_results_model (search_string, results)
+            else:
+                search.props.results_model.clear()
+    
+    def _on_global_search_changed (self, scope, param_spec):
+        search = self.get_global_search_string()
+        results = scope.props.global_results_model
+        #print "Global search changed to: '%s'" % search
+        self._update_results_model (search, results)
+    
+    def _update_results_model (self, search_string, model):
+        if search_string:
+            self._do_search (search_string, model)
+        else:
+            self._do_browse (model)
+
+    def _do_browse (self, model):
+        if self.timeout_id is not None:
+            GObject.source_remove(self.timeout_id)
+        model.clear ()
+
+        if model is self.props.results_model:
+            self.search_finished()
+        else:
+            self.global_search_finished()
+
+    def _on_timeout(self, search_string, model):
+        if self.timeout_id is not None:
+            GObject.source_remove(self.timeout_id)
+        self.timeout_id = None
+        self._really_do_search(search_string, model)
+        if model is self.props.results_model:
+            self.search_finished()
+        else:
+            self.global_search_finished()
+
+    def _do_search (self, search_string, model):
+        if TYPING_TIMEOUT == 0:
+            self._really_do_search(search_string, model)
+            return True
+
+        if self.timeout_id is not None:
+            GObject.source_remove(self.timeout_id)
+        self.timeout_id = \
+            GObject.timeout_add(TYPING_TIMEOUT, self._on_timeout, 
+                    search_string, model)
+
+    def _really_do_search(self, search_string, model):
+        #print "really_do_search:", "[" + search_string + "]"
+
+        model.clear ()
+        if search_string == "":
+            return True
+
+        current_time = time.time()
+        if current_time - self.last_connect_time > 10:
+            self._connect_db()
+            self.last_connect_time = current_time
+
+        if not self.db:
+            model.append ("",
+                      "error",
+                      CATEGORY_ALL,
+                      "text/plain",
+                  "You need to use the recoll GUI to create the index first !",
+                      "",
+                      "")
+            return
+        fcat = self.get_filter("rclcat")
+        for option in fcat.options:
+            if option.props.active:
+                search_string += " rclcat:" + option.props.id 
+
+        # Do the recoll thing
+        try:
+            query = self.db.query()
+            nres = query.execute(search_string)
+        except:
+            return
+
+        actual_results = 0
+        for i in range(nres):
+            try:
+                doc = query.fetchone()
+            except:
+                break
+
+            # Results with an ipath get a special mime type so that they
+            # get opened by starting a recoll instance.
+            thumbnail = None
+            if doc.ipath != "":
+                mimetype = "application/x-recoll"
+                url = doc.url + "#" + doc.ipath
+            else:
+                mimetype = doc.mimetype
+                url = doc.url
+                # doc.url is a unicode string which is badly wrong. 
+                # Retrieve the binary path for thumbnail access.
+                thumbnail = _get_thumbnail_path(doc.getbinurl())
+
+            titleorfilename = doc.title
+            if titleorfilename == "":
+                titleorfilename = doc.filename
+
+            iconname = None
+            if thumbnail:
+                iconname = thumbnail
+            else:
+                if SPEC_MIME_ICONS.has_key(doc.mimetype):
+                    iconname = SPEC_MIME_ICONS[doc.mimetype]
+                else:
+                    icon = Gio.content_type_get_icon(doc.mimetype)
+                    if icon:
+                        # At least on Quantal, get_names() sometimes returns
+                        # a list with '(null)' in the first position...
+                        for iname in icon.get_names():
+                            if iname != '(null)':
+                                iconname = iname
+                                break
+
+            #print "iconname(%s) = %s" % (doc.mimetype, iconname)
+
+            try:
+                abstract = self.db.makeDocAbstract(doc, query).encode('utf-8')
+            except:
+                break
+
+            model.append (url,
+                          iconname,
+                          CATEGORY_ALL,
+                          mimetype,
+                          titleorfilename,
+                          abstract,
+                          doc.url)
+
+            actual_results += 1
+            if actual_results >= MAX_RESULTS:
+                break
+        
+
+    # If we return from here, the caller gets an error:
+    #  Warning: g_object_get_qdata: assertion `G_IS_OBJECT (object)' failed
+    # Known bug, see:
+    #   https://bugs.launchpad.net/unity/+bug/893688
+    # Then, the default url activation takes place
+    # which is not at all what we want.
+    # First workaround:
+    #    In the recoll case, we just exit, the lens will be restarted.
+    #    In the regular case, we return, and activation works exactly once for
+    #    2 calls on oneiric and mostly for precise...
+    # New workaround, suggested somewhere on the net and kept: other
+    # construction method
+    def activate_uri (self, scope, uri):
+        """Activation handler for uri"""
+        
+        #print "Activate: %s" % uri
+        
+        # Pass all uri without fragments to the desktop handler
+        if uri.find("#") == -1:
+            # Reset browsing state when an app is launched
+            if Unity._version == "4.0":
+                self.reset ()
+            ret = Unity.ActivationResponse(handled=Unity.HandledType.NOT_HANDLED,
+                                                goto_uri=uri)
+            return ret
+        
+        # Pass all others to recoll
+        proc = subprocess.Popen(["recoll", uri])
+        #print "Subprocess returned, going back to unity"
+
+        scope.props.results_model.clear();
+        scope.props.global_results_model.clear();
+        # Old workaround:
+        #sys.exit(0)
+
+        # New and better:
+        # The goto_uri thing is a workaround suggested somewhere instead of
+        # passing the string. Does fix the issue
+        #return Unity.ActivationResponse.new(Unity.HandledType.HIDE_DASH,''
+        ret = Unity.ActivationResponse(handled=Unity.HandledType.HIDE_DASH,
+                                       goto_uri='')
+        return ret
diff --git a/src/desktop/xdg-utils-1.0.1/LICENSE b/src/desktop/xdg-utils-1.0.1/LICENSE
new file mode 100644
index 00000000..1edf08c3
--- /dev/null
+++ b/src/desktop/xdg-utils-1.0.1/LICENSE
@@ -0,0 +1,18 @@
+#
+#   Permission is hereby granted, free of charge, to any person obtaining a
+#   copy of this software and associated documentation files (the "Software"),
+#   to deal in the Software without restriction, including without limitation
+#   the rights to use, copy, modify, merge, publish, distribute, sublicense,
+#   and/or sell copies of the Software, and to permit persons to whom the
+#   Software is furnished to do so, subject to the following conditions:
+#
+#   The above copyright notice and this permission notice shall be included
+#   in all copies or substantial portions of the Software.
+#
+#   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+#   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+#   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+#   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+#   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+#   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+#   OTHER DEALINGS IN THE SOFTWARE.
diff --git a/src/desktop/xdg-utils-1.0.1/scripts/xdg-desktop-menu b/src/desktop/xdg-utils-1.0.1/scripts/xdg-desktop-menu
new file mode 100755
index 00000000..a252ba01
--- /dev/null
+++ b/src/desktop/xdg-utils-1.0.1/scripts/xdg-desktop-menu
@@ -0,0 +1,1261 @@
+#!/bin/sh
+#---------------------------------------------
+#   xdg-desktop-menu
+#
+#   Utility script to install menu items on a Linux desktop.
+#   Refer to the usage() function below for usage.
+#
+#   Copyright 2006, Kevin Krammer 
+#   Copyright 2006, Jeremy White 
+#
+#   LICENSE:
+#
+#   Permission is hereby granted, free of charge, to any person obtaining a
+#   copy of this software and associated documentation files (the "Software"),
+#   to deal in the Software without restriction, including without limitation
+#   the rights to use, copy, modify, merge, publish, distribute, sublicense,
+#   and/or sell copies of the Software, and to permit persons to whom the
+#   Software is furnished to do so, subject to the following conditions:
+#
+#   The above copyright notice and this permission notice shall be included
+#   in all copies or substantial portions of the Software.
+#
+#   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+#   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+#   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+#   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+#   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+#   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+#   OTHER DEALINGS IN THE SOFTWARE.
+#
+#---------------------------------------------
+
+manualpage()
+{
+cat << _MANUALPAGE
+Name
+
+xdg-desktop-menu - command line tool for (un)installing desktop menu items
+
+Synopsis
+
+xdg-desktop-menu install [--noupdate] [--novendor] [--mode mode] directory-file
+(s) desktop-file(s)
+
+xdg-desktop-menu uninstall [--noupdate] [--mode mode] directory-file(s)
+desktop-file(s)
+
+xdg-desktop-menu forceupdate [--mode mode]
+
+xdg-desktop-menu { --help | --manual | --version }
+
+Description
+
+The xdg-desktop-menu program can be used to install new menu entries to the
+desktop's application menu.
+
+The application menu works according to the XDG Desktop Menu Specification at
+http://www.freedesktop.org/Standards/menu-spec
+
+Commands
+
+install
+
+    Install one or more applications in a submenu of the desktop menu system.
+
+    desktop-file: A desktop file represents a single menu entry in the menu.
+    Desktop files are defined by the freedesktop.org Desktop Entry
+    Specification. The most important aspects of *.desktop files are summarized
+    below.
+
+    Menu entries can be added to the menu system in two different ways. They
+    can either be added to a predefined submenu in the menu system based on one
+    or more category keywords, or they can be added to a new submenu.
+
+    To add a menu entry to a predefined submenu the desktop file that
+    represents the menu entry must have a Categories= entry that lists one or
+    more keywords. The menu item will be included in an appropriate submenu
+    based on the included keywords.
+
+    To add menu items to a new submenu the desktop-files must be preceded by a
+    directory-file that describes the submenu. If multiple desktop-files are
+    specified, all entries will be added to the same menu. If entries are
+    installed to a menu that has been created with a previous call to
+    xdg-desktop-menu the entries will be installed in addition to any already
+    existing entries.
+
+    directory-file: The *.directory file indicated by directory-file represents
+    a submenu. The directory file provides the name and icon for a submenu. The
+    name of the directory file is used to identify the submenu.
+
+    If multiple directory files are provided each file will represent a submenu
+    within the menu that preceeds it, creating a nested menu hierarchy
+    (sub-sub-menus). The menu entries themselves will be added to the last
+    submenu.
+
+    Directory files follow the syntax defined by the freedesktop.org Desktop
+    Entry Specification.
+
+uninstall
+
+    Remove applications or submenus from the desktop menu system previously
+    installed with xdg-desktop-menu install.
+
+    A submenu and the associated directory file is only removed when the
+    submenu no longer contains any menu entries.
+
+forceupdate
+
+    Force an update of the menu system.
+
+    This command is only useful if the last call to xdg-desktop-menu included
+    the --noupdate option.
+
+Options
+
+--noupdate
+    Postpone updating the menu system. If multiple updates to the menu system
+    are made in sequence this flag can be used to indicate that additional
+    changes will follow and that it is not necassery to update the menu system
+    right away.
+--novendor
+
+    Normally, xdg-desktop-menu checks to ensure that any *.directory and
+    *.desktop files to be installed has a vendor prefix. This option can be
+    used to disable that check.
+
+    A vendor prefix consists of alpha characters ([a-zA-Z]) and is terminated
+    with a dash ("-"). Companies and organizations are encouraged to use a word
+    or phrase, preferably the organizations name, for which they hold a
+    trademark as their vendor prefix. The purpose of the vendor prefix is to
+    prevent name conflicts.
+
+--mode mode
+
+    mode can be user or system. In user mode the file is (un)installed for the
+    current user only. In system mode the file is (un)installed for all users
+    on the system. Usually only root is allowed to install in system mode.
+
+    The default is to use system mode when called by root and to use user mode
+    when called by a non-root user.
+
+--help
+    Show command synopsis.
+--manual
+    Show this manualpage.
+--version
+    Show the xdg-utils version information.
+
+Desktop Files
+
+An application item in the application menu is represented by a *.desktop file.
+A *.desktop file consists of a [Desktop Entry] header followed by several Key=
+Value lines.
+
+A *.desktop file can provide a name and description for an application in
+several different languages. This is done by adding a language code as used by
+LC_MESSAGES in square brackets behind the Key. This way one can specify
+different values for the same Key depending on the currently selected language.
+
+The following keys are often used:
+
+Value=1.0
+    This is a mandatory field to indicate that the *.desktop file follows the
+    1.0 version of the specification.
+Type=Application
+    This is a mandatory field that indicates that the *.desktop file describes
+    an application launcher.
+Name=Application Name
+    The name of the application. For example Mozilla
+GenericName=Generic Name
+    A generic description of the application. For example Web Browser
+Comment=Comment
+    Optional field to specify a tooltip for the application. For example Visit
+    websites on the Internet
+Icon=Icon File
+    The icon to use for the application. This can either be an absolute path to
+    an image file or an icon-name. If an icon-name is provided an image lookup
+    by name is done in the user's current icon theme. The xdg-icon-resource
+    command can be used to install image files into icon themes. The advantage
+    of using an icon-name instead of an absolute path is that with an icon-name
+    the application icon can be provided in several different sizes as well as
+    in several differently themed styles.
+Exec=Command Line
+    The command line to start the application. If the application can open
+    files the %f placeholder should be specified. When a file is dropped on the
+    application launcher the %f is replaced with the file path of the dropped
+    file. If multiple files can be specified on the command line the %F
+    placeholder should be used instead of %f. If the application is able to
+    open URLs in addition to local files then %u or %U can be used instead of
+    %f or %F.
+Categories=Categories
+
+    A list of categories separated by semi-colons. A category is a keyword that
+    describes and classifies the application. By default applications are
+    organized in the application menu based on category. When menu entries are
+    explicitly assigned to a new submenu it is not necassery to list any
+    categories.
+
+    When using categories it is recommended to include one of the following
+    categories: AudioVideo, Development, Education, Game, Graphics, Network,
+    Office, Settings, System, Utility.
+
+    See Appendix A of the XDG Desktop Menu Specification for information about
+    additional categories. http://standards.freedesktop.org/menu-spec/
+    menu-spec-1.0.html
+
+MimeType=Mimetypes
+    A list of mimetypes separated by semi-colons. This field is used to
+    indicate which file types the application is able to open.
+
+For a complete oveview of the *.desktop file format please visit http://
+www.freedesktop.org/wiki/Standards/desktop-entry-spec
+
+Directory Files
+
+The appearance of submenu in the application menu is provided by a *.directory
+file. In particular it provides the title of the submenu and a possible icon. A
+*.directory file consists of a [Desktop Entry] header followed by several Key=
+Value lines.
+
+A *.directory file can provide a title (name) for the submenu in several
+different languages. This is done by adding a language code as used by
+LC_MESSAGES in square brackets behind the Key. This way one can specify
+different values for the same Key depending on the currently selected language.
+
+The following keys are relevqnt for submenus:
+
+Value=1.0
+    This is a mandatory field to indicate that the *.directory file follows the
+    1.0 version of the Desktop Entry specification.
+Type=Directory
+    This is a mandatory field that indicates that the *.directory file
+    describes a submenu.
+Name=Menu Name
+    The title of submenu. For example Mozilla
+Comment=Comment
+    Optional field to specify a tooltip for the submenu.
+Icon=Icon File
+    The icon to use for the submenu. This can either be an absolute path to an
+    image file or an icon-name. If an icon-name is provided an image lookup by
+    name is done in the user's current icon theme. The xdg-icon-resource
+    command can be used to install image files into icon themes. The advantage
+    of using an icon-name instead of an absolute path is that with an icon-name
+    the submenu icon can be provided in several different sizes as well as in
+    several differently themed styles.
+
+Environment Variables
+
+xdg-desktop-menu honours the following environment variables:
+
+XDG_UTILS_DEBUG_LEVEL
+    Setting this environment variable to a non-zero numerical value makes
+    xdg-desktop-menu do more verbose reporting on stderr. Setting a higher
+    value increases the verbosity.
+XDG_UTILS_INSTALL_MODE
+    This environment variable can be used by the user or administrator to
+    override the installation mode. Valid values are user and system.
+
+Exit Codes
+
+An exit code of 0 indicates success while a non-zero exit code indicates
+failure. The following failure codes can be returned:
+
+1
+    Error in command line syntax.
+2
+    One of the files passed on the command line did not exist.
+3
+    A required tool could not be found.
+4
+    The action failed.
+5
+    No permission to read one of the files passed on the command line.
+
+See Also
+
+xdg-desktop-icon(1), xdg-icon-resource(1), xdg-mime(1)
+
+Examples
+
+The company ShinyThings Inc. has developed an application named "WebMirror" and
+would like to add it to the application menu. The company will use
+"shinythings" as its vendor id. In order to add the application to the menu
+there needs to be a .desktop file with a suitable Categories entry:
+
+shinythings-webmirror.desktop:
+
+  [Desktop Entry]
+  Encoding=UTF-8
+  Type=Application
+
+  Exec=webmirror
+  Icon=webmirror
+
+  Name=WebMirror
+  Name[nl]=WebSpiegel
+
+  Categories=Network;WebDevelopment;
+
+Now the xdg-desktop-menu tool can be used to add the
+shinythings-webmirror.desktop file to the desktop application menu:
+
+xdg-desktop-menu install ./shinythings-webmirror.desktop
+
+Note that for the purpose of this example the menu items are available in two
+languages, English and Dutch. The language code for Dutch is nl.
+
+In the next example the company ShinyThings Inc. will add its own submenu to
+the desktop application menu consisting of a "WebMirror" menu item and a
+"WebMirror Admin Tool" menu item.
+
+First the company needs to create two .desktop files that describe the two menu
+items. Since the items are to be added to a new submenu it is not necassery to
+include a Categories= line:
+
+shinythings-webmirror.desktop:
+
+  [Desktop Entry]
+  Encoding=UTF-8
+  Type=Application
+
+  Exec=webmirror
+  Icon=shinythings-webmirror
+
+  Name=WebMirror
+  Name[nl]=WebSpiegel
+
+
+shinythings-webmirror-admin.desktop:
+
+  [Desktop Entry]
+  Encoding=UTF-8
+  Type=Application
+
+  Exec=webmirror-admintool
+  Icon=shinythings-webmirror-admintool
+
+  Name=WebMirror Admin Tool
+  Name[nl]=WebSpiegel Administratie Tool
+
+In addition a .directory file needs to be created to provide a title and icon
+for the sub-menu itself:
+
+shinythings-webmirror.directory:
+
+  [Desktop Entry]
+  Encoding=UTF-8
+
+  Icon=shinythings-webmirror-menu
+
+  Name=WebMirror
+  Name[nl]=WebSpiegel
+
+These file can now be installed with:
+
+xdg-desktop-menu install ./shinythings-webmirror.directory \
+      ./shinythings-webmirror.desktop ./shinythings-webmirror-admin.desktop
+
+The menu entries could also be installed one by one:
+
+xdg-desktop-menu install --noupdate ./shinythings-webmirror.directory \
+      ./shinythings-webmirror.desktop
+xdg-desktop-menu install --noupdate ./shinythings-webmirror.directory \
+      ./shinythings-webmirror-admin.desktop
+xdg-desktop-menu forceupdate
+
+Although the result is the same it is slightly more efficient to install all
+files at the same time.
+
+The *.desktop and *.directory files reference icons with the names webmirror,
+webmirror-admin and webmirror-menu which should also be installed. In this
+example the icons are installed in two different sizes, once with a size of
+22x22 pixels and once with a size of 64x64 pixels:
+
+xdg-icon-resource install --size 22 ./wmicon-22.png shinythings-webmirror
+xdg-icon-resource install --size 22 ./wmicon-menu-22.png shinythings-webmirror-menu
+xdg-icon-resource install --size 22 ./wmicon-admin-22.png shinythings-webmirror-admin
+xdg-icon-resource install --size 64 ./wmicon-64.png shinythings-webmirror
+xdg-icon-resource install --size 64 ./wmicon-menu-64.png shinythings-webmirror-menu
+xdg-icon-resource install --size 64 ./wmicon-admin-64.png shinythings-webmirror-admin
+
+_MANUALPAGE
+}
+
+usage()
+{
+cat << _USAGE
+xdg-desktop-menu - command line tool for (un)installing desktop menu items
+
+Synopsis
+
+xdg-desktop-menu install [--noupdate] [--novendor] [--mode mode] directory-file
+(s) desktop-file(s)
+
+xdg-desktop-menu uninstall [--noupdate] [--mode mode] directory-file(s)
+desktop-file(s)
+
+xdg-desktop-menu forceupdate [--mode mode]
+
+xdg-desktop-menu { --help | --manual | --version }
+
+_USAGE
+}
+
+#@xdg-utils-common@
+
+#----------------------------------------------------------------------------
+#   Common utility functions included in all XDG wrapper scripts
+#----------------------------------------------------------------------------
+
+DEBUG()
+{
+  [ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && return 0;
+  [ ${XDG_UTILS_DEBUG_LEVEL} -lt $1 ] && return 0;
+  shift
+  echo "$@" >&2
+}
+
+#-------------------------------------------------------------
+# Exit script on successfully completing the desired operation
+
+exit_success()
+{
+    if [ $# -gt 0 ]; then
+        echo "$@"
+        echo
+    fi
+
+    exit 0
+}
+
+
+#-----------------------------------------
+# Exit script on malformed arguments, not enough arguments
+# or missing required option.
+# prints usage information
+
+exit_failure_syntax()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-desktop-menu: $@" >&2
+        echo "Try 'xdg-desktop-menu --help' for more information." >&2
+    else
+        usage
+        echo "Use 'man xdg-desktop-menu' or 'xdg-desktop-menu --manual' for additional info."
+    fi
+
+    exit 1
+}
+
+#-------------------------------------------------------------
+# Exit script on missing file specified on command line
+
+exit_failure_file_missing()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-desktop-menu: $@" >&2
+    fi
+
+    exit 2
+}
+
+#-------------------------------------------------------------
+# Exit script on failure to locate necessary tool applications
+
+exit_failure_operation_impossible()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-desktop-menu: $@" >&2
+    fi
+
+    exit 3
+}
+
+#-------------------------------------------------------------
+# Exit script on failure returned by a tool application
+
+exit_failure_operation_failed()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-desktop-menu: $@" >&2
+    fi
+
+    exit 4
+}
+
+#------------------------------------------------------------
+# Exit script on insufficient permission to read a specified file
+
+exit_failure_file_permission_read()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-desktop-menu: $@" >&2
+    fi
+
+    exit 5
+}
+
+#------------------------------------------------------------
+# Exit script on insufficient permission to read a specified file
+
+exit_failure_file_permission_write()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-desktop-menu: $@" >&2
+    fi
+
+    exit 6
+}
+
+check_input_file()
+{
+    if [ ! -e "$1" ]; then
+        exit_failure_file_missing "file '$1' does not exist"
+    fi
+    if [ ! -r "$1" ]; then
+        exit_failure_file_permission_read "no permission to read file '$1'"
+    fi
+}
+
+check_vendor_prefix()
+{
+    file_label="$2"
+    [ -n "$file_label" ] || file_label="filename"
+    file=`basename "$1"`
+    case "$file" in
+       [a-zA-Z]*-*)
+         return
+         ;;
+    esac
+
+    echo "xdg-desktop-menu: $file_label '$file' does not have a proper vendor prefix" >&2
+    echo 'A vendor prefix consists of alpha characters ([a-zA-Z]) and is terminated' >&2
+    echo 'with a dash ("-"). An example '"$file_label"' is '"'example-$file'" >&2
+    echo "Use --novendor to override or 'xdg-desktop-menu --manual' for additional info." >&2
+    exit 1
+}
+
+check_output_file()
+{
+    # if the file exists, check if it is writeable
+    # if it does not exists, check if we are allowed to write on the directory
+    if [ -e "$1" ]; then
+        if [ ! -w "$1" ]; then
+            exit_failure_file_permission_write "no permission to write to file '$1'"
+        fi
+    else
+        DIR=`dirname "$1"`
+        if [ ! -w "$DIR" -o ! -x "$DIR" ]; then
+            exit_failure_file_permission_write "no permission to create file '$1'"
+        fi
+    fi
+}
+
+#----------------------------------------
+# Checks for shared commands, e.g. --help
+
+check_common_commands()
+{
+    while [ $# -gt 0 ] ; do
+        parm="$1"
+        shift
+
+        case "$parm" in
+            --help)
+            usage
+            echo "Use 'man xdg-desktop-menu' or 'xdg-desktop-menu --manual' for additional info."
+            exit_success
+            ;;
+
+            --manual)
+            manualpage
+            exit_success
+            ;;
+
+            --version)
+            echo "xdg-desktop-menu 1.0.1"
+            exit_success
+            ;;
+        esac
+    done
+}
+
+check_common_commands "$@"
+
+[ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && unset XDG_UTILS_DEBUG_LEVEL;
+if [ ${XDG_UTILS_DEBUG_LEVEL-0} -lt 1 ]; then
+    # Be silent
+    xdg_redirect_output=" > /dev/null 2> /dev/null"
+else
+    # All output to stderr
+    xdg_redirect_output=" >&2"
+fi
+
+#--------------------------------------
+# Checks for known desktop environments
+# set variable DE to the desktop environments name, lowercase
+
+detectDE()
+{
+    if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde;
+    elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome;
+    elif xprop -root _DT_SAVE_MODE | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce;
+    fi
+}
+
+#----------------------------------------------------------------------------
+# kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4
+# It also always returns 1 in KDE 3.4 and earlier
+# Simply return 0 in such case
+
+kfmclient_fix_exit_code()
+{
+    version=`kde-config --version 2>/dev/null | grep KDE`
+    major=`echo $version | sed 's/KDE: \([0-9]\).*/\1/'`
+    minor=`echo $version | sed 's/KDE: [0-9]*\.\([0-9]\).*/\1/'`
+    release=`echo $version | sed 's/KDE: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'`
+    test "$major" -gt 3 && return $1
+    test "$minor" -gt 5 && return $1
+    test "$release" -gt 4 && return $1
+    return 0
+}
+
+update_desktop_database()
+{
+#    echo Update desktop database: $mode
+    if [ "$mode" = "system" ] ; then
+        for x in `echo $PATH | sed 's/:/ /g'` /opt/gnome/bin; do
+           if [ -x $x/update-desktop-database ] ; then
+              DEBUG 1 "Running $x/update-desktop-database"
+              eval '$x/update-desktop-database'$xdg_redirect_output
+              return
+           fi
+        done
+    fi
+}
+
+fixup_mandriva_categories()
+{
+    DEBUG 1 "fixup_mandriva_categories $1"
+    awk '
+BEGIN {
+    xlat["AudioVideo"]="X-Mandrakelinux-Multimedia;X-MandrivaLinux-Multimedia"
+    xlat["Development"]="X-Mandrakelinux-MoreApplications-Development;X-MandrivaLinux-MoreApplications-Development"
+    xlat["Education"]="X-Mandrakelinux-MoreApplications;X-MandrivaLinux-MoreApplications-Education"
+    xlat["Game"]="X-Mandrakelinux-MoreApplications;X-MandrivaLinux-MoreApplications-Games"
+    xlat["Graphics"]="X-Mandrakelinux-Multimedia-Graphics"
+    xlat["Network"]="X-Mandrakelinux-Internet;X-MandrivaLinux-Internet"
+    xlat["Office"]="X-Mandrakelinux-Office;X-MandrivaLinux-Office"
+    xlat["System"]="X-Mandrakelinux-System;X-MandrivaLinux-System"
+    xlat["Utility"]="X-Mandrakelinux-Office-Accessories;X-MandrivaLinux-Office-Accessories"
+}
+{
+    if (match($0,/Categories=/)) {
+        split(substr($0,RSTART+11),categories,";")
+        result=""
+        for (n in categories)
+        {
+               if (categories[n] in xlat)
+                 categories[n]=categories[n] ";" xlat[categories[n]]
+               if (categories[n])
+                 result=result categories[n] ";"
+        }
+        print "Categories=" result
+    }
+    else
+    {
+        print $0
+    }
+}' $1 > $1.new
+    mv $1.new $1
+}
+
+# Make application $1/$2 the default for all the mimetypes it support,
+# iff such mimetype didn't had a default application already.
+# $1 Install dir for desktop file
+# $2 base name of desktop file
+make_lazy_default()
+{
+    local mimetypes
+    local xdg_user_dir
+    local xdg_default_dirs
+    
+    DEBUG 1 "make_lazy_default $1/$2"
+    mimetypes=`awk '
+{
+    if (match($0,/MimeType=/)) {
+        split(substr($0,RSTART+9),mimetypes,";")
+        for (n in mimetypes)
+        {
+               if (mimetypes[n])
+                 print mimetypes[n]
+        }
+    }
+}' "$1/$2" 2> /dev/null`
+    
+    for MIME in $mimetypes ; do
+        xdg_default_dirs="$XDG_DATA_DIRS"
+        [ -n "$xdg_default_dirs" ] || xdg_default_dirs=/usr/local/share/:/usr/share/
+        if [ x"$mode" = x"user" ] ; then
+            xdg_user_dir="$XDG_DATA_HOME"
+            [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share"
+            xdg_default_dirs="$xdg_user_dir:$xdg_default_dirs"
+        fi
+        local default_app
+        for x in `echo "$xdg_default_dirs" | sed 's/:/ /g'`; do
+            DEBUG 2 "Checking $x/applications/defaults.list"
+            default_app=`grep "$MIME=" $x/applications/defaults.list 2> /dev/null | cut -d '=' -f 2`
+            if [ -n "$default_app" ] ; then
+                DEBUG 2 "Found default apps for $MIME: $default_app"
+                default_app="$default_app;"
+                break;
+            fi
+        done
+        DEBUG 2 "Current default apps for $MIME: $default_app"
+        if echo "$default_app" | grep "$2" > /dev/null 2> /dev/null; then
+            # App already listed as default
+            continue;
+        fi
+        default_file="$1/defaults.list"
+        DEBUG 1 "Updating $default_file"
+        grep -v "$MIME=" $default_file > ${default_file}.new 2> /dev/null
+        if ! grep "[Default Applications]" ${default_file}.new > /dev/null; then
+            echo "[Default Applications]" >> ${default_file}.new
+        fi
+        echo $MIME="$default_app$2" >> ${default_file}.new
+        mv ${default_file}.new $default_file
+    done
+}
+
+update_submenu()
+{
+    DEBUG 1 "update_submenu $1"
+    menu_file="$1"
+
+    xdg_dir_name=menus
+    xdg_user_dir="$XDG_CONFIG_HOME"
+    [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.config"
+    xdg_user_dir="$xdg_user_dir/$xdg_dir_name"
+
+    xdg_system_dirs="$XDG_CONFIG_DIRS"
+    [ -n "$xdg_system_dirs" ] || xdg_system_dirs=/etc/xdg
+    xdg_global_dir=
+    for x in `echo $xdg_system_dirs | sed 's/:/ /g'` ; do
+        if [ -w $x/$xdg_dir_name ] ; then
+            xdg_global_dir="$x/$xdg_dir_name"
+            break
+        fi
+    done
+    xdg_user_dir="$xdg_user_dir/applications-merged"
+    xdg_global_dir="$xdg_global_dir/applications-merged"
+
+    DEBUG 3 "Install locations for *.menu file:" 
+    DEBUG 3 "xdg_user_dir: $xdg_user_dir"
+    DEBUG 3 "xdg_global_dir: $xdg_global_dir"
+    DEBUG 3 "kde_user_dir: $kde_user_dir"
+    DEBUG 3 "kde_global_dir: $kde_global_dir"
+    DEBUG 3 "gnome_user_dir: $gnome_user_dir"
+    DEBUG 3 "gnome_global_dir: $gnome_global_dir"
+
+    if [ x"$mode" = x"user" ] ; then
+        xdg_dir="$xdg_user_dir"
+        kde_dir="$kde_user_dir"
+        gnome_dir="$gnome_user_dir"
+        my_umask=077
+        my_chmod=0600
+    else
+        xdg_dir="$xdg_global_dir"
+        kde_dir="$kde_global_dir"
+        gnome_dir="$gnome_global_dir"
+        my_umask=022
+        my_chmod=0644
+        if [ -z "${xdg_dir}${kde_dir}${gnome_dir}" ] ; then
+            exit_failure_operation_impossible "No writable system menu directory found."
+        fi
+    fi
+
+    if [ -z "$menu_file" ] ; then
+        # Work around for SUSE/gnome 2.12 to pick up new ~/.local/share/applications
+        save_umask=`umask`
+        umask $my_umask
+
+        mkdir -p $xdg_dir
+        touch $xdg_dir/xdg-desktop-menu-dummy.menu
+
+        umask $save_umask
+        return
+    fi
+
+    if [ $action = "install" -a -f "/etc/xdg/menus/gnome-applications.menu" ] ; then
+        # Work around for Debian Gnome
+        gnome_xdg_dir=`echo "$xdg_dir" | sed -e 's^/applications-merged^/gnome-applications-merged^'`
+        if [ ! -e "$gnome_xdg_dir" ] ; then
+            DEBUG 1 "Debian Workaround: Link '$xdg_dir' to '$gnome_xdg_dir'"
+            mkdir -p `dirname "$gnome_xdg_dir"`
+            eval 'ln -s "applications-merged" "$gnome_xdg_dir"'$xdg_redirect_output
+        fi
+    fi
+    if [ $action = "install" -a -f "/etc/mandrake-release" ] ; then
+        # Work around for Mandriva 2006
+        mandrake_xdg_dir=`echo "$xdg_dir" | sed -e 's^/applications-merged^/applications-mdk-merged^'`
+        if [ ! -e "$mandrake_xdg_dir" ] ; then
+            DEBUG 1 "Mandriva Workaround: Link '$xdg_dir' to '$mandrake_xdg_dir'"
+            mkdir -p `dirname "$mandrake_xdg_dir"`
+            eval 'ln -s "applications-merged" "$mandrake_xdg_dir"'$xdg_redirect_output
+        fi
+    fi
+    if [ $action = "install" -a x"$mode" = x"user" -a -d "/etc/xdg/menus/kde-applications-merged" ] ; then
+        # Work around for Fedora Core 5 + patched KDE
+        kde_xdg_dir=`echo "$xdg_dir" | sed -e 's^/applications-merged^/kde-applications-merged^'`
+        if [ ! -e "$kde_xdg_dir" ] ; then
+            DEBUG 1 "Fedora Workaround: Link '$xdg_dir' to '$kde_xdg_dir'"
+            mkdir -p `dirname "$kde_xdg_dir"`
+            eval 'ln -s "applications-merged" "$kde_xdg_dir"'$xdg_redirect_output
+        fi
+    fi        
+    if [ $action = "install" -a x"$mode" = x"system" -a -d "/etc/xdg/menus/kde-applications-merged" -a ! -d "/etc/xdg/menus/applications-merged" ] ; then
+        # Work around for Kubuntu 6.06
+        kde_xdg_dir=`echo "$xdg_dir" | sed -e 's^/applications-merged^/kde-applications-merged^'`
+        DEBUG 1 "Kubuntu Workaround: Link '$xdg_dir' to 'kde-applications-merged'"
+        eval 'ln -s "kde-applications-merged" "$xdg_dir"'$xdg_redirect_output
+    fi
+
+    orig_menu_file=$xdg_dir/$menu_file
+
+    DEBUG 1 "Updating $orig_menu_file ($action)"
+
+    tmpfile=`mktemp`
+    orig_desktop_files=
+    if [ -r "$orig_menu_file" ] ; then
+        awk '
+# List all files within  tags
+BEGIN {
+  RS="<"
+}
+/^Filename/ {
+  if (match($0,/>/)) {
+     print substr($0,RSTART+1)
+  }
+}' $orig_menu_file > $tmpfile
+    fi
+
+    orig_desktop_files=`cat $tmpfile`
+    new_desktop_files=
+    if [ $action = "install" ] ; then
+        for desktop_file in $desktop_files; do
+            basefile=`basename $desktop_file`
+            if ! grep '^'$basefile'$' $tmpfile > /dev/null 2> /dev/null ; then
+            	# Append
+            	echo "$basefile" >> $tmpfile
+            fi
+        done
+        new_desktop_files=`cat $tmpfile`
+    fi
+    if [ $action = "uninstall" ] ; then
+        echo > $tmpfile
+        for desktop_file in $desktop_files; do
+            echo "$desktop_file" >> $tmpfile
+        done
+        # Files to uninstall are listed in $tmpfile
+        # Existing files are in $orig_desktop_files
+        for desktop_file in $orig_desktop_files; do
+            if ! grep '^'$desktop_file'$' $tmpfile > /dev/null 2> /dev/null; then
+            	# Keep this file, it's not in the uninstall list
+            	new_desktop_files="$new_desktop_files $desktop_file"
+            fi
+        done
+    fi
+    rm -f "$tmpfile"
+    
+    DEBUG 3 "Files to list in $menu_file: $new_desktop_files"
+    
+    if [ -n "$new_desktop_files" ] ; then
+        # Install/update
+        tmpfile=`mktemp`
+        (
+            echo ''
+            echo ''
+            echo ''
+            echo '    Applications'
+
+            for desktop_file in $directory_files; do
+                basefile=`basename $desktop_file`
+                basefilename=`echo "$basefile"|cut -d '.' -f 1`
+                echo ""
+                echo "    $basefilename"
+                echo "    $basefile"
+            done
+
+            echo "    "
+            for desktop_file in $new_desktop_files; do
+                echo "        $desktop_file"
+            done
+            echo "    "
+
+            for desktop_file in $directory_files; do
+                echo ""
+            done
+
+            echo ''                        
+        ) > $tmpfile
+        chmod $my_chmod $tmpfile
+    
+        save_umask=`umask`
+        umask $my_umask
+
+        mkdir -p $xdg_dir
+        eval 'cp $tmpfile $xdg_dir/$menu_file'$xdg_redirect_output
+
+        umask $save_umask
+	rm -f "$tmpfile"
+    else
+        # Uninstall
+        rm -f $xdg_dir/$menu_file
+    fi
+    
+    # Uninstall .directory files only if no longer referenced
+    if [ $action = "uninstall" ] ; then
+        tmpfile=`mktemp`
+        for menu_file in $xdg_dir/*; do
+            if grep 'generated and managed by xdg-desktop-menu' $menu_file > /dev/null 2> /dev/null; then
+                awk '
+# List all files within  tags
+BEGIN {
+  RS="<"
+}
+/^Directory/ {
+  if (match($0,/>/)) {
+     print substr($0,RSTART+1)
+  }
+}' $menu_file >> $tmpfile
+            fi
+        done 
+        orig_directory_files="$directory_files"
+        directory_files=
+        for desktop_file in $orig_directory_files; do
+            if ! grep '^'$desktop_file'$' $tmpfile > /dev/null 2> /dev/null; then
+                # No longer in use, safe to delete
+               directory_files="$directory_files $desktop_file"
+            fi
+        done
+        rm -f "$tmpfile"
+    fi
+}
+
+
+[ x"$1" != x"" ] || exit_failure_syntax
+
+mode=
+action=
+update=yes
+desktop_files=
+directory_files=
+
+case $1 in
+  install)
+    action=install
+    ;;
+
+  uninstall)
+    action=uninstall
+    ;;
+
+  forceupdate)
+    action=forceupdate
+    ;;
+
+  *)
+    exit_failure_syntax "unknown command '$1'"
+    ;;
+esac
+
+shift
+
+vendor=true
+while [ $# -gt 0 ] ; do
+    parm="$1"
+    shift
+
+    case "$parm" in
+      --noupdate)
+        update=no
+        ;;
+
+      --mode)
+        if [ -z "$1" ] ; then
+            exit_failure_syntax "mode argument missing for --mode"
+        fi
+        case "$1" in
+          user)
+            mode="user"
+            ;;
+
+          system)
+            mode="system"
+            ;;
+            
+          *)
+            exit_failure_syntax "unknown mode '$1'"
+            ;;
+        esac
+        shift
+        ;;
+
+      --novendor)
+        vendor=false
+        ;;
+
+      -*)
+        exit_failure_syntax "unexpected option '$parm'"
+        ;;
+
+      *)
+        if [ "$action" = "install" ] ; then
+            check_input_file "$parm"
+        fi
+        case "$parm" in
+           *.directory)
+              if [ -n "$desktop_files" ] ; then
+                  exit_failure_syntax "'$parm' must preceed any *.desktop file"
+              fi
+              directory_files="$directory_files $parm"
+              ;;
+           *.desktop)
+              desktop_files="$desktop_files $parm"
+              ;;
+           *)
+              exit_failure_syntax "file to $action must be a *.directory or *.desktop file"
+              ;;
+        esac
+        ;;
+    esac
+done
+
+# Shouldn't happen
+if [ -z "$action" ] ; then
+    exit_failure_syntax "command argument missing"
+fi
+
+if [ -n "$XDG_UTILS_INSTALL_MODE" ] ; then
+    if [ "$XDG_UTILS_INSTALL_MODE" = "system" ] ; then
+        mode="system"
+    elif [ "$XDG_UTILS_INSTALL_MODE" = "user" ] ; then
+        mode="user"
+    fi
+fi
+
+if [ -z "$mode" ] ; then
+    if [ `whoami` = "root" ] ; then
+       mode="system"
+    else
+       mode="user"
+    fi
+fi
+
+if [ x"$action" = x"forceupdate" ] ; then
+    update_desktop_database
+    exit_success
+fi
+
+if [ -z "$desktop_files" ] ; then
+    exit_failure_syntax "desktop-file argument missing"
+fi
+
+menu_name=
+for desktop_file in $directory_files; do
+    if [ "$vendor" =  "true" -a "$action" = "install" ] ; then
+        check_vendor_prefix "$desktop_file"
+    fi
+
+    basefilename=`basename "$desktop_file"|cut -d '.' -f 1`
+    if [ -z "$menu_name" ] ; then
+        menu_name="$basefilename"
+    else
+        menu_name="$menu_name-$basefilename"
+    fi
+done
+
+if [ -n "$menu_name" ] ; then
+    if [ x"$mode" = x"user" ] ; then
+        update_submenu "user-$menu_name.menu"
+    else
+        update_submenu "$menu_name.menu"
+    fi
+else
+    # Work around for SUSE/gnome 2.12 to pick up new ~/.local/share/applications
+    if [ x"$mode" = x"user" ] ; then
+        update_submenu
+    fi
+fi
+
+# Install *.directory files
+
+xdg_dir_name=desktop-directories
+
+xdg_user_dir="$XDG_DATA_HOME"
+[ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share"
+xdg_user_dir="$xdg_user_dir/$xdg_dir_name"
+
+xdg_system_dirs="$XDG_DATA_DIRS"
+[ -n "$xdg_system_dirs" ] || xdg_system_dirs=/usr/local/share/:/usr/share/
+xdg_global_dir=
+for x in `echo $xdg_system_dirs | sed 's/:/ /g'` ; do
+    if [ -w $x/$xdg_dir_name ] ; then
+        xdg_global_dir="$x/$xdg_dir_name"
+        break
+    fi
+done
+
+DEBUG 3 "Install locations for *.directory files:" 
+DEBUG 3 "xdg_user_dir: $xdg_user_dir"
+DEBUG 3 "xdg_global_dir: $xdg_global_dir"
+DEBUG 3 "kde_user_dir: $kde_user_dir"
+DEBUG 3 "kde_global_dir: $kde_global_dir"
+DEBUG 3 "gnome_user_dir: $gnome_user_dir"
+DEBUG 3 "gnome_global_dir: $gnome_global_dir"
+
+if [ x"$mode" = x"user" ] ; then
+    xdg_dir="$xdg_user_dir"
+    kde_dir="$kde_user_dir"
+    gnome_dir="$gnome_user_dir"
+    my_umask=077
+else
+    xdg_dir="$xdg_global_dir"
+    kde_dir="$kde_global_dir"
+    gnome_dir="$gnome_global_dir"
+    my_umask=022
+    if [ -z "${xdg_dir}${kde_dir}${gnome_dir}" ] ; then
+        exit_failure_operation_impossible "No writable system menu directory found."
+    fi
+fi
+
+for desktop_file in $directory_files; do
+    basefile=`basename $desktop_file`
+
+    DEBUG 1 "$action $desktop_file in $xdg_dir $kde_dir $gnome_dir"
+
+    case $action in
+        install)
+            save_umask=`umask`
+            umask $my_umask
+
+            for x in $xdg_dir $kde_dir $gnome_dir ; do
+                mkdir -p $x
+                eval 'cp $desktop_file $x/$basefile'$xdg_redirect_output
+            done
+
+            umask $save_umask
+            ;;
+
+        uninstall)
+            for x in $xdg_dir $kde_dir $gnome_dir ; do
+                rm -f $x/$basefile
+            done
+
+            ;;
+    esac
+done
+
+# Install *.desktop files
+xdg_dir_name=applications
+
+xdg_user_dir="$XDG_DATA_HOME"
+[ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share"
+xdg_user_dir="$xdg_user_dir/$xdg_dir_name"
+
+xdg_system_dirs="$XDG_DATA_DIRS"
+[ -n "$xdg_system_dirs" ] || xdg_system_dirs=/usr/local/share/:/usr/share/
+xdg_global_dir=
+for x in `echo $xdg_system_dirs | sed 's/:/ /g'` ; do
+    if [ -w $x/$xdg_dir_name ] ; then
+        xdg_global_dir="$x/$xdg_dir_name"
+        break
+    fi
+done
+
+kde_user_dir="$HOME/.kde/share/applnk"
+kde_global_dir="/usr/share/applnk"
+[ -w $kde_global_dir ] || kde_global_dir=
+
+gnome_user_dir="$HOME/.gnome/apps"
+gnome_global_dir="/usr/share/gnome/apps"
+[ -w $gnome_global_dir ] || gnome_global_dir=
+
+[ -f /etc/mandriva-release ] && need_mandriva_fix=true
+[ -n "$need_mandriva_fix" ] && DEBUG 1 "Fixing up .desktop categories (Mandriva work around)"
+
+DEBUG 3 "Install locations for *.desktop files:" 
+DEBUG 3 "xdg_user_dir: $xdg_user_dir"
+DEBUG 3 "xdg_global_dir: $xdg_global_dir"
+DEBUG 3 "kde_user_dir: $kde_user_dir"
+DEBUG 3 "kde_global_dir: $kde_global_dir"
+DEBUG 3 "gnome_user_dir: $gnome_user_dir"
+DEBUG 3 "gnome_global_dir: $gnome_global_dir"
+
+if [ x"$mode" = x"user" ] ; then
+    xdg_dir="$xdg_user_dir"
+    kde_dir="$kde_user_dir"
+    gnome_dir="$gnome_user_dir"
+    my_umask=077
+else
+    xdg_dir="$xdg_global_dir"
+    kde_dir="$kde_global_dir"
+    gnome_dir="$gnome_global_dir"
+    my_umask=022
+    if [ -z "${xdg_dir}${kde_dir}${gnome_dir}" ] ; then
+        exit_failure_operation_impossible "No writable system menu directory found."
+    fi
+fi
+
+for desktop_file in $desktop_files; do
+    if [ "$vendor" =  "true" -a "$action" = "install" ] ; then
+        check_vendor_prefix "$desktop_file"
+    fi
+
+    basefile=`basename $desktop_file`
+
+    DEBUG 1 "$action $desktop_file in $xdg_dir $kde_dir $gnome_dir"
+
+    case $action in
+        install)
+            save_umask=`umask`
+            umask $my_umask
+
+            for x in $xdg_dir $kde_dir $gnome_dir ; do
+                mkdir -p $x
+                eval 'cp $desktop_file $x/$basefile'$xdg_redirect_output
+            done
+
+            if [ -n "$need_mandriva_fix" ] ; then
+            	fixup_mandriva_categories $xdg_dir/$basefile
+            fi
+
+            if [ -f $kde_dir/$basefile ] ; then
+                echo "OnlyShowIn=Old;" >> $kde_dir/$basefile
+            fi
+
+            if [ -f $gnome_dir/$basefile ] ; then
+                echo "OnlyShowIn=Old;" >> $gnome_dir/$basefile
+            fi
+            
+            make_lazy_default "$xdg_dir" "$basefile"
+
+            umask $save_umask
+            ;;
+
+        uninstall)
+            for x in $xdg_dir $kde_dir $gnome_dir ; do
+                rm -f $x/$basefile
+            done
+
+            ;;
+    esac
+done
+
+if [ x"$update" = x"yes" ] ; then
+    update_desktop_database
+fi
+
+exit_success
diff --git a/src/desktop/xdg-utils-1.0.1/scripts/xdg-icon-resource b/src/desktop/xdg-utils-1.0.1/scripts/xdg-icon-resource
new file mode 100755
index 00000000..df34ccaf
--- /dev/null
+++ b/src/desktop/xdg-utils-1.0.1/scripts/xdg-icon-resource
@@ -0,0 +1,837 @@
+#!/bin/sh
+#---------------------------------------------
+#   xdg-icon-resource
+#
+#   Utility script to install icons on a Linux desktop.
+#
+#   Refer to the usage() function below for usage.
+#
+#   Copyright 2006, Kevin Krammer 
+#   Copyright 2006, Jeremy White 
+#
+#   LICENSE:
+#
+#   Permission is hereby granted, free of charge, to any person obtaining a
+#   copy of this software and associated documentation files (the "Software"),
+#   to deal in the Software without restriction, including without limitation
+#   the rights to use, copy, modify, merge, publish, distribute, sublicense,
+#   and/or sell copies of the Software, and to permit persons to whom the
+#   Software is furnished to do so, subject to the following conditions:
+#
+#   The above copyright notice and this permission notice shall be included
+#   in all copies or substantial portions of the Software.
+#
+#   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+#   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+#   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+#   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+#   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+#   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+#   OTHER DEALINGS IN THE SOFTWARE.
+#
+#---------------------------------------------
+
+manualpage()
+{
+cat << _MANUALPAGE
+Name
+
+xdg-icon-resource - command line tool for (un)installing icon resources
+
+Synopsis
+
+xdg-icon-resource install [--noupdate] [--novendor] [--theme theme] [--context
+context] [--mode mode] --size size icon-file [icon-name]
+
+xdg-icon-resource uninstall [--noupdate] [--theme theme] [--context context]
+[--mode mode] --size size icon-name
+
+xdg-icon-resource forceupdate [--theme theme] [--mode mode]
+
+xdg-icon-resource { --help | --manual | --version }
+
+Description
+
+The xdg-icon-resource program can be used to install icon resources into the
+desktop icon system in order to illustrate menu entries, to depict desktop
+icons or to graphically represent file types.
+
+The desktop icon system identifies icons by name. Depending on the required
+size, the choice of icon theme and the context in which the icon is used, the
+desktop icon system locates an appropriate icon resource to depict an icon.
+Icon resources can be XPM files, PNG files or SVG files.
+
+The desktop icon system works according to the XDG Icon Theme Specification at
+http://www.freedesktop.org/Standards/icon-theme-spec
+
+Commands
+
+install
+    Installs the icon file indicated by icon-file to the desktop icon system
+    under the name icon-name. Icon names do not have an extension. If icon-name
+    is not provided the name is derived from icon-file. The icon file must have
+    .png or .xpm as extension. If a corresponding .icon file exists in the same
+    location as icon-file it will be installed as well.
+uninstall
+    Removes the icon indicated by icon-name from the desktop icon system. Note
+    that icon names do not have an extension.
+forceupdate
+    Force an update of the desktop icon system. This is only useful if the last
+    call to xdg-icon-resource included the --noupdate option.
+
+Options
+
+--noupdate
+    Postpone updating the desktop icon system. If multiple icons are added in
+    sequence this flag can be used to indicate that additional changes will
+    follow and that it is not necassery to update the desktop icon system right
+    away.
+--novendor
+
+    Normally, xdg-icon-resource checks to ensure that an icon file to be
+    installed in the apps context has a proper vendor prefix. This option can
+    be used to disable that check.
+
+    A vendor prefix consists of alpha characters ([a-zA-Z]) and is terminated
+    with a dash ("-"). Companies and organizations are encouraged to use a word
+    or phrase, preferably the organizations name, for which they hold a
+    trademark as their vendor prefix. The purpose of the vendor prefix is to
+    prevent name conflicts.
+
+--theme theme
+    Installs or removes the icon file as part of theme. If no theme is
+    specified the icons will be installed as part of the default hicolor theme.
+    Applications may install icons under multiple themes but should at least
+    install icons for the default hicolor theme.
+--context context
+    Specifies the context for the icon. Icons to be used in the application
+    menu and as desktop icon should use apps as context which is the default
+    context. Icons to be used as file icons should use mimetypes as context.
+    Other common contexts are actions, devices, emblems, filesystems and stock.
+--size size
+    Specifies the size of the icon. All icons must be square. Common sizes for
+    icons in the apps context are: 16, 22, 32, 48, 64 and 128. Common sizes for
+    icons in the mimetypes context are: 16, 22, 32, 48, 64 and 128
+--mode mode
+
+    mode can be user or system. In user mode the file is (un)installed for the
+    current user only. In system mode the file is (un)installed for all users
+    on the system. Usually only root is allowed to install in system mode.
+
+    The default is to use system mode when called by root and to use user mode
+    when called by a non-root user.
+
+--help
+    Show command synopsis.
+--manual
+    Show this manualpage.
+--version
+    Show the xdg-utils version information.
+
+Environment Variables
+
+xdg-icon-resource honours the following environment variables:
+
+XDG_UTILS_DEBUG_LEVEL
+    Setting this environment variable to a non-zero numerical value makes
+    xdg-icon-resource do more verbose reporting on stderr. Setting a higher
+    value increases the verbosity.
+XDG_UTILS_INSTALL_MODE
+    This environment variable can be used by the user or administrator to
+    override the installation mode. Valid values are user and system.
+
+Exit Codes
+
+An exit code of 0 indicates success while a non-zero exit code indicates
+failure. The following failure codes can be returned:
+
+1
+    Error in command line syntax.
+2
+    One of the files passed on the command line did not exist.
+3
+    A required tool could not be found.
+4
+    The action failed.
+5
+    No permission to read one of the files passed on the command line.
+
+See Also
+
+xdg-desktop-icon(1), xdg-desktop-menu(1), xdg-mime(1)
+
+Examples
+
+To install an icon resource to depict a launcher for the application myfoobar,
+the company ShinyThings Inc. can use:
+
+xdg-icon-resource install --size 64 shinythings-myfoobar.png
+
+To install an icon for a new application/x-foobar file type one can use:
+
+xdg-icon-resource install --context mimetypes --size 48 ./mime-foobar-48.png application-x-foobar
+xdg-icon-resource install --context mimetypes --size 64 ./mime-foobar-64.png application-x-foobar
+
+This will install two icons with the name application-x-foobar but with
+different sizes.
+
+_MANUALPAGE
+}
+
+usage()
+{
+cat << _USAGE
+xdg-icon-resource - command line tool for (un)installing icon resources
+
+Synopsis
+
+xdg-icon-resource install [--noupdate] [--novendor] [--theme theme] [--context
+context] [--mode mode] --size size icon-file [icon-name]
+
+xdg-icon-resource uninstall [--noupdate] [--theme theme] [--context context]
+[--mode mode] --size size icon-name
+
+xdg-icon-resource forceupdate [--theme theme] [--mode mode]
+
+xdg-icon-resource { --help | --manual | --version }
+
+_USAGE
+}
+
+#@xdg-utils-common@
+
+#----------------------------------------------------------------------------
+#   Common utility functions included in all XDG wrapper scripts
+#----------------------------------------------------------------------------
+
+DEBUG()
+{
+  [ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && return 0;
+  [ ${XDG_UTILS_DEBUG_LEVEL} -lt $1 ] && return 0;
+  shift
+  echo "$@" >&2
+}
+
+#-------------------------------------------------------------
+# Exit script on successfully completing the desired operation
+
+exit_success()
+{
+    if [ $# -gt 0 ]; then
+        echo "$@"
+        echo
+    fi
+
+    exit 0
+}
+
+
+#-----------------------------------------
+# Exit script on malformed arguments, not enough arguments
+# or missing required option.
+# prints usage information
+
+exit_failure_syntax()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-icon-resource: $@" >&2
+        echo "Try 'xdg-icon-resource --help' for more information." >&2
+    else
+        usage
+        echo "Use 'man xdg-icon-resource' or 'xdg-icon-resource --manual' for additional info."
+    fi
+
+    exit 1
+}
+
+#-------------------------------------------------------------
+# Exit script on missing file specified on command line
+
+exit_failure_file_missing()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-icon-resource: $@" >&2
+    fi
+
+    exit 2
+}
+
+#-------------------------------------------------------------
+# Exit script on failure to locate necessary tool applications
+
+exit_failure_operation_impossible()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-icon-resource: $@" >&2
+    fi
+
+    exit 3
+}
+
+#-------------------------------------------------------------
+# Exit script on failure returned by a tool application
+
+exit_failure_operation_failed()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-icon-resource: $@" >&2
+    fi
+
+    exit 4
+}
+
+#------------------------------------------------------------
+# Exit script on insufficient permission to read a specified file
+
+exit_failure_file_permission_read()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-icon-resource: $@" >&2
+    fi
+
+    exit 5
+}
+
+#------------------------------------------------------------
+# Exit script on insufficient permission to read a specified file
+
+exit_failure_file_permission_write()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-icon-resource: $@" >&2
+    fi
+
+    exit 6
+}
+
+check_input_file()
+{
+    if [ ! -e "$1" ]; then
+        exit_failure_file_missing "file '$1' does not exist"
+    fi
+    if [ ! -r "$1" ]; then
+        exit_failure_file_permission_read "no permission to read file '$1'"
+    fi
+}
+
+check_vendor_prefix()
+{
+    file_label="$2"
+    [ -n "$file_label" ] || file_label="filename"
+    file=`basename "$1"`
+    case "$file" in
+       [a-zA-Z]*-*)
+         return
+         ;;
+    esac
+
+    echo "xdg-icon-resource: $file_label '$file' does not have a proper vendor prefix" >&2
+    echo 'A vendor prefix consists of alpha characters ([a-zA-Z]) and is terminated' >&2
+    echo 'with a dash ("-"). An example '"$file_label"' is '"'example-$file'" >&2
+    echo "Use --novendor to override or 'xdg-icon-resource --manual' for additional info." >&2
+    exit 1
+}
+
+check_output_file()
+{
+    # if the file exists, check if it is writeable
+    # if it does not exists, check if we are allowed to write on the directory
+    if [ -e "$1" ]; then
+        if [ ! -w "$1" ]; then
+            exit_failure_file_permission_write "no permission to write to file '$1'"
+        fi
+    else
+        DIR=`dirname "$1"`
+        if [ ! -w "$DIR" -o ! -x "$DIR" ]; then
+            exit_failure_file_permission_write "no permission to create file '$1'"
+        fi
+    fi
+}
+
+#----------------------------------------
+# Checks for shared commands, e.g. --help
+
+check_common_commands()
+{
+    while [ $# -gt 0 ] ; do
+        parm="$1"
+        shift
+
+        case "$parm" in
+            --help)
+            usage
+            echo "Use 'man xdg-icon-resource' or 'xdg-icon-resource --manual' for additional info."
+            exit_success
+            ;;
+
+            --manual)
+            manualpage
+            exit_success
+            ;;
+
+            --version)
+            echo "xdg-icon-resource 1.0.1"
+            exit_success
+            ;;
+        esac
+    done
+}
+
+check_common_commands "$@"
+
+[ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && unset XDG_UTILS_DEBUG_LEVEL;
+if [ ${XDG_UTILS_DEBUG_LEVEL-0} -lt 1 ]; then
+    # Be silent
+    xdg_redirect_output=" > /dev/null 2> /dev/null"
+else
+    # All output to stderr
+    xdg_redirect_output=" >&2"
+fi
+
+#--------------------------------------
+# Checks for known desktop environments
+# set variable DE to the desktop environments name, lowercase
+
+detectDE()
+{
+    if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde;
+    elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome;
+    elif xprop -root _DT_SAVE_MODE | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce;
+    fi
+}
+
+#----------------------------------------------------------------------------
+# kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4
+# It also always returns 1 in KDE 3.4 and earlier
+# Simply return 0 in such case
+
+kfmclient_fix_exit_code()
+{
+    version=`kde-config --version 2>/dev/null | grep KDE`
+    major=`echo $version | sed 's/KDE: \([0-9]\).*/\1/'`
+    minor=`echo $version | sed 's/KDE: [0-9]*\.\([0-9]\).*/\1/'`
+    release=`echo $version | sed 's/KDE: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'`
+    test "$major" -gt 3 && return $1
+    test "$minor" -gt 5 && return $1
+    test "$release" -gt 4 && return $1
+    return 0
+}
+
+# Set GTK_UPDATE_ICON_CACHE to gtk-update-icon-cache executable path or
+# to "-" if not found.
+GTK_UPDATE_ICON_CACHE=
+find_gtk_update_icon_cache()
+{
+    [ -n "$GTK_UPDATE_ICON_CACHE" ] && return;
+ 
+    GTK_UPDATE_ICON_CACHE="-"   
+    for x in `echo "$PATH:/opt/gnome/bin" | sed 's/:/ /g'`; do
+        DEBUG 3 "Checking $x for gtk-update-icon-cache"
+        if [ -x "$x/gtk-update-icon-cache" ] ; then
+            DEBUG 1 "Found $x/gtk-update-icon-cache"
+            GTK_UPDATE_ICON_CACHE="$x/gtk-update-icon-cache"
+            return
+        fi
+    done
+}
+
+# Start GNOME legacy workaround section
+need_dot_icon_path()
+{
+  # GTK < 2.6 uses ~/.icons but not XDG_DATA_HOME/icons
+  # The availability of gtk-update-icon-cache is used as indication
+  # of whether the system is using GTK 2.6 or later
+  find_gtk_update_icon_cache
+  [ "$GTK_UPDATE_ICON_CACHE" != "-" ] && return 1; 
+  return 0;
+}
+
+update_icon_database()
+{
+   # Touch me, I'm dirty
+   touch "$1/.xdg-icon-resource-dummy"
+   rm -f "$1/.xdg-icon-resource-dummy"
+
+   # Don't create a cache if there wan't one already
+   if [ -f "$1/icon-theme.cache" ] ; then
+      find_gtk_update_icon_cache
+      if [ "$GTK_UPDATE_ICON_CACHE" != "-" ] ; then 
+         DEBUG 1 "Running $GTK_UPDATE_ICON_CACHE -f -t \"$1\""
+         eval '$GTK_UPDATE_ICON_CACHE -f -t "$1"'$xdg_redirect_output
+         return
+      fi
+   fi
+}
+
+[ x"$1" != x"" ] || exit_failure_syntax
+
+mode=
+action=
+update=yes
+size=
+theme=hicolor
+context=apps
+icon_file=
+icon_name=
+
+case $1 in
+  install)
+    action=install
+    ;;
+
+  uninstall)
+    action=uninstall
+    ;;
+
+  forceupdate)
+    action=forceupdate
+    ;;
+
+  *)
+    exit_failure_syntax "unknown command '$1'"
+    ;;
+esac
+
+shift
+
+vendor=true
+while [ $# -gt 0 ] ; do
+    parm="$1"
+    shift
+
+    case $parm in
+      --noupdate)
+        update=no
+        ;;
+
+      --mode)
+        if [ -z "$1" ] ; then
+            exit_failure_syntax "mode argument missing for --mode"
+        fi
+        case "$1" in
+          user)
+            mode="user"
+            ;;
+
+          system)
+            mode="system"
+            ;;
+            
+          *)
+            exit_failure_syntax "unknown mode '$1'"
+            ;;
+        esac
+        shift
+        ;;
+
+      --theme)
+        if [ -z "$1" ] ; then
+            exit_failure_syntax "theme argument missing for --theme"
+        fi
+        theme="$1"
+        shift
+        ;;
+
+      --size)
+        if [ -z "$1" ] ; then
+            exit_failure_syntax "size argument missing for --size"
+        fi
+        if echo "$1" | grep '[^0-9]' > /dev/null 2> /dev/null; then
+            exit_failure_syntax "size argument must be numeric"
+        fi
+        size="$1"
+        shift
+        ;;
+
+      --context)
+        if [ -z "$1" ] ; then
+            exit_failure_syntax "context argument missing for --context"
+        fi
+        context="$1"
+        shift
+        ;;
+
+      --novendor)
+        vendor=false
+        ;;
+
+      -*)
+        exit_failure_syntax "unexpected option '$parm'"
+        ;;
+
+      *)
+        if [ -n "$icon_name" ] ; then
+            exit_failure_syntax "unexpected argument '$parm'"
+        elif [ -n "$icon_file" ] ; then
+            icon_name="$parm"
+        else
+            if [ "$action" = "install" ] ; then
+                check_input_file "$parm"
+            fi
+            icon_file="$parm"
+        fi
+        ;;
+    esac
+done
+
+# Shouldn't happen
+if [ -z "$action" ] ; then
+    exit_failure_syntax "command argument missing"
+fi
+
+# Shouldn't happen
+if [ -z "$context" ] ; then
+    exit_failure_syntax "context argument missing"
+fi
+
+if [ -n "$XDG_UTILS_INSTALL_MODE" ] ; then
+    if [ "$XDG_UTILS_INSTALL_MODE" = "system" ] ; then
+        mode="system"
+    elif [ "$XDG_UTILS_INSTALL_MODE" = "user" ] ; then
+        mode="user"
+    fi
+fi
+
+if [ -z "$mode" ] ; then
+    if [ `whoami` = "root" ] ; then
+       mode="system"
+    else
+       mode="user"
+    fi
+fi
+
+xdg_dir_name="icons/$theme"
+
+xdg_user_dir="$XDG_DATA_HOME"
+[ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share"
+xdg_user_prefix="$xdg_user_dir/icons"
+xdg_user_dir="$xdg_user_dir/$xdg_dir_name"
+
+xdg_global_dir=
+xdg_global_prefix=
+xdg_system_dirs="$XDG_DATA_DIRS"
+[ -n "$xdg_system_dirs" ] || xdg_system_dirs="/usr/local/share/:/usr/share/"
+for x in `echo "$xdg_system_dirs" | sed 's/:/ /g'`; do
+   if [ -w $x/$xdg_dir_name ] ; then
+      xdg_global_prefix="$x/icons"
+      xdg_global_dir="$x/$xdg_dir_name"
+      break
+   fi
+done
+[ -w $xdg_global_dir ] || xdg_global_dir=
+
+dot_icon_dir=
+dot_base_dir=
+if [ x"$mode" = x"user" ] ; then
+    xdg_base_dir="$xdg_user_dir"
+    #Gnome 2.8 supports ~/.icons but not XDG_DATA_HOME
+    if need_dot_icon_path ; then
+        dot_icon_dir="$HOME/.icons"
+        dot_base_dir="$dot_icon_dir/$theme"
+    fi
+else
+    xdg_base_dir="$xdg_global_dir"
+    if [ -z "$xdg_base_dir" ] ; then
+        exit_failure_operation_impossible "No writable system icon directory found."
+    fi
+fi
+
+if [ x"$action" = x"forceupdate" ] ; then
+    if [ -n "$icon_file" ] ; then
+      exit_failure_syntax "unexpected argument '$icon_file'"
+    fi
+    update_icon_database $xdg_base_dir
+    if [ -n "$dot_icon_dir" ] ; then
+        if [ -d "$dot_icon_dir/" -a ! -L "$dot_icon_dir" ] ; then
+            update_icon_database $dot_base_dir
+        fi
+    fi
+    exit_success
+fi
+
+if [ -z "$icon_file" ] ; then
+    if [ x"$action" = x"install" ] ; then
+      exit_failure_syntax "icon-file argument missing"
+    else
+      exit_failure_syntax "icon-name argument missing"
+    fi
+fi
+
+xdg_size_name=
+extension=
+
+if [ -z "$size" ] ; then
+    exit_failure_syntax "the icon size must be specified with --size"
+fi
+xdg_size_name="${size}x${size}"
+
+if [ x"$action" = x"install" ] ; then
+    case $icon_file in
+      *.xpm)
+        extension="xpm"
+        ;;
+      *.png)
+        extension="png"
+        ;;
+      *)
+        exit_failure_syntax "icon file to install must be a *.png or *.xpm file"
+        ;;
+    esac
+fi
+
+if [ -n "$icon_name" ] ; then
+    case $icon_name in
+      *.png)
+         exit_failure_syntax "icon name should not include an extension"
+         ;;
+      *.xpm)
+         exit_failure_syntax "icon name should not include an extension"
+         ;;
+    esac
+fi
+
+# Start KDE legacy workaround section
+need_kde_icon_path()
+{
+  local path
+  path=`readlink -f "$1" 2> /dev/null` # Normalize path
+  DEBUG 2 "need_kde_icon_path $path"
+  if [ -z "$path" ] ; then
+     DEBUG 2 "need_kde_icon_path RETURN 1 (not needed, no xdg icon dir)"
+     return 1; # Not needed
+  fi
+
+  # if kde-config not found... return 0
+  kde_icon_dirs=`kde-config --path icon 2> /dev/null |sed 's/:/ /g'`
+  DEBUG 3 "kde_icon_dirs: $kde_icon_dirs"
+  if [ -z "$kde_icon_dirs" ] ; then
+     DEBUG 3 "no result from kde-config --path icon"
+     DEBUG 2 "need_kde_icon_path RETURN 1 (not needed, no kde icon path)"
+     return 1; # Not needed
+  fi
+  needed=0 # Needed
+  for y in $kde_icon_dirs ; do
+    x=`readlink -f "$y"` # Normalize path
+    DEBUG 3 "Normalize $y --> $x"
+    if [ -n "$x" ] ; then
+      if [ "$x" = "$path" ] ; then
+        needed=1 # Not needed
+      fi
+      if [ -w "$x" ] ; then
+        kde_global_prefix="$x"
+        # Take last writable dir
+      fi
+    fi
+  done
+  DEBUG 2 "kde_global_prefix: $kde_global_prefix"
+  [ $needed -eq "1" ] && DEBUG 2 "need_kde_icon_path RETURN $needed (not needed)"
+  [ $needed -eq "0" ] && DEBUG 2 "need_kde_icon_path RETURN $needed (needed)"
+  return $needed
+}
+
+kde_dir=
+if [ x"$mode" = x"user" ] ; then
+    xdg_dir="$xdg_base_dir/$xdg_size_name/$context"
+    #KDE 3.x doesn't support XDG_DATA_HOME for icons
+    #Check if xdg_dir prefix is listed by kde-config --path icon
+    #If not, install additional symlink to kdedir 
+    if need_kde_icon_path "$xdg_user_prefix" ; then
+        kde_user_dir="$HOME/.kde/share/icons/$theme"
+        kde_dir="$kde_user_dir/$xdg_size_name/$context"
+    fi
+    #Gnome 2.8 supports ~/.icons but not XDG_DATA_HOME
+    if [ -n "$dot_icon_dir" ] ; then
+        if [ -L "$dot_icon_dir" ] ; then
+            # Don't do anything
+            dot_icon_dir=
+        elif [ ! -d "$dot_icon_dir/" ] ; then
+            # Symlink if it doesn't exist
+            eval 'ln -s ".local/share/icons" "$dot_icon_dir"'$xdg_redirect_output
+            dot_icon_dir=
+        else
+            dot_icon_dir="$dot_icon_dir/$theme/$xdg_size_name/$context"
+        fi
+    fi
+    my_umask=077
+else
+    xdg_dir="$xdg_base_dir/$xdg_size_name/$context"
+    #KDE 3.x doesn't support XDG_DATA_DIRS for icons
+    #Check if xdg_dir prefix is listed by kde-config --path icon
+    #If not, install additional symlink to kdedir 
+    if need_kde_icon_path "$xdg_global_prefix" ; then
+        kde_global_dir="$kde_global_prefix/$theme"
+        kde_dir="$kde_global_dir/$xdg_size_name/$context"
+    fi
+    my_umask=022
+fi
+# End KDE legacy workaround section
+
+# Start GNOME legacy workaround section
+need_gnome_mime=
+[ $context = "mimetypes" ] && need_gnome_mime=true 
+# End GNOME legacy workaround section
+
+[ -n "$icon_name" ] || icon_name=`basename $icon_file | sed 's/\.[a-z][a-z][a-z]$//'`
+
+if [ "$vendor" = "true" -a "$action" = "install" -a "$context" = "apps" ] ; then
+    check_vendor_prefix "$icon_name" "icon name"
+fi
+
+icon_icon_file=`echo "$icon_file" | sed 's/\.[a-z][a-z][a-z]$/.icon/'`
+icon_icon_name="$icon_name.icon"
+
+DEBUG 1 "$action icon in $xdg_dir"
+[ $action = "install" -a -f $icon_icon_file ] && DEBUG 1 "install $icon_icon_name meta file in $xdg_dir"
+[ -n "$kde_dir" ] && DEBUG 1 "$action symlink in $kde_dir (KDE 3.x support)"
+[ -n "$need_gnome_mime" ] && DEBUG 1 "$action gnome-mime-$icon_name symlink (GNOME 2.x support)"
+[  $action = "install" -a -n "$dot_icon_dir" ] && DEBUG 1 "$action ~/.icons symlink (GNOME 2.8 support)"
+
+case $action in
+    install)
+        save_umask=`umask`
+        umask $my_umask
+
+        for icon_dir in $xdg_dir $dot_icon_dir; do
+            mkdir -p $icon_dir
+            eval 'cp "$icon_file" "$icon_dir/$icon_name.$extension"'$xdg_redirect_output
+            if [ -f "$icon_icon_file" ] ; then
+                eval 'cp "$icon_icon_file" "$icon_dir/$icon_icon_name"'$xdg_redirect_output
+            fi
+            if [ -n "$need_gnome_mime" ] ; then
+                eval 'ln -s "$icon_name.$extension" "$icon_dir/gnome-mime-$icon_name.$extension"'$xdg_redirect_output
+            fi
+        done
+        if [ -n "$kde_dir" ] ; then
+            mkdir -p $kde_dir
+            eval 'ln -s "$xdg_dir/$icon_name.$extension" "$kde_dir/$icon_name.$extension"'$xdg_redirect_output
+        fi
+
+        umask $save_umask
+        ;;
+
+    uninstall)
+        for icon_dir in $xdg_dir $dot_icon_dir; do
+            rm -f "$icon_dir/$icon_name.xpm" "$icon_dir/$icon_name.png"
+            rm -f "$icon_dir/$icon_icon_name"
+            if [ -n "$need_gnome_mime" ] ; then
+                rm -f "$icon_dir/gnome-mime-$icon_name.xpm" 
+                rm -f "$icon_dir/gnome-mime-$icon_name.png" 
+            fi
+        done
+        if [ -n "$kde_dir" ] ; then
+            rm -f "$kde_dir/$icon_name.xpm" "$kde_dir/$icon_name.png"
+        fi
+
+        ;;
+esac
+
+if [ x"$update" = x"yes" ] ; then
+    update_icon_database "$xdg_base_dir"
+    if [ -n "$dot_icon_dir" ] ; then
+        if [ -d "$dot_icon_dir/" -a ! -L "$dot_icon_dir" ] ; then
+            update_icon_database $dot_base_dir
+        fi
+    fi
+fi
+
+exit_success
diff --git a/src/desktop/xdg-utils-1.0.1/scripts/xdg-open b/src/desktop/xdg-utils-1.0.1/scripts/xdg-open
new file mode 100755
index 00000000..4cc18a84
--- /dev/null
+++ b/src/desktop/xdg-utils-1.0.1/scripts/xdg-open
@@ -0,0 +1,436 @@
+#!/bin/sh
+#---------------------------------------------
+#   xdg-open
+#
+#   Utility script to open a URL in the registered default application.
+#
+#   Refer to the usage() function below for usage.
+#
+#   Copyright 2006, Kevin Krammer 
+#   Copyright 2006, Jeremy White 
+#
+#   LICENSE:
+#
+#   Permission is hereby granted, free of charge, to any person obtaining a
+#   copy of this software and associated documentation files (the "Software"),
+#   to deal in the Software without restriction, including without limitation
+#   the rights to use, copy, modify, merge, publish, distribute, sublicense,
+#   and/or sell copies of the Software, and to permit persons to whom the
+#   Software is furnished to do so, subject to the following conditions:
+#
+#   The above copyright notice and this permission notice shall be included
+#   in all copies or substantial portions of the Software.
+#
+#   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+#   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+#   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+#   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+#   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+#   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+#   OTHER DEALINGS IN THE SOFTWARE.
+#
+#---------------------------------------------
+
+manualpage()
+{
+cat << _MANUALPAGE
+Name
+
+xdg-open - opens a file or URL in the user's preferred application
+
+Synopsis
+
+xdg-open { file | URL }
+
+xdg-open { --help | --manual | --version }
+
+Description
+
+xdg-open opens a file or URL in the user's preferred application. If a URL is
+provided the URL will be opened in the user's preferred web browser. If a file
+is provided the file will be opened in the preferred application for files of
+that type. xdg-open supports file, ftp, http and https URLs.
+
+xdg-open is for use inside a desktop session only. It is not recommended to use
+xdg-open as root.
+
+Options
+
+--help
+    Show command synopsis.
+--manual
+    Show this manualpage.
+--version
+    Show the xdg-utils version information.
+
+Exit Codes
+
+An exit code of 0 indicates success while a non-zero exit code indicates
+failure. The following failure codes can be returned:
+
+1
+    Error in command line syntax.
+2
+    One of the files passed on the command line did not exist.
+3
+    A required tool could not be found.
+4
+    The action failed.
+
+Examples
+
+xdg-open 'http://www.freedesktop.org/'
+
+Opens the Freedesktop.org website in the user's default browser
+
+xdg-open /tmp/foobar.png
+
+Opens the PNG image file /tmp/foobar.png in the user's default image viewing
+application.
+
+_MANUALPAGE
+}
+
+usage()
+{
+cat << _USAGE
+xdg-open - opens a file or URL in the user's preferred application
+
+Synopsis
+
+xdg-open { file | URL }
+
+xdg-open { --help | --manual | --version }
+
+_USAGE
+}
+
+#@xdg-utils-common@
+
+#----------------------------------------------------------------------------
+#   Common utility functions included in all XDG wrapper scripts
+#----------------------------------------------------------------------------
+
+DEBUG()
+{
+  [ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && return 0;
+  [ ${XDG_UTILS_DEBUG_LEVEL} -lt $1 ] && return 0;
+  shift
+  echo "$@" >&2
+}
+
+#-------------------------------------------------------------
+# Exit script on successfully completing the desired operation
+
+exit_success()
+{
+    if [ $# -gt 0 ]; then
+        echo "$@"
+        echo
+    fi
+
+    exit 0
+}
+
+
+#-----------------------------------------
+# Exit script on malformed arguments, not enough arguments
+# or missing required option.
+# prints usage information
+
+exit_failure_syntax()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-open: $@" >&2
+        echo "Try 'xdg-open --help' for more information." >&2
+    else
+        usage
+        echo "Use 'man xdg-open' or 'xdg-open --manual' for additional info."
+    fi
+
+    exit 1
+}
+
+#-------------------------------------------------------------
+# Exit script on missing file specified on command line
+
+exit_failure_file_missing()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-open: $@" >&2
+    fi
+
+    exit 2
+}
+
+#-------------------------------------------------------------
+# Exit script on failure to locate necessary tool applications
+
+exit_failure_operation_impossible()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-open: $@" >&2
+    fi
+
+    exit 3
+}
+
+#-------------------------------------------------------------
+# Exit script on failure returned by a tool application
+
+exit_failure_operation_failed()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-open: $@" >&2
+    fi
+
+    exit 4
+}
+
+#------------------------------------------------------------
+# Exit script on insufficient permission to read a specified file
+
+exit_failure_file_permission_read()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-open: $@" >&2
+    fi
+
+    exit 5
+}
+
+#------------------------------------------------------------
+# Exit script on insufficient permission to read a specified file
+
+exit_failure_file_permission_write()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-open: $@" >&2
+    fi
+
+    exit 6
+}
+
+check_input_file()
+{
+    if [ ! -e "$1" ]; then
+        exit_failure_file_missing "file '$1' does not exist"
+    fi
+    if [ ! -r "$1" ]; then
+        exit_failure_file_permission_read "no permission to read file '$1'"
+    fi
+}
+
+check_vendor_prefix()
+{
+    file_label="$2"
+    [ -n "$file_label" ] || file_label="filename"
+    file=`basename "$1"`
+    case "$file" in
+       [a-zA-Z]*-*)
+         return
+         ;;
+    esac
+
+    echo "xdg-open: $file_label '$file' does not have a proper vendor prefix" >&2
+    echo 'A vendor prefix consists of alpha characters ([a-zA-Z]) and is terminated' >&2
+    echo 'with a dash ("-"). An example '"$file_label"' is '"'example-$file'" >&2
+    echo "Use --novendor to override or 'xdg-open --manual' for additional info." >&2
+    exit 1
+}
+
+check_output_file()
+{
+    # if the file exists, check if it is writeable
+    # if it does not exists, check if we are allowed to write on the directory
+    if [ -e "$1" ]; then
+        if [ ! -w "$1" ]; then
+            exit_failure_file_permission_write "no permission to write to file '$1'"
+        fi
+    else
+        DIR=`dirname "$1"`
+        if [ ! -w "$DIR" -o ! -x "$DIR" ]; then
+            exit_failure_file_permission_write "no permission to create file '$1'"
+        fi
+    fi
+}
+
+#----------------------------------------
+# Checks for shared commands, e.g. --help
+
+check_common_commands()
+{
+    while [ $# -gt 0 ] ; do
+        parm="$1"
+        shift
+
+        case "$parm" in
+            --help)
+            usage
+            echo "Use 'man xdg-open' or 'xdg-open --manual' for additional info."
+            exit_success
+            ;;
+
+            --manual)
+            manualpage
+            exit_success
+            ;;
+
+            --version)
+            echo "xdg-open 1.0.1"
+            exit_success
+            ;;
+        esac
+    done
+}
+
+check_common_commands "$@"
+
+[ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && unset XDG_UTILS_DEBUG_LEVEL;
+if [ ${XDG_UTILS_DEBUG_LEVEL-0} -lt 1 ]; then
+    # Be silent
+    xdg_redirect_output=" > /dev/null 2> /dev/null"
+else
+    # All output to stderr
+    xdg_redirect_output=" >&2"
+fi
+
+#--------------------------------------
+# Checks for known desktop environments
+# set variable DE to the desktop environments name, lowercase
+
+detectDE()
+{
+    if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde;
+    elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome;
+    elif xprop -root _DT_SAVE_MODE | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce;
+    fi
+}
+
+#----------------------------------------------------------------------------
+# kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4
+# It also always returns 1 in KDE 3.4 and earlier
+# Simply return 0 in such case
+
+kfmclient_fix_exit_code()
+{
+    version=`kde-config --version 2>/dev/null | grep KDE`
+    major=`echo $version | sed 's/KDE: \([0-9]\).*/\1/'`
+    minor=`echo $version | sed 's/KDE: [0-9]*\.\([0-9]\).*/\1/'`
+    release=`echo $version | sed 's/KDE: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'`
+    test "$major" -gt 3 && return $1
+    test "$minor" -gt 5 && return $1
+    test "$release" -gt 4 && return $1
+    return 0
+}
+
+open_kde()
+{
+    kfmclient exec "$1"
+    kfmclient_fix_exit_code $?
+
+    if [ $? -eq 0 ]; then
+        exit_success
+    else
+        exit_failure_operation_failed
+    fi
+}
+
+open_gnome()
+{
+    gnome-open "$1"
+
+    if [ $? -eq 0 ]; then
+        exit_success
+    else
+        exit_failure_operation_failed
+    fi
+}
+
+open_xfce()
+{
+    exo-open "$1"
+
+    if [ $? -eq 0 ]; then
+        exit_success
+    else
+        exit_failure_operation_failed
+    fi
+}
+
+open_generic()
+{
+    IFS=":"
+    for browser in $BROWSER; do
+        if [ x"$browser" != x"" ]; then
+
+            browser_with_arg=`echo "$browser" | sed s#%s#"$1"#`
+
+            if [ x"$browser_with_arg" = x"$browser" ]; then "$browser" "$1";
+            else $browser_with_arg;
+            fi
+
+            if [ $? -eq 0 ]; then exit_success;
+            fi
+        fi
+    done
+
+    exit_failure_operation_impossible "no method available for opening '$1'"
+}
+
+[ x"$1" != x"" ] || exit_failure_syntax
+
+url=
+while [ $# -gt 0 ] ; do
+    parm="$1"
+    shift
+
+    case "$parm" in
+      -*)
+        exit_failure_syntax "unexpected option '$parm'"
+        ;;
+
+      *)
+        if [ -n "$url" ] ; then
+            exit_failure_syntax "unexpected argument '$parm'"
+        fi
+        url="$parm"
+        ;;
+    esac
+done
+
+if [ -z "${url}" ] ; then
+    exit_failure_syntax "file or URL argument missing"
+fi
+
+detectDE
+
+if [ x"$DE" = x"" ]; then
+    # if BROWSER variable is not set, check some well known browsers instead
+    if [ x"$BROWSER" = x"" ]; then
+        BROWSER=firefox:mozilla:netscape
+    fi
+    DE=generic
+fi
+
+case "$DE" in
+    kde)
+    open_kde "$url"
+    ;;
+
+    gnome)
+    open_gnome "$url"
+    ;;
+
+    xfce)
+    open_xfce "$url"
+    ;;
+
+    generic)
+    open_generic "$url"
+    ;;
+
+    *)
+    exit_failure_operation_impossible "no method available for opening '$url'"
+    ;;
+esac
diff --git a/src/doc/man/recoll.1 b/src/doc/man/recoll.1
new file mode 100644
index 00000000..36174625
--- /dev/null
+++ b/src/doc/man/recoll.1
@@ -0,0 +1,99 @@
+.\" $Id: recoll.1,v 1.3 2007-11-13 18:42:18 dockes Exp $ (C) 2005 J.F.Dockes\$
+.TH RECOLL 1 "8 January 2006"
+.SH NAME
+recoll \- user interface for the Recoll full text search system
+.SH SYNOPSIS
+.B recoll
+[
+.B \-c
+
+]
+[
+.B \-o
+|
+.B \-l
+|
+.B \-f
+|
+.B \-a
+]
+[
+.B \-t
+]
+[
+.B \-q
+
+]
+
+.B recoll
+[
+.B \-c
+
+]
+
+.SH DESCRIPTION
+In the first form, the
+.B recoll
+command will start the graphical user interface for querying the 
+.B Recoll 
+database.
+.PP
+On the first run, 
+.B recoll
+will create the user configuration which can be customized
+before starting the first indexation.
+.PP
+The 
+.B \-c 
+option specifies the configuration directory name, overriding the
+default or $RECOLL_CONFDIR.
+.PP
+The 
+.B \-q 
+option can be used to specify an initial query on the command line. This
+query will be interpreted by default as a query language string.
+If
+.B \-a 
+is specified, the query string will be interpreted as an
+.I all words
+simple search query. If 
+.B \-o 
+is specified, the query string will be interpreted as an
+.I any word
+simple search query. If 
+.B \-f
+is specified, the query string will be interpreted as a
+.I file name
+simple search query. If 
+.B \-l
+is specified, the query string will be interpreted as a
+.I query language
+simple search query.
+.PP
+If 
+.B \-t
+is specified, the Graphical User Interface will not be started, and results
+will be printed to the standard output. Additional options understood by
+the 
+.B recollq
+command may be specified in this case. These can control the output format
+and the maximum number of results to be printed.
+.PP
+Please refer to online help for a full description.
+.PP
+In the second form, the 
+.B recoll
+command can be used to start a native viewer for a document indexed by
+Recoll. It will understand a final URL fragment (separated by a '#'
+character) to indicate an 
+.I ipath
+, the specifier for the part of the Recoll document access path which is is
+internal to a container such as a mbox folder or a zip archive, and will,
+if needed, create a temporary file to let a normal system utility display
+the document.
+.PP
+The second form is mostly used for opening embedded documents from the
+Ubuntu Unity Recoll lens.
+.SH SEE ALSO
+.PP 
+recollindex(1) recollq(1) recoll.conf(5) 
diff --git a/src/doc/man/recoll.conf.5 b/src/doc/man/recoll.conf.5
new file mode 100644
index 00000000..53d3acaf
--- /dev/null
+++ b/src/doc/man/recoll.conf.5
@@ -0,0 +1,370 @@
+.\" $Id: recoll.conf.5,v 1.5 2007-07-13 10:18:49 dockes Exp $ (C) 2005 J.F.Dockes\$
+.TH RECOLL.CONF 5 "8 January 2006"
+.SH NAME
+recoll.conf \- main personal configuration file for Recoll
+.SH DESCRIPTION
+This file defines the index configuration for the Recoll full-text search
+system.
+.LP
+The system-wide configuration file is normally located inside
+/usr/[local]/share/recoll/examples. Any parameter set in the common file
+may be overridden by setting it in the personal configuration file, by default:
+.IR $HOME/.recoll/recoll.conf
+.LP
+Please note while we try to keep this manual page reasonably up to date, it
+will frequently lag the current state of the software. The best source of
+information about the configuration are the comments in the system-wide
+configuration file.
+
+.LP
+A short extract of the file might look as follows:
+.IP
+.nf
+
+# Space-separated list of directories to index.
+topdirs =  ~/docs /usr/share/doc
+
+[~/somedirectory-with-utf8-txt-files]
+defaultcharset = utf-8
+
+.fi
+.LP
+There are three kinds of lines: 
+.RS
+.IP \(bu
+Comment or empty
+.IP \(bu
+Parameter affectation
+.IP \(bu
+Section definition
+.RE
+.LP
+Empty lines or lines beginning with # are ignored.
+.LP
+Affectation lines are in the form 'name = value'.
+.LP
+Section lines allow redefining a parameter for a directory subtree. Some of
+the parameters used for indexing are looked up hierarchically from the
+more to the less specific. Not all parameters can be meaningfully
+redefined, this is specified for each in the next section.
+.LP
+The tilde character (~) is expanded in file names to the name of the user's
+home directory.
+.LP
+Where values are lists, white space is used for separation, and elements with
+embedded spaces can be quoted with double-quotes.
+.SH OPTIONS
+.TP
+.BI "topdirs = "  directories
+Specifies the list of directories to index (recursively). 
+.TP
+.BI "skippedNames = " patterns
+A space-separated list of patterns for names of files or directories that
+should be completely ignored. The list defined in the default file is:
+.sp
+.nf
+*~ #* bin CVS  Cache caughtspam  tmp
+
+.fi
+The list can be redefined for subdirectories, but is only actually changed
+for the top level ones in 
+.I topdirs
+.TP
+.BI "skippedPaths = " patterns
+A space-separated list of patterns for paths the indexer should not descend
+into. Together with topdirs, this allows pruning the indexed tree to one's
+content.
+.B daemSkippedPaths 
+can be used to define a specific value for the real time indexing monitor.
+.TP
+.BI "skippedPathsFnmPathname = " 0/1
+The values in the *skippedPaths variables are matched by default with
+fnmatch(3), with the FNM_PATHNAME and FNM_LEADING_DIR flags. This means
+that '/' characters must be matched explicitly. You can set
+skippedPathsFnmPathname to 0 to disable the use of FNM_PATHNAME (meaning
+that /*/dir3 will match /dir1/dir2/dir3). 
+.TP
+.BI "followLinks = " boolean
+Specifies if the indexer should follow
+symbolic links while walking the file tree. The default is
+to ignore symbolic links to avoid multiple indexing of
+linked files. No effort is made to avoid duplication when
+this option is set to true. This option can be set
+individually for each of the 
+.I topdirs
+members by using sections. It can not be changed below the
+.I topdirs
+level.
+.TP
+.BI "indexedmimetypes = " list
+Recoll normally indexes any file which it knows how to read. This list lets
+you restrict the indexed mime types to what you specify. If the variable is
+unspecified or the list empty (the default), all supported types are
+processed.
+.TP
+.BI "compressedfilemaxkbs = " value
+Size limit for compressed (.gz or .bz2) files. These need to be
+decompressed in a temporary directory for identification, which can be very
+wasteful if 'uninteresting' big compressed files are present.  Negative
+means no limit, 0 means no processing of any compressed file. Defaults 
+to \-1.
+.TP
+.BI "textfilemaxmbs = " value
+Maximum size for text files. Very big text files are often uninteresting
+logs. Set to \-1 to disable (default 20MB). 
+.TP
+.BI "textfilepagekbs = " value
+If this is set to other than \-1, text files will be indexed as multiple
+documents of the given page size. This may be useful if you do want to
+index very big text files as it will both reduce memory usage at index time
+and help with loading data to the preview window. A size of a few megabytes
+would seem reasonable (default: 1000 : 1MB).
+.TP
+.BI "membermaxkbs = " "value in kilobytes"
+This defines the maximum size for an archive member (zip, tar or rar at
+the moment). Bigger entries will be skipped. Current default: 50000 (50 MB).
+.TP
+.BI "indexallfilenames = " boolean
+Recoll indexes file names into a special section of the database to allow
+specific file names searches using wild cards. This parameter decides if
+file name indexing is performed only for files with mime types that would
+qualify them for full text indexing, or for all files inside
+the selected subtrees, independent of mime type.
+.TP
+.BI "usesystemfilecommand = " boolean
+Decide if we use the 
+.B "file \-i"
+system command as a final step for determining the mime type for a file
+(the main procedure uses suffix associations as defined in the 
+.B mimemap 
+file). This can be useful for files with suffixless names, but it will
+also cause the indexing of many bogus "text" files.
+.TP 
+.BI "processbeaglequeue = " 0/1
+If this is set, process the directory where Beagle Web browser plugins copy
+visited pages for indexing. Of course, Beagle MUST NOT be running, else
+things will behave strangely. 
+.TP 
+.BI "beaglequeuedir = " directory path
+The path to the Beagle indexing queue. This is hard-coded in the Beagle
+plugin as ~/.beagle/ToIndex so there should be no need to change it. 
+.TP 
+.BI "indexStripChars = " 0/1
+Decide if we strip characters of diacritics and convert them to lower-case
+before terms are indexed. If we don't, searches sensitive to case and
+diacritics can be performed, but the index will be bigger, and some
+marginal weirdness may sometimes occur. The default is a stripped index
+(indexStripChars = 1) for now. When using multiple indexes for a search,
+this parameter must be defined identically for all. Changing the value
+implies an index reset.
+.TP 
+.BI "maxTermExpand = " value
+Maximum expansion count for a single term (e.g.: when using wildcards). The
+default of 10000 is reasonable and will avoid queries that appear frozen
+while the engine is walking the term list. 
+.TP 
+.BI "maxXapianClauses = " value
+Maximum number of elementary clauses we can add to a single Xapian
+query. In some cases, the result of term expansion can be multiplicative,
+and we want to avoid using excessive memory. The default of 100 000 should
+be both high enough in most cases and compatible with current typical
+hardware configurations. 
+.TP 
+.BI "nonumbers = " 0/1
+If this set to true, no terms will be generated for numbers. For example
+"123", "1.5e6", 192.168.1.4, would not be indexed ("value123" would still
+be). Numbers are often quite interesting to search for, and this should
+probably not be set except for special situations, ie, scientific documents
+with huge amounts of numbers in them. This can only be set for a whole
+index, not for a subtree. 
+.TP
+.BI "nocjk = " boolean
+If this set to true, specific east asian (Chinese Korean Japanese)
+characters/word splitting is turned off. This will save a small amount of
+cpu if you have no CJK documents. If your document base does include such
+text but you are not interested in searching it, setting
+.I nocjk
+may be a significant time and space saver.
+.TP
+.BI "cjkngramlen = " value
+This lets you adjust the size of n-grams used for indexing CJK text. The
+default value of 2 is probably appropriate in most cases. A value of 3
+would allow more precision and efficiency on longer words, but the index
+will be approximately twice as large.
+.TP
+.BI "indexstemminglanguages = " languages
+A list of languages for which the stem expansion databases will be
+built. See recollindex(1) for possible values.
+.TP
+.BI "defaultcharset = " charset
+The name of the character set used for files that do not contain a
+character set definition (ie: plain text files). This can be redefined for
+any subdirectory.
+.TP 
+.BI "unac_except_trans = " "list of utf-8 groups"
+This is a list of characters, encoded in UTF-8, which should be handled
+specially when converting text to unaccented lowercase. For example, in
+Swedish, the letter "a with diaeresis" has full alphabet citizenship and
+should not be turned into an a. 
+.br
+Each element in the space-separated list has the special character as first
+element and the translation following. The handling of both the lowercase
+and upper-case versions of a character should be specified, as appartenance
+to the list will turn-off both standard accent and case processing.
+.br
+Note that the translation is not limited to a single character.
+.br
+This parameter cannot be redefined for subdirectories, it is global,
+because there is no way to do otherwise when querying. If you have document
+sets which would need different values, you will have to index and query
+them separately.
+.TP
+.BI "maildefcharset = " character set name
+This can be used to define the default character set specifically for email
+messages which don't specify it. This is mainly useful for readpst (libpst)
+dumps, which are utf-8 but do not say so. 
+.TP
+.BI "localfields = " "fieldname = value:..."
+This allows setting fields for all documents under a given
+directory. Typical usage would be to set an "rclaptg" field, to be used in
+mimeview to select a specific viewer. If several fields are to be set, they
+should be separated with a colon (':') character (which there is currently
+no way to escape). Ie: localfields= rclaptg=gnus:other = val, then select
+specifier viewer with mimetype|tag=... in mimeview. 
+.TP
+.BI "dbdir = " directory
+The name of the Xapian database directory. It will be created if needed
+when the database is initialized. If this is not an absolute pathname, it
+will be taken relative to the configuration directory.
+.TP
+.BI "idxstatusfile = " "file path"
+The name of the scratch file where the indexer process updates its
+status. Default: idxstatus.txt inside the configuration directory. 
+.TP
+.BI "maxfsoccuppc = " percentnumber
+Maximum file system occupation before we
+stop indexing. The value is a percentage, corresponding to
+what the "Capacity" df output column shows.  The default
+value is 0, meaning no checking.
+.TP
+.BI "mboxcachedir = " "directory path"
+The directory where mbox message offsets cache files are held. This is
+normally $RECOLL_CONFDIR/mboxcache, but it may be useful to share a
+directory between different configurations. 
+.TP
+.BI "mboxcacheminmbs = " "value in megabytes"
+The minimum mbox file size over which we cache the offsets. There is really no sense in caching offsets for small files. The default is 5 MB.
+.TP
+.BI "webcachedir = " "directory path"
+This is only used by the Beagle web browser plugin indexing code, and
+defines where the cache for visited pages will live. Default:
+$RECOLL_CONFDIR/webcache
+.TP
+.BI "webcachemaxmbs = " "value in megabytes"
+This is only used by the Beagle web browser plugin indexing code, and
+defines the maximum size for the web page cache. Default: 40 MB. 
+.TP
+.BI "idxflushmb = " megabytes
+Threshold (megabytes of new text data)
+where we flush from memory to disk index. Setting this can
+help control memory usage. A value of 0 means no explicit
+flushing, letting Xapian use its own default, which is
+flushing every 10000 documents (or XAPIAN_FLUSH_THRESHOLD), meaning that
+memory usage depends on average document size. The default value is 10.
+.TP
+.BI "autodiacsens = " 0/1
+IF the index is not stripped, decide if we automatically trigger diacritics
+sensitivity if the search term has accented characters (not in
+unac_except_trans). Else you need to use the query language and the D
+modifier to specify diacritics sensitivity. Default is no. 
+.TP
+.BI "autocasesens = " 0/1
+IF the index is not stripped, decide if we automatically trigger character
+case sensitivity if the search term has upper-case characters in any but
+the first position. Else you need to use the query language and the C
+modifier to specify character-case sensitivity. Default is yes. 
+.TP
+.BI "loglevel = " value
+Verbosity level for recoll and recollindex. A value of 4 lists quite a lot of
+debug/information messages. 3 lists only errors. 
+.B daemloglevel
+can be used to specify a different value for the real-time indexing daemon.
+.TP
+.BI "logfilename = " file
+Where should the messages go. 'stderr' can be used as a special value.
+.B daemlogfilename
+can be used to specify a different value for the real-time indexing daemon.
+.TP
+.BI "mondelaypatterns = " "list of patterns"
+This allows specify wildcard path patterns (processed with fnmatch(3) with
+0 flag), to match files which change too often and for which a delay should
+be observed before re-indexing. This is a space-separated list, each entry
+being a pattern and a time in seconds, separated by a colon. You can use
+double quotes if a path entry contains white space. Example: 
+.sp
+mondelaypatterns = *.log:20 "this one has spaces*:10"
+.TP                  
+.BI "monixinterval = " "value in seconds
+Minimum interval (seconds) for processing the indexing queue. The real time
+monitor does not process each event when it comes in, but will wait this
+time for the queue to accumulate to diminish overhead and in order to
+aggregate multiple events to the same file. Default 30 S. 
+.TP
+.BI "monauxinterval = " "value in seconds
+Period (in seconds) at which the real time monitor will regenerate the
+auxiliary databases (spelling, stemming) if needed. The default is one
+hour. 
+.TP
+.BI "monioniceclass, monioniceclassdata"
+These allow defining the ionice class and data used by the indexer (default
+class 3, no data). 
+.TP
+.BI "filtermaxseconds = " "value in seconds"
+Maximum filter execution time, after which it is aborted. Some postscript
+programs just loop... 
+.TP
+.BI "filtersdir = " directory
+A directory to search for the external filter scripts used to index some
+types of files. The value should not be changed, except if you want to
+modify one of the default scripts. The value can be redefined for any
+subdirectory. 
+.TP
+.BI "iconsdir = " directory
+The name of the directory where 
+.B recoll
+result list icons are stored. You can change this if you want different
+images.
+.TP
+.BI "idxabsmlen = " value
+Recoll stores an abstract for each indexed file inside the database. The
+text can come from an actual 'abstract' section in the document or will
+just be the beginning of the document. It is stored in the index so that it
+can be displayed inside the result lists without decoding the original
+file. The
+.I idxabsmlen
+parameter defines the size of the stored abstract. The default value is 250
+bytes.  The search interface gives you the choice to display this stored
+text or a synthetic abstract built by extracting text around the search
+terms. If you always prefer the synthetic abstract, you can reduce this
+value and save a little space.
+.TP
+.BI "aspellLanguage = " lang
+Language definitions to use when creating the aspell dictionary.  The value
+must match a set of aspell language definition files. You can type "aspell
+config" to see where these are installed (look for data-dir). The default
+if the variable is not set is to use your desktop national language
+environment to guess the value.
+.TP
+.BI "noaspell = " boolean
+If this is set, the aspell dictionary generation is turned off. Useful for
+cases where you don't need the functionality or when it is unusable because
+aspell crashes during dictionary generation.
+.TP
+.BI "mhmboxquirks = " flags
+This allows definining location-related quirks for the mailbox
+handler. Currently only the tbird flag is defined, and it should be set for
+directories which hold Thunderbird data, as their folder format is weird. 
+
+.SH SEE ALSO
+.PP 
+recollindex(1) recoll(1)
diff --git a/src/doc/man/recollindex.1 b/src/doc/man/recollindex.1
new file mode 100644
index 00000000..b52751dc
--- /dev/null
+++ b/src/doc/man/recollindex.1
@@ -0,0 +1,249 @@
+.\" $Id: recollindex.1,v 1.7 2008-09-05 10:25:54 dockes Exp $ (C) 2005 J.F.Dockes\$
+.TH RECOLLINDEX 1 "8 January 2006"
+.SH NAME
+recollindex \- indexing command for the Recoll full text search system
+.SH SYNOPSIS
+.B recollindex \-h
+.br
+.B recollindex
+[
+.B \-c
+
+]
+[
+.B \-z|\-Z
+]
+.br
+.B recollindex
+[
+.B \-c
+
+]
+.B \-m
+[
+.B \-w
+
+]
+[
+.B \-D
+]
+[
+.B \-x
+]
+[
+.B \-C
+]
+[
+.B \-n
+]
+.br
+.B recollindex 
+[
+.B \-c
+
+]
+.B \-i 
+[
+.B \-Z
+]
+[
+.B \-f
+]
+[]
+.br
+.B recollindex 
+[
+.B \-c
+
+]
+.B \-r
+[
+.B \-Z
+]
+[
+.B \-f
+]
+
+.br
+.B recollindex 
+[
+.B \-c
+
+]
+.B \-e 
+[]
+.br
+.B recollindex
+[
+.B \-c
+
+]
+.B \-l
+.br
+.B recollindex
+[
+.B \-c
+
+]
+.B \-s 
+
+.br
+.B recollindex
+[
+.B \-c
+
+]
+.B \-S
+
+.SH DESCRIPTION
+The
+.B recollindex
+utility allows you to perform indexing operations for the Recoll text
+search system.
+.PP
+The 
+.B \-c 
+option specifies the configuration directory name, overriding the
+default or $RECOLL_CONFDIR.
+.PP
+There are several modes of operation. 
+.PP
+The normal mode will index the set of files described in the configuration
+file 
+.B recoll.conf.
+This will incrementally update the database with files that changed since
+the last run. If option 
+.B \-z 
+is given, the database will be erased before starting. If option
+.B \-Z 
+is given, the database will not be reset, but all files will be considered
+as needing reindexing (in place reset).
+.PP
+If option 
+.B
+\-m 
+is given, recollindex is started for real time monitoring, using the
+file system monitoring package it was configured for (either fam, gamin, or
+inotify). This mode must have been explicitly configured when building the
+package, it is not available by default. The program will normally detach
+from the controlling terminal and become a daemon. If option
+.B
+\-D 
+is given, it will stay in the foreground. Option
+.B
+\-w 
+ can be used to specify that the program should sleep for the
+specified time before indexing begins. The default value is 60. The daemon
+normally monitors the X11 session and exits when it is reset.
+Option 
+.B
+\-x
+disables this X11 session monitoring (daemon will stay alive even if it
+cannot connect to the X11 server). You need to use this too if you use the
+daemon without an X11 context. You can use option
+.B
+\-n
+to skip the initial incrementing pass which is normally performed before
+monitoring starts. Once monitoring is started, the daemon normally monitors
+the configuration and restarts from scratch if a change is made. You can
+disable this with option
+.B
+\-C
+.PP
+.B recollindex \-i
+will index individual files into the database. The stem expansion and
+aspell databases will not be updated. The skippedPaths and skippedNames
+configuration variables will be used, so that some files may be
+skipped. You can tell recollindex to ignore skippedPaths and skippedNames
+by setting the 
+.B
+\-f 
+option. This allows fully custom file selection for a given subtree,
+for which you would add the top directory to skippedPaths, and use any
+custom tool to generate the file list (ie: a tool from a source code
+control system). 
+.PP
+.PP
+.B recollindex \-e
+will erase data for individual files from the database. The stem expansion
+databases will not be updated.
+.PP
+With options 
+.B \-i 
+or 
+.B \-e 
+, if no file names are given on the command line, they
+will be read from stdin, so that you could for example run:
+.PP
+find /path/to/dir \-print | recollindex \-e 
+.PP
+followed by 
+.PP
+find /path/to/dir \-print | recollindex \-i
+.PP
+to force the reindexing of a directory tree (which has to exist inside the
+file system area defined by
+.I topdirs 
+in recoll.conf). You could mostly accomplish the same thing with
+.PP
+.B find /path/to/dir \-print | recollindex \-f \-Z 
+.PP
+.B recollindex \-r
+mostly works like -i, but the parameter is a single directory, which will
+be recursively updated. This mostly does nothing more than 
+.B find topdir | recollindex -i
+but it may be more convenient to use when started from another program.
+.PP
+.B recollindex \-l 
+will list the names of available language stemmers.
+.PP
+.B recollindex \-s 
+will build the stem expansion database for a given language, which may or
+may not be part of the list in the configuration file. If the language is
+not part of the configuration, the stem expansion database will be deleted
+at the end of the next normal indexing run. You can get the list of stemmer
+names from the 
+.B recollindex \-l
+command. Note that this is mostly for experimental use, the normal way to
+add a stemming language is to set it in the configuration, either by
+editing "recoll.conf" or by using the GUI indexing configuration dialog.
+.br
+At the time of this writing, the following languages
+are recognized (out of Xapian's stem.h):
+.IP \(bu
+danish
+.IP \(bu
+dutch
+.IP \(bu
+english Martin Porter's 2002 revision of his stemmer
+.IP \(bu
+english_lovins Lovin's stemmer
+.IP \(bu
+english_porter Porter's stemmer as described in his 1980 paper
+.IP \(bu
+finnish 
+.IP \(bu
+french 
+.IP \(bu
+german 
+.IP \(bu
+italian
+.IP \(bu
+norwegian
+.IP \(bu
+portuguese
+.IP \(bu
+russian
+.IP \(bu
+spanish
+.IP \(bu
+swedish
+.PP
+.B recollindex \-S
+will rebuild the phonetic/orthographic index. This feature uses the 
+.B aspell
+package, which must be installed on the system.
+
+.SH SEE ALSO
+.PP 
+recoll(1) recoll.conf(5)
diff --git a/src/doc/man/recollq.1 b/src/doc/man/recollq.1
new file mode 100644
index 00000000..5895fe81
--- /dev/null
+++ b/src/doc/man/recollq.1
@@ -0,0 +1,148 @@
+.\" $Id: recollq.1,v 1.1 2007-11-13 10:07:35 dockes Exp $ (C) 2005 J.F.Dockes\$
+.TH RECOLLQ 1 "13 November 2007"
+.SH NAME
+recollq \- command line / standard output Recoll query command.
+.SH SYNOPSIS
+.B recollq
+[
+.B \-c
+
+]
+[
+.B \-o
+|
+.B \-f
+|
+.B \-a
+]
+[
+.B \-b
+]
+[
+.B \-d
+]
+[
+.B \-A
+]
+[
+.B \-e
+]
+[
+.B \-m
+]
+[
+.B \-n
+<[first-]cnt>
+]
+[
+.B \-Q
+]
+[
+.B \-s
+
+]
+[
+.B \-S
+
+]
+[
+.B \-D
+]
+[
+.B \-i
+
+]
+[
+.B \-F
+
+]
+
+
+.B recollq \-P
+
+.SH DESCRIPTION
+The
+.B recollq
+command will execute the Recoll query specified on the command line and
+print the results to the standard output. It is primarily designed for
+diagnostics, or piping the data to some other program. The basic format and
+its variations can be useful for command line querying. The -F option
+should exclusively be used for using the output data in another program, as
+it is the only one for which output is guaranteed to be fully parseable.
+.PP
+The 
+.B \-c 
+option specifies the configuration directory name, overriding the
+default or $RECOLL_CONFDIR.
+.PP
+The query string is built by concatenating all arguments found at the end
+of the command line (after the options). It will be interpreted by default
+as a query language string. Quoting should be used as needed to escape
+characters that might be interpreted by the shell (ie: wildcards).
+.B \-a 
+is specified, the query string will be interpreted as an
+.I all words
+simple search query. If 
+.B \-o 
+is specified, the query string will be interpreted as an
+.I any word
+simple search query. If 
+.B \-f
+is specified, the query string will be interpreted as a
+.I file name
+simple search query. 
+.PP
+.B \-b
+(basic) can be specified to only print the result urls in the output
+stream.
+.PP
+If 
+.B \-d
+is set, the text for the result files contents will be dumped to stdout.
+.PP
+If 
+.B \-m
+is set, the whole metadata array will be dumped for each document.
+.PP
+If 
+.B \-A
+is set, the document abstracts will be printed.
+.PP
+.B \-S
+
+sorts the results according to the specified field. Use 
+.B \-D 
+for descending order.
+.PP
+.B \-n
+
+can be used to set the maximum number of results that should be
+printed. The default is 2000. Use a value of 0 for no limit.
+.PP
+.B \-s
+
+selects the word stemming language. The value should match an existing
+stemming database (as set in the configuration or added with recollindex \-s).
+.PP
+.B \-i
+
+adds the specified Xapian index to the set used for the query. Can be
+specified multiple times.
+.PP 
+.B \-F
+
+should be used for piping the data to another program. After 2 initial
+lines showing the actual query and the estimated result counts, it will
+print one line for each result document. Each line will have 
+exactly the fields requested on the command line. Fields are encoded in
+base64 and separated by one space character. Empty fields are indicated by
+consecutive space characters. There is one additional space character at
+the end of each line.
+.PP
+.B recollq \-P
+(Period) will print the minimum and maximum modification years for
+documents in the index.
+
+.SH SEE ALSO
+.PP 
+recollindex(1) recollq(1) recoll.conf(5) 
diff --git a/src/doc/prog/Doxyfile b/src/doc/prog/Doxyfile
new file mode 100644
index 00000000..d57dced8
--- /dev/null
+++ b/src/doc/prog/Doxyfile
@@ -0,0 +1,1212 @@
+# Doxyfile 1.4.1
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = Recoll
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = 
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, 
+# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, 
+# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, 
+# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, 
+# Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# This tag can be used to specify the encoding used in the generated output. 
+# The encoding is not always determined by the language that is chosen, 
+# but also whether or not the output is meant for Windows or non-Windows users. 
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
+# forces the Windows encoding (this is the default for the Windows binary), 
+# whereas setting the tag to NO uses a Unix-style encoding (the default for 
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING   = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like the Qt-style comments (thus requiring an 
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member 
+# documentation.
+
+DETAILS_AT_TOP         = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources 
+# only. Doxygen will then generate output that is more tailored for Java. 
+# For instance, namespaces will be presented as packages, qualified scopes 
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation.
+
+SHOW_DIRECTORIES       = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from the 
+# version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command  , where  is the value of 
+# the FILE_VERSION_FILTER tag, and  is the name of an input file 
+# provided by doxygen. Whatever the progam writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = ../src top.txt filters.txt
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm
+
+FILE_PATTERNS          = 
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = .moc .ui
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
+# directories that are symbolic links (a Unix filesystem feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories.
+
+EXCLUDE_PATTERNS       = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command  , where  
+# is the value of the INPUT_FILTER tag, and  is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
+# is applied to all files.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default) 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = docprog_html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse 
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option is superseded by the HAVE_DOT option below. This is only a 
+# fallback. It is recommended to install and use dot, since it yields more 
+# powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+# generate a call dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable call graphs for selected 
+# functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_WIDTH    = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT   = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that a graph may be further truncated if the graph's 
+# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH 
+# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), 
+# the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is disabled by default, which results in a white background. 
+# Warning: Depending on the platform used, enabling this option may lead to 
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to 
+# read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
diff --git a/src/doc/prog/Makefile b/src/doc/prog/Makefile
new file mode 100644
index 00000000..926acf16
--- /dev/null
+++ b/src/doc/prog/Makefile
@@ -0,0 +1,5 @@
+documentation:
+	doxygen Doxyfile
+clean:
+	rm -f docprog_html/*
+
diff --git a/src/doc/prog/filters.txt b/src/doc/prog/filters.txt
new file mode 100644
index 00000000..67cff502
--- /dev/null
+++ b/src/doc/prog/filters.txt
@@ -0,0 +1,47 @@
+/*!@filters
+
+\page filters About filters
+
+\section filtintro Overview
+
+Before a document can be processed either for indexing or previewing, it
+must be translated into an internal common format.
+
+The MimeHandler class defines the virtual interface for filters. There are
+derived classes for text, html (MimeHandlerHtml), and mail folders
+(MimeHandlerMail)
+
+There is also a derived class (MimeHandlerExec) that will execute an
+external program to translate the document to simple html (to be further
+processed by MimeHandlerHtml).
+
+To extend Recoll for a new document type, you may either subclass the
+MimeHandler class (look at one of the existing subclasses), or write an
+external filter, which will probably be the simpler solution in most cases.
+
+\section extfilts External filters
+
+Filters are programs (usually shell scripts) that will turn a document of
+foreign type into something that Recoll can understand. HTML was chosen as
+a pivot format for its ability to carry structured information.
+
+The meta-information tags that Recoll will use at the moment are the
+following:
+
+     - title
+     - charset 
+     - keywords 
+     - description
+
+For an example, you can take a look at the rclsoff filter which translates
+openoffice documents.
+
+The filter is executed with the input file name as a parameter and should
+output the result to stdout.
+
+\section extassoc Associating a filter to a mime type
+
+This is done in the mimeconf configuration file. Take a look at the file,
+the format is self-explanatory.
+
+*/
diff --git a/src/doc/prog/top.txt b/src/doc/prog/top.txt
new file mode 100644
index 00000000..becb8c3b
--- /dev/null
+++ b/src/doc/prog/top.txt
@@ -0,0 +1,20 @@
+/*!@mainpage  Recoll: A personal/desktop text-search program
+\author email address: jfd@recoll.org
+
+\section intro Introduction
+
+Home page: http://www.recoll.org
+
+This is the documentation for Recoll, a personal text search tool. Recoll
+is written in C++, has a QT-based gui and uses the Xapian full text search engine.
+
+Recoll supports a number of document types, the decoding of which is either
+performed with internal code or an externally executed, program. 
+
+It should be relatively easy to write a new filter for some yet unsupported
+file type, and the documentation for this is found here: Writing input filters 
+
+*/
+
diff --git a/src/doc/user/00README.txt b/src/doc/user/00README.txt
new file mode 100644
index 00000000..892a3b85
--- /dev/null
+++ b/src/doc/user/00README.txt
@@ -0,0 +1,30 @@
+= Building the Recoll user manual
+
+The Recoll user manual used to be written in DocBook SGML and used the
+FreeBSD doc toolchain to produce the output formats. This had the advantage
+of an easy way to produce all formats including a PDF manual, but presented
+two problems:
+
+ - Dependancy on the FreeBSD platform.
+ - No support for UTF-8 (last I looked), only latin1.
+
+The manual is now compatible with XML. There is a small script that
+converts the SGML (but XML-compatible) manual into XML (changes the header,
+mostly). The SGML version is still the primary one.
+
+Beyond fixing a few missing closing tags, the main change that had to be
+made was to make the anchors explicitly upper-case because the SGML
+toolchain converts them to upper-case and the XML one does not, so the only
+way to have compatibility is to make them upper-case in the first place.
+
+We initially had a problem for producing the PDF manual, which motivated
+keeping the SGML version for producing the PDF with the FreeBSD SGML
+toolchain. This problem is now solved with dblatex, so that the SGML
+version now has little reason to persist and it will go away at some point
+in the future.
+
+Asciidoc would also be a candidate as the source format, because it can
+easily produce docbook, so the future will probably be:
+
+asciidoc->docbook-xml-> html
+                     -> pdf
diff --git a/src/doc/user/Makefile b/src/doc/user/Makefile
new file mode 100644
index 00000000..d9b87a66
--- /dev/null
+++ b/src/doc/user/Makefile
@@ -0,0 +1,2 @@
+usermanual.html: usermanual.sgml
+	sh xmlmake.sh
diff --git a/src/doc/user/Makefile.fbsd b/src/doc/user/Makefile.fbsd
new file mode 100644
index 00000000..5c1d49fb
--- /dev/null
+++ b/src/doc/user/Makefile.fbsd
@@ -0,0 +1,32 @@
+# 
+# @(#$Id: Makefile,v 1.1 2006-01-04 11:09:53 dockes Exp $
+#
+#
+
+MAINTAINER=jfd@recoll.org
+
+DOC?= usermanual
+LANGCODE?= en_US.ISO_8859-1
+FORMATS?= html txt html-split pdf
+JADEFLAGS+=	-V %generate-article-toc%
+
+# The purpose for this is to replace the FreeBSD file which contains the 
+# blurb about file being hosted on FreeBSD.org. To work, it also
+# needs a modification to /usr/doc/share/mk/doc.docbook.mk. Around line
+# 121, replace LANGUAGECATALOG= with LANGUAGECATALOG?=
+LANGUAGECATALOG=/usr/doc/share/sgml/catalog
+
+#INSTALL_COMPRESSED?= gz
+INSTALL_ONLY_COMPRESSED?=
+
+# 
+# SRCS lists the individual SGML files that make up the document. Changes
+# to any of these files will force a rebuild
+#
+
+# SGML content
+SRCS=  usermanual.sgml
+
+# ${.CURDIR}/../../..
+DOC_PREFIX?= /usr/doc
+.include "${DOC_PREFIX}/share/mk/doc.project.mk"
diff --git a/src/doc/user/docbook-xsl.css b/src/doc/user/docbook-xsl.css
new file mode 100644
index 00000000..8cc0a8b2
--- /dev/null
+++ b/src/doc/user/docbook-xsl.css
@@ -0,0 +1,212 @@
+/*
+ * Copyright (c) 2001, 2003, 2010 The FreeBSD Documentation Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: doc/share/misc/docbook.css,v 1.15 2010/03/20 04:15:01 hrs Exp $
+ */
+
+body address {
+	line-height: 1.3;
+	margin: .6em 0;
+}
+
+body blockquote {
+	margin-top: .75em;
+	line-height: 1.5;
+	margin-bottom: .75em;
+}
+
+html body {
+	margin: 1em 8% 1em 10%;
+	line-height: 1.2;
+}
+
+.legalnotice {
+	font-size: small;
+	font-variant: small-caps;
+}
+
+body div {
+	margin: 0;
+}
+
+dl {
+	margin: .8em 0;
+	line-height: 1.2;
+}
+
+body form {
+	margin: .6em 0;
+}
+
+h1, h2, h3, h4, h5, h6,
+div.example p b,
+.question,
+div.table p b,
+div.procedure p b {
+	color: #990000;
+}
+
+body h1, body h2, body h3, body h4, body h5, body h6 {
+	line-height: 1.3;
+	margin-left: 0;
+}
+
+body h1, body h2 {
+	margin: .8em 0 0 -4%;
+}
+
+body h3, body h4 {
+	margin: .8em 0 0 -3%;
+}
+
+body h5 {
+	margin: .8em 0 0 -2%;
+}
+
+body h6 {
+	margin: .8em 0 0 -1%;
+}
+
+body hr {
+	margin: .6em;
+	border-width: 0 0 1px 0;
+	border-style: solid;
+	border-color: #cecece;
+}
+
+body img.navheader {
+	margin: 0 0 0 -4%;
+}
+
+ol {
+	margin: 0 0 0 5%;
+	line-height: 1.2;
+}
+
+body pre {
+	margin: .75em 0;
+	line-height: 1.0;
+	font-family: monospace;
+}
+
+body td, body th {
+	line-height: 1.2;
+}
+
+ul, body dir, body menu {
+	margin: 0 0 0 5%;
+	line-height: 1.2;
+}
+
+html {
+	margin: 0; 
+	padding: 0;
+}
+
+body p b.application {
+	color: #000000;
+}
+body p span.application {
+	font-weight: bold;
+	color: #000000;
+}
+
+.filename {
+	color: #007a00;
+}
+
+.guimenu, .guimenuitem, .guisubmenu,
+.guilabel, .interface,
+.shortcut, .shortcut .keycap {
+	font-weight: bold;
+}
+
+.guibutton {
+	background-color: #cfcfcf;
+	padding: 2px;
+}
+
+.accel {
+	background-color: #f0f0f0;
+	text-decoration: underline;
+} 
+
+.screen {
+	padding: 1ex;
+}
+
+.programlisting {
+	padding: 1ex;
+	background-color: #eee;
+	border: 1px solid #ccc;
+}
+
+@media screen {  /* hide from ie3 */
+	a[href]:hover { background: #ffa }
+}
+
+blockquote.note {
+	color: #222;
+	background: #eee;
+	border: 1px solid #ccc;
+	padding: 0.4em 0.4em;
+	width: 85%;
+}
+
+blockquote.tip {
+	color: #004f00;
+	background: #d8ecd6;
+	border: 1px solid green;
+	padding: 0.2em 2em;
+	width: 85%;
+}
+
+blockquote.important {
+	font-style:italic;
+	border: 1px solid #a00;
+	border-left: 12px solid #c00;
+	padding: 0.1em 1em;
+}
+
+blockquote.warning {
+	color: #9f1313;
+	background: #f8e8e8;
+	border: 1px solid #e59595;
+	padding: 0.2em 2em;
+	width: 85%;
+}
+
+.example {
+	background: #fefde6;
+	border: 1px solid #f1bb16;
+	margin: 1em 0;
+	padding: 0.2em 2em;
+	width: 90%;
+}
+
+.informaltable table.calstable tr td {
+        padding-left: 1em;
+        padding-right: 1em;
+}
diff --git a/src/doc/user/docbook.css b/src/doc/user/docbook.css
new file mode 100644
index 00000000..3d40fa70
--- /dev/null
+++ b/src/doc/user/docbook.css
@@ -0,0 +1,208 @@
+/*
+ * Copyright (c) 2001, 2003, 2010 The FreeBSD Documentation Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: doc/share/misc/docbook.css,v 1.15 2010/03/20 04:15:01 hrs Exp $
+ */
+
+BODY ADDRESS {
+	line-height: 1.3;
+	margin: .6em 0;
+}
+
+BODY BLOCKQUOTE {
+	margin-top: .75em;
+	line-height: 1.5;
+	margin-bottom: .75em;
+}
+
+HTML BODY {
+	margin: 1em 8% 1em 10%;
+	line-height: 1.2;
+}
+
+.LEGALNOTICE {
+	font-size: small;
+	font-variant: small-caps;
+}
+
+BODY DIV {
+	margin: 0;
+}
+
+DL {
+	margin: .8em 0;
+	line-height: 1.2;
+}
+
+BODY FORM {
+	margin: .6em 0;
+}
+
+H1, H2, H3, H4, H5, H6,
+DIV.EXAMPLE P B,
+.QUESTION,
+DIV.TABLE P B,
+DIV.PROCEDURE P B {
+	color: #990000;
+}
+
+BODY H1, BODY H2, BODY H3, BODY H4, BODY H5, BODY H6 {
+	line-height: 1.3;
+	margin-left: 0;
+}
+
+BODY H1, BODY H2 {
+	margin: .8em 0 0 -4%;
+}
+
+BODY H3, BODY H4 {
+	margin: .8em 0 0 -3%;
+}
+
+BODY H5 {
+	margin: .8em 0 0 -2%;
+}
+
+BODY H6 {
+	margin: .8em 0 0 -1%;
+}
+
+BODY HR {
+	margin: .6em;
+	border-width: 0 0 1px 0;
+	border-style: solid;
+	border-color: #cecece;
+}
+
+BODY IMG.NAVHEADER {
+	margin: 0 0 0 -4%;
+}
+
+OL {
+	margin: 0 0 0 5%;
+	line-height: 1.2;
+}
+
+BODY PRE {
+	margin: .75em 0;
+	line-height: 1.0;
+	font-family: monospace;
+}
+
+BODY TD, BODY TH {
+	line-height: 1.2;
+}
+
+UL, BODY DIR, BODY MENU {
+	margin: 0 0 0 5%;
+	line-height: 1.2;
+}
+
+HTML {
+	margin: 0; 
+	padding: 0;
+}
+
+BODY P B.APPLICATION {
+	color: #000000;
+}
+
+.FILENAME {
+	color: #007a00;
+}
+
+.GUIMENU, .GUIMENUITEM, .GUISUBMENU,
+.GUILABEL, .INTERFACE,
+.SHORTCUT, .SHORTCUT .KEYCAP {
+	font-weight: bold;
+}
+
+.GUIBUTTON {
+	background-color: #CFCFCF;
+	padding: 2px;
+}
+
+.ACCEL {
+	background-color: #F0F0F0;
+	text-decoration: underline;
+} 
+
+.SCREEN {
+	padding: 1ex;
+}
+
+.PROGRAMLISTING {
+	padding: 1ex;
+	background-color: #eee;
+	border: 1px solid #ccc;
+}
+
+@media screen {  /* hide from IE3 */
+	a[href]:hover { background: #ffa }
+}
+
+BLOCKQUOTE.NOTE {
+	color: #222;
+	background: #eee;
+	border: 1px solid #ccc;
+	padding: 0.4em 0.4em;
+	width: 85%;
+}
+
+BLOCKQUOTE.TIP {
+	color: #004F00;
+	background: #d8ecd6;
+	border: 1px solid green;
+	padding: 0.2em 2em;
+	width: 85%;
+}
+
+BLOCKQUOTE.IMPORTANT {
+	font-style:italic;
+	border: 1px solid #a00;
+	border-left: 12px solid #c00;
+	padding: 0.1em 1em;
+}
+
+BLOCKQUOTE.WARNING {
+	color: #9F1313;
+	background: #f8e8e8;
+	border: 1px solid #e59595;
+	padding: 0.2em 2em;
+	width: 85%;
+}
+
+.EXAMPLE {
+	background: #fefde6;
+	border: 1px solid #f1bb16;
+	margin: 1em 0;
+	padding: 0.2em 2em;
+	width: 90%;
+}
+
+.INFORMALTABLE TABLE.CALSTABLE TR TD {
+        padding-left: 1em;
+        padding-right: 1em;
+}
diff --git a/src/doc/user/usermanual-italian.html b/src/doc/user/usermanual-italian.html
new file mode 100644
index 00000000..d9820c05
--- /dev/null
+++ b/src/doc/user/usermanual-italian.html
@@ -0,0 +1,3849 @@
+
+
+
+
+
+  
+  
+
+  
+
+
+  
+  Recoll user manual
+  
+
+
+  
+  
+
+
+  
+  
+
+
+
+
+
+
+
+
+

Recoll: +manuale utente

+ + +

Jean-Francois +Dockes

+ + +
+
+

+ + +
+ + +
+ + + + + +
+
+

Questo documento spiega le nozioni della ricerca testuale e descrive +l'installazione e l'uso di Recoll.

+ + +
+ + +
+ + +
+
+ + +
+
+ + +
Indice
+ + +
1. Introduzione
+ + +
+ +
+ + +
1.1. Per +gli impazienti
+ + +
1.2. Ricerca +a tutto testo
+ + +
1.3. Panoramica +d Recoll
+ + + +
+ + +
+ + +
2. Indicizzazione
+ + +
+ +
+ + +
2.1. Introduzione
+ + +
2.2. Salvare +l'indice
+ + +
+ +
+ + +
2.2.1. Sicurezza
+ + + +
+ + +
+ + +
2.3. Configurazione dell'indicizzazione
+ + +
2.4. Indicizzazione +periodica
+ + +
+ +
+ + +
2.4.1. Iniziare +l'indicizzazione
+ + +
2.4.2. Usare +cron per l'indicizzazione automatica
+ + + +
+ + +
+ + +
2.5. Indicizzazione in tempo +reale
+ + + +
+ + +
+ + +
3. Search
+ + +
+ +
+ + +
3.1. Ricerca +semplice
+ + +
3.2. La +lista dei risultati
+ + +
+ +
+ + +
3.2.1. Il +clic col tasto destro del mouse sulla lista dei risultati
+ + + +
+ + +
+ + +
3.3. La +finestra di preview
+ + +
3.4. Ricerca +complessa/avanzata
+ + +
3.5. Il +terminale di esplorazione
+ + +
3.6. Database +multipli
+ + +
3.7. Storia +dei documenti
+ + +
3.8. Ordinare +i risultati della ricerca
+ + +
3.9. Consigli +per la ricerca, scorciatoie
+ + +
3.10. Personalizzare +l'interfaccia di ricerca
+ + + +
+ + +
+ + +
4. Installazione
+ + +
+ +
+ + +
4.1. Installare +una copia pre-compilata
+ + +
+ +
+ + +
4.1.1. Installazione +con un programma di installazione
+ + +
4.1.2. Installare +un pacchetto Recoll +pre-compilato
+ + + +
+ + +
+ + +
4.2. Pacchetti +esterni utilizzabili
+ + +
4.3. Compilazione +da sorgente
+ + +
+ +
+ + +
4.3.1. Prerequisiti
+ + +
4.3.2. Compilazione
+ + +
4.3.3. Installazione
+ + + +
+ + +
+ + +
4.4. Panoramica +della configurazione
+ + +
+ +
+ + +
4.4.1. File +principale di configurazione
+ + +
4.4.2. Il +file mimemap
+ + +
4.4.3. Il +file mimeconf
+ + +
4.4.4. Il +file mimeview
+ + +
4.4.5. Esempio
+ + + +
+ + +
+ + + +
+ + +
+ + +
+ + +
+ + +
+
+

Capitolo +1. Introduzione

+ + +
+

1.1. Per gli impazienti

+ + +

Se non amate leggere manuali (chi lo ama?) e vorreste provare +subito Recoll, eseguite +allora l'installazione +e lanciate recoll, +che per default inizierà ad indicizzare la vostra home +cartella, permettendovi di fare subito una ricerca non appena il +processo di indicizzazione sarà terminato.

+ + +

Non fate così, però, se la vostra home +cartella +contiene un gran numero di documenti e non avete voglia di aspettare o +avete poco spazio sul disco. In questo caso potrebbe convenirvi di +editare per prima cosa il file di  configurazione per +estringere l'area da indicizzare.

+ + +

Fate inoltre attenzione che potreste dover installare le applicazioni di supporto esterne +per indicizzare quei documenti che le richiedono (ad esempio antiword per documenti +ms-word).

+ + +
+ + +
+
+

1.2. Ricerca a tutto testo

+ + +

Recoll +è un'applicazione per la +ricerca a tutto testo. Le applicazioni di ricerca a tutto testo vi +permettono di trovare ciò che cercate in base al contenuto +dei +files e non al loro nome o estensione. Più in dettaglio vi +lasciano specificare le parole (termini di ricerca) che dovrebbero (o +non dovrebbereo) essere nel testo che cercate e vi ritornano una lista +di documenti che soddisfano tale criterio, ordinati in maniera tale che +quelli più rilevanti appaiano +in cima alla lista.

+ + +

Non hai bisogno di ricordare in che file o e-mail hai scritto +una +certa informazione. Semplicemente chiedi di trovare i termini che ti +interessano e lo strumento ti ritornerà una lista di +documenti +che li conetngono, in modo simile a quello che fa un motore di ricerca +su internet.

+ + +

Recoll cerca di +determinare quali +documenti sono più rilevanti al fine della ricerca dei +termini +inseriti. Gli algritmi che determinano la rilevanza possono essere +molto complessi e in generale sono inferiori alla potenza e +rapidità della mente umana. La qualità nella +determinazione della rilevanza è probabilmente il fattore +più importante di uno strumento di ricerca.

+ + +

In molti casi cercate tutte le forme di una parola, non una +forma +specifica. Queste differenti forme possono includere plurali, diverse +coniugazioni di verbi, o parole derivate da una radice comune +o stem +(ad esempio: floopianor, piani, pianoforte, ripiano...). Recoll per default espande la +ricerca a tutte queste variazioni +parole che hanno in comune la stessa radice o stem). Questa espansione +può essere disabilitata in qualsiasi momento.

+ + +

Lo stemming, per se stesso, non risolve errori di ortografia, +nè può fare ricerche fonetiche. Recoll supporta queste +caratteristiche attraverso uno strumento specifico (il terminale di esplorazione) +che vi lascia esplorare i +termini contenuti nell'indice in differenti maniere.

+ + +
+ + +
+
+

1.3. Panoramica di Recoll

+ + +

Recoll usa la +libreria di ricerca informazioni Xapian + come suo motore di ricerca e indicizzazione. Xapian è un +programma molto maturo che usa un +modello di rilevanza probabilistica molto sofisticato. Recoll provvede l'interfaccia +per indicizzare del sistema ed estrarli in base alla ricerca.

+ + +

In pratica, Xapian +lavora ricordandosi i +termini (parole) contenuti nei vari documenti. Conoscenza acquisita +tramite il procedimento chiamato indicizzazione.

+ + +

L'indice risultante può essere molto grande (a +spanna la +grandezza dei files indicizzati), ma non è un archivio di +documenti. Recoll +può mostrare solo +i documenti che si trovano ancora là dove sono stati +indicizzati. (In effetti esiste un modo per ricostruire un documento +dalle informazioni racchiuse nell'indice, ma il risultato non +è +bello dal momento che il testo è tutto minuscolo e sono +perdute +le informazioni di formattazione).

+ + +

Recoll +immagazzina tutte le informazioni sando il formato Unicode UTF-8 +e può indicizzare files con  un differente set di +caratteri, diverse codifiche e lingue sullo stesso indice. Posside +filtri di ingresso per molteplici tipi di files.

+ + +

Lo stemming dipende dalla lingua del documento. Recoll +immagazzina i termini senza stem e usa database ausiliari per espandere +(stemming) le parole. Può farlo scegliendo tra lingue +diverse o +aggiungendo nuove lingue senza dover rifare l'indice. Immagazzinare +documenti in diverse lingue nello stesso indice è possibile, +e +nella pratica utile, ma può introdurre +possibilità di +confusione. Recoll +attualmente non fa alcun tentativo per riconoscere automaticamente la +lingua.

+ + +

Recoll ha molti +parametri per definire +esattamente ciò che deve indicizzare e come classificare e +decodificare il sorgente dei documenti. Questi parametri sono contenuti +in un file di +configurazione. La configurazione standard è messa +in una cartella standard (normalmente qualcosa come /usr/[local/]share/recoll/examples) +durante l'installazione. I parametri di default possono essere cambiati +con valori da voi scelti e messi nel vostro file di configurazione +personale che deve trovarsi nella cartella .recoll +nella vostra home cartella. Il file di configurazione fornito di +default dovrebbe essere sufficente per indicizzare la vostra home +cartella e permettervi così di provare Recoll, salvo naturalmente +personalizzarlo in seguito.

+ + +

L'indicizzazione +comincia +automaticamente la prima volta che lanciate l'interfaccia grafica di +ricerca di recoll oppure eseguendo il comando recollindex.

+ + +

La ricerca viene +fatta col programma recoll che ha numerose opzioni per farvi trovare +quello che effettivamente state cercando.

+ + +
+ + +
+ + +
+
+

Capitolo +2. Indicizzazione

+ + +
+

2.1. +Introduzione

+ + +

L'indicizzazione è il processo che analizza i +documenti e mette i dati nel database. Il processo di indicizzazione di +Recoll +è normalmente incrementale, vale a dire che i documenti +vengono +analizzati e indicizzati solo se hanno subito modifiche. Alla prima +esecuzione, naturalmente, tutti i documenti vengono analizzati e +indicizzati..Il processo (indicizzazione completa) può +essere +eseguito in seguito specificando un'opzione al comando di +indicizzazione (recollindex +-z).

+ + +

L'indicizzazione con Recoll può essere +fatta con due metodi diversi:

+ + +
    + + +
  • + +
    + +

    Indicizzazione periodica: +l'indicizzazione avviene in tempi prestabiliti, eseguendo il comando recollindex. L'uso tipico +è quello di fare una indicizzazione durante la notte programmando +l'evento con cron.

    + + +
    + + +
  • + + +
  • + +
    + +

    Indicizzazione in tempo reale: +l'indicizzazione avviene non appena un file viene creato o cambiato. In +questo caso recollindex +gira come un  demone e usa il monitoraggio del file-system +fornito da Fam, Gamin o inotify per scoprire gli +eventuali cambiamenti. Monitorare un grosso albero di cartelle +può consumare molte risorse.

    + + +
    + + +
  • + + +
+ + +

La scelta tra i due metodi è principalmente +questione di +preferenze e può essere combinata costruendo indici +diversi (ad esempio: indicizzazione periodica per una grossa +cartella di documenti e indicizzazione in tempo reale per una piccola +home cartella). Monitorare grandi sezioni del disco + può +richiedere risorse significative del sistema senza portare vantaggi +considerevoli.

+ + +

+

+ + +

Recoll riconosce +alcuni differenti tipi di documenti. +I parametri per il riconoscimento dei documenti sono nei files di configurazione. +La maggior parte dei tipi, come l'HTML o i files di un wordprocessor, +sono un unico documento. Altri tipi, come le mail cartelle, possono +contenere molti singoli documenti indicizzati.

+ + +

Recoll processa +files di testo, HTML, +openoffice ed +e-mail internamente. Altri tipi (ad esempio: files postscript, pdf, +ms-word, rtf) richiedono applicazioni esterne per poter essere +processati. La lista di queste applicazioni è nella sezione installazione.

+ + +

Senza ulteriori configurazioni, Recoll +indicizzerà tutti i files della vostra home cartella, usando +i parametri della configurazione di default.

+ + +

In qualche caso potreste essere interessati ad indicizzare +aree +differenti del vostro file system in database separati. Potete farlo +utilizzando la configurazione multipla di cartelle, indicizzando +ciascuna area del file system in uno specifico database. Vedi la sezione su come usare database +multipli per avere maggiori informazione sulla configurazione +e indicizzazione multipla.
+ + +

+ + +
+ + +
+
+

2.2. Salvare l'indice

+ + +

Normalmente la cartella dove viene salvato l'indice +è la sotto cartella xapiandb nella cartella di +configurazione di Recoll, +tipicamente +$HOME/.recoll/xapiandb/. +Questo però può essere cambiato in due modi +differenti (con due differenti scopi):

+ + +
    + + +
  • + +

    Puoi specificare una differente cartella di configurazione +tramite la variabile di ambiente RECOLL_CONFDIR, +oppure usando l'opzione -c +nei comandi di  Recoll. +Questo metodo è usato tipicamente per indicizzare differenti +aree del file system in differenti indici. Per esempio, coi seguenti +comandi:

    + + + +
    export RECOLL_CONFDIR=~/.indexes-email
    recoll

    + + + Recoll +userò il file di configurazione che trova in ~/.indexes-email/ e, (se non +specificato altrimenti in recoll.conf) +cercherà l'indice in in ~/.indexes-email/xapiandb/. +
    + + +
    + + + +

    Usare diverse cartella di configurazionee +diverse  opzioni +di configurazione permette di adattare le configurazioni e +gli indici ai dati presenti nelle varie aree dove volete effettuare le +ricerche.

    + + +
  • + + +
  • + +

    Potete specificare un indirizzo diverso per salvare +l'indice editando il parametro the dbdir +che si trova nel file di configurazione (vedi la  sezione di +configurazione). +Questometodo va usato se vuoi mantenere la cartella di configurazione +nel suo indirizzo di default, ma vuoi mettere l'indice da qualche altra +parte, generalmente per ragioni di spazio.

    + + +
  • + + +
+ + +

La grandezza dell'indice è determinata dal volume +dei +documenti da indicizzare, ma il rapporto può variare molto. +Per +un insieme di documenti normalmente misto il volume dell'indice +è molto vicino a quello dei documenti indicizzati In casi +specifici (ad esempio un insieme di mbox compresse), il volume +dell'indice può essere molto più grande di quello +dei +documenti stessi. Può anche essere molto più +piccolo se +l'insieme di documenti contiene molte immagini e altri dati non +indicizzati (un esempio estremo è dato dai files mp3 dove +solo i +tags vengono indicizzati).

+ + +

Naturalmente immagini, suoni e video non incrementano il +volume +dell'indice, il che ha come conseguenza che, oggi (2006), il volume +dell'indice sarà comunque trascurabile rispetto +all'ammontare +dei dati contenuti nel vostro computer.

+ + +

La cartella contenente l'indice (xapiandb) +contiene solo dati che possono essere ricostruiti in qualsiasi momento +re-indicizzando il tutto, e quindi può essere cancellata +senza +problemi.

+ + +
+
+

2.2.1. Sicurezza

+ + +

L'indice di Recoll +non contiene le copie +dei documenti indicizzati. Ma conyiene abbastanza dati da permettere +una ricostruzione piuttosto completa e comprensibile. +Nel caso vengano indicizzati documenti confidenziali +lìaccesso +alla cartella del database dovrebbe essere limitato.

+ + +

Dalla versione 1.4, Recoll +crea la cartella di configurazione con i permessi 0700 (accessibile +solo per +il proprietario). Visto che bormalmente la cartella del database +è una sub cartella di questa, la protezione dovrebbe essere +sufficenta.

+ + +

Se usi un'altra configurazione dovresti pensare al tipo di +protezione che l'indice dovrebbe avere e settare la cartella +corrispondente e i files con i permessi del caso.

+ + +
+ + +
+ + +
+
+

2.3. Configurazione +dell'indicizzazione

+ + +

Puoi controllare le aree del file system da indicizzare e come +processare i files tramite le variabili nei files +di configurazione di Recoll.

+ + +

Puoi anche usare indici +multipli +definiti da configurazioni separate, normalmente  per separare +indici personali e indici in comune, oppure per avvantaggiarsi +dell'organizzazione dei tuoi dati e aumentare la precisione.

+ + +

La prima volta che lanci recoll, +verrai richiesto se vuoi che recoll costruisca l'indice oppure no. Se +vuoi sistemare la configurazione prima che venga creato l'indice, +clicca ora su Cancel. +Facendo così avrai creato la cartella ~/.recoll contenente +files di configurazione vuoti.

+ + +

La configurazione è documentata all'interno +del  capitolo +installazione +di questo documento, o nella pagina man di recoll.conf(5) man +page. La variabile di maggiore  e immediato interesse +è +probabilmente topdirs, +che determina quali cartelle indicizzare.

+ + +

Le applicazioni esterne necessarie per indicizzare tipi di +files diversi da txt, HTML o email (ad esempio: pdf, +postscript, ms-word...) sono indicate nella sezione pacchetti esterni.

+ + +
+ + +
+
+

2.4. Indicizzazione periodica

+ + +
+

2.4.1.Iniziare +l'indicizzazione

+ + +

L'indicizzazione viene eseguita o tramite il programma recollindex, +o lanciando il thread di indicizzazione dal programma recoll (usa il menu File). Entrambi i modi fanno +uso della variabile RECOLL_CONFDIR +o accettano l'opzione -c confdir +per specificare la cartella di configurazione da usare.

+ + +

Se il programma recoll +non trova alcun indice quando è lanciato, inizia +automaticamente +l'indicizzazione (a meno che non clicchi sul tasto Cancel).

+ + +

E' meglio non interrompere il processo di indicizzazione +perchè facendo così, il più delle +volte, l'indice +viene corrotto. Questo non è un problema serio visto che +tutto +quello che devi fare è cancellare l'indice e riavviare +l'indicizzazione. I files dell'indice sono normalmente nella cartella $HOME/.recoll/xapiandb, che puoi +tranquillamente cancellare se necessario. In alternativa puoi avviare recollindex con +l'opzione -z, opzione che +cancella il database prima di fare l'indicewhich will reset the +database before indexing.

+ + +
+ + +
+
+

2.4.2. Usare cron per +l'indicizzazione automatica

+ + +

Il modo più semplice per avere un'indicizzazione +automatica è usare cron per fare l'indicizzazione ogni +notte. +Ad esempio la seguente linea aggiunta a crontab +esegue l'indicizzazione ogni giorno alle 3:30AM (supponendo +che recollindex sia nel +vostro PATH):

+ + +
30 3 * * * recollindex > /tmp/recolltrace 2>&1
+ + +

Il comando usuale per editare crontabcrontab -e +(che normalmente lancia l'editor vi +per editare crontab). Potreste ovviamente avere strumenti +più sofisticati  nel vostro sistema atti allo scopo.

+ + +
+ + +
+ + +
+
+

2.5. Indicizzazione in tempo +reale

+ + +

L'indicizzazione in tempo reale si ottiene con il comando recollindex -m. Con questa +opzione, recollindex viene +lanciato dal terminele e diventa un demone, +monitorando in continuazione i cambiamenti e tenendo così +aggiornato l'indice.

+ + +

L'indicizzazione in tempo reale viene impostata alla configurazione +del pacchetto (prima della compilazione) con l'opzione --with[out]-fam or --with[out]-inotify. Per default +viene scelto inotify per i sistemi che lo supportano.

+ + +

Lo script rclmon.sh +può essere usato per lanciare e fermare il demone. Si trova +nella cartella examples +di recoll +(normalmente /usr/local/[share/]recoll/examples).

+ + +

Il lancio del demone è normalmente eseguito come +parte della +sessione dell'utente. Ad esempio la mia sessione fuori +moda xdm ha +lo script .xsession +con le seguenti linne alla fine:

+ + +
recollconf=$HOME/.recoll-home
recolldata=/usr/local/share/recoll
RECOLL_CONFDIR=$recollconf $recolldata/examples/rclmon.sh start

fvwm

+ + +

Viene lanciato prima il demone e poil il window-manager, per +il quale la sessione aspetta.

+ + +

Per default il demone di indicizzazione monitorizza lo stato +della +sessione X11 ed esce quando questa finisce (non è necessario +chiuderlo esplicitamente). Il monitoraggio della sessione X11 +può essere disabilitato con l'opzione -x di recollindex.

+ + +

Con KDE, puoi mettere un piccolo script per +lanciare recollindex +-m nella $HOME/.kde/Autostart. +Verrà eseguito ogni volta che inizia la sessione KDE.

+ + +

Esiste un meccanismo simile anche per Gnome (trova lo +strumento per +il controllo della gestione nel menu e usa la linguetta "Startup +programs").

+ + +

Per default, il demone di indicizzazione scrive i suoi +messaggiin un +file dentro la cartella di configurazione (ciò è +controllato dai parametri daemlogfilename e daemloglevel +di configurazione). Puoi naturalmente cambiarli. Il file di log fviene +troncato all'avvio del demone. Se il demone è sempre in +funzione, il file di log può diventare molto grosso a +seconda +del livello di log scelto.

+ + +

Sebbene l'indicizzazione real time sia apprezzabile, +può +causare un alto carico del sistema, ad esempio se cambiano dati come le +e-mail. Probabilmente ti conviene non abilitarla se il tuo sistema +è a corto di risorse. L'indicizzazione periodica +è +sufficente nella maggior parte dei casi.

+ + +
+ + +
+ + +
+
+

Capitolo +3. Ricerca

+ + +

Il programma recoll provvede l'interfaccia +paer la ricerca. Utilizza le librerie QT.

+ + +
+
+

3.1. Ricerca semplice

+ + +
+
    + + +
  1. + +

    Lancia il programma recoll.

    + + +
  2. + + +
  3. + +

    Scegli il modo di reicerca: Qualsiasi +o Tutti o Nome File.

    + + +
  4. + + +
  5. + +

    Entra la/e parola/e da cercare nel campo testo nella parte +superiore della finestra.

    + + +
  6. + + +
  7. + +

    Clicca sul bottone Cerca +o clicca il tasto Enter per +iniziare la ricerca.

    + + +
  8. + + +
+ + +
+ + +

Il modo di default iniziale di ricerca è Qualsiasi. +Questo cercherà quei documenti che contengano qualsiasi +delle +parole cercate (ill documento che ne contiene di più +avrà +maggiore rilevanza). Tutte +mostrerà solo quei documenti che contengono tutte le parole +cercate. Nome File cerca +solo tra i nomi dei files e permette l'uso dei Caratteri Jolly (*, ? +, []).

+ + +

Puoi anche cercare frasi (parole adiacenti in un dato ordine) +racchiudendo tra virgolette le parole di ricerca. Ad esempio: "realtà virtuale".

+ + +

Maiuscole e minuscole non hanno alcuna influenza sulla +ricerca, con +l'unica eccezione che puoi disabilitare lo stemming (ricerca delle +parole che contengono quella data) scrivendo il primo carattere +maiuscolo. Ad esempio: la ricerca di  casa +cercherà anche  caso, case, casi, casato, +casale, ecc., ma la ricerca di Casa cercherà solo casa, con +caratteri maiuscoli o minuscoli (lo stemming può essere +disbilitato globalmente nelle preferenze).

+ + +

Recoll si +ricorda gli ultimi termini di +ricerca. +Per richiamarli puoi usare il combobox della casella di +ricerca. +Tieni però a mente che vengono ricordate solo le parole, ma +non +il modo (Qualsiasi, Tutte, Nome file).

+ + +

I tasti Esc +Space +mentre si sta scrivendo una parola nella ricerca semplice aprono una +finestra con i possibili completamenti della parole. Questi ultimi sono +tratti dalle parole esistenti nel database.

+ + +

Un doppio clic su una parola della lista dei risultati o nella +finestra di visualizzazione inserisce la parola stessa nel campo di +ricerca semplice.

+ + +

Puoi usare la voce di menu Strumenti/Ricerca avanzata +per aprire la finestra di dialogo per ricerche più complesse.

+ + +
+ + +
+
+

3.2. La lista dei risultati

+ + +

Lanciata la ricerca verrà immediatamente mostrata +nella finestra principale la lista dei risultati.

+ + +

Per default, i documenti sono presentati in ordine di +rilevanza (nel +limite in cui il sistema riesce a stimare la rilevanza). Puoi ordinarli +in maniera diversa usando la voce di menu Strumenti / Ordina: scegli +parametri.

+ + +

Se clicchi sul link Preview +di uno dei +risultati si pare una finestra di Visualizzaxione interna col testo del +documento. Un ulteriore clic sul link Preview di un altro risultato, +aprirà una seconda linguetta. Puoi usare  Shift+Click +per forzare l'apertura di una seconda finestra di visualizzazione che +può essere utile per vedere ad esempio due pagine dello +stesso +documento.

+ + +

Cliccando sul link Edit +verrà +aperto un visualizzatore esterno (generalmente il programma che ha +creato il file). Il programma che deve essere aperto viene configurato +attraverso il dialogo di preferenze, oppure editando il file di +configurazione mimeview.

+ + +

I link Preview +e Edit possono non essere +presenti per tutti i risultati. Ciò significa che Recoll +non ha la configurazione necessaria per la visualizzazione di un +determinato tipo di file (che quindi sarà stato indicizzato +solo +per nome), o non sa con quale programma esterno aprirlo. Spesso +ciò può essere sistemato con apposite aggiunte ai +files +di configurazione mimemap e mimeview +(l'ultimo può essere modificato con la finestra di dialogo +delle preferenza).

+ + +

Cliccando sul link Dettagli ricerca nella parte superiore +della +finestra di ricerca verrò mostrata la stringa di ricerca +utilizzata, dopo l'eventuale applicazione dello stemming e/o di altri +processi.

+ + +

Un doppio clic su qualsiasi parola della finestra di +visualizzazione +inserice  tale parola nel campo di ricerca semplice. Un doppio +clic su qualsiasi parola della lista dei risultati avrà lo +stesso risultato.

+ + +

La lsista dei risultati è divisa in pagine (il +numero di +risultati per pagina può essere impostato nelle preferenze). +Passi da una pagina all'altra con i tasti frecce della tastiera oppure +col link a fondo pagina  della lista dei risultati.

+ + +
+
+

3.2.1. Il clic col tasto +destro del mouse sulla lista dei risultati

+ + +

Oltre ai links preview ed edit, puoi ottenere un +menu pop-up menu cliccando col tasto destro su di una linea +della +lista dei risultati. Il menu ha le seguenti voci:

+ + +
    + + +
  • + +

    Preview

    + + +
  • + + +
  • + +

    Edita

    + + +
  • + + +
  • + +

    Copia il nome del file

    + + +
  • + + +
  • + +

    Copia l'Url

    + + +
  • + + +
  • + +

    Trova documenti simili

    + + +
  • + + +
  • + +

    Apri cartella del +documento

    + + +
  • + + +
+ + +

Le voci Preview +e Edita hanno la +stessa funzione dei links corrispondenti. 

+ + +

Le due voci seguenti copiano rispettivamente l'indirizzo e il +nome + o l'url del file nella clipboard per poterli incollare in +un'altra applicazione.

+ + +

La voce Trova documenti simili seleziona +un certo numero di parole rilevanti del documento e le scrive nella +casella di ricerca semplice ed effettua la ricerca per trovare +documenti correlati con quello di partenza.

+ + +La voce Apri cartella del documento apre la cartella ove si trova il +documento (il programma per l'apertura della cartella si imposta nei +files di configurazione. Di default è Rox). +
+ + +
+ + +
+
+

3.3. La finestra di visualizzazione

+ + +

La finestra di visualizzazione si apre cliccando sul +link Preview nella +lista dei risultati.

+ + +

Una successiva richiesta di visualizzazione apre una nuova +linguetta nella finestra di visualizzazione stessa.

+ + +

Eseguendo una nuova ricerca e attivando la finestra di +visualizzazione, se ne aprirà una seconda mentre la prima +resta +aperta fintanto che non venga chiusa.

+ + +

Puoi chiudere una linguetta della finestra di visualizzazione +coi tasti ^W (Ctrl + W) +sulla finestra. Chiudendo l'ultima linguetta chiudi anche la finestra.

+ + +

Naturalmente puoi chiudere la linguetta (e la finestra) col +bottone Chiudi Tab nella parte superiore della finestra stessa.

+ + +

Puoi vedere documenti successivi o precedenti della lista dei +risultati nella finestra di visualizzazione con i tasti Shift+Down +or Shift+Up +(dove Down e Up sono i tasti freccia).

+ + +

La finestra di visualizzazione ha una ricerca interna. Puoi +iniziare +la ricerca scrivendo una slash (/) all'interno del testo o tramite la +casella per la ricerca , immettendo il testo da cercare e premendo il +tasto cerca. Puoi +usare i tasti Seguente +e Precedente per trovare ricorrenze successive o precedenti. Puoi anche +usare il tasto F3, all'interno dell'area di testo, per trovare la +prossima ricorrenza.

+ + +

Se hai immesso dei termini di ricerca e usi i +tasti ^Up/^Down +per passare da un documento all'altro, la ricerca inizia con ogni nuovo +documento. Se il termine di ricerca è trovato, il cursore si +posiziona sulla prima ricorrenza.

+ + +
+ + +
+
Nessuna parola +
    + + +
  • + +

    Tutte le parole.

    + + +
  • + + +
  • + +

    Qualsiasi parola.

    + + +
  • + + +
  • + +

    None of the terms.

    + + +
  • + + +
  • + +

    Questa frase (le parole esatte nell'ordine preciso in +campi numerata).

    + + +
  • + + +
  • + +

    Parole simili (parole in qualsiasi ordine in campi +numerati).condizione

    + + +
  • + + +
  • + +

    Nome del file con Caratteri Jolly.

    + + +
  • + + +
+ + +
+ + +
+ + +

Altri campi possono essere creati cliccando sul bottone +Aggiungi condizione.

+ + +

Tutti i campi saranno tra loro combinati con le clausole AND o +OR. +Tutti i tipi di condizioni, ad eccezione di "Questa frase" e "Parole +simili" accettano un insieme di parole singole e frasi (racchiuse tra +virgolette). L'espansione (Stemming) viene fatta per tutte le parole +che non iniziano con una maiuscola, ma non per le frasi.

+ + +

La ricerca avanzata permette di cercare tra documenti di un +tipo specifico (ad esmpio: solo testo semplice, o testo rtf, o testo/HTML o application/pdf +ecc...). La selzione del tipo di file (mime) può essere +salvata +come default. (il filtro non sarà attivato al lancio di +recoll, +ma la lista sarà presente come era stata salvata).

+ + +

Si può anche restringere la ricerca ad un sotto +insieme delle +cartelle indicizzate. Se questa è un'opzione che usi spesso, +puoi anche pensare a fare diversi indici così da migliorare +la +performance.

+ + +

Per iniziare la ricerca clicca sul bottone Cerca o premi Enter in qualsiasi +campo di ricerca. Il +bottone nella finestra principale esegue sempre e solo una ricerca +semplice.

+ + +

Clicca sul link 'mostra stringa' in alto nella finestra +principale per vedere la stringa di ricerca applicata.

+ + +
+ + +
+
+

3.5. Il terminale di +esplorazione

+ + +

Recoll utilizza +automaticamente +l'espansione dei termini di ricerca ai loro derivati (ad esempio: +plurali/singolare, coniugazioni dei verbi). Ma ci sono altri casi in +cui l'estto termine di ricerca non è conosciuto. Ad esempio +potresti ricordarti la pronincia ma non come il termine viene scritto, +oppure conoscere solamente l'inizio della parola da cercare.

+ + +

Il terminale di esplorazione (lanciato tramite la sua piccola +icona nella finestra principale o dal menu 'Strumenti') +può essere usato per le ricerche nell'indice del + database. Ha tre modi operativi:

+ + +
+
+ + +
Caratteri Jolly
+ + +
+ +

In questo modo operativo si possono usare stringhe con +caratteri jolly (*, +?). ad esempio: xapi* +.

+ + +
+ + +
Espressioni regolari
+ + +
+ +

In questa modalità sono accettate le +espressioni regolari. Esempio: word[0-9]+ +.

+ + +
+ + +
Espansione grammaticale
+ + +
+ +

Questa modalità esegue la normale espansione +(stemming). +In questo senso è utile per mostrare il suo funzionamento.

+ + +
+ + +
Ortografia/Fonetica
+ + +
+ +

In questa modalità si inserisce il termine come +si pensa sia scritto e Recoll +farà del suo meglio per trovare termini inseriti nel suo +indice che suonino simili. Questa modalità usa Aspell, +che quindi deve essere installata sul vostro sistema +affinchè le +cose funzionino per il verso giusto. La lingua usata nella costruzione +del dizionario (cosa che avviene alla fine dell'indicizzazione) +è quella di sistema. Cose strane possono accadere se +più +lingue sono mischiate.

+ + +
+ + +
+ + +
+ + +

Nota che nel caso Recoll +non conosca l'inizio della parola da cercare(ad esempio un carattere +jolly come *asa), +l'espansione può richiedere un certo tempo perchè +la +ricercaviene fatta sull'indice completo. L'espansione al momento +è limitata ai primi 200 risultati nel caso di caratteri +jolly o +espressioni regolari.

+ + +

Un doppio clic su di un termine nella lista dei risultati lo +inserisce nella casella della ricerca semplice nella finestra +principale. Si può naturalmente nche copiare e incollare tra +la +lista dei risultati e la casella di ricerca.

+ + +
+ + +
+
+

3.6. Database multipli

+ + +

Database e indici multipli di Recoll +dpossono essere creati usando differenti cartelle di configurazione che +conterranno di norma differenti indici per differenti aree del file +system. Un indice specifico può essere selezionato per +aggiornarlo o per effettuare una ricerca usando la variabile di +sistema RECOLL_CONFDIR +oppure lìopzione -c +di recoll e recollindex.

+ + +

Una istanza di recollindex +può aggiornare o indicizzare solo un indice specifico.

+ + +

Una istanza di recoll +è anche associata ad un indice specifico, che è +quello +che viene aggiornato, ma si possono usare più indici +di Recoll per la +ricerca. Gli indici esterni possono essere selezionati tramite la +linguetta Indici esterni nel dialogo delle preferenze.

+ + +

La selezione dell'indice viene fatta in due fasi Un set di +indici +utilizzabili deve essere prima definito, e dopo si può +indicare +un sotto insieme di indici da usare per la ricerca. Naturalmente questi +parametri sono conservati da una esecuzione del programma ad un'altra +(sono registrati separatamente per ogni configurazione di Recoll). Il set di tutti gli +indici è generalmente fisso, mentre l'indice attivo viene +probabilmente cambiato frequentemente.

+ + +

L'indice principale (definito da RECOLL_CONFDIR) +è sempre attivo. +Se ciò non è desiderabile, puoi far sì +che la tua +configurazione punti all'indicizzazione di una cartella vuota.

+ + +

Poichè costruire tutti gli indici può +essere noioso se +fatto dall'interfaccia grafica si può usare la variabile di +sistema RECOLL_EXTRA_DBS +per costruire il set +iniziale. Questo lo fa normalmente l'amministratore del sistema +così che non debba farlo ogni utente. La variabile dovrebbe +definire una lista separata da due punti delle cartelle da indicizzare. +Ad esempio:

+ + +
export RECOLL_EXTRA_DBS=/qualche/cartella/xapiandb:/qualche/altra/db
+ + +

Un tipico scenario d'uso per gli indici multipli per un +amministratore potrebbe essere la creazione di un indice di dati comuni +su cui tu potresti fare una ricerca e un indice per i tuoi dati +personali. Naturalmente ci sono altre possibilità. +Ci sono molti casi in cui conosci il sotto insieme di cartelle che devi +esaminare per trovare il risultato e quindi , restringendo il campo di +ricerca, è possibile aumentare l'efficenza e la precisione +della +ricerca stessa. Ciò può essere fatto anche con +l'opzione +che limita le cartelle su cui si effettua la ricerca nella finestra +della ricerca avanzata, ma l'indicizzazione multipla può +aumentare la performance e valere la pena di essere provata.

+ + +
+ + +
+
+

3.7. Storia dei documenti

+ + +

I documenti che hai visto col visualizzatore o con un +programma +esterno sono annotati nello storico dei documenti e quindi ricordati. +Puoi vedere la lista dello storico con la voce di menu Strumenti/Storia documenti.

+ + +
+ + +
+
+

3.8. Ordinare il risultato della +ricerca

+ + +

I documenti nella lista dei risultati sono normalmente +ordinati in +base della loro rilevanza. E' possibile specificare un diverso criterio +usano la finestra di dialogo Ordina risultati +(localizzata nel menu Strumenti).

+ + +

Lo strumento ordina un numero di documenti ordinati per +rilevanza in base a determinati criteri. I criteri attualmente sono la data e il tipo mime.

+ + +

La scelta per l'ordinamento resta invariata sino a quando non +viene +cambiata o il programma non viene chiuso. Il tipo di ordinamento +è indicato all'inizio della lista dei risultati.

+ + +
+ + +
+
+

3.9. Consigli per la ricerca, +scorciatoie

+ + +
+

Completamento della parola. I +tasti Esc Spaceifinchè +si sta scrivendo una parola nella casella di ricerca semplice +completano la stessa se essa è unica nel database, +altrimenti +aprono una finestra da cui si pppuò scegliere fra le parole +suggerite.

+ + +
+ + +
+

Prendere nuove parole dalla lista dei risultati o +dalla finestra di visualizzazione. +Un doppio clic su una parola nella lista dei risultati o nel testo +della finestra di visualizzazionie copia la stessa nella casella di +ricerca semplice.

+ + +
+ + +
+

Disabilitare l'espansione (stemming). +Scrivendo una parola nella casella di ricerca con la prima lettera +maiuscola disabilita l'espansione (nessuna ricerca per casino +se hai inserito Casa). +Questo è l'unico caso in cui le maiuscole o minuscole hanno +importanza nella ricerca. E' anche possibile eliminare l'espansione +(stemming) o cambiare la lingua nelle preferenze.

+ + +
+ + +
+

Frasi. Per cercare una frase basta +racchiuderla tra virgolette. Esempio: +"user manual" +cercherà per tutte le ricorrenze di 'user' seguito +immediatamente da 'manual'. Puoi anche usare il campo 'Questa frase' +nel dialogo avanzato di ricerca con lo stesso effetto. +Frasi possono essere immesse insieme a parole sia nella casella di +ricerca semplice che nelle caselle della ricerca avanzata, con +escluione della casell 'Questa frase'.

+ + +
+ + +
+

Scorrere la lista dei risultati nella finestra di +visualizzazione (1.5). I tasti  Shift-Down +o Shift-Up (Shift ++una freccia) nella finestra di visualizzazione mostra il documento +successivo o precedente della lista dei risultati. Ogni ricerca +secondaria attualmente attiva verrà eseguita nel nuovo +documento.

+ + +
+ + +
+

Forzare l'apertura di una nuova finestra di +visualizzazione (1.6). Con Shift+Click +sul link Preview +di un risultato della lista dei risultati si apre una nuova finestra di +visualizzazione invece di una nuova linguetta su quella già +visualizzata.

+ + +
+ + +
+

Aggiungi automaticamente frase (1.5). +Questa opzione +può essere impostata nella finestra di configurazione. +Quando +è settata sarà costruita automaticamente una +frase con le +parole della ricerca e aggiunta alla ricerca se è impostata +a +'Qualsiasi parola'I. Ciò non cambia radicalmente il +risultato +della ricerca, ma aumenta la rilevanza per quei documenti dove le +parole cercate costituiscono una frase. ad esempio: cercando le +parole virtual reality +saranno comunque +trovati tutti i documenti contenenti le parole 'virtual', 'reality' o +entrambe, ma in cima alla lista appariranno i documenti, se ci sono, +che contengono la frase 'virtual reality.

+ + +
+ + +
+

Trovare documenti simili. Se nel menu che +appare cliccando +col taso destro nella lista dei risultati si sceglie la voce 'Documenti +simili', un numero di parole 'interessanti' contenute nel documento +selezionato viene messo nella casella di ricerca semplice e viene +avviata una nuova ricerca. In questo modo, eventualmente editando +ulteriormente la casella di ricerca semplice, puoi trovare documenti in +qualche maniera simili o correlati al primo.

+ + +
+ + +
+

Nome file. Durante l'indicizzazione sono +aggiunti anche i nomi dei files. Puoi quindi inserirli come un normale +termine di ricerca (Recoll +indicizzava tutte le cartelle come termini. Questo però +è +stato abbandonato non sembrando molto utilel). In alternativa puoi +usare l'opzione 'Nome file' e la ricerca avverrà +esclusivamente +tra i nomi dei files (in tal caso è possibile usare i +caratteri jolly).

+ + +
+ + +
+

Stringa di ricerca. Puoi vedere la stringa +con cui è +stata effettuata la ricerca, incluse le espansioni e gli operatori +Booleani, cliccando sul link 'mostra stringa' all'inizio della lista +dei risultati.

+ + +
+ + +
+

Chiudere la finestra di visualizzazione. Il +tasto ^W in una linguetta, la +chiude +(e, se questa è l'ultima linguetta, chiude anche la +finestra). Il tasto Esc +chiude tutte le linguette e la finestra di visualizzazione.

+ + +
+ + +
+

Chiudere il programma. Il tast ^Q quasi dappertutto chiude il +programma.

+ + +
+ + +
+ + +
+
+

3.10. Personalizzare l'interfaccia +di ricerca

+ + +

E' possibile personalizzare alcuni aspetti dell'interfaccia di +ricerca usando la voce 'configurazione ricerca' del menu 'Preferenze'.

+ + +

Ci sono due linguette nella finestra di dialogo che riguardano +l'interfaccia stessa e i criteri adottati per la ricerca e la +presentazione dei risultati.

+ + +
+

Interfaccia utente:

+ + +
    + + +
  • + +

    Numero di risultati +per pagina

    + + +
  • + + +
  • + +

    Fonts per la lista dei +risultati: +Ci sono molte informazioni visualizzate nella lista dei risultati e +potresti voler personalizzare i caratteri e la loro dimensioneT. I +caratteri usati da Recoll +sono quelli della tua configurazione di  QT(prova il +comando qtconfig).

    + + +
  • + + +
  • + +

    Stringa di +formattazione dei risultati: +ti permette di cambiare la presentazione di ciascun risultato nella +lista. Usa string del tipo qt-html dove le seguenti sostituzioni, in +modo simile al comando +printf %, vengono fatte:

    + + + +
      + + +
    • + +
      + +

      %A. Riassunto

      + + +
      + + +
    • + + +
    • + +
      + +

      %D. Data

      + + +
      + + +
    • + + +
    • + +
      + +

      %K. Parole chiave (se ci sono)

      + + +
      + + +
    • + + +
    • + +
      + +

      %L. links Preview e Edit

      + + +
      + + +
    • + + +
    • + +
      + +

      %M. Tipo Mime

      + + +
      + + +
    • + + +
    • + +
      + +

      %N. Numero del risultato

      + + +
      + + +
    • + + +
    • + +
      + +

      %R. Rilevanza in %

      + + +
      + + +
    • + + +
    • + +
      + +

      %S. Grandezza

      + + +
      + + +
    • + + +
    • + +
      + +

      %T. Titolo

      + + +
      + + +
    • + + +
    • + +
      + +

      %U. Url

      + + +
      + + +
    • + + + +
    + + +I valori di default value per la stringa sono: + +
    %R %S %L &nbsp;&nbsp;<b>%T</b><br>
    %M&nbsp;%D&nbsp;&nbsp;&nbsp;<i>%U</i><br>
    %A %K

    + + +Puoi provare, ad esempio, la seguente stringa per una lista +più simile all'esperienza del Web: + +
    <u><b><a href="P%N">%T</a></b></u>&nbsp;%R&nbsp;%D<br>
    %A<font color=#B22C1D>%U - %M - %S</font> - %L

    + + +Il formato dei links Preview e Edit è <a +href="Pdocnum"> +and <a href="Edocnum"> +where docnum +è quello che %N dovrebbe stampare. Questo rende il titolo +nel +formato dell'esempio un link per la finestra di visualizzazione.
    + + +
    + + +
  • + + +
  • + +

    Browser HTML: +qui puoi scegliere il browser preferito, che verrà avviato +col menu 'Aiuto' per leggere il manuale utente. Puoi inserire +semplicemente il nome, se il browser è nel tuo path, oppure +l'indirizzo completo.

    + + +
  • + + +
  • + +

    Mostra le icone nella +lista dei risultati: +le icone nella lista dei risultati possono essere disabilitate. Portano +via molta memoria e tutto sommato non contengono informazioni +essenziali.

    + + +
  • + + +
  • + +

    Inizia la ricerca +quando digiti uno spazio: +se lo contrassegni, la ricerca inizia non appena digiti uno spazio +nella casella di ricerca. Questo ti permette di vedere i risultati +prima di immettere una seconda parola. E' disabilitato per default, che +ti piaccia o no...

    + + +
  • + + +
+ + +
+ + +
+ + +
+ + +
+

Parametri di ricerca:

+ + +
    + + +
  • + +

    Lingua +per l'espansione +grammaticale: l'espansione (stemming) dipende evidentemente dalla +lingua. Qui puoi scegliere tra le lingue con cui sono stati costruiti i +database di espansione durante l'indicizzazione (questo viene stabilito +nel  file +principale di configurazione), o pià tardi +aggiunto col comando recollindex +-s +(Vedi il manuale per recollindex). Le lingue di espansione aggiunte +dinamicamente saranno cancellate alla successiva indicizzazione, a meno +che non siano aggiunte al file di configurazione principale.

    + + +
  • + + +
  • + +

    Costruisci +dinamicamente il riassunto: questo decide se Recoll +cerca di costruire un riassunto del documento quando lo mostra nella +lista dei risultati. I riassunti vengono costruiti prendendo +informazioni dal contesto del documento attorno alle parole trovate. +Questo può rallentare la visualizzazione della lista dei +risultati per grossi documenti e, se vuoi, puoi disabilitarlo.

    + + +
  • + + +
  • + +

    Rimpiazza i riassunti +esistenti nel documento: questo decide se costruire un +riassunto al posto un riassunto già esistente nel documento.

    + + +
  • + + +
  • + +

    Numero caratteri per +il riassunto: scegli quello che preferisci...

    + + +
  • + + +
  • + +

    numero di parole +del riassunto per +ogni termine nel documento: quante parole devono essere mostrate +intorno ad ogni ricorrenza trovata nel documento.

    + + +
  • + + +
+ + +
+ + +
+ + +
+ + +
+

Indici +esterni: +Questa linguetta ti permette di navigare eventuali altri indici su cui +vorresti effettuare la ricerca. Gli indici esterni sono assegnati dalla +cartella del loro database (ad esempio: /home/someothergui/.recoll/xapiandb, +/usr/local/recollglobal/xapiandb).

+ + +
+ + +

Una volta scelto, l'indice apparirà nella lista +'Tutti gli +indici', e puoi scegliere quale usare spstandolo alla/dalla lista +'Indici attivi'.

+ + +

Il tuo database (quello della configueazione attuale) +è +sempre implicitamente attivo. Se ciò non è +desiderabile, +puoi sempre fare una configurazione che indicizzi, ad esempio, una +cartella vuota.

+ + +
+ + +
+ + +
+
+

Capitolo +4. Installazione

+ + +
+

4.1. Installare un pacchetto +pre-compilato

+ + +

L'installazione binaria di Recoll è sempre lincata +staticamente alla libreria di xapian , e non ha altre +dipendenze. Devi solo eventualmente installare i  pacchetti esterni per +i tipi di files che vuoi indicizzare diversi da testo, HTML ed e-mail.

+ + +
+
+

4.1.1. Installazione con +un programma di installazione

+ + +

Se usi un sistem del tipo BSD o sistemi che usano pacchetti +pre-compilati (RPM o altri), segui semplicemente le procedure usuali, e +magari dai un'occhiata alla  sezione +di configurazione (anche se non è necessario per +provare il programma con i parametri di default).

+ + +
+ + +
+
+

4.1.2. Installare Recoll +pre-compilato

+ + +

I pacchetti binari sono semplicemente un insieme di cartelle +compresse dove solo le parti utili sono conservate (gli esguibili e la +configurazione di esempio).

+ + +

I binari eseguibili sono compilati con un link statico alla +libreria libxapian e libiconv, tper rendere l'installazione +più semplice(nessuna dipendenza). Questo comunque significa +che +non potete cambiare le versioni che sono state usate.

+ + +

Dopo l'estrazione del file tar, procedi con l'installazione +come se avessi compilato il tutto da sorgente (ciò significa +dare il comando make install). L'albero delle +cartelle va in /usr/local.

+ + +

Puoi inoltre desiderare di installare le applicazioni esterne +necessarie per processare determinati tipi di files (ad esempio: +acrobat, postscript ...). Vedi la prossima sessione.

+ + +

Alla fine, se vuoi, dòà un'occhiata +alla  sezione di +configurazione.

+ + +
+ + +
+ + +
+
+

4.2. Pacchetti esterni +utilizzabili

+ + +

Recollusa +applicazioni esterne per +indicizzare alcuni tipi di files. +Devi quindi installare quelle necessarie ai tipi di files che vuoi +indicizzare (queste sono dipendenze di run-time. Nessuna di queste +applicazioni è necessaria per compilare Recoll):

+ + +
    + + +
  • + +

    Openoffice: è supportato nativamente, ma +necessita del programma unzip, +che quindi deve essere installato.

    + + +
  • + + +
  • + +

    PDF: pdftotext è parte del pacchetto Xpdf.

    + + +
  • + + +
  • + +

    Postscript: pstotext.

    + + +
  • + + +
  • + +

    MS Word: antiword.

    + + +
  • + + +
  • + +

    MS Excel and PowerPoint: catdoc.

    + + +
  • + + +
  • + +

    RTF: unrtf

    + + +
  • + + +
  • + +

    dvi: dvips

    + + +
  • + + +
  • + +

    djvu: DjVuLibre

    + + +
  • + + +
  • + +

    MP3: Recoll +usa il comado id3info del +pacchetto id3lib per estrarre i tag. Senza +questo pacchetto, solo i nomi saranno indicizzati.

    + + +
  • + + +
+ + +

Text, HTML, cartelle e-mail e files Openoffice sono processati +internamente.

+ + +
+ + +
+
+

4.3. Compilare da sorgente

+ + +
+

4.3.1. Prerequisiti

+ + +

Come minimo è necessario scaricare e installare il +pacchetto xapian core (Recoll attualmente usa la +versione 0.attualmente usa le versionidevelopment currently +uses +version 3.3.5, ma qualsiasi versione 3.3 probabilmente è OK).

+ + +

Quasi certamente sarete in grado di trovare un pacchetto +binario per qt +per il vostro sistema, ma probabilmente dovrete compilare Xapian, ma questo non +è difficile (se stai usando FreeBSD, c'è un +port).

+ + +

Ti serve anche libiconv. +Recoll attualmente usa la +versione 1.9 +(questo non dovrebbe essere critico). Sui sistemi Linux, l'interfaccia iconv fa +parte di libc e quindi non dovrebbe essere necessario fare niente di +speciale.

+ + +
+ + +
+
+

4.3.2. Compilazione

+ + +

Recoll +è stato compilato su Linux (redhat7.3, mandriva 2005/6, +Fedora Core 3/4/5, Ubuntu Edgy 64bit), FreeBSD e Solaris 8. Se lo +compili su un altro sistema, Idesidererei +vivamente ricevere eventuali patches.

+ + +

A seconad della configurazione di qt +nel vostro sistema, potreste dover settare le variabili di +sistema QTDIR e QMAKESPECS:

+ + +
    + + +
  • + +

    QTDIR dovrebbe +puntare alla cartell superiore a quella che contiene i files 'include' +di qt (ad esempio: se qt.h +è in /usr/local/qt/include/qt.h, +QTDIR dovrebbe essere /usr/local/qt).

    + + +
  • + + +
  • + +

    QMAKESPECS +dovrebbe puntare ad una delle sotto-cartelle mkspecs di qt (ad esempio: linux-g++).

    + + +
  • + + +
+ + +

Su molti sistemi Linux, QTDIR +è settata dallo script di login, e +QMAKESPECS inon +è becessaria perchè c'è un link +simbolico in mkspecs/.

+ + +
+

Opzioni per configure: --without-aspell +disabilita il codice per la ricerca fonetica. --with-fam +o --with-inotify +abilita il codice per l'indicizzazione in tempo reale real time +indexing. Il supporto inotify è abilitato di default nei +sistemi +Linux recenti.

+ + +
+ + +

Procedura normale:

+ + +
 cd recoll-xxx
configure
make +
+ + +

Piccola auto-configurazione. Lo script di configurazione +essenzialmente linca uno dei files specifici del sistema nella cartella +mk alla cartella mk/sysconf. Se il vostro sistema non è +attualmente conosciuto ve lo dirà e, se volete, potete +copiare e +modificare manualmente uno dei files esistenti (il nome del file +dovrebbe essere il risultato del comando uname -s).

+ + +
+ + +
+
+

4.3.3. Installazione

+ + +

Dai il comado make +install oppure esegui recollinstall +prefix, +nella cartella root. Questo copierà gli eseguibili nella +cartella prefix/bin +e gli esempi di configurazione, +scripts e altri dati nella cartella prefix/share/recoll.

+ + +

Se il prefisso di installazione dato al comando recollinstall +è differente da quello usato eseguendo il comando configure, +dovete settare la variabile di sistema RECOLL_DATADIR +per indicare dove sono i dati comuni.

+ + +

Potete poi procedere alla  configurazione.

+ + +
+ + +
+ + +
+
+

4.4. Panoramica della +configurazione

+ + +

La maggior +parte dei parametri specifici della GUI di Recoll sono +determinati attraverso il menu 'Preferenze'e salvate nlla cartella +standard delle applicazion QT ($HOME/.qt/recollrc). +probabilmnete non hai alcuna necessità di editare tale file.

+ + +

Per altre opzioni, Recoll +usa files di +configurazione testuali. Al momento devi editarli a mano +(c'è +ancora qualche speranza per uno strimento di configurazione grafico in +futuro). La più accurata documentazione per i parametri di +configurazione si trova nei commenti negli stessi files di default e +qui quindi troverai una semplice panoramica.

+ + +

Ci sono due insiemi di files di configurazione. Quelli per la +configurazione generale del sistema si trovano nella cartella /usr/[local/]share/recoll/examples, +e definiscono i valori di default per tutto il sistema. Un insieme +parallelo di files di configurazione esiste nella cartella +.recoll nella tua cartella +home. Questa cartella può essere cambiata con la variabile +di sistema RECOLL_CONFDIR +o con l'opzione -c per recoll +e recollindex.

+ + +

Se la cartella .recoll +non esiste, essa viene creata lanciando la prima volta recoll o recollindex, +e viene riempita con un insieme vuoto di files di configurazione. recoll vi dà la scelta +se editare i files di configurazione prima di iniziare la creazione +dell'indice, recollindex +invece procederà immediatamente.

+ + +

Tutti ifiles di configurazione hanno lo stesso formato. Ad +esempio, +un piccolo estratto del file di configurazione principale +può +essere simile al seguente::

+ + +
 # Space-separated list of directories to index.
topdirs = ~/docs /usr/share/doc

[~/somedirectory-with-utf8-txt-files]
defaultcharset = utf-8

+ + +

Ci sono tre specie di linne:

+ + +
    + + +
  • + +

    Commenti (iniziano con #) o sono vuoti.

    + + +
  • + + +
  • + +

    Settaggio dei parametri (nome = +valore).

    + + +
  • + + +
  • + +

    Definizione delle sezioni ([nome di qualche cartella]).

    + + +
  • + + +
+ + +

La definizione delle sezioni permette di ridefinire alcuni +parametri  per le sotto-cartelle. Restano effettivi +sinchè +viene trovata un'altra definizione di sezione, o si arriva alla fine +del file. Alcuni dei parametri usati per l'indicizzazione sono +considerati partendo dalla cartella attuale e salendo. Non tutti i +parametri possono essere ridefiniti in maniera comprensibile, ma questo +sarà spiegato di seguito nella prossima sezione.

+ + +

La tilde (~) indica l'indirizzo completo della +cartella dell'utente.

+ + +

Spazi vuoti sono usati come separatori nelle liste. Elementi +che +contengono spazi devono pertanto essere racchiusi tra virgolette.

+ + +
+
+

4.4.1. File di +configurazione principale

+ + +

recoll.conf +è il file di configurazione principale Definisce cosa +indicizzareIt  (cartella radice e cose da ignorare), e il set +di caratteri di default da usare per i documenti che non lo definiscono +specificamente al loro interno.

+ + +

La configurazione di default indicizzerò la vostra +cartella home intera. Se questo non va bene lanciate  recoll +per creare un set di configurazione vuoto, cliccate su Cancel, ed editate i files di +configurazione prima di lanciare nuovamente recoll (o recollindex). +Verrà così iniziata l'indicizzazione, cosa che +può richiedere un certo tempo.

+ + +

Parametri:

+ + +
+
+ + +
topdirs
+ + +
+ +

Specifica la lista di cartelle e/o files da indicizzare +(recursivamente per le cartelle). L0indicizzazione non segue eventuali +liks simbolici all'interno dell'albero delle cartelle. Se la cartella +radice è un link simbolico, l'indicizzazione non inizia e +viene mostrato un avviso di errore.

+ + +
+ + +
dbdir
+ + +
+ +

E' il nome della cartella Xapian dei dati. La +cartella, se necessario, verrà creata all'inizio +dell'indicizzazione. Se non è un indirizzo assoluto, +verrà interpretato come relativo alla cartella di +configurazioneI.

+ + +
+ + +
skippedNames
+ + +
+ +

Una lista di cartelle e nomi di files, separati da uno +spazio vuoto, di ciò che deve essere completamente ignorato +dal processo di indicizzazione. The list defined in La lista di default +è:e default file is:

+ + + +
*~ #* bin CVS Cache caughtspam tmp
+ + + +

Alla lista possono essere aggiunte sotto-cartelle, che +però devono essere nell'albero delle cartelle definite in topdirs.

+ + + +

Le cartelle presenti in topdirs +non risentono di eventuali omonimi in skippedNames +(vale a dire che una cartella scritta in topdirs +viene indicizzata comunque, anche se il suo nome compare nella lista di + skippedNames).

+ + + +

La lista della configurazione di default non esclude le +cartelle nascoste (nomi preceduti da un punto), il che significa che +verranno indicizzte anche alcune cose che non vorreste. D'altra parte i +programmi di posta, come thunderbird, +normalmente salvano i messaggi in cartelle nascoste e probabilmente +volete indicizzarli. Una possibile soluzione è avere .* in skippedNames, +e aggiungere qualcosa come  ~/.thunderbird +o ~/.evolution in topdirs.

+ + +
+ + +
loglevel,daemloglevel
+ + +
+ +

Livello di verbosità per recoll e recollindex. +Un valore di 4 produce molti messaggi di +debug/informationi. 2 solo una lista di errori. Daemversion +è specifico al demone che monitorizza l'indicizzazione.

+ + +
+ + +
logfilename, +daemlogfilename
+ + +
+ +

Dove vanno i messaggi. 'stderr' può essere +usato come valore speciale, ed è quello di default.

+ + +
+ + +
filtersdir
+ + +
+ +

La cartella ove cercare gli sripts esterni necessari ad +indicizzare alcuni tipi di files. Non dovrebbe esserci motivo per +cambiarlo, a meno che non vogliate modificare gli script originali +mettendoli altrove. Il valore può essere ridefinito per ogni +sott-cartella.

+ + +
+ + +
indexstemminglanguages
+ + +
+ +

Una lista di lingue per le quali verrà +costruito il database per l'espansione grammaticale. Guardate +recollindex(1) per possibili valori (man recollindex). Puoi aggiungere +un database per qualsiasi lingua usando il comando recollindex +-s, ma tale database verrà cancellato alla +successiva re-indicizzazione Soltanto i database delle ingue listate +nella configurazione sono permanenti.

+ + +
+ + +
defaultcharset
+ + +
+ +

Nome del set di caratteri usati per files che non hanno +una definizione dei caratteri (ad esempio: files plain text). +Può essere definito per ogni sub-cartella, se non +è dato alcun set di caratteriviene utilizzato quello di +sistema (LC_ALL, +LC_CTYPE, LANG), or iso8859-1.

+ + +
+ + +
guesscharset
+ + +
+ +

Decide se cercare di indovinare il set di caratteri del +documanto qualora questo non sia specificato nel documento stesso +(ad esempio: files plain text). Ciò non funziona bene in +molti casi, e probabilmente non dovrebbe essere usato.

+ + +
+ + +
usesystemfilecommand
+ + +
+ +

Decide se usare il comando di sistema file -i per determinare il tipo +mime del file (la procedura normale usa l'associazione dei suffissi +come definiti nel file  mimemap). +Ciò può essere utile per files senza suffisso, ma +causa anche l'indicizzazione di molti strani files di "testo".

+ + +
+ + +
indexallfilenames
+ + +
+ +

Recoll +indicizza i nomi dei files in una speciale sezione del database per +permettere le ricerche dei nomi dei files anche con i caratteri jolly +Questo parametro decide se indicizzare solo i nomi di files che hanno +un suffisso che ne permette l'indicizzazione completa, o se +indicizzarli tutti indipendentemente dal suffisso.

+ + +
+ + +
idxabsmlen
+ + +
+ +

Recoll salva +un riassunto per ogni file indicizzato nel database. Questo +è quello che viene mostrato nella lista dei risultati senza +dover leggere il file originale. Questo parametro definisce la +dimensione del riassunto salvato (che può provenire +dall'attuale sezione o dall'inizio del testo). Il valore di default +è +250 caratteri.

+ + +
+ + +
iconsdir
+ + +
+ +

Il nome della cartella dove si trovano le icone che +vengono mostrate nella lista dei risultati. La puoi cambiare se vuoi +immagini differenti.

+ + +
+ + +
+ + +
+ + +
+ + +
+
+

4.4.2. Il file mimemap

+ + +

mimemap specifica +l'estensione mime del file per la sua mappatura nei tipi mime.

+ + +

Per i files senza un'estensione o con un'estensione non +riconosciuta viene eseguito il comando di sistema file +-i per determinarne  il tipo mime (ciò +può essere disbilitato nel file di configurazione).

+ + +

La mappatura può essere specificata su una base di +sotto-cartelle, cosa che può essere utile in certe +occasioni. Esempio: i logs di gaim hanno un'estensione .txt ma dovrebbero essere +trattai diversamente, cosa che è possibile perchè +essi generalmente sono posti in ina specifica cartella.

+ + +

mimemap ha anche +una variabile recoll_noindex +che è una lista di suffissi. I files con tali suffissi +vengono ignorati (il che evita decompressioni o esecuzioni non +necessarie ). Questo è una duplicazione parziale +della variabile skippedNames +inel file di configurazione principale, però con due +differenza: non riguarda le cartelle, e non può dipendere +dalla locazione nel file system (è un parametro di +configurazione generale). Potete quindi fare con skippedNames tutto quello che fa recoll_noindex. L'ultimo +parametro è usato normalmente per cose che si sa non sono +indicizzabili con una determinata versione di Recoll. Mettendole in questo +file si evita di toccare la variabile skippedNames +più orientata all'utente e alla localizzazione.

+ + +
+ + +
+
+

4.4.3. Il file mimeconf

+ + +

mimeconf +specifica come vengono trattati i vari tipi mime per l'indicizzazione, +e quali icone devono essere mostrate nella lista dei risultati di recoll.

+ + +

Cambiare i parametri nella sezione [index] non +è probabilmente una buona idea a meno che non siate +sviluppatori di Recoll.

+ + +

La sezione [icons] permette di cambiare le icone che +vengono mostrate nella lista dei risultati (i nomi sono quelli +delle immagini png, senza suffisso, che si trovano nella cartella iconsdir (specificata in recoll.conf).

+ + +
+ + +
+
+

4.4.4. Il file mimeview

+ + +

mimeview +specifica il programma che deve essere lanciato quando clicchi su Edit +nella lista dei risultati. ad esempio: HTML viene normalmente aperto +con firefox, ma potresti +preferire Konqueror, il +programma openoffice.org +potrebbe essere chiamato oofice +invece di openoffice etc.

+ + +

Cambiamenti a questo file possono essere fatti direttamente o +attraverso il dialogo 'Preferenze' del programma recoll.

+ + +

Come tutti gli altri files di configurazione, l'uso normale +è avere un mimeview +nella vostra cartella personale, con solo le voci non di default, che +si sovrapporrà a quello centrale per tutto il sistema.

+ + +

Per favore prendi nota che queste 'entrate' devono essere +fatte in una sezione nominata [view] +section.

+ + +
+ + +
+
+

4.4.5. Esempio

+ + +

Esempio:

+ + +

pensiamo di aggiungere la possibilità di +indicizzare i files +con estensione .lyx (file fatti col programma Lyx) in modo da poter +avere una visualizzazione corretta degli stessi e di poterli aprire con +il programma Lyx quando clicchiamo sul link edit. Dovremo, so +già non l'abbiamo, procurarci dal sito di recoll lo script +rcllyx necessario per l'indicizzazione dei files .lyx.
+ + +Tale script è un file di testo e va messo nella cartella +/usr/share/recoll/filters e reso eseguibile.

+ + +

Vogliamo inoltre poter aprire i file con estensione .kwd e +.kwt +(flies fatti con Kword) con il polor programma: Kword. (Questi files +non potranno essere indicizzate, se non con il loro nome (quindi niente +visualizzazione, ma possibilità di apertura degli stessi).

+ + +Per prima cosa dobbiamo trovare il tipo mime dato dal sistema +ai  +files di Lyx e di Kword. Troveremo che il tipo per ifiles di Lyx +è application/x-lyx +mentre per i files di Kword application/x-kword
+ + +(La procedura è molto semplice. Ad esempi con KDE si +apre konqueror, il menu impostazioni/associazione caratteri, +si +mette l'estensione del file nell'apposita casella e si prende nota +dell'associazione corrispondente.)
+ + +
+ + +A questo punto possiamo procedere. Di seguito i tre files modificati, +dove le linee in neretto + si riferiscono ai files Lyx, mentre quello rosse +ai files di Kword.
+ + +
+ + +MIMEMAP
+ + +# @(#$Id: usermanual-italian.html,v 1.1 2007-02-02 10:05:22 dockes Exp $  (C) +2004 J.F.Dockes
+ + +# Recoll: associations of file name extensions to mime types
+ + +
+ + +.txt = text/plain
+ + +.text = text/plain
+ + +.d    = text/plain
+ + +.lyx = application/x-lyx
+ + +.kwt += application/x-kword
+ + +.kwd += application/x-kword
+ + +
+ + +# Source files. Defining them as text/x-c will enable ext viewer. If
+ + +# text/plain they will be somewhat indexed
+ + +.cpp = text/x-c
+ + +.h   = text/x-c
+ + +.c   = text/x-c
+ + +.cc  = text/x-c
+ + +
+ + +.rtf  = text/rtf
+ + +
+ + +.html = text/html
+ + +.htm = text/html
+ + +.shtml = text/html
+ + +.php = text/html
+ + +
+ + +.pdf = application/pdf
+ + +
+ + +.ps = application/postscript
+ + +.eps = application/postscript
+ + +.ai = application/postscript
+ + +
+ + +.dvi = application/x-dvi
+ + +
+ + +.djvu = image/vnd.djvu
+ + +
+ + +.gz = application/x-gzip
+ + +.Z = application/x-gzip
+ + +.bz2 = application/x-bzip2
+ + +#.Z  = application/x-compress
+ + +
+ + +.doc = application/msword
+ + +.ppt = application/vnd.ms-powerpoint
+ + +.xls = application/vnd.ms-excel
+ + +
+ + +# OpenOffice / opendocument. We handle opendocument as old openoffice +files
+ + +# for now
+ + +.sxc = application/vnd.sun.xml.calc
+ + +.ods = application/vnd.sun.xml.calc
+ + +.stc = application/vnd.sun.xml.calc.template
+ + +.sxd = application/vnd.sun.xml.draw
+ + +.std = application/vnd.sun.xml.draw.template
+ + +.sxi = application/vnd.sun.xml.impress
+ + +.odp = application/vnd.sun.xml.impress
+ + +.sti = application/vnd.sun.xml.impress.template
+ + +.sxm = application/vnd.sun.xml.math
+ + +.sxw = application/vnd.sun.xml.writer
+ + +.odt = application/vnd.sun.xml.writer
+ + +.sxg = application/vnd.sun.xml.writer.global
+ + +.stw = application/vnd.sun.xml.writer.template
+ + +
+ + +
+ + +.wpd = application/vnd.wordperfect
+ + +.rtf = text/rtf
+ + +
+ + +.mp3 = audio/mpeg
+ + +.png = image/png
+ + +.jpg = image/jpeg
+ + +
+ + +# A list of stuff that we don't want to touch at all (for now). Having +the
+ + +# suffixes listed in there speeds up things quite a lot by avoiding
+ + +# unneeded decompression or 'file' calls. File names still get indexed +if
+ + +# indexallfilenames is set
+ + +recoll_noindex = .tar.gz .tgz .tar.bz2 .tbz .log.gz .md5 .map \
+ + +       .m4 .tcl +.js .sh .pl .awk \
+ + +       .o .lib +.dll .a \
+ + +       .dat .bak +.rdf .log .db .ini .msf .pid \
+ + +       .gnm +.gnumeric .tex \
+ + +       .gif .bmp +.xpm \
+ + +       ,v ~ #
+ + +
+ + +# Special handling of .txt files inside ~/.gaim directory
+ + +[~/.gaim]
+ + +.txt = text/x-gaim-log
+ + +
+ + +MIMECONF
+ + +# @(#$Id: usermanual-italian.html,v 1.1 2007-02-02 10:05:22 dockes Exp $  +(C) 2004 J.F.Dockes
+ + +
+ + +# Recoll : associations of mime types to processing filters.
+ + +# There are different sections for decompression, 'interning' for +indexing
+ + +# and preview, and external viewers
+ + +
+ + +## #######################################
+ + +# Decompression: these types need a first pass to create a temp file to
+ + +# work with. We use a script because uncompress utilities usually work +in
+ + +# place, which is not suitable.
+ + +#
+ + +# The %t parameter will be substituted to the name of a temporary +directory
+ + +# by recoll. This directory is guaranteed empty when calling the filter
+ + +#
+ + +# The %f parameter will be substituted with the input file.
+ + +#
+ + +# The script (ie: rcluncomp) must output the uncompressed file name on
+ + +# stdout.
+ + +application/x-gzip  =  uncompress rcluncomp gunzip %f +%t
+ + +application/x-compress = uncompress rcluncomp gunzip %f %t
+ + +application/x-bzip2 =  uncompress rcluncomp bunzip2 %f %t
+ + +
+ + +## ###################################
+ + +# Filters for indexing and internal preview.
+ + +# The external (exec) filters  output the document in simple +html format,
+ + +# have a look at the scripts.
+ + +[index]
+ + +application/msword = exec rcldoc
+ + +application/pdf = exec rclpdf
+ + +application/postscript = exec rclps
+ + +application/vnd.ms-powerpoint = exec rclppt
+ + +application/vnd.ms-excel = exec rclxls
+ + +application/vnd.sun.xml.calc = exec rclsoff
+ + +application/vnd.sun.xml.calc.template = exec rclsoff
+ + +application/vnd.sun.xml.draw = exec rclsoff
+ + +application/vnd.sun.xml.draw.template = exec rclsoff
+ + +application/vnd.sun.xml.impress = exec rclsoff
+ + +application/vnd.sun.xml.impress.template = exec rclsoff
+ + +application/vnd.sun.xml.math = exec rclsoff
+ + +application/vnd.sun.xml.writer = exec rclsoff
+ + +application/vnd.sun.xml.writer.global = exec rclsoff
+ + +application/vnd.sun.xml.writer.template = exec rclsoff
+ + +application/x-dvi = exec rcldvi
+ + +audio/mpeg = exec rclmedia
+ + +image/vnd.djvu = exec rcldjvu
+ + +message/rfc822 = internal
+ + +text/html  = internal
+ + +text/plain = internal
+ + +text/rtf = exec rclrtf
+ + +text/x-gaim-log = exec rclgaim
+ + +text/x-mail = internal
+ + +application/x-lyx = +exec rcllyx
+ + +
+ + +## #############################################
+ + +# Icons to be used in the result list if required by gui config
+ + +[icons]
+ + +application/msword = wordprocessing
+ + +application/pdf = pdf
+ + +application/postscript = postscript
+ + +application/vnd.ms-excel = spreadsheet
+ + +application/vnd.ms-powerpoint = presentation
+ + +application/vnd.sun.xml.calc = spreadsheet
+ + +application/vnd.sun.xml.calc.template = spreadsheet
+ + +application/vnd.sun.xml.draw = drawing
+ + +application/vnd.sun.xml.draw.template = drawing
+ + +application/vnd.sun.xml.impress = presentation
+ + +application/vnd.sun.xml.impress.template = presentation
+ + +application/vnd.sun.xml.writer = wordprocessing
+ + +application/vnd.sun.xml.writer.global = wordprocessing
+ + +application/vnd.sun.xml.writer.template = wordprocessing
+ + +application/x-fsdirectory = folder
+ + +application/x-dvi = document
+ + +audio/mpeg = sownd
+ + +image/jpeg = image
+ + +image/png = image
+ + +image/vnd.djvu = document
+ + +message/rfc822 = message
+ + +text/html = html
+ + +text/plain = txt
+ + +text/x-mail = message
+ + +text/x-c = source
+ + +application/x-lyx = +wordprocessing
+ + +application/x-kword = +wordprocessing
+ + +

+ + +[categories]
+ + +
+ + +texts = application/msword \
+ + +      application/pdf \
+ + +      +application/postscript \
+ + +      +application/vnd.sun.xml.writer \
+ + +      +application/vnd.sun.xml.writer.global \
+ + +      +application/vnd.sun.xml.writer.template \
+ + +      application/x-dvi \
+ + +      image/vnd.djvu \
+ + +      text/html \
+ + +      text/plain \
+ + +      application/x-lyx +\
+ + +     application/x-kword +\
+ + +
      text/rtf
+ + +
+ + +spreadsheets = application/vnd.ms-excel \
+ + +         +application/vnd.sun.xml.calc \
+ + +         +application/vnd.sun.xml.calc.template
+ + +
+ + +presentations = application/vnd.ms-powerpoint \
+ + +    +      +application/vnd.sun.xml.impress \
+ + +    +      +application/vnd.sun.xml.impress.template
+ + +
+ + +media = audio/mpeg \
+ + +      image/jpeg \
+ + +      image/png \
+ + +
+ + +messages = message/rfc822 \
+ + +     text/x-gaim-log \
+ + +     text/x-mail \
+ + +
+ + +other = application/vnd.sun.xml.draw \
+ + +      +application/vnd.sun.xml.draw.template \
+ + +      +application/vnd.sun.xml.math \
+ + +      +application/x-fsdirectory
+ + +
+ + +MIMEVIEW
+ + +
+ + +# @(#$Id: mimeview,v +1.2 2006/12/19 08:40:50 dockes Exp $  (C) 2004 J.F.Dockes
+ + +
+ + +## +##########################################
+ + +# External viewers, +launched by the recoll GUI when you click on a result
+ + +# 'edit' link
+ + +
+ + +[view]
+ + +application/msword = +openoffice %f
+ + +application/pdf  += kpdf %f
+ + +application/postscript += gv %f
+ + +application/vnd.ms-excel += openoffice %f
+ + +application/vnd.ms-powerpoint += openoffice %f
+ + +application/vnd.sun.xml.calc += openoffice %f
+ + +application/vnd.sun.xml.calc.template += openoffice %f
+ + +application/vnd.sun.xml.draw += openoffice %f
+ + +application/vnd.sun.xml.draw.template += openoffice %f
+ + +application/vnd.sun.xml.impress += openoffice %f
+ + +application/vnd.sun.xml.impress.template += openoffice %f
+ + +application/vnd.sun.xml.math += openoffice %f
+ + +application/vnd.sun.xml.writer += openoffice %f
+ + +application/vnd.sun.xml.writer.global += openoffice %f
+ + +application/vnd.sun.xml.writer.template += openoffice %f
+ + +application/x-fsdirectory += rox %f
+ + +application/x-dvi = +xdvi %f
+ + +audio/mpeg = xmms %f
+ + +image/jpeg = gimp %f
+ + +image/png = gimp %f
+ + +image/vnd.djvu = djview +%f
+ + +# Or firefox -remote +"openFile(%u)"
+ + +text/html = konqueror %u
+ + +application/x-lyx = +lyx %f
+ + +
application/x-kword += kword %f
+ + +
+ + +
+ + +
+ + +
+ + +
+
+ + + + diff --git a/src/doc/user/usermanual.sgml b/src/doc/user/usermanual.sgml new file mode 100644 index 00000000..15a00419 --- /dev/null +++ b/src/doc/user/usermanual.sgml @@ -0,0 +1,5838 @@ + + + + + +Recoll"> +Recoll helper applications page"> + +Xapian"> + +]> + + + + + Recoll user manual + + + Jean-Francois + Dockes + +
jfd@recoll.org
+
+
+ + + 2005-2013 + Jean-Francois Dockes + + + + Permission is granted to copy, distribute and/or + modify this document under the terms of the GNU Free Documentation + License, Version 1.3 or any later version published by the Free + Software Foundation; with no Invariant Sections, no Front-Cover + Texts, and no Back-Cover Texts. A copy of the license can be + found at the following + location: GNU + web site. + + This document introduces full text search notions + and describes the installation and use of the &RCL; + application. It currently describes &RCL; &RCLVERSION;. + + + + +
+ + + Introduction + + + Giving it a try + + If you do not like reading manuals (who does?) and would like + to give &RCL; a try, just install the application and + start the recoll graphical user interface (GUI), + which will ask to index your home directory by default, allowing + you to search immediately after indexing completes. + + Do not do this if your home directory contains a huge + number of documents and you do not want to wait or are very + short on disk space. In this case, you may first want to customize + the configuration + to restrict the indexed area. + + Also be aware that you may need to install the + appropriate supporting + applications for document types that need them (for + example antiword for + Microsoft Word files). + + + + Full text search + + &RCL; is a full text search application. Full text search + applications let you find your data by content rather + than by external attributes (like a file name). More + specifically, they will let you specify words (terms) that + should or should not appear in the text you are looking for, + and return a list of matching documents, ordered so that the + most relevant documents will appear + first. + + You do not need to remember in what file or email message you + stored a given piece of information. You just ask for related + terms, and the tool will return a list of documents where + these terms are prominent, in a similar way to Internet search + engines. + + A search application tries to determine which documents are + most relevant to the search terms you provide. Computer algorithms + for determining relevance can be very complex, and in general are + inferior to the power of the human mind to rapidly determine + relevance. The quality of relevance guessing is probably the most + important aspect when evaluating a search application. + + In many cases, you are looking for all the forms of a + word, not for a specific form or spelling. These different forms + may include plurals, different tenses for a verb, or terms derived + from the same root or stem (example: floor, + floors, floored, flooring...). Search applications usually expand + queries to all such related terms (words that reduce to the same + stem) and also provide a way to disable this expansion if you are + actually searching for a specific form. + + Stemming, by itself, does not accommodate for misspellings or + phonetic searches. &RCL; supports these features through a specific + tool (the term explorer) which will let you + explore the set of index terms along different modes. + + + + + + Recoll overview + + &RCL; uses the + &XAP; information retrieval + library as its storage and retrieval engine. &XAP; is a very + mature package using a sophisticated + probabilistic ranking model. &RCL; provides the mechanisms + and interface to get data into and out of the system. + + In practice, &XAP; works by remembering where terms appear + in your document files. The acquisition process is called + indexing. + + The resulting index can be big (roughly the size of the + original document set), but it is not a document + archive. &RCL; can only display documents that still exist at + the place from which they were indexed. (Actually, there is a + way to reconstruct a document from the information in the + index, but the result is not nice, as all formatting, + punctuation and capitalization are lost). + + &RCL; stores all internal data in Unicode + UTF-8 format, and it can index files with + different character sets, encodings, and languages into the same + index. It has input filters for many document types. + + Stemming is the process by which &RCL; reduces words to + their radicals so that searching does not depend, for example, on a + word being singular or plural (floor, floors), or on a verb tense + (flooring, floored). Because the mechanisms used for stemming + depend on the specific grammatical rules for each language, there + is a separate &XAP; stemmer module for most common languages where + stemming makes sense. + + &RCL; stores the unstemmed versions of terms in the main index + and uses auxiliary databases for term expansion (one for each + stemming language), which means that you can switch stemming + languages between searches, or add a language without needing a + full reindex. + + Storing documents written in different languages in the same + index is possible, and commonly done. In this situation, you can + specify several stemming languages for the index. + + &RCL; currently makes no attempt at automatic language + recognition, which means that the stemmer will sometimes be applied + to terms from other languages with potentially strange results. In + practise, even if this introduces possibilities of confusion, this + approach has been proven quite useful, and it is much less + cumbersome than separating your documents according to what + language they are written in. + + Before version 1.18, &RCL; stripped most accents and + diacritics from terms, and converted them to lower case before + either storing them in the index or searching for them. As a + consequence, it was impossible to search for a particular + capitalization of a term (US / + us), or to discriminate two terms based on + diacritics (sake / saké, + mate / maté). + + As of version 1.18, &RCL; can optionally store the raw terms, + without accent stripping or case conversion. In this configuration, + it is still possible (and most common) for a query to be + insensitive to case and/or diacritics. Appropriate term expansions + are performed before actually accessing the main index. This is + described in more detail in the section about index case and + diacritics sensitivity. + + &RCL; has many parameters which define exactly what to + index, and how to classify and decode the source + documents. These are kept in configuration files. A + default configuration is copied into a standard location + (usually something like + /usr/[local/]share/recoll/examples) + during installation. The default values set by the + configuration files in this directory may be overridden by + values that you set inside your personal configuration, found + by default in the .recoll sub-directory + of your home directory. The default configuration will index + your home directory with default parameters and should be + sufficient for giving &RCL; a try, but you may want to adjust + it later, which can be done either by editing the text files + or by using configuration menus in the + recoll GUI. Some other parameters affecting only + the recoll GUI are stored in the standard + location defined by Qt. + + The indexing + process is started automatically the first time you + execute the recoll GUI. Indexing can also be + performed by executing the recollindex + command. + + Searches are usually + performed inside the recoll GUI, which has many + options to help you find what you are looking for. However, there + are other ways to perform &RCL; searches: mostly a + command line interface, a + + Python + programming interface, a + KDE KIO slave module, and + a Ubuntu Unity Lens module. + + + + + + + + Indexing + + + Introduction + + Indexing is the process by which the set of documents is + analyzed and the data entered into the database. &RCL; + indexing is normally incremental: documents will only be + processed if they have been modified. On the first execution, + all documents will need processing. A full index build can be + forced later by specifying an option to the indexing command + (recollindex + or ). + + The following sections give an overview of different + aspects of the indexing processes and configuration, with links + to detailed sections. + + + Indexing modes + + &RCL; indexing can be performed along two different modes: + + + + <link linkend="RCL.INDEXING.PERIODIC"> + Periodic (or batch) indexing:</link> + indexing takes place at discrete + times, by executing the recollindex + command. The typical usage is to have a nightly indexing run + + programmed into + your cron file. + + + + <link linkend="RCL.INDEXING.MONITOR">Real + time indexing:</link> + indexing takes place as soon as a file is created or + changed. recollindex runs as a daemon + and uses a file system alteration monitor such as + inotify, + Fam or + Gamin + to detect file changes. + + + + + The choice between the two methods is mostly a matter of + preference, and they can be combined by setting up multiple + indexes (ie: use periodic indexing on a big documentation + directory, and real time indexing on a small home + directory). Monitoring a big file system tree can consume + significant system resources. + + The choice of method and the parameters used can be + configured from the recoll GUI: + + Preferences + Indexing schedule + + + + + + Configurations, multiple indexes + + The parameters describing what is to be indexed and + local preferences are defined in text files contained in a + configuration + directory. + + All parameters have defaults, defined in system-wide + files. + + Without further configuration, &RCL; will index all + appropriate files from your home directory, with a reasonable + set of defaults. + + A default personal configuration directory + ($HOME/.recoll/) is created + when a &RCL; program is first executed. It is possible to + create other configuration directories, and use them by + setting the RECOLL_CONFDIR environment + variable, or giving the option to any of + the &RCL; commands. + + In some cases, it may be interesting to index different + areas of the file system to separate databases. You can do this + by using multiple configuration directories, each indexing a + file system area to a specific database. Typically, this + would be done to separate personal and shared + indexes, or to take advantage of the organization of your data + to improve search precision. + + The generated indexes can + be queried concurrently in a transparent manner. + + For index generation, multiple configurations are + totally independant from each other. When multiple indexes need + to be used for a single search, + some parameters + should be consistent among the configurations. + + + + + Document types + &RCL; knows about quite a few different document + types. The parameters for document types recognition and + processing are set in + configuration files. + + Most file types, like HTML or word processing files, only hold + one document. Some file types, like email folders or zip + archives, can hold many individually indexed documents, which may + themselves be compound ones. Such hierarchies can go quite + deep, and &RCL; can process, for example, a + LibreOffice + document stored as an attachment to an email message inside an + email folder archived in a zip file... + + &RCL; indexing processes plain text, HTML, OpenDocument + (Open/LibreOffice), email formats, and a few others internally. + + Other file types (ie: postscript, pdf, ms-word, rtf ...) + need external applications for preprocessing. The list is in the + installation + section. After every indexing operation, &RCL; updates a list of + commands that would be needed for indexing existing files + types. This list can be displayed by selecting the menu option + + File + Show Missing Helpers + + in the recoll GUI. It is stored in the + missing text file inside the configuration + directory. + + By default, &RCL; will try to index any file type that + it has a way to read. This is sometimes not desirable, and + there are ways to either exclude some types, or on the + contrary to define a positive list of types to be + indexed. In the latter case, any type not in the list will + be ignored. + Excluding types can be done by adding name patterns to + the skippedNames list, which can be done + from the GUI Index configuration menu. It is also possible + to exclude a mime type independantly of the file name by + associating it with the rclnull + filter. This can be done by editing + the + mimeconf configuration + file. + + In order to define a positive list, You need to edit the + main + configuration file + (recoll.conf) and set + the indexedmimetypes configuration + variable. Example: +indexedmimetypes = text/html application/pdf + + There is no GUI way to do this, because this option runs a + bit contrary to &RCL; main goal which is to help you find + information, independantly of how it may be stored. + + + + + + + + + + Recovery + In the rare case where the index becomes corrupted (which can + signal itself by weird search results or crashes), the index files + need to be erased before restarting a clean indexing pass. Just delete + the xapiandb directory (see + next section), or, + alternatively, start the next recollindex with the + option, which will reset the database before + indexing. + + + + + + Index storage + + The default location for the index data is the + xapiandb subdirectory of the &RCL; + configuration directory, typically + $HOME/.recoll/xapiandb/. This can be + changed via two different methods (with different purposes): + + You can specify a different configuration + directory by setting the RECOLL_CONFDIR + environment variable, or using the + option to the &RCL; commands. This method would typically be + used to index different areas of the file system to + different indexes. For example, if you were to issue the + following commands: + +export RECOLL_CONFDIR=~/.indexes-email +recoll + Then &RCL; would use configuration files + stored in ~/.indexes-email/ and, + (unless specified otherwise in + recoll.conf) would look for + the index in + ~/.indexes-email/xapiandb/. + + Using multiple configuration directories and configuration + options allows you to tailor multiple configurations and + indexes to handle whatever subset of the available data you wish + to make searchable. + + + + For a given configuration directory, you can + specify a non-default storage location for the index by setting + the dbdir parameter in the configuration file + (see the configuration + section). This method would mainly be of use if you wanted + to keep the configuration directory in its default location, but + desired another location for the index, typically out of disk + occupation concerns. + + + + + + The size of the index is determined by the size of the set + of documents, but the ratio can vary a lot. For a typical + mixed set of documents, the index size will often be close to + the data set size. In specific cases (a set of compressed mbox + files for example), the index can become much bigger than the + documents. It may also be much smaller if the documents + contain a lot of images or other non-indexed data (an extreme + example being a set of mp3 files where only the tags would be + indexed). + + Of course, images, sound and video do not increase the + index size, which means that nowadays (2012), typically, even a big + index will be negligible against the total amount of data on the + computer. + + The index data directory (xapiandb) + only contains data that can be completely rebuilt by an index run + (as long as the original documents exist), and it can always be + destroyed safely. + + + &XAP; index formats + + &XAP; versions usually support several formats for index + storage. A given major &XAP; version will have a current format, + used to create new indexes, and will also support the format from + the previous major version. + + &XAP; will not convert automatically an existing index + from the older format to the newer one. If you want to upgrade to + the new format, or if a very old index needs to be converted + because its format is not supported any more, you will have to + explicitly delete the old index, then run a normal indexing + process. + + Using the option to + recollindex is not sufficient to change the + format, you will have to delete all files inside the index + directory (typically ~/.recoll/xapiandb) + before starting the indexing. + + + + + Security aspects + + The &RCL; index does not hold copies of the indexed + documents. But it does hold enough data to allow for an almost + complete reconstruction. If confidential data is indexed, + access to the database directory should be restricted. + + &RCL; (since version 1.4) will create the configuration + directory with a mode of 0700 (access by owner only). As the + index data directory is by default a sub-directory of the + configuration directory, this should result in appropriate + protection. + + If you use another setup, you should think of the kind + of protection you need for your index, set the directory + and files access modes appropriately, and also maybe adjust + the umask used during index updates. + + + + + + + + Index configuration + + Variables set inside the + &RCL; configuration files + control which areas of the file system are indexed, and how + files are processed. These variables can be set either by + editing the text files or by using the + dialogs in the + recoll GUI. + + The first time you start recoll, you + will be asked whether or not you would like it to build the + index. If you want to adjust the configuration before + indexing, just click Cancel at this + point, which will get you into the configuration interface. If + you exit at this point, recoll will have + created a ~/.recoll directory containing + empty configuration files, which you can edit by hand. + + The configuration is documented inside the + installation chapter + of this document, or in the + + recoll.conf + 5 + + man page, but the most + current information will most likely be the comments inside the + sample file. The most immediately useful variable you may + interested in is probably + + topdirs, + which determines what subtrees get indexed. + + The applications needed to index file types other than + text, HTML or email (ie: pdf, postscript, ms-word...) are + described in the external + packages section. + + As of Recoll 1.18 there are two incompatible types of Recoll + indexes, depending on the treatment of character case and + diacritics. The next section describes the two types in more + detail. + + + Multiple indexes + + Multiple &RCL; indexes can be created by + using several configuration directories which are usually set to + index different areas of the file system. A specific index can + be selected for updating or searching, using the + RECOLL_CONFDIR environment variable or the + option to recoll and + recollindex. + + A typical usage scenario for the multiple index feature + would be for a system administrator to set up a central index + for shared data, that you choose to search or not in addition to + your personal data. Of course, there are other + possibilities. There are many cases where you know the subset of + files that should be searched, and where narrowing the search + can improve the results. You can achieve approximately the same + effect with the directory filter in advanced search, but + multiple indexes will have much better performance and may be + worth the trouble. + + A recollindex program instance can only + update one specific index. + + The main index (defined by + RECOLL_CONFDIR or ) is + always active. If this is undesirable, you can set up your + base configuration to index an empty directory. + + The different search interfaces (GUI, command line, ...) + have different methods to define the set of indexes to be + used, see the appropriate section. + + If a set of multiple indexes are to be used together for + searches, some configuration parameters must be consistent + among the set. These are parameters which need to be the same + when indexing and searching. As the parameters come from the + main configuration when searching, they need to be compatible + with what was set when creating the other indexes (which came + from their respective configuration directories). + + Most importantly, all indexes to be queried concurrently must + have the same option concerning character case and diacritics + stripping, but there are other constraints. Most of the + relevant parameters are described in the + linked + section. + + + + + + Index case and diacritics sensitivity + + As of &RCL; version 1.18 you have a choice of building an + index with terms stripped of character case and diacritics, or + one with raw terms. For a source term of + Résumé, the former will store + resume, the latter + Résumé. + + Each type of index allows performing searches insensitive to + case and diacritics: with a raw index, the user entry will be + expanded to match all case and diacritics variations present in + the index. With a stripped index, the search term will be stripped + before searching. + + A raw index allows for another possibility which a stripped + index cannot offer: using case and diacritics to discriminate + between terms, returning different results when searching for + US and us or + resume and résumé. + Read the section about search + case and diacritics sensitivity for more details. + + The type of index to be created is controlled by the + indexStripChars configuration + variable which can only be changed by editing the + configuration file. Any change implies an index reset (not + automated by &RCL;), and all indexes in a search must be set + in the same way (again, not checked by &RCL;). + + If the indexStripChars is not set, &RCL; + 1.18 creates a stripped index by default, for + compatibility with previous versions. + + As a cost for added capability, a raw index will be slightly + bigger than a stripped one (around 10%). Also, searches will be + more complex, so probably slightly slower, and the feature is + still young, so that a certain amount of weirdness cannot be + excluded. + + + + + + The index configuration GUI + + Most parameters for a given index configuration can + be set from a recoll GUI running on this + configuration (either as default, or by setting + RECOLL_CONFDIR or the + option.) + + The interface is started from the + + Preferences + Index Configuration + + menu entry. It is divided in four tabs, + Global parameters, Local + parameters, Web history + (which is explained in the next section) and Search + parameters. + + The Global parameters tab allows setting + global variables, like the lists of top directories, skipped paths, + or stemming languages. + + The Local parameters tab allows setting + variables that can be redefined for subdirectories. This second tab + has an initially empty list of customisation directories, to which + you can add. The variables are then set for the currently selected + directory (or at the top level if the empty line is + selected). + + The Search parameters section defines + parameters which are used at query time, but are global to an + index and affect all search tools, not only the GUI. + + The meaning for most entries in the interface is + self-evident and documented by a ToolTip + popup on the text label. For more detail, you will need to + refer to the configuration + section of this guide. + + The configuration tool normally respects the comments + and most of the formatting inside the configuration file, so + that it is quite possible to use it on hand-edited files, + which you might nevertheless want to backup first... + + + + + + + Indexing WEB pages you wisit + + With the help of a Firefox + extension, &RCL; can index the Internet pages that you visit. The + extension was initially designed for the + Beagle indexer, but it has recently be + renamed and better adapted to &RCL;. + + The extension works by copying visited WEB pages to an indexing + queue directory, which &RCL; then processes, indexing the data, + storing it into a local cache, then removing the file from the + queue. + + This feature can be enabled in the GUI + Index configuration + panel, or by editing the configuration file (set + processwebqueue to 1). + + A current pointer to the extension can be found, along with + up-to-date instructions, on the + Recoll wiki. + + A copy of the indexed WEB pages is retained by Recoll in a + local cache (from which previews can be fetched). The cache size can + be adjusted from the Index configuration / + Web history panel. Once the maximum size + is reached, old pages are purged - both from the cache and the index + - to make room for new ones, so you need to explicitly archive in + some other place the pages that you want to keep + indefinitely. + + + + + Extended attributes data + + User extended attributes are named pieces of information + that most modern file systems can attach to any file. + + &RCL; versions 1.19 and later process extended attributes + as document fields by default. For older versions, this has to + be activated at build time. + + A + + freedesktop standard defines a few special + attributes, which are handled as such by &RCL;: + + + mime_type + If set, this overrides any other + determination of the file mime type. + + + charset + If set, this defines the file character set + (mostly useful for plain text files). + + + + + By default, other attributes are handled as &RCL; fields. + On Linux, the user prefix is removed from + the name. This can be configured more precisely inside + the + fields configuration file. + + + + + + Importing external tags + + During indexing, it is possible to import metadata for + each file by executing commands. For example, this could + extract user tag data for the file and store it in a field for + indexing. + + See the + section + about the metadatacmds field in + the main configuration chapter for more detail. + + + + + Periodic indexing + + + Running indexing + + Indexing is always performed by the + recollindex program, which can be started + either from the command line or from the File + menu in the recoll GUI program. When started + from the GUI, the indexing will run on the same configuration + recoll was started on. When started from the + command line, recollindex will use the + RECOLL_CONFDIR variable or accept a + confdir option + to specify a non-default configuration directory. + + If the recoll program finds no index + when it starts, it will automatically start indexing (except + if canceled). + + The recollindex indexing process can be + interrupted by sending an interrupt (Ctrl-C, + SIGINT) or terminate + (SIGTERM) signal. Some time may elapse before the process exits, + because it needs to properly flush and close the index. This can + also be done from the recoll GUI + + File + Stop Indexing + + menu entry. + + After such an interruption, the index will be somewhat + inconsistent because some operations which are normally + performed at the end of the indexing pass will have been + skipped (for example, the stemming and spelling databases + will be inexistant or out of date). You just need to restart + indexing at a later time to restore consistency. The + indexing will restart at the interruption point (the full + file tree will be traversed, but files that were indexed up + to the interruption and for which the index is still up to + date will not need to be reindexed). + + recollindex has a number of other options + which are described in its man page. Only a few will be + described here. + Option will reset the index when + starting. This is almost the same as destroying the index + files (the nuance is that the &XAP; format version will not + be changed). + Option will force the update of all + documents without resetting the index first. This will not + have the "clean start" aspect of , but + the advantage is that the index will remain available for + querying while it is rebuilt, which can be a significant + advantage if it is very big (some installations need days + for a full index rebuild). + Of special interest also, maybe, are + the and + options. allows + indexing an explicit list of files (given as command line + parameters or read on stdin). + tells + recollindex to ignore file selection + parameters from the configuration. Together, these options allow + building a custom file selection process for some area of the + file system, by adding the top directory to the + skippedPaths list and using an appropriate + file selection method to build the file list to be fed to + recollindex . + Trivial example: + + find . -name indexable.txt -print | recollindex -if + + + recollindex will + not descend into subdirectories specified as parameters, + but just add them as index entries. It is + up to the external file selection method to build the complete + file list. + + + + Using <command>cron</command> to automate + indexing + + The most common way to set up indexing is to have a cron + task execute it every night. For example the following + crontab entry would do it every day at + 3:30AM (supposing recollindex is in your + PATH): + + /some/tmp/dir/recolltrace 2>&1 +]]> + + Or, using anacron: + /tmp/rcltraceme 2>&1" +]]> + + + As of version 1.17 the &RCL; GUI has dialogs to manage + crontab entries for + recollindex. You can reach them from the + + Preferences + Indexing Schedule + + menu. They only + work with the good old cron, and do not give + access to all features of cron scheduling. + + The usual command to edit your + crontab is crontab + (which will usually start the + vi editor to edit the file). You may have + more sophisticated tools available on your system. + + Please be aware that there may be differences between your + usual interactive command line environment and the one seen by + crontab commands. Especially the PATH variable may be of + concern. Please check the crontab manual pages about possible + issues. + + + + + + + Real time indexing + + Real time monitoring/indexing is performed by starting the + recollindex command. + With this option, recollindex will detach + from the terminal and become a daemon, permanently monitoring + file changes and updating the index. + + Under KDE, + Gnome and some other desktop + environments, the daemon can automatically started when you log + in, by creating a desktop file inside the + ~/.config/autostart directory. This can be + done for you by the &RCL; GUI. Use the + Preferences->Indexing Schedule menu. + + With older X11 setups, starting + the daemon is normally performed as part of the user session + script. + + The rclmon.sh script can be used to + easily start and stop the daemon. It can be found in the + examples directory (typically + /usr/local/[share/]recoll/examples). + + For example, my out of fashion + xdm-based session has a + .xsession script with the following lines + at the end: + + recollconf=$HOME/.recoll-home +recolldata=/usr/local/share/recoll +RECOLL_CONFDIR=$recollconf $recolldata/examples/rclmon.sh start + +fvwm + + + + The indexing daemon gets started, then the window manager, + for which the session waits. By default the + indexing daemon will monitor the state of the X11 session, and + exit when it finishes, it is not necessary to kill it + explicitly. (The X11 server + monitoring can be disabled with option to + recollindex). + + If you use the daemon completely out of an + X11 session, you need to add option + to disable X11 session monitoring (else + the daemon will not start). + + By default, the messages from the indexing daemon will be + discarded. You may want to change this by setting the + daemlogfilename and + daemloglevel configuration parameters. Also the + log file will only be truncated when the daemon starts. If the + daemon runs permanently, the log file may grow quite big, depending + on the log level. + + When building &RCL;, the real time indexing support can be + customised during package configuration with + the or + options. The default is + currently to include inotify + monitoring on systems that support it, and, as of &RCL; 1.17, + gamin support on + FreeBSD. + + While it is convenient that data is indexed in real time, + repeated indexing can generate a significant load on the + system when files such as email folders change. Also, + monitoring large file trees by itself significantly taxes + system resources. You probably do not want to enable it if + your system is short on resources. Periodic indexing is + adequate in most cases. + + + Slowing down the reindexing rate for fast changing + files + + When using the real time monitor, it may happen that some + files need to be indexed, but change so often that they impose an + excessive load for the system. + + &RCL; provides a configuration option to specify the minimum + time before which a file, specified by a wildcard pattern, cannot be + reindexed. See the mondelaypatterns parameter in + the + configuration section. + + + + + + + + Searching + + + Searching with the Qt graphical user interface + + The recoll program provides the main user + interface for searching. It is based on the + Qt library. + + recoll has two search modes: + + Simple search (the default, on the main screen) has + a single entry field where you can enter multiple words. + + Advanced search (a panel accessed through the + Tools menu or the toolbox bar icon) has + multiple entry fields, which you may use to build a logical + condition, with additional filtering on file type, location + in the file system, modification date, and size. + + + + In most cases, you can enter the terms as you + think them, even if they contain embedded punctuation or other + non-textual characters. For + example, &RCL; can handle things like email addresses, or + arbitrary cut and paste from another text window, punctation + and all. + + The main case where you should enter text differently from + how it is printed is for east-asian languages (Chinese, + Japanese, Korean). Words composed of single or multiple + characters should be entered separated by white space in this + case (they would typically be printed without white + space). + + + Simple search + + + Start the recoll program. + + Possibly choose a search mode: Any + term, All terms, + File name or + Query language. + + Enter search term(s) in the text field at the top of the + window. + + Click the Search button or + hit the Enter key to start the search. + + + + The initial default search mode is Query + language. Without special directives, this will look for + documents containing all of the search terms (the ones with more + terms will get better scores), just like the All + terms mode which will ignore such + directives. Any term will search for documents + where at least one of the terms appear. + + The Query Language features are + described in a separate + section. + + All search modes allow wildcards inside terms + (*, ?, + []). You may want to have a look at the + section about wildcards + for more information about this. + + File name will specifically look for file + names. The point of having a separate file name + search is that wild card expansion can be performed more + efficiently on a small subset of the index (allowing + wild cards on the left of terms without excessive penality). + Things to know: + + White space in the entry should match white + space in the file name, and is not treated specially. + + The search is insensitive to character case and + accents, independantly of the type of index. + + An entry without any wild card + character and not capitalized will be prepended and appended + with '*' (ie: etc -> + *etc*, but + Etc -> + etc). + + If you have a big index (many files), + excessively generic fragments may result in inefficient + searches. + + + + + You can search for exact phrases (adjacent words in a + given order) by enclosing the input inside double quotes. Ex: + "virtual reality". + + When using a stripped index, character case has no influence on + search, except that you can disable stem expansion for any term by + capitalizing it. Ie: a search for floor will also + normally look for flooring, + floored, etc., but a search for + Floor will only look for floor, + in any character case. Stemming can also be disabled globally in the + preferences. When using a raw index, the rules are a bit more + complicated. + + &RCL; remembers the last few searches that you + performed. You can use the simple search text entry widget (a + combobox) to recall them (click on the thing at the right of the + text field). Please note, however, that only the search texts + are remembered, not the mode (all/any/file name). + + Typing Esc Space while + entering a word in the simple search entry will open a window + with possible completions for the word. The completions are + extracted from the database. + + Double-clicking on a word in the result list or a preview + window will insert it into the simple search entry field. + + You can cut and paste any text into an All + terms or Any term search field, + punctuation, newlines and all - except for wildcard characters + (single ? characters are ok). &RCL; will process + it and produce a meaningful search. This is what most differentiates + this mode from the Query Language mode, where + you have to care about the syntax. + + You can use the + + Tools + Advanced search + + dialog for more complex searches. + + + + + The default result list + + After starting a search, a list of results will instantly + be displayed in the main list window. + + By default, the document list is presented in order of + relevance (how well the system estimates that the document + matches the query). You can sort the result by ascending or + descending date by using the vertical arrows in the toolbar. + + Clicking on the + Preview link for an entry will open an + internal preview window for the document. Further + Preview clicks for the same search will open + tabs in the existing preview window. You can use + Shift+Click to force the creation of another + preview window, which may be useful to view the documents side + by side. (You can also browse successive results in a single + preview window by typing + Shift+ArrowUp/Down in the + window). + + Clicking the Open link will + start an external viewer for the document. By default, &RCL; lets + the desktop choose the appropriate application for most document + types (there is a short list of exceptions, see further). If you + prefer to completely customize the choice of applications, you can + uncheck the Use desktop preferences option in + the GUI preferences dialog, and click the Choose editor + applications button to adjust the predefined &RCL; + choices. The tool accepts multiple selections of mime types (e.g. to + set up the editor for the dozens of office file types). + + Even when Use desktop preferences is + checked, there is a small list of exceptions, for mime types where + the &RCL; choice should override the desktop one. These are + applications which are well integrated with &RCL;, especially + evince for viewing PDF and Postscript + files because of its support for opening the document at a specific + page and passing a search string as an argument. Of course, you can + edit the list (in the GUI preferences) if you would prefer to lose + the functionality and use the standard desktop tool. + + You may also change the choice of applications by editing the + + mimeview configuration file if you find + this more convenient. + + The Preview and Open + edit links may not be present for all entries, meaning that + &RCL; has no configured way to preview a given file type (which + was indexed by name only), or no configured external editor for + the file type. This can sometimes be adjusted simply by tweaking + the + mimemap and + + mimeview configuration files (the latter + can be modified with the user preferences dialog). + + The format of the result list entries is entirely + configurable by using the preference dialog to + edit an HTML + fragment. + + You can click on the Query details link + at the top of the results page to see the query actually + performed, after stem expansion and other processing. + + Double-clicking on any word inside the result list or a + preview window will insert it into the simple search text. + + The result list is divided into pages (the size of which + you can change in the preferences). Use the arrow buttons in the + toolbar or the links at the bottom of the page to browse the + results. + + + No results: the spelling suggestions + + When a search yields no result, and if the + aspell dictionary is configured, &RCL; + will try to check for misspellings among the query terms, and + will propose lists of replacements. Clicking on one of the + suggestions will replace the word and restart the search. You can + hold any of the modifier keys (Ctrl, Shift, etc.) while clicking + if you would rather stay on the suggestion screen because several + terms need replacement. + + + + + + The result list right-click menu + + Apart from the preview and edit links, you can display a + pop-up menu by right-clicking over a paragraph in the result + list. This menu has the following entries: + + + Preview + Open + Copy File Name + Copy Url + Save to File + Find similar + Preview Parent + document + Open Parent + document + Open Snippets + Window + + + The Preview and + Open entries do the same thing as the + corresponding links. + + The Copy File Name and + Copy Url copy the relevant data to the + clipboard, for later pasting. + + Save to File allows saving the + contents of a result document to a chosen file. This entry + will only appear if the document does not correspond to an + existing file, but is a subdocument inside such a file (ie: an + email attachment). It is especially useful to extract attachments + with no associated editor. + + The Find similar entry will select + a number of relevant term from the current document and enter + them into the simple search field. You can then start a simple + search, with a good chance of finding documents related to the + current result. + + The Parent document entries will + appear for documents which are not actually files but are part + of, or attached to, a higher level document. This entry is mainly + useful for email attachments and permits viewing the message to + which the document is attached. Note that the entry will also + appear for an email which is part of an mbox folder file, but + that you can't actually visualize the folder (there will be an + error dialog if you try). &RCL; is unfortunately not yet smart + enough to disable the entry in this case. In other cases, the + Open option makes sense, for example to + start a chm viewer on the parent + document for a help page. + + The Open Snippets Window entry will only + appear for documents which support page breaks (typically + PDF, Postscript, DVI). The snippets window lists extracts from + the document, taken around search terms occurrences, along with the + corresponding page number, as links which can be used to start + the native viewer on the appropriate page. If the viewer supports + it, its search function will also be primed with one of the + search terms. + + + + + + + The result table + + In &RCL; 1.15 and newer, the results can be displayed in + spreadsheet-like fashion. You can switch to this presentation by + clicking the table-like icon in the toolbar (this is a toggle, + click again to restore the list). + + Clicking on the column headers will allow sorting by the + values in the column. You can click again to invert the order, and + use the header right-click menu to reset sorting to the default + relevance order (you can also use the sort-by-date arrows to do + this). + + Both the list and the table display the same underlying + results. The sort order set from the table is still active if you + switch back to the list mode. You can click twice on a date sort + arrow to reset it from there. + + The header right-click menu allows adding or deleting + columns. The columns can be resized, and their order can be changed + (by dragging). All the changes are recorded when you quit + recoll + + Hovering over a table row will update the detail area at the + bottom of the window with the corresponding values. You can click + the row to freeze the display. The bottom area is equivalent to a + result list paragraph, with links for starting a preview or a + native application, and an equivalent right-click menu. Typing + Esc (the Escape key) will unfreeze the + display. + + + + + Displaying thumbnails + + The default format for the result list entries and the + detail area of the result table display an icon for each result + document. The icon is either a generic one determined from the + MIME type, or a thumbnail of the document appearance. Thumbnails + are only displayed if found in the standard + freedesktop location, where they would + typically have been created by a file manager. + + Recoll has no capability to create thumbnails. A relatively + simple trick is to use the Open parent + document/folder entry in the result list popup + menu. This should open a file manager window on the containing + directory, which should in turn create the thumbnails (depending on + your settings). Restarting the search should then display the + thumbnails. + + There are also some + pointers about thumbnail generation on the &RCL; wiki. + + + + + + The preview window + + The preview window opens when you first click a + Preview link inside the result list. + + Subsequent preview requests for a given search open new + tabs in the existing window (except if you hold the + Shift key while clicking which will open a new + window for side by side viewing). + + Starting another search and requesting a preview will + create a new preview window. The old one stays open until you + close it. + + You can close a preview tab by typing Ctrl-W + (Ctrl + W) in the + window. Closing the last tab for a window will also close the + window. + + Of course you can also close a preview window by using the + window manager button in the top of the frame. + + You can display successive or previous documents from the + result list inside a preview tab by typing + Shift+Down or + Shift+Up (Down + and Up are the arrow keys). + + A right-click menu in the text area allows switching + between displaying the main text or the contents of fields + associated to the document (ie: author, abtract, etc.). This is + especially useful in cases where the term match did not occur in + the main text but in one of the fields. In the case of + images, you can switch between three displays: the image + itself, the image metadata as extracted + by exiftool and the fields, which is the + metadata stored in the index. + + + You can print the current preview window contents by typing + Ctrl-P (Ctrl + + P) in the window text. + + + + Searching inside the preview + + The preview window has an internal search capability, + mostly controlled by the panel at the bottom of the window, + which works in two modes: as a classical editor incremental + search, where we look for the text entered in the entry + zone, or as a way to walk the matches between the document + and the &RCL; query that found it. + + + + Incremental text search + The preview tabs have an internal incremental search + function. You initiate the search either by typing a + / (slash) or CTL-F + inside the text area or by clicking into + the Search for: text field and + entering the search string. You can then use the + Next + and Previous buttons + to find the next/previous occurrence. You can also type + F3 inside the text area to get to the next + occurrence. + If you have a search string entered and you use + Ctrl-Up/Ctrl-Down to browse the results, the search is + initiated for each successive document. If the string is + found, the cursor will be positioned at the first + occurrence of the search string. + + + + + Walking the match lists + If the entry area is empty when you click + the Next + or Previous buttons, the editor will + be scrolled to show the next match to any search term + (the next highlighted zone). If you select a search group + from the dropdown list and click Next + or Previous, the match list for this + group will be walked. This is not the same as a text + search, because the occurences will include non-exact + matches (as caused by stemming or wildcards). The search + will revert to the text mode as soon as you edit the + entry area. + + + + + + + + + + Complex/advanced search + + The advanced search dialog helps you build more complex queries + without memorizing the search language constructs. It can be opened + through the Tools menu or through the main + toolbar. + + The dialog has two tabs: + + + + The first tab lets you specify terms to search + for, and permits specifying multiple clauses which are combined + to build the search. + + + The second tab lets filter the results according + to file size, date of modification, mime type, or + location. + + + + + Click on the Start Search button in + the advanced search dialog, or type Enter in + any text field to start the search. The button in + the main window always performs a simple search. + + Click on the Show query details link at + the top of the result page to see the query expansion. + + + Avanced search: the "find" tab + + This part of the dialog lets you constructc a query by + combining multiple clauses of different types. Each entry + field is configurable for the following modes: + + + All terms. + + Any term. + + None of the terms. + + Phrase (exact terms in order within an + adjustable window). + + Proximity (terms in any order within an + adjustable window). + + Filename search. + + + + Additional entry fields can be created by clicking the + Add clause button. + + When searching, the non-empty clauses will be + combined either with an AND or an OR conjunction, depending on + the choice made on the left (All clauses or + Any clause). + + Entries of all types except "Phrase" and "Near" accept + a mix of single words and phrases enclosed in double quotes. + Stemming and wildcard expansion will be performed as for simple + search. + + Phrases and Proximity searches + These two clauses work in similar ways, with the + difference that proximity searches do not impose an order on the + words. In both cases, an adjustable number (slack) of non-matched words + may be accepted between the searched ones (use the counter on + the left to adjust this count). For phrases, the default count + is zero (exact match). For proximity it is ten (meaning that two search + terms, would be matched if found within a window of twelve + words). Examples: a phrase search for quick + fox with a slack of 0 will match quick + fox but not quick brown fox. With + a slack of 1 it will match the latter, but not fox + quick. A proximity search for quick + fox with the default slack will match the + latter, and also a fox is a cunning and quick + animal. + + + + + + Avanced search: the "filter" tab + + This part of the dialog has several sections which allow + filtering the results of a search according to a number of + criteria + + + + + The first section allows filtering by dates of last + modification. You can specify both a minimum and a maximum date. The + initial values are set according to the oldest and newest documents + found in the index. + + + + The next section allows filtering the results by + file size. There are two entries for minimum and maximum + size. Enter decimal numbers. You can use suffix multipliers: + k/K, m/M, + g/G, t/T for 1E3, 1E6, + 1E9, 1E12 respectively. + + + + The next section allows filtering the results by their mime + types, or mime categories (ie: media/text/message/etc.). + You can transfer the types between two boxes, to define + which will be included or excluded by the search. + The state of the file type selection can be saved as + the default (the file type filter will not be activated at + program start-up, but the lists will be in the restored + state). + + + + The bottom section allows restricting the search results to a + sub-tree of the indexed area. You can use the + Invert checkbox to search for files not in + the sub-tree instead. If you use directory filtering often and on + big subsets of the file system, you may think of setting up + multiple indexes instead, as the performance may be + better. + You can use relative/partial paths for filtering. Ie, + entering dirA/dirB would match either + /dir1/dirA/dirB/myfile1 or + /dir2/dirA/dirB/someother/myfile2. + + + + + + + + Avanced search history + + The advanced search tool memorizes the last 100 searches + performed. You can walk the saved searches by using the up and + down arrow keys while the keyboard focus belongs to the advanced + search dialog. + + The complex search history can be erased, along with the + one for simple search, by selecting the + File + Erase Search History + menu entry. + + + + + + + The term explorer tool + + &RCL; automatically manages the expansion of search terms + to their derivatives (ie: plural/singular, verb + inflections). But there are other cases where the exact search + term is not known. For example, you may not remember the exact + spelling, or only know the beginning of the name. + + The term explorer tool (started from the toolbar icon or + from the Term explorer entry of the + Tools menu) can be used to search the full index + terms list. It has three modes of operations: + + + + Wildcard + In this mode of operation, you can enter a + search string with shell-like wildcards (*, ?, []). ie: + xapi* would display all index terms + beginning with xapi. (More + about wildcards here). + + + + Regular expression + This mode will accept a regular expression + as input. Example: + word[0-9]+. The expression is + implicitely anchored at the beginning. Ie: + press will match + pression but not + expression. You can use + .*press to match the latter, + but be aware that this will cause a full index term list + scan, which can be quite long. + + + + + Stem expansion + This mode will perform the usual stem expansion + normally done as part user input processing. As such it is + probably mostly useful to demonstrate the process. + + + + + Spelling/Phonetic In this + mode, you enter the term as you think it is spelled, and + &RCL; will do its best to find index terms that sound like + your entry. This mode uses the + Aspell spelling application, + which must be installed on your system for things to work + (if your documents contain non-ascii characters, &RCL; + needs an aspell version newer than 0.60 for UTF-8 + support). The language which is used to build the + dictionary out of the index terms (which is done at the + end of an indexing pass) is the one defined by your NLS + environment. Weird things will probably happen if + languages are mixed up. + + + + Note that in cases where &RCL; does not know the beginning + of the string to search for (ie a wildcard expression like + *coll), the expansion can take quite + a long time because the full index term list will have to be + processed. The expansion is currently limited at 10000 results for + wildcards and regular expressions. It is possible to change the + limit in the configuration file. + + Double-clicking on a term in the result list will insert + it into the simple search entry field. You can also cut/paste + between the result list and any entry field (the end of lines + will be taken care of). + + + + + Multiple indexes + + See the section + describing the use of multiple indexes for + generalities. Only the aspects concerning + the recoll GUI are described here. + + A recoll program instance is always + associated with a specific index, which is the one to be updated + when requested from the File menu, but it can + use any number of &RCL; indexes for searching. The external + indexes can be selected through the external + indexes tab in the preferences dialog. + + Index selection is performed in two phases. A set of all + usable indexes must first be defined, and then the subset of + indexes to be used for searching. These parameters + are retained across program executions (there are kept + separately for each &RCL; configuration). The set of all indexes + is usually quite stable, while the active ones might typically + be adjusted quite frequently. + + The main index (defined by + RECOLL_CONFDIR) is always active. If this is + undesirable, you can set up your base configuration to index + an empty directory. + + When adding a new index to the set, you can select either + a &RCL; configuration directory, or directly a &XAP; index + directory. In the first case, the &XAP; index directory will + be obtained from the selected configuration. + + As building the set of all indexes can be a little tedious + when done through the user interface, you can use the + RECOLL_EXTRA_DBS environment + variable to provide an initial set. This might typically be + set up by a system administrator so that every user does not + have to do it. The variable should define a colon-separated list + of index directories, ie: + + export RECOLL_EXTRA_DBS=/some/place/xapiandb:/some/other/db + + Another environment variable, + RECOLL_ACTIVE_EXTRA_DBS allows adding to the active + list of indexes. This variable was suggested and implemented by a + &RCL; user. It is mostly useful if you use scripts to mount + external volumes with &RCL; indexes. By using + RECOLL_EXTRA_DBS and + RECOLL_ACTIVE_EXTRA_DBS, you can add and activate + the index for the mounted volume when starting + recoll. + + + RECOLL_ACTIVE_EXTRA_DBS is available for + &RCL; versions 1.17.2 and later. A change was made in the same + update so that recoll will + automatically deactivate unreachable indexes when starting + up. + + + + + Document history + + Documents that you actually view (with the internal preview + or an external tool) are entered into the document history, + which is remembered. + You can display the history list by using + the Tools/Doc History menu + entry. + You can erase the document history by using the + Erase document history entry in the + File menu. + + + + + Sorting search results and collapsing duplicates + + The documents in a result list are normally sorted in + order of relevance. It is possible to specify a different sort + order, either by using the vertical arrows in the GUI toolbox to + sort by date, or switching to the result table display and clicking + on any header. The sort order chosen inside the result table + remains active if you switch back to the result list, until you + click one of the vertical arrows, until both are unchecked (you are + back to sort by relevance). + + Sort parameters are remembered between program + invocations, but result sorting is normally always inactive + when the program starts. It is possible to keep the sorting + activation state between program invocations by checking the + Remember sort activation state option in + the preferences. + + It is also possible to hide duplicate entries inside + the result list (documents with the exact same contents as the + displayed one). The test of identity is based on an MD5 hash + of the document container, not only of the text contents (so + that ie, a text document with an image added will not be a + duplicate of the text only). Duplicates hiding is controlled + by an entry in the GUI configuration + dialog, and is off by default. + + + + + Search tips, shortcuts + + + Terms and search expansion + + Term completion + Typing Esc Space in + the simple search entry field while entering a word will + either complete the current word if its beginning matches a + unique term in the index, or open a window to propose a list + of completions. + + + Picking up new terms from result or preview + text + Double-clicking on a word in the result list or in a + preview window will copy it to the simple search entry field. + + + Wildcards + Wildcards can be used inside search terms in all forms + of searches. + More about wildcards. + + + + Automatic suffixes + Words like odt or ods + can be automatically turned into query language + ext:xxx clauses. This can be enabled in the + Search preferences panel in the GUI. + + + + Disabling stem expansion + Entering a capitalized word in any search field will prevent + stem expansion (no search for + gardening if you enter + Garden instead of + garden). This is the only case where + character case should make a difference for a &RCL; + search. You can also disable stem expansion or change the + stemming language in the preferences. + + + Finding related documents + Selecting the Find similar documents entry + in the result list paragraph right-click menu will select a + set of "interesting" terms from the current result, and insert + them into the simple search entry field. You can then possibly + edit the list and start a search to find documents which may + be apparented to the current result. + + + File names + File names are added as terms during indexing, and you can + specify them as ordinary terms in normal search fields (&RCL; used + to index all directories in the file path as terms. This has been + abandoned as it did not seem really useful). Alternatively, you + can use the specific file name search which will + only look for file names, and may be + faster than the generic search especially when using wildcards. + + + + + + + Working with phrases and proximity + + Phrases and Proximity searches + A phrase can be looked for by enclosing it in double + quotes. Example: "user manual" will look + only for occurrences of user immediately + followed by manual. You can use the + This phrase field of the advanced + search dialog to the same effect. Phrases can be entered along + simple terms in all simple or advanced search entry fields + (except This exact phrase). + + + AutoPhrases + This option can be set in the preferences dialog. If it is + set, a phrase will be automatically built and added to simple + searches when looking for Any terms. This + will not change radically the results, but will give a relevance + boost to the results where the search terms appear as a + phrase. Ie: searching for virtual reality + will still find all documents where either + virtual or reality or + both appear, but those which contain virtual + reality should appear sooner in the list. + + + Phrase searches can strongly slow down a query if most of the + terms in the phrase are common. This is why the + autophrase option is off by default for &RCL; + versions before 1.17. As of version 1.17, + autophrase is on by default, but very common + terms will be removed from the constructed phrase. The removal + threshold can be adjusted from the search preferences. + + Phrases and abbreviations As of + &RCL; version 1.17, dotted abbreviations like + I.B.M. are also automatically indexed as a word + without the dots: IBM. Searching for the word + inside a phrase (ie: "the IBM company") will only + match the dotted abrreviation if you increase the phrase slack (using the + advanced search panel control, or the o query + language modifier). Literal occurences of the word will be matched + normally. + + + + + + Others + + Using fields + You can use the query + language and field specifications + to only search certain parts of documents. This can be + especially helpful with email, for example only searching + emails from a specific originator: + search tips from:helpfulgui + + + + Ajusting the result table columns + When displaying results in table mode, you can use a + right click on the table headers to activate a pop-up menu + which will let you adjust what columns are displayed. You can + drag the column headers to adjust their order. You can click + them to sort by the field displayed in the column. You can + also save the result list in CSV format. + + + Query explanation + You can get an exact description of what the query + looked for, including stem expansion, and Boolean operators + used, by clicking on the result list header. + + + Advanced search history + As of &RCL; 1.18, you can display any of the last 100 complex + searches performed by using the up and down arrow keys while the + advanced search panel is active. + + + Browsing the result list inside a preview + window + Entering Shift-Down or Shift-Up + (Shift + an arrow key) in a preview window will + display the next or the previous document from the result + list. Any secondary search currently active will be executed on + the new document. + + + Scrolling the result list from the keyboard + You can use PageUp and PageDown + to scroll the result list, Shift+Home to go back + to the first page. These work even while the focus is in the + search entry. + + + Editing a new search while the focus is not + in the search entry + You can use the Ctrl-Shift-S shortcut to + return the cursor to the search entry (and select the current + search text), while the focus is anywhere in the main + window. + + + Forced opening of a preview window + You can use Shift+Click on a result list + Preview link to force the creation of a + preview window instead of a new tab in the existing one. + + + Closing previews + Entering Ctrl-W in a tab will + close it (and, for the last tab, close the preview + window). Entering Esc will close the preview + window and all its tabs. + + + Printing previews + Entering Ctrl-P in a preview window will print + the currently displayed text. + + + Quitting + Entering Ctrl-Q almost anywhere will + close the application. + + + + + + Customizing the search interface + + You can customize some aspects of the search interface by using + the GUI configuration entry in the + Preferences menu. + + There are several tabs in the dialog, dealing with the + interface itself, the parameters used for searching and + returning results, and what indexes are searched. + + + + User interface parameters: + + + + Highlight color for query + terms: Terms from the user query are highlighted in + the result list samples and the preview window. The color can + be chosen here. Any Qt color string should work (ie + red, #ff0000). The + default is blue. + + + Style sheet: + The name of a Qt style sheet + text file which is applied to the whole Recoll application + on startup. The default value is empty, but there is a + skeleton style sheet (recoll.qss) + inside the /usr/share/recoll/examples + directory. Using a style sheet, you can change most + recoll graphical parameters: + colors, fonts, etc. See the sample file for a few + simple examples. + You should be aware that parameters (e.g.: the + background color) set inside the &RCL; GUI style sheet + will override global system preferences, with possible + strange side effects: for example if you set the + foreground to a light color and the background to a + dark one in the desktop preferences, but only the + background is set inside the &RCL; style sheet, and it + is light too, then text will appear light-on-light + inside the &RCL; GUI. + + + Maximum text size highlighted for + preview Inserting highlights on search term inside + the text before inserting it in the preview window involves + quite a lot of processing, and can be disabled over the given + text size to speed up loading. + + + Prefer HTML to plain text for + preview if set, Recoll will display HTML as such + inside the preview window. If this causes problems with the Qt + HTML display, you can uncheck it to display the plain text + version instead. + + + Plain text to HTML line style: + when displaying plain text inside the preview window, &RCL; + tries to preserve some of the original text line breaks and + indentation. It can either use PRE HTML tags, which will + well preserve the indentation but will force horizontal + scrolling for long lines, or use BR tags to break at the + original line breaks, which will let the editor introduce + other line breaks according to the window width, but will + lose some of the original indentation. The third option has + been available in recent releases and is probably now the best + one: use PRE tags with line wrapping. + + + Use desktop preferences to choose + document editor: if this is checked, the + xdg-open utility will be used to open files + when you click the Open link in the result + list, instead of the application defined in + mimeview. xdg-open will + in term use your desktop preferences to choose an appropriate + application. + + + Exceptions: when using the + desktop preferences for opening documents, these are mime types + that will still be opened according to &RCL; preferences. This + is useful for passing parameters like page numbers or search + strings to applications that support them + (e.g. evince). This cannot be done + with xdg-open which only supports passing + one parameter. + + + Choose editor applications + this will let you choose the command started by the + Open links inside the result list, for + specific document types. + + + Display category filter as + toolbar... this will let you choose if the document + categories are displayed as a list or a set of buttons. + + + Auto-start simple search on white + space entry: if this is checked, a search will be + executed each time you enter a space in the simple search input + field. This lets you look at the result list as you enter new + terms. This is off by default, you may like it or not... + + + Start with advanced search dialog open + : If you use this dialog frequently, checking + the entries will get it to open when recoll starts. + + + Remember sort activation + state if set, Recoll will remember the sort tool + stat between invocations. It normally starts with sorting + disabled. + + + + + + + + + Result list parameters: + + + + Number of results in a result + page + + + Result list font: There is + quite a lot of information shown in the result list, and you + may want to customize the font and/or font size. The rest of + the fonts used by &RCL; are determined by your generic Qt + config (try the qtconfig command). + + + + Edit result list paragraph format string: + allows you to change the presentation of each result list + entry. See the + result list customisation section. + + + + Edit result page HTML header insert: + allows you to define text inserted at the end of the result + page HTML header. + More detail in the + result list customisation section. + + + + Date format: allows specifying the + format used for displaying dates inside the result list. This + should be specified as an strftime() string (man strftime). + + + + Abstract snippet separator: + for synthetic abstracts built from index data, which are + usually made of several snippets from different parts of the + document, this defines the snippet separator, an ellipsis by + default. + + + + + + + Search parameters: + + + + Hide duplicate results: + decides if result list entries are shown for identical + documents found in different places. + + + Stemming language: + stemming obviously depends on the document's language. This + listbox will let you chose among the stemming databases which + were built during indexing (this is set in the main configuration + file), or later added with recollindex + -s (See the recollindex manual). Stemming languages + which are dynamically added will be deleted at the next + indexing pass unless they are also added in the configuration + file. + + + Automatically add phrase to simple + searches: a phrase will be automatically built and + added to simple searches when looking for Any + terms. This will give a relevance boost to the + results where the search terms appear as a phrase (consecutive + and in order). + + + Autophrase term frequency threshold + percentage: very frequent terms should not be included + in automatic phrase searches for performance reasons. The + parameter defines the cutoff percentage (percentage of the + documents where the term appears). + + + Replace abstracts from + documents: this decides if we should synthesize and + display an abstract in place of an explicit abstract found + within the document itself. + + + Dynamically build + abstracts: this decides if &RCL; tries to build + document abstracts (lists of snippets) + when displaying the result list. Abstracts are constructed by + taking context from the document information, around the search + terms. + + + Synthetic abstract size: + adjust to taste... + + + Synthetic abstract context + words: how many words should be displayed around + each term occurrence. + + + Query language magic file name + suffixes: a list of words which automatically get + turned into ext:xxx file name suffix clauses + when starting a query language query (ie: doc xls + xlsx...). This will save some typing for people who + use file types a lot when querying. + + + + + + + External indexes: + This panel will let you browse for additional indexes + that you may want to search. External indexes are designated by + their database directory (ie: + /home/someothergui/.recoll/xapiandb, + /usr/local/recollglobal/xapiandb). + + + Once entered, the indexes will appear in the + External indexes list, and you can + chose which ones you want to use at any moment by checking or + unchecking their entries. + + Your main database (the one the current configuration + indexes to), is always implicitly active. If this is not + desirable, you can set up your configuration so that it indexes, + for example, an empty directory. An alternative indexer may also + need to implement a way of purging the index from stale data, + + + + The result list format + + The result list presentation can be exhaustively customized + by adjusting two elements: + + The paragraph format + HTML code inside the header + section + + + These can be edited from the Result list + tab of the GUI configuration. + + Newer versions of Recoll (from 1.17) use a WebKit HTML + object by default (this may be disabled at build time), and + total customisation is possible with full support for CSS and + Javascript. Conversely, there are limits to what you can do with + the older Qt QTextBrowser, but still, it is possible to decide + what data each result will contain, and how it will be + displayed. + + No more detail will be given about the header part (only + useful with the WebKit build), if there are restrictions to + what you can do, they are beyond this author's HTML/CSS/Javascript + abilities... There are a few examples on the + page about + customising the result list on the &RCL; web site. + + + The paragraph format + + This is an arbitrary HTML string where the following printf-like + % substitutions will be performed: + + + + %AAbstract + + %DDate + + %IIcon image + name. This is normally determined from the mime type. The + associations are defined inside the + + mimeconf configuration file. + If a thumbnail for the file is found at + the standard Freedesktop location, this will be displayed + instead. + + %KKeywords (if + any) + + %LPrecooked Preview, + Edit, and possibly Snippets links + + %MMime + type + + %Nresult Number inside + the result page + + %RRelevance + percentage + + %SSize + information + + %TTitle or Filename if + not set. + + %tTitle or Filename if + not set. + + %UUrl + + + + The format of the Preview, Edit, and Snippets links is + <a href="P%N">, + <a href="E%N"> + and + <a href="A%N"> + where docnum (%N) expands to the document + number inside the result page). + + In addition to the predefined values above, all strings + like %(fieldname) will be replaced by the + value of the field named fieldname for this + document. Only stored fields can be accessed in this way, the + value of indexed but not stored fields is not known at this + point in the search process + (see field + configuration). There are currently very few fields + stored by default, apart from the values above + (only author + and filename), so this feature will need + some custom local configuration to be useful. An example + candidate would be the recipient field + which is generated by the message filters. + + The default value for the paragraph format string is: + %R %S %L   %T
+%M %D   %U %i
+%A %K +]]>
+ + You may, for example, try the following for a more web-like + experience: + + %T
+%A%U - %S - %L +]]>
+ + Note that the P%N link in the above paragraph makes the title a + preview link. Or the clean looking: + + %L %R +  %T&
%S  +%U + + +
%A
%K +]]>
+
+ + These samples, and some others are + on the web + site, with pictures to show how they look. + + It is also possible to + + define the value of the snippet separator inside the abstract + section. +
+
+
+ +
+ + + Searching with the KDE KIO slave + + + What's this + + The &RCL; KIO slave allows performing a &RCL; search + by entering an appropriate URL in a KDE open dialog, or with an + HTML-based interface displayed in + Konqueror. + + The HTML-based interface is similar to the Qt-based + interface, but slightly less powerful for now. Its advantage is + that you can perform your search while staying fully within the + KDE framework: drag and drop from the result list works normally + and you have your normal choice of applications for opening + files. + + The alternative interface uses a directory view of search + results. Due to limitations in the current KIO slave interface, + it is currently not obviously useful (to me). + + The interface is described in more detail inside a help + file which you can access by entering + recoll:/ inside the + konqueror URL line (this works only if the + recoll KIO slave has been previously installed). + + + The instructions for building this module are located in the + source tree. See: + kde/kio/recoll/00README.txt. Some Linux + distributions do package the kio-recoll module, so check before + diving into the build process, maybe it's already out there ready for + one-click installation. + + + + + Searchable documents + + As a sample application, the &RCL; KIO slave could allow + preparing a set of HTML documents (for example a manual) so that + they become their own search interface inside + konqueror. + + This can be done by either explicitly inserting + ]]> links + around some document areas, or automatically by adding a + very small javascript program to the + documents, like the following example, which would initiate a search by + double-clicking any term: + + <script language="JavaScript"> + function recollsearch() { + var t = document.getSelection(); + window.location.href = 'recoll://search/query?qtp=a&p=0&q=' + + encodeURIComponent(t); + } +</script> + .... +<body ondblclick="recollsearch()"> + + + + + + + + Searching on the command line + + There are several ways to obtain search results as a text + stream, without a graphical interface: + + By passing option to the + recoll program. + + By using the recollq program. + + By writing a custom + Python program, using the + Recoll Python API. + + + + The first two methods work in the same way and accept/need the same + arguments (except for the additional to + recoll). The query to be executed is specified + as command line arguments. + + recollq is not built by default. You can + use the Makefile in the + query directory to build it. This is a very + simple program, and if you can program a little c++, you may find it + useful to taylor its output format to your needs. + + recollq has a man page (not installed by + default, look in the doc/man directory). The + Usage string is as follows: + +recollq: usage: + -P: Show the date span for all the documents present in the index + [-o|-a|-f] [-q] <query string> + Runs a recoll query and displays result lines. + Default: will interpret the argument(s) as a xesam query string + query may be like: + implicit AND, Exclusion, field spec: t1 -t2 title:t3 + OR has priority: t1 OR t2 t3 OR t4 means (t1 OR t2) AND (t3 OR t4) + Phrase: "t1 t2" (needs additional quoting on cmd line) + -o Emulate the GUI simple search in ANY TERM mode + -a Emulate the GUI simple search in ALL TERMS mode + -f Emulate the GUI simple search in filename mode + -q is just ignored (compatibility with the recoll GUI command line) +Common options: + -c <configdir> : specify config directory, overriding $RECOLL_CONFDIR + -d also dump file contents + -n [first-]<cnt> define the result slice. The default value for [first] + is 0. Without the option, the default max count is 2000. + Use n=0 for no limit + -b : basic. Just output urls, no mime types or titles + -Q : no result lines, just the processed query and result count + -m : dump the whole document meta[] array for each result + -A : output the document abstracts + -S fld : sort by field <fld> + -D : sort descending + -i <dbdir> : additional index, several can be given + -e use url encoding (%xx) for urls + -F <field name list> : output exactly these fields for each result. + The field values are encoded in base64, output in one line and + separated by one space character. This is the recommended format + for use by other programs. Use a normal query with option -m to + see the field names. + + + Sample execution: +recollq 'ilur -nautique mime:text/html' +Recoll query: ((((ilur:(wqf=11) OR ilurs) AND_NOT (nautique:(wqf=11) + OR nautiques OR nautiqu OR nautiquement)) FILTER Ttext/html)) +4 results +text/html [file:///Users/uncrypted-dockes/projets/bateaux/ilur/comptes.html] [comptes.html] 18593 bytes +text/html [file:///Users/uncrypted-dockes/projets/nautique/webnautique/articles/ilur1/index.html] [Constructio... +text/html [file:///Users/uncrypted-dockes/projets/pagepers/index.html] [psxtcl/writemime/recoll]... +text/html [file:///Users/uncrypted-dockes/projets/bateaux/ilur/factEtCie/recu-chasse-maree.... + + + + + Path translations + + In some cases, the document paths stored inside the index do + not match the actual ones, so that document + previews and accesses will fail. This can occur in a number of + circumstances: + + When using multiple indexes it is a relatively common + occurrence that some will actually reside on a remote volume, for + exemple mounted via NFS. In this case, the paths used to access + the documents on the local machine are not necessarily the same + than the ones used while indexing on the remote machine. For + example, /home/me may have been used as + a topdirs elements while indexing, but the + directory might be mounted + as /net/server/home/me on the local + machine. + + The case may also occur with removable + disks. It is perfectly possible to configure an index to + live with the documents on the removable disk, but it may + happen that the disk is not mounted at the same place so + that the documents paths from the index are + invalid. + + As a last exemple, one could imagine that a big + directory has been moved, but that it is currently + inconvenient to run the indexer. + + + More generally, the path translation facility may be useful + whenever the documents paths seen by the indexer are not the same + as the ones which should be used at query time. + + &RCL; has a facility for rewriting access paths when + extracting the data from the index. The translations can be + defined for the main index and for any additional query + index. + + In the above NFS example, &RCL; could be instructed to + rewrite any file:///home/me URL from the + index to file:///net/server/home/me, + allowing accesses from the client. + + The translations are defined in the + + ptrans configuration file, which + can be edited by hand or from the GUI external indexes + configuration dialog. + + + + + + The query language + + The query language processor is activated in the GUI + simple search entry when the search mode selector is set to + Query Language. It can also be used with the KIO + slave or the command line search. It broadly has the same + capabilities as the complex search interface in the + GUI. + + The language is based on the (seemingly defunct) + + Xesam user search language specification. + + If the results of a query language search puzzle you and you + doubt what has been actually searched for, you can use the GUI + Show Query link at the top of the result list to + check the exact query which was finally executed by Xapian. + + Here follows a sample request that we are going to + explain: + + + author:"john doe" Beatles OR Lennon Live OR Unplugged -potatoes + + + This would search for all documents with + John Doe + appearing as a phrase in the author field (exactly what this is + would depend on the document type, ie: the + From: header, for an email message), + and containing either beatles or + lennon and either + live or + unplugged but not + potatoes (in any part of the document). + + An element is composed of an optional field specification, + and a value, separated by a colon (the field separator is the last + colon in the element). Example: + Eugenie, + author:balzac, + dc:title:grandet + + The colon, if present, means "contains". Xesam defines other + relations, which are mostly unsupported for now (except in special + cases, described further down). + + All elements in the search entry are normally combined + with an implicit AND. It is possible to specify that elements be + OR'ed instead, as in Beatles + OR Lennon. The + OR must be entered literally (capitals), and + it has priority over the AND associations: + word1 + word2 OR + word3 + means + word1 AND + (word2 OR + word3) + not + (word1 AND + word2) OR + word3. Explicit + parenthesis are not supported. + + An element preceded by a - specifies a + term that should not appear. Pure negative + queries are forbidden. + + As usual, words inside quotes define a phrase + (the order of words is significant), so that + title:"prejudice pride" is not the same as + title:prejudice title:pride, and is + unlikely to find a result. + + Modifiers can be set on a phrase clause, for example to specify + a proximity search (unordered). See + the modifier + section. + + &RCL; currently manages the following default fields: + + + + title, + subject or caption are + synonyms which specify data to be searched for in the + document title or subject. + + + author or + from for searching the documents + originators. + + + recipient or + to for searching the documents + recipients. + + + keyword for searching the + document-specified keywords (few documents actually have + any). + + + filename for the document's + file name. + + ext specifies the file + name extension (Ex: ext:html) + + + + + The field syntax also supports a few field-like, but + special, criteria: + + + + dir for filtering the + results on file location + (Ex: dir:/home/me/somedir). + -dir + also works to find results not in the specified directory + (release >= 1.15.8). A tilde inside the value will be + expanded to the home directory. Wildcards will be + expanded, but + please have a + look at an important limitation of wildcards in + path filters. + + Relative paths also make sense, for example, + dir:share/doc would match either + /usr/share/doc or + /usr/local/share/doc + + Several dir clauses can be specified, + both positive and negative. For example the following makes sense: + +dir:recoll dir:src -dir:utils -dir:common + This would select results which have both + recoll and src in the + path (in any order), and which have not either + utils or + common. + + You can also use OR conjunctions + with dir: clauses. + + A special aspect of dir clauses is + that the values in the index are not transcoded to UTF-8, and + never lower-cased or unaccented, but stored as binary. This means + that you need to enter the values in the exact lower or upper + case, and that searches for names with diacritics may sometimes + be impossible because of character set conversion + issues. Non-ASCII UNIX file paths are an unending source of + trouble and are best avoided. + + You need to use double-quotes around the path value if it + contains space characters. + + + + size for filtering the + results on file size. Example: + size<10000. You can use + <, > or + = as operators. You can specify a range like the + following: size>100 size<1000. The usual + k/K, m/M, g/G, t/T can be used as (decimal) + multipliers. Ex: size>1k to search for files + bigger than 1000 bytes. + + + date for searching or filtering + on dates. The syntax for the argument is based on the ISO8601 + standard for dates and time intervals. Only dates are supported, no + times. The general syntax is 2 elements separated by a + / character. Each element can be a date or a + period of time. Periods are specified as + PnYnMnD. + The n numbers are the respective numbers + of years, months or days, any of which may be missing. Dates are + specified as + YYYY-MM-DD. + The days and months parts may be missing. If the + / is present but an element is missing, the + missing element is interpreted as the lowest or highest date in the + index. Examples: + + + 2001-03-01/2002-05-01 the + basic syntax for an interval of dates. + + 2001-03-01/P1Y2M the + same specified with a period. + + 2001/ from the beginning of + 2001 to the latest date in the index. + + 2001 the whole year of + 2001 + P2D/ means 2 days ago up to + now if there are no documents with dates in the future. + + /2003 all documents from + 2003 or older. + + + Periods can also be specified with small letters (ie: + p2y). + + + mime or + format for specifying the + mime type. This one is quite special because you can specify + several values which will be OR'ed (the normal default for the + language is AND). Ex: mime:text/plain + mime:text/html. Specifying an explicit boolean + operator before a + mime specification is not supported and + will produce strange results. You can filter out certain types + by using negation (-mime:some/type), and you can + use wildcards in the value (mime:text/*). + Note that mime is + the ONLY field with an OR default. You do need to use + OR with ext terms for + example. + + + type or + rclcat for specifying the category (as in + text/media/presentation/etc.). The classification of mime + types in categories is defined in the &RCL; configuration + (mimeconf), and can be modified or + extended. The default category names are those which permit + filtering results in the main GUI screen. Categories are OR'ed + like mime types above. This can't be negated with + - either. + + + + + Words inside phrases and capitalized words are not + stem-expanded. Wildcards may be used anywhere inside a term. + Specifying a wild-card on the left of a term can produce a very + slow search (or even an incorrect one if the expansion is + truncated because of excessive size). Also see + + More about wildcards. + + The document filters used while indexing have the + possibility to create other fields with arbitrary names, and + aliases may be defined in the configuration, so that the exact + field search possibilities may be different for you if someone + took care of the customisation. + + + Modifiers + + Some characters are recognized as search modifiers when found + immediately after the closing double quote of a phrase, as in + "some term"modifierchars. The actual "phrase" + can be a single term of course. Supported modifiers: + + + l can be used to turn off + stemming (mostly makes sense with p because + stemming is off by default for phrases). + + + o can be used to specify a + "slack" for phrase and proximity searches: the number of + additional terms that may be found between the specified + ones. If o is followed by an integer number, + this is the slack, else the default is 10. + + + p can be used to turn the + default phrase search into a proximity one + (unordered). Example:"order any in"p + + + C will turn on case + sensitivity (if the index supports it). + + D will turn on diacritics + sensitivity (if the index supports it). + + A weight can be specified for a query element + by specifying a decimal value at the start of the + modifiers. Example: "Important"2.5. + + + + + + + + + + + + Search case and diacritics sensitivity + + For &RCL; versions 1.18 and later, and when working + with a raw index (not the default), searches can be + made sensitive + to character case and diacritics. How this happens is controlled by + configuration variables and what search data is entered. + + The general default is that searches are insensitive to case + and diacritics. An entry of resume will match any + of Resume, RESUME, + résumé, Résumé etc. + + Two configuration variables can automate switching on + sensitivity: + + + + + autodiacsensIf this is set, search + sensitivity to diacritics will be turned on as soon as an + accented character exists in a search term. When the variable + is set to true, resume will start a + diacritics-unsensitive search, but résumé + will be matched exactly. The default value is + false. + + + + autocasesensIf this is set, search + sensitivity to character case will be turned on as soon as an + upper-case character exists in a search term except + for the first one. When the variable is set to + true, us or Us will + start a diacritics-unsensitive search, but + US will be matched exactly. The default + value is true (contrary to + autodiacsens). + + + + + As in the past, capitalizing the first letter of a word will + turn off its stem expansion and have no effect on + case-sensitivity. + + You can also explicitely activate case and diacritics + sensitivity by using modifiers with the query + language. C will make the term case-sensitive, and + D will make it + diacritics-sensitive. Examples: + + "us"C + + + will search for the term us exactly + (Us will not be a match). + + + "resume"D + + will search for the term resume exactly + (résumé will not be a match). + + + When either case or diacritics sensitivity is activated, stem + expansion is turned off. Having both does not make much sense. + + + + + Anchored searches and wildcards + + Some special characters are interpreted by &RCL; in search + strings to expand or specialize the search. Wildcards expand a root + term in controlled ways. Anchor characters can restrict a search to + succeed only if the match is found at or near the beginning of the + document or one of its fields. + + + More about wildcards + + All words entered in &RCL; search fields will be processed + for wildcard expansion before the request is finally + executed. + + The wildcard characters are: + + + * which matches 0 or more + characters. + + ? which matches + a single character. + + [] which allow + defining sets of characters to be matched (ex: + [abc] + matches a single character which may be 'a' or 'b' or 'c', + [0-9] + matches any number. + + + + You should be aware of a few things when using + wildcards. + + + Using a wildcard character at the beginning of + a word can make for a slow search because &RCL; will have to + scan the whole index term list to find the + matches. However, this is much less a problem for field + searches, and queries + like author:*@domain.com can + sometimes be very useful. + + For &RCL; version 18 only, when working with a + raw index (preserving character case and diacritics), the + literal part of a wildcard expression will be matched + exactly for case and diacritics. This is not true any + more for versions 19 and later. + + Using a * at the end of a + word can produce more matches than you would think, and + strange search results. You can use the + term + explorer tool to check what completions exist for + a given term. You can also see exactly what search was + performed by clicking on the link at the top of the result + list. In general, for natural language terms, stem + expansion will produce better results than an + ending * (stem expansion is turned off + when any wildcard character appears in the + term). + + + + Wildcards and path filtering + + Due to the way that &RCL; processes wildcards + inside dir path filtering clauses, they + will have a multiplicative effect on the query size. A clause + containg wildcards in several paths elements, like, for + example, + dir:/home/me/*/*/docdir, + will almost certainly fail if your indexed tree is of any realistic + size. + + Depending on the case, you may be able to work around + the issue by specifying the paths elements more narrowly, with + a constant prefix, or by using 2 + separate dir: clauses instead of multiple + wildcards, as + in dir:/home/me dir:docdir. The + latter query is not equivalent to the initial one because it + does not specify a number of directory levels, but that's + the best we can do (and it may be actually more useful in + some cases). + + + + + + + Anchored searches + + Two characters are used to specify that a search hit should + occur at the beginning or at the end of the + text. ^ at the beginning of a term or phrase + constrains the search to happen at the start, $ + at the end force it to happen at the end. + + As this function is implemented as a phrase search it is + possible to specify a maximum distance at which the hit should + occur, either through the controls of the advanced search panel, or + using the query language, for example, as in: + "^someterm"o10 which would force + someterm to be found within 10 terms of the + start of the text. This can be combined with a field search as in + somefield:"^someterm"o10 or + somefield:someterm$. + + This feature can also be used with an actual phrase search, + but in this case, the distance applies to the whole phrase and + anchor, so that, for example, bla bla my unexpected + term at the beginning of the text would be a match for + "^my term"o5. + + Anchored searches can be very useful for searches inside + somewhat structured documents like scientific articles, in case + explicit metadata has not been supplied (a most frequent case), for + example for looking for matches inside the abstract or the list of + authors (which occur at the top of the document). + + + + + + + + Desktop integration + + Being independant of the desktop type has its drawbacks: &RCL; + desktop integration is minimal. However there are a few tools + available: + + + The KDE KIO Slave was + described in a previous + section. + + + If you use a recent version of Ubuntu Linux, you may + find the Ubuntu Unity + Lens module useful. + + + There is also an independantly developed + + Krunner plugin. + + + + + Here follow a few other things that may help. + + + Hotkeying recoll + + It is surprisingly convenient to be able to show or hide the + &RCL; GUI with a single keystroke. Recoll comes with a small + Python script, based on the libwnck window + manager interface library, which will allow you to do just + this. The detailed instructions are on + this wiki page. + + + + + The KDE Kicker Recoll applet + + This is probably obsolete now. Anyway: + The &RCL; source tree contains the source code to the + recoll_applet, a small application derived + from the find_applet. This can be used to + add a small &RCL; launcher to the KDE panel. + + The applet is not automatically built with the main &RCL; + programs, nor is it included with the main source distribution + (because the KDE build boilerplate makes it relatively big). You can + download its source from the recoll.org download page. Use the + omnipotent configure;make;make install + incantation to build and install. + + You can then add the applet to the panel by right-clicking the + panel and choosing the Add applet entry. + + The recoll_applet has a small text + window where you can type a &RCL; query (in query language form), + and an icon which can be used to restrict the search to certain + types of files. It is quite primitive, and launches a new recoll + GUI instance every time (even if it is already running). You may + find it useful anyway. + + + + + +
+ + + + Programming interface + + &RCL; has an Application Programming Interface, usable both + for indexing and searching, currently accessible from the + Python language. + + Another less radical way to extend the application is to + write filters for new types of documents. + + The processing of metadata attributes for documents + (fields) is highly configurable. + + + + + Writing a document filter + + &RCL; filters cooperate to translate from the multitude + of input document formats, simple ones + as opendocument, + acrobat), or compound ones such + as Zip + or Email, into the final &RCL; + indexing input format, which may + be text/plain + or text/html. Most filters are executable + programs or scripts. A few filters are coded in C++ and live + inside recollindex. This latter kind will not + be described here. + + There are currently (1.18 and since 1.13) two kinds of + external executable filters: + + Simple filters (exec + filters) run once and + exit. They can be bare programs + like antiword, or scripts + using other programs. They are very simple to write, + because they just need to print the converted document + to the standard output. Their output can + be text/plain + or text/html. + + Multiple filters (execm + filters), run as long as + their master process (recollindex) is + active. They can process multiple files (sparing the + process startup time which can be very significant), + or multiple documents per file (e.g.: for zip or chm + files). They communicate with the indexer through a + simple protocol, but are nevertheless a bit more + complicated than the older kind. Most of new + filters are written + in Python, using a common + module to handle the protocol. There is an + exception, rclimg which is written + in Perl. The subdocuments output by these filters can + be directly indexable (text or HTML), or they can be + other simple or compound documents that will need to + be processed by another filter. + + + + + In both cases, filters deal with regular file system + files, and can process either a single document, or a + linear list of documents in each file. &RCL; is responsible + for performing up to date checks, deal with more complex + embedding and other upper level issues. + + In the extreme case of a simple filter returning a + document in text/plain format, no + metadata can be transferred from the filter to the + indexer. Generic metadata, like document size or + modification date, will be gathered and stored by the + indexer. + + Filters that produce text/html + format can return an arbitrary amount of metadata inside HTML + meta tags. These will be processed + according to the directives found in + the + fields configuration + file. + + The filters that can handle multiple documents per file + return a single piece of data to identify each document inside + the file. This piece of data, called + an ipath element will be sent back by + &RCL; to extract the document at query time, for previewing, + or for creating a temporary file to be opened by a + viewer. + + The following section describes the simple + filters, and the next one gives a few explanations about + the execm ones. You could conceivably + write a simple filter with only the elements in the + manual. This will not be the case for the other ones, for + which you will have to look at the code. + + + Simple filters + + &RCL; simple filters are usually shell-scripts, but this is in + no way necessary. Extracting the text from the native format is the + difficult part. Outputting the format expected by &RCL; is + trivial. Happily enough, most document formats have translators or + text extractors which can be called from the filter. In some cases + the output of the translating program is completely appropriate, + and no intermediate shell-script is needed. + + Filters are called with a single argument which is the + source file name. They should output the result to stdout. + + When writing a filter, you should decide if it will output + plain text or HTML. Plain text is simpler, but you will not be able + to add metadata or vary the output character encoding (this will be + defined in a configuration file). Additionally, some formatting may + be easier to preserve when previewing HTML. Actually the deciding factor + is metadata: &RCL; has a way to + extract metadata from the HTML header and use it for field + searches.. + + The RECOLL_FILTER_FORPREVIEW environment + variable (values yes, no) + tells the filter if the operation is for indexing or + previewing. Some filters use this to output a slightly different + format, for example stripping uninteresting repeated keywords (ie: + Subject: for email) when indexing. This is not + essential. + + You should look at one of the simple filters, for example + rclps for a starting point. + + Don't forget to make your filter executable before + testing ! + + + + + "Multiple" filters + + If you can program and want to write + an execm filter, it should not be too + difficult to make sense of one of the existing modules. For + example, look at rclzip which uses Zip + file paths as identifiers (ipath), + and rclics, which uses an integer + index. Also have a look at the comments inside + the internfile/mh_execm.h file and + possibly at the corresponding module. + + execm filters sometimes need to make + a choice for the nature of the ipath + elements that they use in communication with the + indexer. Here are a few guidelines: + + Use ASCII or UTF-8 (if the identifier is an + integer print it, for example, like printf %d would + do). + If at all possible, the data should make some + kind of sense when printed to a log file to help with + debugging. + &RCL; uses a colon (:) as a + separator to store a complex path internally (for + deeper embedding). Colons inside + the ipath elements output by a + filter will be escaped, but would be a bad choice as a + filter-specific separator (mostly, again, for + debugging issues). + + In any case, the main goal is that it should + be easy for the filter to extract the target document, given + the file name and the ipath + element. + + execm filters will also produce + a document with a null ipath + element. Depending on the type of document, this may have + some associated data (e.g. the body of an email message), or + none (typical for an archive file). If it is empty, this + document will be useful anyway for some operations, as the + parent of the actual data documents. + + + + Telling &RCL; about the filter + + There are two elements that link a file to the filter which + should process it: the association of file to mime type and the + association of a mime type with a filter. + + The association of files to mime types is mostly based on + name suffixes. The types are defined inside the + + mimemap file. Example: + + +.doc = application/msword + + If no suffix association is found for the file name, &RCL; will try + to execute the file -i command to determine a + mime type. + + The association of file types to filters is performed in + the + mimeconf file. A sample will probably be + of better help than a long explanation: + + +[index] +application/msword = exec antiword -t -i 1 -m UTF-8;\ + mimetype = text/plain ; charset=utf-8 + +application/ogg = exec rclogg + +text/rtf = exec unrtf --nopict --html; charset=iso-8859-1; mimetype=text/html + +application/x-chm = execm rclchm + + + The fragment specifies that: + + + application/msword files + are processed by executing the antiword + program, which outputs + text/plain encoded in + utf-8. + + + application/ogg files are + processed by the rclogg script, with + default output type (text/html, with + encoding specified in the header, or utf-8 + by default). + + + text/rtf is processed by + unrtf, which outputs + text/html. The + iso-8859-1 encoding is specified because it + is not the utf-8 default, and not output by + unrtf in the HTML header section. + + application/x-chm is processed + by a persistant filter. This is determined by the + execm keyword. + + + + + + + + Filter HTML output + + The output HTML could be very minimal like the following + example: + +<html> + <head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> + </head> + <body> + Some text content + </body> +</html> + + + + You should take care to escape some + characters inside the text by transforming them into + appropriate entities. At the very minimum, + "&" should be transformed into + "&amp;", "<" + should be transformed into + "&lt;". This is not always properly + done by translating programs which output HTML, and of + course never by those which output plain text. + + When encapsulating plain text in an HTML body, + the display of a preview may be improved by enclosing the + text inside <pre> tags. + + The character set needs to be specified in the + header. It does not need to be UTF-8 (&RCL; will take care + of translating it), but it must be accurate for good + results. + + &RCL; will process meta tags inside + the header as possible document fields candidates. Documents + fields can be processed by the indexer in different ways, + for searching or displaying inside query results. This is + described in a following + section. + + + By default, the indexer will process the standard header + fields if they are present: title, + meta/description, + and meta/keywords are both indexed and stored + for query-time display. + + A predefined non-standard meta tag + will also be processed by &RCL; without further + configuration: if a date tag is present + and has the right format, it will be used as the document + date (for display and sorting), in preference to the file + modification date. The date format should be as follows: + +<meta name="date" content="YYYY-mm-dd HH:MM:SS"> +or +<meta name="date" content="YYYY-mm-ddTHH:MM:SS"> + + Example: + +<meta name="date" content="2013-02-24 17:50:00"> + + + + Filters also have the possibility to "invent" field + names. This should also be output as meta tags: + + +<meta name="somefield" content="Some textual data" /> + + + You can embed HTML markup inside the content of custom + fields, for improving the display inside result lists. In this + case, add a (wildly non-standard) markup + attribute to tell &RCL; that the value is HTML and should not + be escaped for display. + + +<meta name="somefield" markup="html" content="Some <i>textual</i> data" /> + + + As written above, the processing of fields is described + in a further + section. + + + + + Page numbers + + The indexer will interpret ^L characters + in the filter output as indicating page breaks, and will record + them. At query time, this allows starting a viewer on the right + page for a hit or a snippet. Currently, only the PDF, Postscript + and DVI filters generate page breaks. + + + + + + + Field data processing + + Fields are named pieces of information + in or about documents, like title, + author, abstract. + + The field values for documents can appear in several ways + during indexing: either output by filters + as meta fields in the HTML header section, or + extracted from file extended attributes, or added as attributes + of the Doc object when using the API, or + again synthetized internally by &RCL;. + + The &RCL; query language allows searching for text in a + specific field. + + &RCL; defines a number of default fields. Additional + ones can be output by filters, and described in the + fields configuration file. + + Fields can be: + + + indexed, meaning that their + terms are separately stored in inverted lists (with a specific + prefix), and that a field-specific search is possible. + + + stored, meaning that their + value is recorded in the index data record for the document, + and can be returned and displayed with search results. + + + + + A field can be either or both indexed and stored. This and + other aspects of fields handling is defined inside the + fields configuration file. + + The sequence of events for field processing is as follows: + + During indexing, + recollindex scans all meta + fields in HTML documents (most document types are transformed + into HTML at some point). It compares the name for each element + to the configuration defining what should be done with fields + (the fields file) + + If the name for the meta + element matches one for a field that should be indexed, the + contents are processed and the terms are entered into the index + with the prefix defined in the fields + file. + + If the name for the meta element + matches one for a field that should be stored, the content of the + element is stored with the document data record, from which it + can be extracted and displayed at query time. + + At query time, if a field search is performed, the + index prefix is computed and the match is only performed against + appropriately prefixed terms in the index. + + At query time, the field can be displayed inside + the result list by using the appropriate directive in the + definition of the result list paragraph + format. All fields are displayed on the fields screen of + the preview window (which you can reach through the right-click + menu). This is independant of the fact that the search which + produced the results used the field or not. + + + + + You can find more information in the + section about the + fields file, or in comments inside the + file. + + You can also have a look at the + example on the Wiki, + detailing how one could add a page count field + to pdf documents for displaying inside result lists. + + + + + + API + + + Interface elements + + A few elements in the interface are specific and and need + an explanation. + + + + + udi An udi (unique document + identifier) identifies a document. Because of limitations + inside the index engine, it is restricted in length (to + 200 bytes), which is why a regular URI cannot be used. The + structure and contents of the udi is defined by the + application and opaque to the index engine. For example, + the internal file system indexer uses the complete + document path (file path + internal path), truncated to + length, the suppressed part being replaced by a hash + value. + + + + ipath + + This data value (set as a field in the Doc + object) is stored, along with the URL, but not indexed by + &RCL;. Its contents are not interpreted, and its use is up + to the application. For example, the &RCL; internal file + system indexer stores the part of the document access path + internal to the container file (ipath in + this case is a list of subdocument sequential numbers). url + and ipath are returned in every search result and permit + access to the original document. + + + + + Stored and indexed fields + + The fields file inside + the &RCL; configuration defines which document fields are + either "indexed" (searchable), "stored" (retrievable with + search results), or both. + + + + + + Data for an external indexer, should be stored in a + separate index, not the one for the &RCL; internal file system + indexer, except if the latter is not used at all). The reason + is that the main document indexer purge pass would remove all + the other indexer's documents, as they were not seen during + indexing. The main indexer documents would also probably be a + problem for the external indexer purge operation. + + + + + Python interface + + + Introduction + + &RCL; versions after 1.11 define a Python programming + interface, both for searching and indexing. + + The API is inspired by the Python database API + specification, version 1.0 for &RCL; versions up to 1.18, + version 2.0 for &RCL; versions 1.19 and later. The package + structure changed with &RCL; 1.19 too. We will mostly + describe the new API and package structure here. A paragraph + at the end of this section will explain a few differences + and ways to write code compatible with both versions. + + The Python interface can be found in the source package, + under python/recoll. + + The python/recoll/ directory + contains the usual setup.py. After + configuring the main &RCL; code, you can use the script to + build and install the Python module: + + cd recoll-xxx/python/recoll + python setup.py build + python setup.py install + + + + + + + Recoll package + + The recoll package contains two + modules: + + The recoll module contains + functions and classes used to query (or update) the + index. + The rclextract module contains + functions and classes used to access document + data. + + + + + + The recoll module + + + Functions + + + + connect(confdir=None, extra_dbs=None, + writable = False) + + The connect() function connects to + one or several &RCL; index(es) and returns + a Db object. + + confdir may specify + a configuration directory. The usual defaults + apply. + extra_dbs is a list of + additional indexes (Xapian directories). + writable decides if + we can index new data through this + connection. + + This call initializes the recoll module, and it should + always be performed before any other call or object creation. + + + + + + + + + Classes + + + The Db class + + A Db object is created by + a connect() function and holds a + connection to a Recoll index. + + Methods + + Db.close() + Closes the connection. You can't do anything + with the Db object after + this. + + + Db.query(), Db.cursor() These + aliases return a blank Query object + for this index. + + + + Db.setAbstractParams(maxchars, contextwords) + Set the parameters used to build snippets. + + + + + + + + + The Query class + + A Query object (equivalent to a + cursor in the Python DB API) is created by + a Db.query() call. It is used to + execute index searches. + + + Methods + + + Query.sortby(fieldname, ascending=True) + Sort results + by fieldname, in ascending + or descending order. Must be called before executing + the search. + + + + Query.execute(query_string, stemming=1, + stemlang="english") + Starts a search + for query_string, a &RCL; + search language string. + + + + Query.executesd(SearchData) + Starts a search for the query defined by the + SearchData object. + + + + Query.fetchmany(size=query.arraysize) + + Fetches + the next Doc objects in the current + search results, and returns them as an array of the + required size, which is by default the value of + the arraysize data member. + + + + Query.fetchone() + Fetches the next Doc object + from the current search results. + + + + Query.close() + Closes the connection. The object is unusable + after the call. + + + + Query.scroll(value, mode='relative') + Adjusts the position in the current result + set. mode can + be relative + or absolute. + + + + Query.getgroups() + Retrieves the expanded query terms as a list + of pairs. Meaningful only after executexx + In each pair, the first entry is a list of user terms, + the second a list of query terms as derived from the + user terms and used in the Xapian Query. The size of + each list is one for simple terms, or more for group + and phrase clauses. + + + + Query.getxquery() + Return the Xapian query description as a Unicode string. + Meaningful only after executexx. + + + + Query.highlight(text, ishtml = 0, methods = object) + Will insert <span "class=rclmatch">, + </span> tags around the match areas in the input text + and return the modified text. ishtml + can be set to indicate that the input text is HTML and + that HTML special characters should not be escaped. + methods if set should be an object + with methods startMatch(i) and endMatch() which will be + called for each match and should return a begin and end + tag + + + + Query.makedocabstract(doc, methods = object)) + Create a snippets abstract + for doc (a Doc + object) by selecting text around the match terms. + If methods is set, will also perform highlighting. See + the highlight method. + + + + + Query.__iter__() and Query.next() + So that things like for doc in + query: will work. + + + + + Data descriptors + + Query.arraysize Default + number of records processed by fetchmany (r/w). + + Query.rowcountNumber of + records returned by the last execute. + Query.rownumberNext index + to be fetched from results. Normally increments after + each fetchone() call, but can be set/reset before the + call effect seeking. Starts at 0. + + + + + + + + + The Doc class + + A Doc object contains index data + for a given document. The data is extracted from the + index when searching, or set by the indexer program when + updating. The Doc object has many attributes to be read or + set by its user. It matches exactly the Rcl::Doc C++ + object. Some of the attributes are predefined, but, + especially when indexing, others can be set, the name of + which will be processed as field names by the indexing + configuration. Inputs can be specified as Unicode or + strings. Outputs are Unicode objects. All dates are + specified as Unix timestamps, printed as strings. Please + refer to the rcldb/rcldoc.h C++ file + for a description of the predefined attributes. + + At query time, only the fields that are defined + as stored either by default or in + the fields configuration file will be + meaningful in the Doc + object. Especially this will not be the case for the + document text. See the rclextract + module for accessing document contents. + + + Methods + + + get(key), [] operator + Retrieve the named doc attribute + + getbinurl()Retrieve + the URL in byte array format (no transcoding), for use as + parameter to a system call. + + + items() + Return a dictionary of doc object + keys/values + + + keys() + list of doc object keys (attribute + names). + + + + + + + The SearchData class + + A SearchData object allows building + a query by combining clauses, for execution + by Query.executesd(). It can be used + in replacement of the query language approach. The + interface is going to change a little, so no detailed doc + for now... + + + Methods + + + addclause(type='and'|'or'|'excl'|'phrase'|'near'|'sub', + qstring=string, slack=0, field='', stemming=1, + subSearch=SearchData) + + + + + + + + + + + The rclextract module + + Document content is not provided by an index query. To + access it, the data extraction part of the indexing process + must be performed (subdocument access and format + translation). This is not trivial in + general. The rclextract module currently + provides a single class which can be used to access the data + content for result documents. + + + Classes + + + The Extractor class + + + Methods + + + Extractor(doc) + An Extractor object is + built from a Doc object, output + from a query. + + + Extractor.textextract(ipath) + Extract document defined + by ipath and return + a Doc object. The doc.text field + has the document text as either text/plain or + text/html according to doc.mimetype. + + + Extractor.idoctofile() + Extracts document into an output file, + which can be given explicitly or will be created as a + temporary file to be deleted by the caller. + + + + + + + + + + + + Example code + + The following sample would query the index with a user + language string. See the python/samples + directory inside the &RCL; source for other + examples. The recollgui subdirectory + has a very embryonic GUI which demonstrates the + highlighting and data extraction functions. + + +#!/usr/bin/env python + 5: + nres = 5 +for i in range(nres): + doc = query.fetchone() + print "Result #%d" % (query.rownumber,) + for k in ("title", "size"): + print k, ":", getattr(doc, k).encode('utf-8') + abs = db.makeDocAbstract(doc, query).encode('utf-8') + print abs + print + +]]> + + + + + + Compatibility with the previous version + + The following code fragments can be used to ensure that + code can run with both the old and the new API (as long as it + does not use the new abilities of the new API of + course). + + Adapting to the new package structure: + + + + + Adapting to the change of nature of + the next Query + member. The same test can be used to choose to use + the scroll() method (new) or set + the next value (old). + + + + + + + + + + + + + Installation and configuration + + + Installing a binary copy + + There are three types of binary &RCL; installations: + + Through your system normal software distribution + framework (ie, Debian/Ubuntu apt, + FreeBSD ports, etc.). + + + From a package downloaded from the + &RCL; web site. + + + From a prebuilt tree downloaded from the &RCL; + web site. + + + + In all cases, the strict software dependancies (ie on &XAP; or + iconv) will be automatically satisfied, + you should not have to worry about them. + + You will only have to check or install supporting applications + for the file types that you want to index beyond those that are + natively processed by &RCL; (text, HTML, email files, and a few + others). + + You should also maybe have a look at the + configuration section + (but this may not be necessary for a quick test with default + parameters). Most parameters can be more conveniently set from the + GUI interface. + + + Installing through a package system + + If you use a BSD-type port system or a prebuilt package (DEB, + RPM, manually or through the system software configuration + utility), just follow the usual procedure for your system. + + + + + Installing a prebuilt &RCL; + + The unpackaged binary versions on the &RCL; web site are + just compressed tar files of a build tree, where only the + useful parts were kept (executables and sample + configuration). + + The executable binary files are built with a static link to + libxapian and libiconv, to make installation easier (no + dependencies). + + After extracting the tar file, you can proceed with + installation as + if you had built the package from source (that is, just type + make install). The binary trees are built for + installation to /usr/local. + + + + + + Supporting packages + + &RCL; uses external applications to index some file + types. You need to install them for the file types that you wish to + have indexed (these are run-time optional dependencies. None is + needed for building or running &RCL; except for indexing their + specific file type). + + After an indexing pass, the commands that were found + missing can be displayed from the recoll + File menu. The list is stored in the + missing text file inside the configuration + directory. + + A list of common file types which need external + commands follows. Many of the filters need the + iconv command, which is not always listed as a + dependancy. + + Please note that, due to the relatively dynamic nature of this + information, the most up to date version is now kept on the &RCLAPPS; + along with links to the home pages or best source/patches pages, + and misc tips. The list below is not updated often and may be quite + stale. + + For many Linux distributions, most of the commands listed can + be installed from the package repositories. However, the packages + are sometimes outdated, or not the best version for &RCL;, so you + should take a look at the &RCLAPPS; if a file + type is important to you. + + As of &RCL; release 1.14, a number of XML-based formats that + were handled by ad hoc filter code now use the + xsltproc command, which usually comes with + libxslt. These are: abiword, fb2 + (ebooks), kword, openoffice, svg. + + Now for the list: + + + Openoffice files need unzip and + xsltproc. + + PDF files need pdftotext which + is part of the Xpdf or + Poppler packages. + + Postscript files need pstotext. + The original version has an issue with shell + character in file names, which is corrected in recent + packages. See the the &RCLAPPS; for more detail. + + + MS Word needs + antiword. It is also useful to have + wvWare installed as it may be + be used as a fallback for some files which + antiword does not handle. + + MS Excel and PowerPoint need + catdoc. + + MS Open XML (docx) needs + xsltproc. + + Wordperfect files need wpd2html + from the libwpd (or + libwpd-tools on Ubuntu) + package. + + RTF files need unrtf, which, in + its standard version, has much trouble with non-western character + sets. Check the &RCLAPPS;. + + TeX files need untex or + detex. Check the &RCLAPPS; for sources if it's not + packaged for your distribution. + + dvi files need dvips. + + + djvu files need djvutxt and + djvused from the + DjVuLibre package. + + Audio files: &RCL; releases before 1.13 + used the id3info command from the + id3lib package to extract mp3 tag information, + metaflac (standard flac tools) for flac files, + and ogginfo (vorbis tools) for ogg + files. Releases 1.14 and later use a single + Python filter based + on mutagen for all audio file + types. + + + Pictures: &RCL; uses the + Exiftool + Perl package to extract tag + information. Most image file formats are supported. Note that + there may not be much interest in indexing the technical tags + (image size, aperture, etc.). This is only of interest if you + store personal tags or textual descriptions inside the image + files. + + chm: files in microsoft help format need Python and + the pychm module (which needs + chmlib). + + ICS: up to &RCL; 1.13, iCalendar files need + Python + and the icalendar + module. icalendar is not needed for newer + versions, which use internal code. + + Zip archives need Python + (and the standard zipfile module). + + Rar archives need + Python, the + rarfile Python module and the + unrar utility. + + Midi karaoke files need + Python and the + + Midi module + + + Konqueror webarchive format with Python (uses the + Tarfile module). + + mimehtml web archive format (support based on the email + filter, which introduces some mild weirdness, but still + usable). + + + + Text, HTML, email folders, and Scribus files are + processed internally. Lyx is used to + index Lyx files. Many filters need iconv and the + standard sed and awk. + + + + + + + Building from source + + + Prerequisites + + If you can install any or all of the following through + the package manager for your system, all the + better. Especially Qt is a very + big piece of software, but you will most probably be able to + find a binary package. + + You may have to compile &XAP; but this is easy. + + The shopping list: + + + C++ compiler. Up to &RCL; version 1.13.04, + its absence can manifest itself by strange messages + about a missing iconv_open. + + + Development files + for Xapian + core. + + If you are + building Xapian for an older CPU (before Pentium 4 or Athlon + 64), you need to add the flag + to the configure command. Else all Xapian application will + crash with an illegal instruction + error. + + + + + Development files for + + Qt 4 . &RCL; has not been + tested with Qt 5 yet. &RCL; 1.15.9 + was the last version to support Qt 3. + If you do not want to install or build + the Qt Webkit module, &RCL; + has a configuration option to disable its use (see further). + + + + + Development files for X11 and + zlib. + + + + You may also need + + libiconv. On Linux + systems, the iconv interface is part of libc and you should not + need to do anything special. + + + + + Check the + &RCL; download page for up to date version + information. + + + + + Building + + &RCL; has been built on Linux, FreeBSD, Mac OS X, and Solaris, + most versions after 2005 should be ok, maybe some older ones too + (Solaris 8 is ok). If you build on another system, and + need to modify things, + I would + very much welcome patches. + + + Configure options: + + + + + will disable the code for phonetic matching of search + terms. + + or + will enable the code for + real time indexing. Inotify support is enabled by default on + recent Linux systems. + + will + enable sending Zeitgeist + events about the visited search results, and needs + the Qt Zeitgeist + module. + + is available + from version 1.17 to implement the result list with a + Qt QTextBrowser instead of a + WebKit widget if you do not or can't depend on the + latter. + + is available + from version 1.19 to suppress multithreading inside the + indexing process. You can also use the run-time + configuration to restrict recollindex + to using a single thread, but the compile-time option + may disable a few more unused locks. This only applies + to the use of multithreading for the core index + processing (data input). The &RCL; monitor mode always + uses at least two threads of execution. + + will + avoid building the Python + module. + + will prevent + fetching data from file extended attributes. Beyond a + few standard attributes, fetching extended attributes + data can only be useful is some application stores data + in there, and also needs some simple configuration (see + comments in the fields configuration + file). + + will enable + splitting camelCase words. This + is not enabled by default as it has the unfortunate + side-effect of making some phrase searches quite + confusing: ie, "MySQL manual" would be + matched by "MySQL manual" and + "my sql manual" but not "mysql + manual" (only inside phrase searches). + + + Specify + the version of the 'file' command to use (ie: + --with-file-command=/usr/local/bin/file). Can be useful to + enable the gnu version on systems where the native one is + bad. + + Disable the Qt + interface. Will allow building the indexer and the command line + search program in absence of a Qt environment. + + + Disable + X11 connection monitoring + inside recollindex. Together with --disable-qtgui, this + allows building recoll without + Qt and + X11. + + will compile + &RCL; with position-dependant code. This is incompatible with + building the KIO or the Python + or PHP extensions, but might + yield very marginally faster code. + + Of course the usual + autoconf configure + options, like apply. + + + + + + Normal procedure: + + cd recoll-xxx + configure + make + (practices usual hardship-repelling invocations) + + + + There is little auto-configuration. The + configure script will mainly link one of + the system-specific files in the mk + directory to mk/sysconf. If your system + is not known yet, it will tell you as much, and you may want + to manually copy and modify one of the existing files (the new + file name should be the output of uname + ). + + + + + Installation + + Either type make install or execute + recollinstall + prefix, in the root + of the source tree. This will copy the commands to + prefix/bin + and the sample configuration files, scripts and other shared + data to + prefix/share/recoll. + If the installation prefix given to + recollinstall is different from either the + system default or the value which was + specified when executing configure (as in + configure --prefix /some/path), you + will have to set the RECOLL_DATADIR + environment variable to indicate where the shared data is to + be found (ie for (ba)sh: + export RECOLL_DATADIR=/some/path/share/recoll). + + + You can then proceed to configuration. + + + + + + Configuration overview + + Most of the parameters specific to the + recoll GUI are set through the + Preferences menu and stored in the standard Qt + place ($HOME/.config/Recoll.org/recoll.conf). + You probably do not want to edit this by hand. + + &RCL; indexing options are set inside text configuration + files located in a configuration directory. There can be + several such directories, each of which define the parameters + for one index. + + The configuration files can be edited by hand or through + the Index configuration dialog + (Preferences menu). The GUI tool will try + to respect your formatting and comments as much as possible, + so it is quite possible to use both ways. + + The most accurate documentation for the + configuration parameters is given by comments inside the default + files, and we will just give a general overview here. + + For each index, there are two sets of configuration + files. System-wide configuration files are kept in a directory named + like /usr/[local/]share/recoll/examples, + and define default values, shared by all indexes. For each + index, a parallel set of files defines the customized + parameters. + + The default location of the configuration is the + .recoll + directory in your home. Most people will only use this + directory. + + This location can be changed, or others can be added with the + RECOLL_CONFDIR environment variable or the + option parameter to recoll and + recollindex. + + If the .recoll directory does not + exist when recoll or + recollindex are started, it will be created + with a set of empty configuration files. + recoll will give you a chance to edit the + configuration file before starting + indexing. recollindex will proceed + immediately. To avoid mistakes, the automatic directory + creation will only occur for the + default location, not if or + RECOLL_CONFDIR were used (in the latter + cases, you will have to create the directory). + + + All configuration files share the same format. For + example, a short extract of the main configuration file might + look as follows: + + # Space-separated list of directories to index. + topdirs = ~/docs /usr/share/doc + + [~/somedirectory-with-utf8-txt-files] + defaultcharset = utf-8 + + + There are three kinds of lines: + + Comment (starts with + #) or empty. + + Parameter affectation (name = + value). + + Section definition + ([somedirname]). + + + + Depending on the type of configuration file, section + definitions either separate groups of parameters or allow + redefining some parameters for a directory sub-tree. They stay + in effect until another section definition, or the end of + file, is encountered. Some of the parameters used for indexing + are looked up hierarchically from the current directory + location upwards. Not all parameters can be meaningfully + redefined, this is specified for each in the next + section. + + When found at the beginning of a file path, the tilde + character (~) is expanded to the name of the user's home + directory, as a shell would do. + + White space is used for separation inside lists. + List elements with embedded spaces can be quoted using + double-quotes. + + + Encoding issues + Most of the configuration parameters are plain ASCII. Two + particular sets of values may cause encoding issues: + + + + File path parameters may contain non-ascii + characters and should use the exact same byte values as found in + the file system directory. Usually, this means that the + configuration file should use the system default locale + encoding. + + The unac_except_trans parameter + should be encoded in UTF-8. If your system locale is not UTF-8, and + you need to also specify non-ascii file paths, this poses a + difficulty because common text editors cannot handle multiple + encodings in a single file. In this relatively unlikely case, you + can edit the configuration file as two separate text files with + appropriate encodings, and concatenate them to create the complete + configuration. + + + + + + Main configuration file + + recoll.conf is the main + configuration file. It defines things like + what to index (top directories and things to ignore), and the + default character set to use for document types which do not + specify it internally. + + The default configuration will index your home + directory. If this is not appropriate, start + recoll to create a blank + configuration, click Cancel, and edit + the configuration file before restarting the command. This + will start the initial indexing, which may take some time. + + Most of the following parameters can be changed from the + Index Configuration menu in the + recoll interface. Some can only be set by + editing the configuration file. + + + Parameters affecting what documents we index: + + + + + topdirs + Specifies the list of directories or files to + index (recursively for directories). You can use symbolic links + as elements of this list. See the + followLinks option about following symbolic links + found under the top elements (not followed by default). + + + + skippedNames + + A space-separated list of patterns for + names of files or directories that should be completely + ignored. The list defined in the default file is: + +skippedNames = #* bin CVS Cache cache* caughtspam tmp .thumbnails .svn \ + *~ .beagle .git .hg .bzr loop.ps .xsession-errors \ + .recoll* xapiandb recollrc recoll.conf + + The list can be redefined at any sub-directory in the + indexed area. + The top-level directories are not affected by this + list (that is, a directory in topdirs + might match and would still be indexed). + The list in the default configuration does not + exclude hidden directories (names beginning with a + dot), which means that it may index quite a few things + that you do not want. On the other hand, email user + agents like thunderbird + usually store messages in hidden directories, and you + probably want this indexed. One possible solution is to + have .* in + skippedNames, and add things like + ~/.thunderbird or + ~/.evolution in + topdirs. + + Not even the file names are indexed for patterns + in this list. See the + recoll_noindex variable in + mimemap for an alternative + approach which indexes the file names. + + + + skippedPaths and + daemSkippedPaths + + A space-separated list of patterns for + paths of files or directories that should be skipped. + There is no default in the sample configuration file, + but the code always adds the configuration and database + directories in there. + skippedPaths is used both by + batch and real time + indexing. daemSkippedPaths can be + used to specify things that should be indexed at + startup, but not monitored. + Example of use for skipping text files only in a + specific directory: + +skippedPaths = ~/somedir/*.txt + + + + + + skippedPathsFnmPathname + The values in the + *skippedPaths variables are matched by + default with fnmatch(3), with the + FNM_PATHNAME and FNM_LEADING_DIR flags. This means that '/' + characters must be matched explicitely. You can set + skippedPathsFnmPathname to 0 to disable + the use of FNM_PATHNAME (meaning that /*/dir3 will match + /dir1/dir2/dir3). + + + + + + followLinks + Specifies if the indexer should follow + symbolic links while walking the file tree. The default is + to ignore symbolic links to avoid multiple indexing of + linked files. No effort is made to avoid duplication when + this option is set to true. This option can be set + individually for each of the topdirs + members by using sections. It can not be changed below the + topdirs level. + + + + indexedmimetypes + &RCL; normally indexes any file which it + knows how to read. This list lets you restrict the indexed + mime types to what you specify. If the variable is + unspecified or the list empty (the default), all supported + types are processed. + + + + compressedfilemaxkbs + Size limit for compressed (.gz or .bz2) + files. These need to be decompressed in a temporary + directory for identification, which can be very wasteful + if 'uninteresting' big compressed files are present. + Negative means no limit, 0 means no processing of any + compressed file. Defaults to -1. + + + + textfilemaxmbs + Maximum size for text files. Very big text + files are often uninteresting logs. Set to -1 to disable + (default 20MB). + + + + textfilepagekbs + If set to other than -1, text files will be + indexed as multiple documents of the given page size. This may + be useful if you do want to index very big text files as it + will both reduce memory usage at index time and help with + loading data to the preview window. A size of a few megabytes + would seem reasonable (default: 1MB). + + + + membermaxkbs + This defines the maximum size in kilobytes for + an archive member (zip, tar or rar at the moment). Bigger + entries will be skipped. + + + + indexallfilenames + &RCL; indexes file names in a special + section of the database to allow specific file names + searches using wild cards. This parameter decides if + file name indexing is performed only for files with mime + types that would qualify them for full text indexing, or + for all files inside the selected subtrees, independently of + mime type. + + + + usesystemfilecommand + Decide if we use the + file system command + as a final step for determining the mime type for a file + (the main procedure uses suffix associations as defined in + the mimemap file). This can be useful + for files with suffix-less names, but it will also cause + the indexing of many bogus "text" files. + + + + processwebqueue + If this is set, process the directory where + Web browser plugins copy visited pages for indexing. + + + + webqueuedir + The path to the web indexing queue. This is + hard-coded in the Firefox plugin as + ~/.recollweb/ToIndex so there should be no + need to change it. + + + + + + + + Parameters affecting how we generate terms: + + Changing some of these parameters will imply a full + reindex. Also, when using multiple indexes, it may not make sense + to search indexes that don't share the values for these parameters, + because they usually affect both search and index operations. + + + + indexStripChars + Decide if we strip characters of diacritics and + convert them to lower-case before terms are indexed. If we + don't, searches sensitive to case and diacritics can be + performed, but the index will be bigger, and some marginal + weirdness may sometimes occur. The default is a stripped + index (indexStripChars = 1) for + now. When using multiple indexes for a search, + this parameter must be defined identically for + all. Changing the value implies an index reset. + + + + maxTermExpand + Maximum expansion count for a single term (e.g.: + when using wildcards). The default of 10000 is reasonable and + will avoid queries that appear frozen while the engine is + walking the term list. + + + + maxXapianClauses + Maximum number of elementary clauses we can add + to a single Xapian query. In some cases, the result of term + expansion can be multiplicative, and we want to avoid using + excessive memory. The default of 100 000 should be both + high enough in most cases and compatible with current + typical hardware configurations. + + + + nonumbers + If this set to true, no terms will be generated + for numbers. For example "123", "1.5e6", 192.168.1.4, would not + be indexed ("value123" would still be). Numbers are often quite + interesting to search for, and this should probably not be set + except for special situations, ie, scientific documents with huge + amounts of numbers in them. This can only be set for a whole + index, not for a subtree. + + + + nocjk + If this set to true, specific east asian + (Chinese Korean Japanese) characters/word splitting is + turned off. This will save a small amount of cpu if you + have no CJK documents. If your document base does include + such text but you are not interested in searching it, + setting nocjk may be a significant time + and space saver. + + + + cjkngramlen + This lets you adjust the size of n-grams + used for indexing CJK text. The default value of 2 is + probably appropriate in most cases. A value of 3 would + allow more precision and efficiency on longer words, but + the index will be approximately twice as large. + + + + indexstemminglanguages + A list of languages for which the stem + expansion databases will be built. See + recollindex + 1 or use the + recollindex command + for possible values. You can add a stem expansion database + for a different language by using + recollindex , but it + will be deleted during the next indexing. Only languages + listed in the configuration file are permanent. + + + + defaultcharset + The name of the character set used for + files that do not contain a character set definition (ie: + plain text files). This can be redefined for any + sub-directory. If it is not set at all, the character set + used is the one defined by the nls environment ( + LC_ALL, LC_CTYPE, + LANG), or iso8859-1 + if nothing is set. + + + + unac_except_trans + This is a list of characters, encoded in UTF-8, + which should be handled specially when converting text to + unaccented lowercase. For example, in Swedish, the letter + a with diaeresis has full alphabet + citizenship and should not be turned into an + a. Each element in the space-separated list + has the special character as first element and the translation + following. The handling of both the lowercase and upper-case + versions of a character should be specified, as appartenance to + the list will turn-off both standard accent and case + processing. Example for Swedish: + +unac_except_trans = åå Åå ää Ää öö Öö + + + Note that the translation is not limited to a single + character, you could very well have something like + üue in the list. + + The default value set for + unac_except_trans can't be listed here + because I have trouble with SGML and UTF-8, but it only + contains ligature decompositions: german ss, oe, ae, fi, + fl. + + This parameter can't be defined for subdirectories, it + is global, because there is no way to do otherwise when + querying. If you have document sets which would need different + values, you will have to index and query them separately. + + + + maildefcharset + This can be used to define the default + character set specifically for email messages which don't + specify it. This is mainly useful for readpst (libpst) dumps, + which are utf-8 but do not say so. + + + + localfields + This allows setting fields for all documents + under a given directory. Typical usage would be to set an + "rclaptg" field, to be used in mimeview to + select a specific viewer. If several fields are to be set, they + should be separated with a semi-colon (';') character, which there + is currently no way to escape. Also note the initial semi-colon. + Example: + localfields= ;rclaptg=gnus;other = val, then + select specifier viewer with + mimetype|tag=... in + mimeview. + + + + + metadatacmds + This allows executing external commands + for each file and storing the output in a &RCL; + field. This could be used for example to index external + tag data. The value is a list of field names and commands, + don't forget an initial semi-colon. Example: + +[/some/area/of/the/fs] +metadatacmds = ; tags = tmsu tags %f; otherfield = somecmd -xx %f + + + + + + + + + + + + Parameters affecting where and how we store things: + + + dbdir + The name of the Xapian data directory. It + will be created if needed when the index is + initialized. If this is not an absolute path, it will be + interpreted relative to the configuration directory. The + value can have embedded spaces but starting or trailing + spaces will be trimmed. You cannot use quotes here. + + + + idxstatusfile + The name of the scratch file where the indexer + process updates its status. Default: + idxstatus.txt inside the configuration + directory. + + + + maxfsoccuppc + Maximum file system occupation before we + stop indexing. The value is a percentage, corresponding to + what the "Capacity" df output column shows. The default + value is 0, meaning no checking. + + + + mboxcachedir + The directory where mbox message offsets cache + files are held. This is normally $RECOLL_CONFDIR/mboxcache, but + it may be useful to share a directory between different + configurations. + + + + mboxcacheminmbs + The minimum mbox file size over which we + cache the offsets. There is really no sense in caching + offsets for small files. The default is 5 MB. + + + + webcachedir + This is only used by the web browser + plugin indexing code, and defines where the cache for visited + pages will live. Default: + $RECOLL_CONFDIR/webcache + + + + webcachemaxmbs + This is only used by the web browser + plugin indexing code, and defines the maximum size for the web + page cache. Default: 40 MB. + + + + + idxflushmb + Threshold (megabytes of new text data) where we + flush from memory to disk index. Setting this can help control + memory usage. A value of 0 means no explicit flushing, letting + Xapian use its own default, which is flushing every 10000 (or + XAPIAN_FLUSH_THRESHOLD) documents, which gives little memory + usage control, as memory usage also depends on average document + size. The default value is 10, and it is probably a bit low. If + your system usually has free memory, you can try higher values + between 20 and 80. In my experience, values beyond 100 are + always counterproductive. + + + + + + + + Indexing parallelism configuration + + The &RCL; indexing process + recollindex can use multiple threads to + speed up indexing on multiprocessor systems. The work done + to index files is divided in several stages and some of the + stages can be executed by multiple threads. The stages are: + + File system walking: this is always performed by + the main thread. + File conversion and data extraction. + Text processing (splitting, stemming, + etc.) + &XAP; index update. + + + You can also read a + + longer document about the transformation of + &RCL; indexing to multithreading. + + The threads configuration is controlled by two + configuration file parameters. + + + + thrQSizes + This variable defines the job input queues + configuration. There are three possible queues for + stages 2, 3 and 4, and this parameter should give the + queue depth for each stage (three integer values). If + a value of -1 is used for a given stage, no queue is + used, and the thread will go on performing the next + stage. In practise, deep queues have not been shown to + increase performance. A value of 0 for the first queue + tells &RCL; to perform autoconfiguration (no need for + the two other values in this case)- this is the + default configuration. + + + + thrTCounts + This defines the number of threads used + for each stage. If a value of -1 is used for one of + the queue depths, the corresponding thread count is + ignored. It makes no sense to use a value other than 1 + for the last stage because updating the &XAP; index is + necessarily single-threaded (and protected by a + mutex). + + + + + + The following example would use three queues (of depth 2), + and 4 threads for converting source documents, 2 for + processing their text, and one to update the index. This was + tested to be the best configuration on the test system + (quadri-processor with multiple disks). + +thrQSizes = 2 2 2 +thrTCounts = 4 2 1 + + + + The following example would use a single queue, and the + complete processing for each document would be performed by + a single thread (several documents will still be processed + in parallel in most cases). The threads will use mutual + exclusion when entering the index update stage. In practise + the performance would be close to the precedent case in + general, but worse in certain cases (e.g. a Zip archive + would be performed purely sequentially), so the previous + approach is preferred. YMMV... The 2 last values for + thrTCounts are ignored. + +thrQSizes = 2 -1 -1 +thrTCounts = 6 1 1 + + + + + + + Miscellaneous parameters: + + + + autodiacsens + IF the index is not stripped, decide if we + automatically trigger diacritics sensitivity if the search + term has accented characters (not in + unac_except_trans). Else you need to use + the query language and the D modifier to + specify diacritics sensitivity. Default is no. + + + + autocasesens + IF the index is not stripped, decide if we + automatically trigger character case sensitivity if the + search term has upper-case characters in any but the first + position. Else you need to use the query language and the + C modifier to specify character-case + sensitivity. Default is yes. + + + + loglevel,daemloglevel + Verbosity level for recoll and + recollindex. A value of 4 lists quite a lot of + debug/information messages. 2 only lists errors. The + daemversion is specific to the indexing monitor + daemon. + + + + logfilename, + daemlogfilename + Where the messages should go. 'stderr' can + be used as a special value, and is the default. The + daemversion is specific to the indexing monitor + daemon. + + + + mondelaypatterns + This allows specify wildcard path patterns + (processed with fnmatch(3) with 0 flag), to match files which + change too often and for which a delay should be observed before + re-indexing. This is a space-separated list, each entry being a + pattern and a time in seconds, separated by a colon. You can + use double quotes if a path entry contains white + space. Example: + +mondelaypatterns = *.log:20 "this one has spaces*:10" + + + + + monixinterval + Minimum interval (seconds) for processing the + indexing queue. The real time monitor does not process each + event when it comes in, but will wait this time for the queue + to accumulate to diminish overhead and in order to aggregate + multiple events to the same file. Default 30 S. + + + + monauxinterval + Period (in seconds) at which the real time + monitor will regenerate the auxiliary databases (spelling, + stemming) if needed. The default is one hour. + + + + monioniceclass, monioniceclassdata + These allow defining the + ionice class and data used by the + indexer (default class 3, no data). + + + + filtermaxseconds + Maximum filter execution time, after which it + is aborted. Some postscript programs just loop... + + + filtersdir + A directory to search for the external + filter scripts used to index some types of files. The + value should not be changed, except if you want to modify + one of the default scripts. The value can be redefined for + any sub-directory. + + + + iconsdir + The name of the directory where + recoll result list icons are + stored. You can change this if you want different + images. + + + + idxabsmlen + &RCL; stores an abstract for each indexed + file inside the database. The text can come from an actual + 'abstract' section in the document or will just be the + beginning of the document. It is stored in the index so + that it can be displayed inside the result lists without + decoding the original + file. The idxabsmlen parameter defines + the size of the stored abstract. The default value is 250 bytes. + The search interface gives you the choice to display this + stored text or a synthetic abstract built by extracting + text around the search terms. If you always + prefer the synthetic abstract, you can reduce this value + and save a little space. + + + + + aspellLanguage + Language definitions to use when creating + the aspell dictionary. The value must match a set of + aspell language definition files. You can type "aspell + config" to see where these are installed (look for + data-dir). The default if the variable is not set is to + use your desktop national language environment to guess + the value. + + + + noaspell + If this is set, the aspell dictionary + generation is turned off. Useful for cases where you don't + need the functionality or when it is unusable because + aspell crashes during dictionary generation. + + + + mhmboxquirks + This allows definining location-related quirks + for the mailbox handler. Currently only the + tbird flag is defined, and it should be set + for directories which hold + Thunderbird data, as their folder + format is weird. + + + + + + + + + + The fields file + + This file contains information about dynamic fields handling + in &RCL;. Some very basic fields have hard-wired behaviour, + and, mostly, you should not change the original data inside the + fields file. But you can create custom fields + fitting your data and handle them just like they were native + ones. + + The fields file has several sections, + which each define an aspect of fields processing. Quite often, + you'll have to modify several sections to obtain the desired + behaviour. + + We will only give a short description here, you should refer + to the comments inside the file for more detailed information. + + Field names should be lowercase alphabetic ASCII. + + + + + [prefixes] + A field becomes indexed (searchable) by having + a prefix defined in this section. + + + + [stored] + A field becomes stored (displayable inside + results) by having its name listed in this section (typically + with an empty value). + + + + [aliases] + This section defines lists of synonyms for the + canonical names used inside the [prefixes] + and [stored] sections + + + + filter-specific sections + Some filters may need specific + configuration for handling fields. Only the email message filter + currently has such a section (named + [mail]). It allows indexing arbitrary email + headers in addition to the ones indexed by default. Other such + sections may appear in the future. + + + + + + Here follows a small example of a personal + fields + file. This would extract a specific email header and + use it as a searchable field, with data displayable inside result + lists. (Side note: as the email filter does no decoding on the values, + only plain ascii headers can be indexed, and only the + first occurrence will be used for headers that occur several times). + +[prefixes] +# Index mailmytag contents (with the given prefix) +mailmytag = XMTAG + +[stored] +# Store mailmytag inside the document data record (so that it can be +# displayed - as %(mailmytag) - in result lists). +mailmytag = + +[mail] +# Extract the X-My-Tag mail header, and use it internally with the +# mailmytag field name +x-my-tag = mailmytag + + + + + + Extended attributes in the fields file + + &RCL; versions 1.19 and later process user extended + file attributes as documents fields by default. + + Attributes are processed as fields of the same name, + after removing the user prefix on + Linux. + + The [xattrtofields] + section of the fields file allows + specifying translations from extended attributes names to + &RCL; field names. An empty translation disables use of the + corresponding attribute data. + + + + + + + The mimemap file + + mimemap specifies the + file name extension to mime type mappings. + + For file names without an extension, or with an unknown + one, the system's file + command will be + executed to determine the mime type (this can be switched off + inside the main configuration file). + + The mappings can be specified on a per-subtree basis, + which may be useful in some cases. Example: + gaim logs have a + .txt extension but + should be handled specially, which is possible because they + are usually all located in one place. + + mimemap also has a + recoll_noindex variable which is a list of + suffixes. Matching files will be skipped (which avoids + unnecessary decompressions or file + executions). This is partially redundant with + skippedNames in the main configuration + file, with a few differences: it will not affect directories, + it cannot be made dependant on the file-system location (it is + a configuration-wide parameter), and the file names will still + be indexed (not even the file names are indexed for patterns + in skippedNames. + recoll_noindex is used mostly for things + known to be unindexable by a given &RCL; version. Having it + there avoids cluttering the more user-oriented and locally + customized skippedNames. + + + + + The mimeconf file + + mimeconf specifies how the + different mime types are handled for indexing, and which icons + are displayed in the recoll result lists. + + Changing the parameters in the [index] section is + probably not a good idea except if you are a &RCL; + developer. + + The [icons] section allows you to change the icons which + are displayed by recoll in the result + lists (the values are the basenames of the png images inside + the iconsdir directory (specified in + recoll.conf). + + + + + The mimeview file + + mimeview specifies which programs + are started when you click on an Open link + in a result list. Ie: HTML is normally displayed using + firefox, but you may prefer + Konqueror, your + openoffice.org + program might be named oofice instead of + openoffice etc. + + Changes to this file can be done by direct editing, or + through the recoll GUI preferences dialog. + + If Use desktop preferences to choose document + editor is checked in the &RCL; GUI preferences, all + mimeview entries will be ignored except the + one labelled application/x-all (which is set to + use xdg-open by default). + + In this case, the xallexcepts top level + variable defines a list of mime type exceptions which + will be processed according to the local entries instead of being + passed to the desktop. This is so that specific &RCL; options + such as a page number or a search string can be passed to + applications that support them, such as the + evince viewer. + + As for the other configuration files, the normal usage + is to have a mimeview inside your own + configuration directory, with just the non-default entries, + which will override those from the central configuration + file. + + All viewer definition entries must be placed under a + [view] section. + + The keys in the file are normally mime types. You can add an + application tag to specialize the choice for an area of the + filesystem (using a localfields specification + in mimeconf). The syntax for the key is +mimetype|tag + + The nouncompforviewmts entry, (placed at + the top level, outside of the [view] section), + holds a list of mime types that should not be uncompressed before + starting the viewer (if they are found compressed, ie: + mydoc.doc.gz). + + The right side of each assignment holds a command to be + executed for opening the file. The following substitutions are + performed: + + + + %D + Document date + + + %f + File name. This may be the name of a temporary file if + it was necessary to create one (ie: to extract a subdocument + from a container). + + + %F + Original file name. Same as %f except if a temporary + file is used. + + + %i + Internal path, for subdocuments of containers. The + format depends on the container type. If this appears in the + command line, &RCL; will not create a temporary file to + extract the subdocument, expecting the called application + (possibly a script) to be able to handle it. + + + %M + Mime type + + + %p + Page index. Only significant for a subset of document + types, currently only PDF, Postscript and DVI files. Can be + used to start the editor at the right page for a match or + snippet. + + + %s + Search term. The value will only be set for documents + with indexed page numbers (ie: PDF). The value will be one of + the matched search terms. It would allow pre-setting the + value in the "Find" entry inside Evince for example, for easy + highlighting of the term. + + + %U, %u + Url. + + + + In addition to the predefined values above, all strings like + %(fieldname) will be replaced by the value of + the field named fieldname for the + document. This could be used in combination with field + customisation to help with opening the document. + + + + + The <filename>ptrans</filename> file + + ptrans specifies query-time path + translations. These can be useful + in multiple + cases. + The file has a section for any index which needs + translations, either the main one or additional query + indexes. The sections are named with the &XAP; index + directory names. No slash character should exist at the end + of the paths (all comparisons are textual). An exemple + should make things sufficiently clear + + + [/home/me/.recoll/xapiandb] + /this/directory/moved = /to/this/place + + [/path/to/additional/xapiandb] + /server/volume1/docdir = /net/server/volume1/docdir + /server/volume2/docdir = /net/server/volume2/docdir + + + + + + + Examples of configuration adjustments + + + Adding an external viewer for an non-indexed type + + Imagine that you have some kind of file which does not + have indexable content, but for which you would like to have a + functional Open link in the result list + (when found by file name). The file names end in + .blob and can be displayed by + application blobviewer. + + You need two entries in the configuration files for this + to work: + + + In $RECOLL_CONFDIR/mimemap + (typically ~/.recoll/mimemap), add the + following line: +.blob = application/x-blobapp + + Note that the mime type is made up here, and you could + call it diesel/oil just the + same. + + In $RECOLL_CONFDIR/mimeview + under the [view] section, add: + +application/x-blobapp = blobviewer %f + + We are supposing + that blobviewer wants a file + name parameter here, you would use %u if + it liked URLs better. + + + + If you just wanted to change the application used by + &RCL; to display a mime type which it already knows, you + would just need to edit mimeview. The + entries you add in your personal file override those in the + central configuration, which you do not need to + alter. mimeview can also be modified + from the Gui. + + + + + Adding indexing support for a new file type + + Let us now imagine that the above + .blob files actually contain + indexable text and that you know how to extract it with a + command line program. Getting &RCL; to index the files is + easy. You need to perform the above alteration, and also to + add data to the mimeconf file + (typically in ~/.recoll/mimeconf): + + Under the [index] + section, add the following line (more about the + rclblob indexing script + later): +application/x-blobapp = exec rclblob + + + Under the [icons] + section, you should choose an icon to be displayed for the + files inside the result lists. Icons are normally 64x64 + pixels PNG files which live in + /usr/[local/]share/recoll/images. + + Under the [categories] + section, you should add the mime type where it makes sense + (you can also create a category). Categories may be used + for filtering in advanced search. + + + + The rclblob filter should + be an executable program or script which exists inside + /usr/[local/]share/recoll/filters. It + will be given a file name as argument and should output the + text or html contents on the standard output. + + The filter + programming section describes in more detail how + to write a filter. + + + + + + + + + +
+ diff --git a/src/doc/user/xmlmake.sh b/src/doc/user/xmlmake.sh new file mode 100644 index 00000000..94380dc4 --- /dev/null +++ b/src/doc/user/xmlmake.sh @@ -0,0 +1,70 @@ +#!/bin/sh + +# A script to produce the Recoll manual with an xml toolchain. +# Tools used: +# - xsltproc +# - The docbook-xsl styleets +# - dblatex for producing the PDF. +# +# Limitations: +# - Does not produce the links to the whole/chunked versions at the top +# of the document +# - The anchor names from the source text are converted to uppercase +# by the sgml toolchain. This does not happen with the xml +# toolchain, which means that external links like +# usermanual.html#RCL.CONFIG.INDEXING won't work because fragments +# are case-sensitive. This has been solved by converting all ids +# inside the source file to upper-case. DON'T REINTRODUCE +# lower-case IDS + +# Wherever docbook.xsl and chunk.xsl live +# Fbsd +#XSLDIR="/usr/local/share/xsl/docbook/" +# Mac +#XSLDIR="/opt/local/share/xsl/docbook-xsl/" +#Linux +XSLDIR="/usr/share/xml/docbook/stylesheet/docbook-xsl/" + +dochunky=1 +test $# -eq 1 && dochunky=0 + +# Remove the SGML header and uncomment the XML one. Also used to iconv +# from iso-8859-1 to UTF-8, but the SGML manual is now UTF-8 ? Would +# that work with the sgml toolchain ?? +echo '' > usermanual.xml +sed -e '\!//FreeBSD//DTD!d' \ + -e '\!DTD DocBook XML!s///' \ + < usermanual.sgml \ + >> usermanual.xml + +# Options common to the single-file and chunked versions +commonoptions="--stringparam section.autolabel 1 \ + --stringparam section.autolabel.max.depth 3 \ + --stringparam section.label.includes.component.label 1 \ + --stringparam autotoc.label.in.hyperlink 0 \ + --stringparam abstract.notitle.enabled 1 \ + --stringparam html.stylesheet docbook-xsl.css \ + --stringparam generate.toc \"book toc,title,figure,table,example,equation\" \ +" + +# Do the chunky thing +if test $dochunky -ne 0 ; then + eval xsltproc $commonoptions \ + --stringparam use.id.as.filename 1 \ + --stringparam root.filename index \ + "$XSLDIR/html/chunk.xsl" \ + usermanual.xml +fi + +# Produce the single file version +eval xsltproc $commonoptions \ + -o usermanual.html \ + "$XSLDIR/html/docbook.xsl" \ + usermanual.xml + +tidy -indent usermanual.html > tmpfile +mv -f tmpfile usermanual.html + +# And the pdf with dblatex +dblatex usermanual.xml diff --git a/src/excludefile b/src/excludefile new file mode 100644 index 00000000..63b7bbdf --- /dev/null +++ b/src/excludefile @@ -0,0 +1,45 @@ +#* +*.cache +*.core +*.o +*~ +.#* +.#* +.moc +.obj +.svn +.ui +*.pyc +CVS +TAGS +alldeps +autom4* +config.cache +config.log +config.status +doc/user/usermanual.aux +doc/user/usermanual.log +doc/user/usermanual.out +doc/user/usermanual.pdf +doc/user/usermanual.tex-pdf +doc/user/usermanual.tex-pdf-tmp +excludefile +kde/recoll_applet +lib/librcl.a +makesrcdist.sh +mk/localdefs +mk/manifest.txt +php/recoll/include/ +php/recoll/modules/ +qtgui/Makefile +qtgui/preview/Makefile +qtgui/preview/preview.pro +qtgui/preview/pvmain.cpp +qtgui/recoll.pro +qt4gui/images +recollinstall +sampleconf/recoll.conf +sysconf +wasabi +wxgui +makesrcdist-force.sh diff --git a/src/filters/injectcommon.sh b/src/filters/injectcommon.sh new file mode 100755 index 00000000..50bc3d45 --- /dev/null +++ b/src/filters/injectcommon.sh @@ -0,0 +1,15 @@ +#!/bin/sh +fatal() +{ + echo $* + exit 1 +} + +commoncode=recfiltcommon +test -f recfiltcommon || fatal must be executed inside the filters directory + +for filter in rcl* ; do +sed -e '/^#RECFILTCOMMONCODE/r recfiltcommon +/^#RECFILTCOMMONCODE/,/^#ENDRECFILTCOMMONCODE/d +' < $filter > filtertmp && mv -f filtertmp $filter && chmod a+x $filter +done diff --git a/src/filters/rclabw b/src/filters/rclabw new file mode 100755 index 00000000..f07f0dce --- /dev/null +++ b/src/filters/rclabw @@ -0,0 +1,179 @@ +#!/bin/sh +# @(#$Id: rclabw,v 1.3 2008-10-08 08:27:34 dockes Exp $ (C) 2004 J.F.Dockes +# Parts taken from Estraier: +#================================================================ +# Estraier: a personal full-text search system +# Copyright (C) 2003-2004 Mikio Hirabayashi +#================================================================ +#================================================================ +# Extract text from an abiword file +#================================================================ + +# set variables +LANG=C ; export LANG +LC_ALL=C ; export LC_ALL +progname="rclabw" +filetype=abiword + + +#RECFILTCOMMONCODE +############################################################################## +# !! Leave the previous line unmodified!! Code imported from the +# recfiltcommon file + +# Utility code common to all shell filters. This could be sourced at run +# time, but it's slightly more efficient to include the code in the +# filters at build time (with a sed script). + +# Describe error in a way that can be interpreted by our caller +senderror() +{ + echo RECFILTERROR $* + # Also alert on stderr just in case + echo ":2:$progname::: $*" 1>&2 + exit 1 +} + +iscmd() +{ + cmd=$1 + case $cmd in + */*) + if test -x $cmd -a ! -d $cmd ; then return 0; else return 1; fi ;; + *) + oldifs=$IFS; IFS=":"; set -- $PATH; IFS=$oldifs + for d in $*;do test -x $d/$cmd -a ! -d $d/$cmd && return 0;done + return 1 ;; + esac +} + +checkcmds() +{ + for cmd in $*;do + if iscmd $cmd + then + a=1 + else + senderror HELPERNOTFOUND $cmd + fi + done +} + +# show help message +if test $# -ne 1 -o "$1" = "--help" +then + echo "Convert a $filetype file to HTML text for Recoll indexing." + echo "Usage: $progname [infile]" + exit 1 +fi + +infile="$1" + +# check the input file existence (may be '-' for stdin) +if test "X$infile" != X- -a ! -f "$infile" +then + senderror INPUTNOSUCHFILE "$infile" +fi + +# protect access to our temp files and directories +umask 77 + +############################################################################## +# !! Leave the following line unmodified ! +#ENDRECFILTCOMMONCODE + +checkcmds xsltproc + +xsltproc --nonet --novalid - "$infile" < + + + + + + + + + + + + + + + + + + + +

+ +
+
+ + + +
+ + +

+ +
+ + + + + + + author + + + + + + + + + keywords + + + + + + + + + keywords + + + + + + + + + abstract + + + + + + + + <xsl:value-of select="."/> + + + + + + + + +
+EOF + +# exit normally +exit 0 diff --git a/src/filters/rclaptosidman b/src/filters/rclaptosidman new file mode 100755 index 00000000..661329b7 --- /dev/null +++ b/src/filters/rclaptosidman @@ -0,0 +1,93 @@ +#!/bin/sh +# @(#$Id: rclaptosidman,v 1.1 2010-12-11 12:40:05 dockes Exp $ (C) 2004 J.F.Dockes +# Parts taken from Estraier: +#================================================================ +# Estraier: a personal full-text search system +# Copyright (C) 2003-2004 Mikio Hirabayashi +#================================================================ +#================================================================ +# rclaptosidman +# Strip the menu part from aptosid manual pages to improve search precision +#================================================================ + +# set variables +LANG=C ; export LANG +LC_ALL=C ; export LC_ALL +progname="rclaptosidman" +filetype="aptosid manual htm" + + +#RECFILTCOMMONCODE +############################################################################## +# !! Leave the previous line unmodified!! Code imported from the +# recfiltcommon file + +# Utility code common to all shell filters. This could be sourced at run +# time, but it's slightly more efficient to include the code in the +# filters at build time (with a sed script). + +# Describe error in a way that can be interpreted by our caller +senderror() +{ + echo RECFILTERROR $* + # Also alert on stderr just in case + echo ":2:$progname::: $*" 1>&2 + exit 1 +} + +iscmd() +{ + cmd=$1 + case $cmd in + */*) + if test -x $cmd -a ! -d $cmd ; then return 0; else return 1; fi ;; + *) + oldifs=$IFS; IFS=":"; set -- $PATH; IFS=$oldifs + for d in $*;do test -x $d/$cmd -a ! -d $d/$cmd && return 0;done + return 1 ;; + esac +} + +checkcmds() +{ + for cmd in $*;do + if iscmd $cmd + then + a=1 + else + senderror HELPERNOTFOUND $cmd + fi + done +} + +# show help message +if test $# -ne 1 -o "$1" = "--help" +then + echo "Convert a $filetype file to HTML text for Recoll indexing." + echo "Usage: $progname [infile]" + exit 1 +fi + +infile="$1" + +# check the input file existence (may be '-' for stdin) +if test "X$infile" != X- -a ! -f "$infile" +then + senderror INPUTNOSUCHFILE "$infile" +fi + +# protect access to our temp files and directories +umask 77 + +############################################################################## +# !! Leave the following line unmodified ! +#ENDRECFILTCOMMONCODE + +checkcmds sed +# Delete everything from