From 5bd071c5a697b45dcc41fa922937e95e6959d10b Mon Sep 17 00:00:00 2001 From: hxcan Date: Thu, 29 Mar 2012 16:56:38 +0800 Subject: [PATCH] Add a new environment variable "RECOLL_ACTIVE_EXTRA_DBS", which helps choose the active external indexes list. --- .hgignore | 102 + packaging/FreeBSD/recoll/Makefile | 34 + packaging/FreeBSD/recoll/distinfo | 2 + packaging/FreeBSD/recoll/pkg-descr | 24 + packaging/FreeBSD/recoll/pkg-plist | 99 + packaging/debian/buildppa.sh | 86 + packaging/debian/debiankio/changelog | 48 + packaging/debian/debiankio/compat | 1 + packaging/debian/debiankio/control | 25 + packaging/debian/debiankio/copyright | 113 + packaging/debian/debiankio/dirs | 2 + packaging/debian/debiankio/docs | 1 + packaging/debian/debiankio/rules | 6 + packaging/debian/debiankio/watch | 4 + packaging/debian/debianrclqt3/changelog | 59 + packaging/debian/debianrclqt3/compat | 1 + packaging/debian/debianrclqt3/control | 35 + packaging/debian/debianrclqt3/copyright | 113 + packaging/debian/debianrclqt3/docs | 1 + packaging/debian/debianrclqt3/menu | 2 + packaging/debian/debianrclqt3/rules | 69 + packaging/debian/debianrclqt3/watch | 12 + packaging/debian/debianrclqt4/changelog | 118 + packaging/debian/debianrclqt4/compat | 1 + packaging/debian/debianrclqt4/control | 44 + packaging/debian/debianrclqt4/control-lucid | 43 + packaging/debian/debianrclqt4/copyright | 113 + packaging/debian/debianrclqt4/docs | 1 + packaging/debian/debianrclqt4/menu | 2 + .../patches/fix-python-install.patch | 12 + packaging/debian/debianrclqt4/patches/series | 1 + packaging/debian/debianrclqt4/rules | 72 + packaging/debian/debianrclqt4/watch | 12 + packaging/debian/debianunitylens/changelog | 12 + packaging/debian/debianunitylens/compat | 1 + packaging/debian/debianunitylens/control | 17 + packaging/debian/debianunitylens/copyright | 20 + packaging/debian/debianunitylens/docs | 1 + packaging/debian/debianunitylens/rules | 51 + packaging/debian/debianunitylens/watch | 12 + packaging/macports/README.txt | 24 + packaging/macports/textproc/recoll/Portfile | 46 + .../recoll/files/patch-configure.diff | 11 + .../files/patch-sampleconf-mimeview.diff | 134 + packaging/rpm/kio_recoll.spec | 77 + packaging/rpm/recoll.spec | 131 + packaging/rpm/recollCooker.spec | 88 + packaging/rpm/recollfedora.spec | 93 + packaging/rpm/recollfedora10+.spec | 112 + packaging/rpm/recollmdk.spec | 123 + src/COPYING | 340 + src/ChangeLog | 10552 +++++ src/INSTALL | 961 + src/Makefile.in | 81 + src/README | 3338 ++ src/VERSION | 1 + src/aspell/Makefile | 31 + src/aspell/aspell-local.h | 729 + src/aspell/rclaspell.cpp | 520 + src/aspell/rclaspell.h | 79 + src/bincimapmime/00README.recoll | 3 + src/bincimapmime/AUTHORS | 45 + src/bincimapmime/COPYING | 356 + src/bincimapmime/Makefile | 39 + src/bincimapmime/address.cc | 90 + src/bincimapmime/address.h | 52 + src/bincimapmime/config.h | 0 src/bincimapmime/convert.cc | 133 + src/bincimapmime/convert.h | 323 + src/bincimapmime/iodevice.cc | 322 + src/bincimapmime/iodevice.h | 401 + src/bincimapmime/iofactory.cc | 87 + src/bincimapmime/iofactory.h | 69 + src/bincimapmime/mime-getpart.cc | 96 + src/bincimapmime/mime-inputsource.h | 216 + src/bincimapmime/mime-parsefull.cc | 631 + src/bincimapmime/mime-parseonlyheader.cc | 196 + src/bincimapmime/mime-printbody.cc | 107 + src/bincimapmime/mime-printdoc.cc | 72 + src/bincimapmime/mime-printheader.cc | 200 + src/bincimapmime/mime-utils.h | 55 + src/bincimapmime/mime.cc | 159 + src/bincimapmime/mime.h | 147 + src/bincimapmime/trbinc.cc | 126 + src/common/Makefile | 38 + src/common/autoconfig.h.in | 116 + src/common/beaglequeuecache.cpp | 80 + src/common/beaglequeuecache.h | 50 + src/common/cstr.cpp | 6 + src/common/cstr.h | 78 + src/common/rclconfig.cpp | 1300 + src/common/rclconfig.h | 307 + src/common/rclinit.cpp | 138 + src/common/rclinit.h | 57 + src/common/rclversion.h.in | 1 + src/common/textsplit.cpp | 987 + src/common/textsplit.h | 134 + src/common/unacpp.cpp | 128 + src/common/unacpp.h | 33 + src/common/uproplist.h | 220 + src/configure | 6994 ++++ src/configure.ac | 549 + src/desktop/hotrecoll.py | 66 + src/desktop/recoll-searchgui.desktop | 9 + src/desktop/recoll.png | Bin 0 -> 457 bytes src/desktop/recoll.xcf | Bin 0 -> 3825 bytes src/desktop/recollindex.desktop | 13 + src/desktop/unity-lens-recoll/AUTHORS | 3 + src/desktop/unity-lens-recoll/COPYING | 676 + src/desktop/unity-lens-recoll/ChangeLog | 58 + src/desktop/unity-lens-recoll/INSTALL | 365 + src/desktop/unity-lens-recoll/Makefile.am | 62 + src/desktop/unity-lens-recoll/Makefile.in | 719 + src/desktop/unity-lens-recoll/NEWS | 1 + src/desktop/unity-lens-recoll/README | 35 + src/desktop/unity-lens-recoll/acinclude.m4 | 40 + src/desktop/unity-lens-recoll/aclocal.m4 | 807 + .../bin/unity-recoll-daemon.in | 89 + src/desktop/unity-lens-recoll/configure | 3669 ++ src/desktop/unity-lens-recoll/configure.ac | 33 + .../unity-lens-recoll/data/recoll.lens.in | 10 + .../unity-lens-recoll/data/recollbg24.png | Bin 0 -> 560 bytes .../data/unity-lens-recoll.service.in | 3 + src/desktop/unity-lens-recoll/excludefile | 3 + src/desktop/unity-lens-recoll/install-sh | 520 + src/desktop/unity-lens-recoll/missing | 376 + src/desktop/unity-lens-recoll/mkdist.sh | 52 + src/desktop/unity-lens-recoll/py-compile | 146 + .../unity-lens-recoll/recollscope/__init__.py | 0 .../recollscope/rclsearch.py | 246 + src/desktop/xdg-utils-1.0.1/LICENSE | 18 + .../xdg-utils-1.0.1/scripts/xdg-desktop-menu | 1261 + .../xdg-utils-1.0.1/scripts/xdg-icon-resource | 837 + src/desktop/xdg-utils-1.0.1/scripts/xdg-open | 436 + src/doc/man/recoll.1 | 78 + src/doc/man/recoll.conf.5 | 216 + src/doc/man/recollindex.1 | 202 + src/doc/man/recollq.1 | 148 + src/doc/prog/Doxyfile | 1212 + src/doc/prog/Makefile | 5 + src/doc/prog/filters.txt | 47 + src/doc/prog/top.txt | 20 + src/doc/user/Makefile | 32 + src/doc/user/bldloop | 7 + src/doc/user/docbook.css | 208 + src/doc/user/usermanual-italian.html | 3849 ++ src/doc/user/usermanual.sgml | 4353 ++ src/excludefile | 45 + src/filters/injectcommon.sh | 15 + src/filters/rclabw | 179 + src/filters/rclaptosidman | 93 + src/filters/rclaudio | 103 + src/filters/rclchm | 251 + src/filters/rcldjvu | 180 + src/filters/rcldoc | 173 + src/filters/rcldvi | 150 + src/filters/rclexecm.py | 192 + src/filters/rclfb2 | 139 + src/filters/rclgaim | 144 + src/filters/rclgnm | 191 + src/filters/rclics | 157 + src/filters/rclimg | 184 + src/filters/rclinfo | 204 + src/filters/rclkar | 322 + src/filters/rclkwd | 217 + src/filters/rcllatinclass.py | 123 + src/filters/rcllatinstops.zip | Bin 0 -> 12689 bytes src/filters/rcllyx | 244 + src/filters/rclman | 127 + src/filters/rclnull | 9 + src/filters/rclokulnote | 130 + src/filters/rclopxml | 238 + src/filters/rclpdf | 165 + src/filters/rclppt | 116 + src/filters/rclps | 135 + src/filters/rclpurple | 143 + src/filters/rclpython | 236 + src/filters/rclrar | 102 + src/filters/rclrtf | 102 + src/filters/rclscribus | 181 + src/filters/rclshowinfo | 32 + src/filters/rclsiduxman | 92 + src/filters/rclsoff | 208 + src/filters/rclsvg | 127 + src/filters/rcltex | 106 + src/filters/rcltext | 91 + src/filters/rcluncomp | 35 + src/filters/rclwar | 54 + src/filters/rclwpd | 87 + src/filters/rclxls | 119 + src/filters/rclzip | 93 + src/filters/recfiltcommon | 66 + src/index/Makefile | 61 + src/index/beaglequeue.cpp | 493 + src/index/beaglequeue.h | 79 + src/index/csguess.cpp | 215 + src/index/csguess.h | 28 + src/index/fsindexer.cpp | 536 + src/index/fsindexer.h | 119 + src/index/indexer.cpp | 316 + src/index/indexer.h | 132 + src/index/mimetype.cpp | 205 + src/index/mimetype.h | 39 + src/index/rclmon.h | 118 + src/index/rclmon.sh | 80 + src/index/rclmonprc.cpp | 572 + src/index/rclmonrcv.cpp | 727 + src/index/recollindex.cpp | 481 + src/index/recollindex.h | 31 + src/index/subtreelist.cpp | 129 + src/index/subtreelist.h | 33 + src/internfile/Filter.h | 196 + src/internfile/Makefile | 33 + src/internfile/htmlparse.cpp | 396 + src/internfile/htmlparse.h | 52 + src/internfile/indextext.h | 38 + src/internfile/internfile.cpp | 1300 + src/internfile/internfile.h | 258 + src/internfile/mh_exec.cpp | 173 + src/internfile/mh_exec.h | 84 + src/internfile/mh_execm.cpp | 308 + src/internfile/mh_execm.h | 112 + src/internfile/mh_html.cpp | 181 + src/internfile/mh_html.h | 54 + src/internfile/mh_mail.cpp | 629 + src/internfile/mh_mail.h | 84 + src/internfile/mh_mbox.cpp | 629 + src/internfile/mh_mbox.h | 59 + src/internfile/mh_text.cpp | 178 + src/internfile/mh_text.h | 63 + src/internfile/mh_unknown.h | 52 + src/internfile/mimehandler.cpp | 315 + src/internfile/mimehandler.h | 140 + src/internfile/myhtmlparse.cpp | 567 + src/internfile/myhtmlparse.h | 72 + src/internfile/txtdcode.cpp | 49 + src/kde/kioslave/kio_recoll/00README.txt | 94 + src/kde/kioslave/kio_recoll/CMakeLists.txt | 69 + src/kde/kioslave/kio_recoll/Makefile.kde3 | 59 + .../kioslave/kio_recoll/cleancmakestuff.sh | 6 + src/kde/kioslave/kio_recoll/data/help.html | 100 + .../kioslave/kio_recoll/data/searchable.html | 28 + src/kde/kioslave/kio_recoll/data/welcome.html | 29 + src/kde/kioslave/kio_recoll/dirif.cpp | 309 + src/kde/kioslave/kio_recoll/htmlif.cpp | 300 + src/kde/kioslave/kio_recoll/kio_recoll.cpp | 385 + src/kde/kioslave/kio_recoll/kio_recoll.h | 189 + src/kde/kioslave/kio_recoll/kio_recoll.la | 35 + src/kde/kioslave/kio_recoll/notes.txt | 188 + src/kde/kioslave/kio_recoll/recoll.protocol | 11 + src/kde/kioslave/kio_recoll/recollf.protocol | 11 + .../kioslave/kio_recoll/recollnolist.protocol | 11 + src/kde/recoll_applet/0README.Recoll | 19 + src/kde/recoll_applet/AUTHORS | 2 + src/kde/recoll_applet/COPYING | 340 + src/kde/recoll_applet/ChangeLog | 0 src/kde/recoll_applet/Doxyfile | 283 + src/kde/recoll_applet/INSTALL | 167 + src/kde/recoll_applet/Makefile.am | 22 + src/kde/recoll_applet/Makefile.cvs | 10 + src/kde/recoll_applet/Makefile.in | 877 + src/kde/recoll_applet/NEWS | 0 src/kde/recoll_applet/README | 0 src/kde/recoll_applet/TODO | 0 src/kde/recoll_applet/acinclude.m4 | 11862 ++++++ src/kde/recoll_applet/aclocal.m4 | 863 + src/kde/recoll_applet/admin/Doxyfile.am | 102 + src/kde/recoll_applet/admin/Doxyfile.global | 192 + src/kde/recoll_applet/admin/Makefile.common | 37 + src/kde/recoll_applet/admin/acinclude.m4.in | 5971 +++ src/kde/recoll_applet/admin/am_edit | 2445 ++ src/kde/recoll_applet/admin/bcheck.pl | 157 + src/kde/recoll_applet/admin/compile | 142 + src/kde/recoll_applet/admin/conf.change.pl | 191 + src/kde/recoll_applet/admin/config.guess | 1519 + src/kde/recoll_applet/admin/config.pl | 238 + src/kde/recoll_applet/admin/config.sub | 1626 + .../recoll_applet/admin/configure.in.bot.end | 45 + src/kde/recoll_applet/admin/configure.in.min | 57 + src/kde/recoll_applet/admin/cvs.sh | 661 + src/kde/recoll_applet/admin/debianrules | 43 + src/kde/recoll_applet/admin/depcomp | 530 + src/kde/recoll_applet/admin/deps.am | 19 + .../recoll_applet/admin/detect-autoconf.pl | 173 + src/kde/recoll_applet/admin/doxygen.sh | 883 + src/kde/recoll_applet/admin/install-sh | 401 + src/kde/recoll_applet/admin/libtool.m4.in | 5891 +++ src/kde/recoll_applet/admin/ltmain.sh | 6468 +++ src/kde/recoll_applet/admin/missing | 353 + src/kde/recoll_applet/admin/mkinstalldirs | 158 + src/kde/recoll_applet/admin/nmcheck | 371 + src/kde/recoll_applet/admin/oldinclude.m4.in | 192 + src/kde/recoll_applet/admin/pkg.m4.in | 57 + src/kde/recoll_applet/admin/ylwrap | 223 + src/kde/recoll_applet/config.h.in | 244 + src/kde/recoll_applet/configure | 34897 ++++++++++++++++ src/kde/recoll_applet/configure.files | 2 + src/kde/recoll_applet/configure.in | 123 + src/kde/recoll_applet/configure.in.in | 6 + src/kde/recoll_applet/doc/Makefile.am | 6 + src/kde/recoll_applet/doc/Makefile.in | 720 + src/kde/recoll_applet/doc/en/Makefile.am | 2 + src/kde/recoll_applet/doc/en/Makefile.in | 598 + src/kde/recoll_applet/doc/en/index.docbook | 555 + src/kde/recoll_applet/po/Makefile.am | 1 + src/kde/recoll_applet/po/Makefile.in | 549 + src/kde/recoll_applet/src/Makefile.am | 16 + src/kde/recoll_applet/src/Makefile.in | 780 + src/kde/recoll_applet/src/kpixmapcombo.cpp | 60 + src/kde/recoll_applet/src/kpixmapcombo.h | 52 + src/kde/recoll_applet/src/recoll_applet.cpp | 190 + .../recoll_applet/src/recoll_applet.desktop | 7 + src/kde/recoll_applet/src/recoll_applet.h | 108 + src/kde/recoll_applet/src/recoll_applet.lsm | 16 + src/kde/recoll_applet/stamp-h.in | 0 src/kde/recoll_applet/subdirs | 3 + src/lib/Makefile | 461 + src/lib/mkMake | 169 + src/makesrcdist.sh | 168 + src/makestaticdist.sh | 98 + src/mk/AIX | 9 + src/mk/Darwin | 7 + src/mk/Default | 8 + src/mk/FreeBSD | 5 + src/mk/Linux | 8 + src/mk/OpenBSD | 6 + src/mk/SunOS | 9 + src/mk/commondefs | 22 + src/mk/localdefs.in | 37 + src/mk/manifest.txt | 523 + src/php/00README.txt | 22 + src/php/recoll/config.m4 | 18 + src/php/recoll/make.sh | 14 + src/php/recoll/php_recoll.h | 18 + src/php/recoll/recoll.cpp | 242 + src/php/sample/shell.php | 31 + src/python/README.txt | 2 + src/python/recoll/Makefile | 6 + src/python/recoll/pyrecoll.cpp | 1267 + src/python/recoll/setup.py.in | 56 + src/python/samples/rcldlkp.py | 117 + src/python/samples/rclmbox.py | 114 + src/python/samples/recollq.py | 71 + src/python/samples/recollqsd.py | 35 + src/python/xesam/xesam-recoll-service | 231 + src/qtgui/advsearch.ui | 578 + src/qtgui/advsearch_w.cpp | 450 + src/qtgui/advsearch_w.h | 77 + src/qtgui/confgui/confgui.cpp | 455 + src/qtgui/confgui/confgui.h | 254 + src/qtgui/confgui/confguiindex.cpp | 487 + src/qtgui/confgui/confguiindex.h | 104 + src/qtgui/confgui/conflinkrcl.h | 69 + src/qtgui/confgui/main.cpp | 132 + src/qtgui/confgui/trconf.pro | 32 + src/qtgui/crontool.cpp | 102 + src/qtgui/crontool.h | 48 + src/qtgui/crontool.ui | 156 + src/qtgui/editdialog.h | 35 + src/qtgui/editdialog.ui | 67 + src/qtgui/firstidx.h | 32 + src/qtgui/firstidx.ui | 147 + src/qtgui/guiutils.cpp | 388 + src/qtgui/guiutils.h | 147 + src/qtgui/i18n/recoll_cs.ts | 2325 + src/qtgui/i18n/recoll_de.ts | 2231 + src/qtgui/i18n/recoll_es.ts | 2093 + src/qtgui/i18n/recoll_fr.ts | 2414 ++ src/qtgui/i18n/recoll_it.ts | 2254 + src/qtgui/i18n/recoll_lt.ts | 2305 + src/qtgui/i18n/recoll_ru.ts | 2376 ++ src/qtgui/i18n/recoll_tr.ts | 2254 + src/qtgui/i18n/recoll_uk.ts | 2293 + src/qtgui/i18n/recoll_xx.ts | 1945 + src/qtgui/i18n/recoll_zh.ts | 2076 + src/qtgui/i18n/recoll_zh_CN.qm | Bin 0 -> 84655 bytes src/qtgui/i18n/recoll_zh_CN.ts | 2076 + src/qtgui/idxsched.h | 37 + src/qtgui/idxsched.ui | 120 + src/qtgui/images/asearch.png | Bin 0 -> 1007 bytes src/qtgui/images/cancel.png | Bin 0 -> 883 bytes src/qtgui/images/close.png | Bin 0 -> 1119 bytes src/qtgui/images/down.png | Bin 0 -> 3568 bytes src/qtgui/images/firstpage.png | Bin 0 -> 1324 bytes src/qtgui/images/history.png | Bin 0 -> 1515 bytes src/qtgui/images/nextpage.png | Bin 0 -> 1281 bytes src/qtgui/images/prevpage.png | Bin 0 -> 1282 bytes src/qtgui/images/sortparms.png | Bin 0 -> 768 bytes src/qtgui/images/spell.png | Bin 0 -> 339 bytes src/qtgui/images/table.png | Bin 0 -> 3351 bytes src/qtgui/images/up.png | Bin 0 -> 3510 bytes src/qtgui/listdialog.h | 32 + src/qtgui/listdialog.ui | 79 + src/qtgui/main.cpp | 398 + src/qtgui/mtpics/License_sidux.txt | 22 + src/qtgui/mtpics/README | 4 + src/qtgui/mtpics/aptosid-book.png | Bin 0 -> 4488 bytes src/qtgui/mtpics/aptosid-manual-copyright.txt | 306 + src/qtgui/mtpics/aptosid-manual.png | Bin 0 -> 4488 bytes src/qtgui/mtpics/document.png | Bin 0 -> 5394 bytes src/qtgui/mtpics/drawing.png | Bin 0 -> 5195 bytes src/qtgui/mtpics/folder.png | Bin 0 -> 6043 bytes src/qtgui/mtpics/html.png | Bin 0 -> 4848 bytes src/qtgui/mtpics/image.png | Bin 0 -> 4345 bytes src/qtgui/mtpics/message.png | Bin 0 -> 4362 bytes src/qtgui/mtpics/mozilla_doc.png | Bin 0 -> 4442 bytes src/qtgui/mtpics/pdf.png | Bin 0 -> 3753 bytes src/qtgui/mtpics/pidgin.png | Bin 0 -> 3564 bytes src/qtgui/mtpics/postscript.png | Bin 0 -> 3235 bytes src/qtgui/mtpics/presentation.png | Bin 0 -> 3639 bytes src/qtgui/mtpics/sidux-book.png | Bin 0 -> 1835 bytes src/qtgui/mtpics/soffice.png | Bin 0 -> 5376 bytes src/qtgui/mtpics/source.png | Bin 0 -> 4126 bytes src/qtgui/mtpics/sownd.png | Bin 0 -> 4756 bytes src/qtgui/mtpics/spreadsheet.png | Bin 0 -> 3382 bytes src/qtgui/mtpics/text-x-python.png | Bin 0 -> 3788 bytes src/qtgui/mtpics/txt.png | Bin 0 -> 2912 bytes src/qtgui/mtpics/wordprocessing.png | Bin 0 -> 5664 bytes src/qtgui/preview_w.cpp | 1119 + src/qtgui/preview_w.h | 165 + src/qtgui/rclhelp.cpp | 73 + src/qtgui/rclhelp.h | 40 + src/qtgui/rclmain.ui | 507 + src/qtgui/rclmain_w.cpp | 1884 + src/qtgui/rclmain_w.h | 195 + src/qtgui/rclzg.cpp | 84 + src/qtgui/rclzg.h | 30 + src/qtgui/recoll.h | 54 + src/qtgui/recoll.pro.in | 116 + src/qtgui/recoll.qrc | 16 + src/qtgui/reslist.cpp | 917 + src/qtgui/reslist.h | 140 + src/qtgui/restable.cpp | 911 + src/qtgui/restable.h | 165 + src/qtgui/restable.ui | 71 + src/qtgui/rtitool.cpp | 179 + src/qtgui/rtitool.h | 41 + src/qtgui/rtitool.ui | 123 + src/qtgui/searchclause_w.cpp | 161 + src/qtgui/searchclause_w.h | 52 + src/qtgui/spell.ui | 133 + src/qtgui/spell_w.cpp | 290 + src/qtgui/spell_w.h | 54 + src/qtgui/ssearch_w.cpp | 495 + src/qtgui/ssearch_w.h | 63 + src/qtgui/ssearchb.ui | 105 + src/qtgui/ui_rclmain.h-4.5 | 302 + src/qtgui/uiprefs.ui | 809 + src/qtgui/uiprefs_w.cpp | 472 + src/qtgui/uiprefs_w.h | 78 + src/qtgui/viewaction.ui | 117 + src/qtgui/viewaction_w.cpp | 134 + src/qtgui/viewaction_w.h | 53 + src/query/Makefile | 54 + src/query/docseq.cpp | 109 + src/query/docseq.h | 227 + src/query/docseqdb.cpp | 183 + src/query/docseqdb.h | 65 + src/query/docseqhist.cpp | 159 + src/query/docseqhist.h | 67 + src/query/dynconf.cpp | 234 + src/query/dynconf.h | 122 + src/query/filtseq.cpp | 125 + src/query/filtseq.h | 49 + src/query/plaintorich.cpp | 523 + src/query/plaintorich.h | 95 + src/query/recollq.cpp | 411 + src/query/recollq.h | 26 + src/query/reslistpager.cpp | 438 + src/query/reslistpager.h | 131 + src/query/sortseq.cpp | 76 + src/query/sortseq.h | 48 + src/query/wasastringtoquery.cpp | 510 + src/query/wasastringtoquery.h | 108 + src/query/wasatorcl.cpp | 293 + src/query/wasatorcl.h | 31 + src/query/xadump.cpp | 319 + src/rcldb/Makefile | 24 + src/rcldb/rcldb.cpp | 2036 + src/rcldb/rcldb.h | 318 + src/rcldb/rcldb_p.h | 138 + src/rcldb/rcldoc.cpp | 72 + src/rcldb/rcldoc.h | 196 + src/rcldb/rclquery.cpp | 468 + src/rcldb/rclquery.h | 110 + src/rcldb/rclquery_p.h | 61 + src/rcldb/searchdata.cpp | 1131 + src/rcldb/searchdata.h | 320 + src/rcldb/stemdb.cpp | 368 + src/rcldb/stemdb.h | 56 + src/rcldb/stoplist.cpp | 118 + src/rcldb/stoplist.h | 55 + src/rcldb/termproc.h | 240 + src/recollinstall.in | 143 + src/sampleconf/fields | 126 + src/sampleconf/mimeconf | 317 + src/sampleconf/mimemap | 193 + src/sampleconf/mimeview | 87 + src/sampleconf/mimeview.mac | 82 + src/sampleconf/recoll.conf.in | 223 + src/sampleconf/recoll.qss | 55 + src/unac/AUTHORS | 1 + src/unac/COPYING | 340 + src/unac/README | 93 + src/unac/README.recoll | 10 + src/unac/unac.c | 12977 ++++++ src/unac/unac.h | 593 + src/unac/unac_version.h | 1 + src/utils/Makefile | 151 + src/utils/base64.cpp | 365 + src/utils/base64.h | 24 + src/utils/cancelcheck.h | 64 + src/utils/circache.cpp | 1359 + src/utils/circache.h | 105 + src/utils/closefrom.cpp | 235 + src/utils/closefrom.h | 23 + src/utils/conftree.cpp | 1012 + src/utils/conftree.h | 543 + src/utils/copyfile.cpp | 200 + src/utils/copyfile.h | 31 + src/utils/debuglog.cpp | 453 + src/utils/debuglog.h | 115 + src/utils/ecrontab.cpp | 272 + src/utils/ecrontab.h | 71 + src/utils/execmd.cpp | 836 + src/utils/execmd.h | 258 + src/utils/fileudi.cpp | 130 + src/utils/fileudi.h | 31 + src/utils/fstreewalk.cpp | 565 + src/utils/fstreewalk.h | 126 + src/utils/idfile.cpp | 204 + src/utils/idfile.h | 34 + src/utils/md5.cpp | 446 + src/utils/md5.h | 49 + src/utils/mimeparse.cpp | 978 + src/utils/mimeparse.h | 103 + src/utils/netcon.cpp | 1179 + src/utils/netcon.h | 335 + src/utils/pathut.cpp | 737 + src/utils/pathut.h | 139 + src/utils/ptmutex.cpp | 106 + src/utils/ptmutex.h | 52 + src/utils/pxattr.cpp | 736 + src/utils/pxattr.h | 136 + src/utils/rclionice.cpp | 53 + src/utils/rclionice.h | 25 + src/utils/readfile.cpp | 274 + src/utils/readfile.h | 51 + src/utils/refcntr.h | 57 + src/utils/smallut.cpp | 1215 + src/utils/smallut.h | 228 + src/utils/transcode.cpp | 234 + src/utils/transcode.h | 39 + src/utils/utf8iter.cpp | 176 + src/utils/utf8iter.h | 259 + src/utils/utf8testin.txt | 212 + src/utils/wipedir.cpp | 170 + src/utils/wipedir.h | 29 + src/utils/workqueue.cpp | 102 + src/utils/workqueue.h | 195 + src/utils/x11mon.cpp | 88 + src/utils/x11mon.h | 23 + tests/Maildir/Maildir.sh | 19 + tests/Maildir/Maildir.txt | 1 + tests/Maildir1/Maildir1.sh | 14 + tests/Maildir1/Maildir1.txt | 2 + tests/abiword/abiword.sh | 15 + tests/abiword/abiword.txt | 4 + tests/anchor/anchor.sh | 31 + tests/anchor/anchor.txt | 34 + tests/andor/andor.sh | 13 + tests/andor/andor.txt | 3 + tests/badsuffs/badsuffs.sh | 14 + tests/badsuffs/badsuffs.txt | 1 + tests/badsuffs1/badsuffs1.sh | 14 + tests/badsuffs1/badsuffs1.txt | 7 + tests/boolean/boolean.sh | 14 + tests/boolean/boolean.txt | 4 + tests/chm/chm.sh | 19 + tests/chm/chm.txt | 10 + tests/cjk/cjk.sh | 24 + tests/cjk/cjk.txt | 9 + tests/compressed/compressed.sh | 15 + tests/compressed/compressed.txt | 4 + tests/config/fields | 4 + tests/config/mimeconf | 9 + tests/config/mimemap | 42 + tests/config/mimeview | 3 + tests/config/recoll.conf | 34 + tests/dates/dates.sh | 24 + tests/dates/dates.txt | 9 + tests/delete/delete.sh | 24 + tests/delete/delete.txt | 3 + tests/dirwithblanks/dirwithblanks.sh | 13 + tests/dirwithblanks/dirwithblanks.txt | 2 + tests/djvu/djvu.sh | 13 + tests/djvu/djvu.txt | 2 + tests/dvi/dvi.sh | 13 + tests/dvi/dvi.txt | 2 + tests/embed/embed.sh | 17 + tests/embed/embed.txt | 5 + tests/empty/empty.sh | 14 + tests/empty/empty.txt | 2 + tests/gnumeric/gnumeric.sh | 16 + tests/gnumeric/gnumeric.txt | 6 + tests/html/html.sh | 31 + tests/html/html.txt | 24 + tests/ics/ics.sh | 13 + tests/ics/ics.txt | 2 + tests/images/images.sh | 14 + tests/images/images.txt | 2 + tests/indexedmimetypes/indexedmimetypes.sh | 58 + tests/indexedmimetypes/indexedmimetypes.txt | 8 + tests/info/info.sh | 13 + tests/info/info.txt | 2 + tests/kar/kar.sh | 16 + tests/kar/kar.txt | 6 + tests/koi8r/koi8r.sh | 23 + tests/koi8r/koi8r.txt | 2 + tests/lyx/lyx.sh | 16 + tests/lyx/lyx.txt | 9 + tests/mail/mail.sh | 19 + tests/mail/mail.txt | 13 + tests/man/man.sh | 16 + tests/man/man.txt | 2 + tests/media/media.sh | 17 + tests/media/media.txt | 6 + tests/msword/msword.sh | 15 + tests/msword/msword.txt | 5 + tests/non-auto/testmbox.sh | 42 + tests/notypes/notypes.sh | 15 + tests/notypes/notypes.txt | 4 + tests/okular-notes/okular-notes.sh | 14 + tests/okular-notes/okular-notes.txt | 2 + tests/ooff/ooff.sh | 13 + tests/ooff/ooff.txt | 2 + tests/pdf/pdf.sh | 13 + tests/pdf/pdf.txt | 3 + tests/postscript/postscript.sh | 13 + tests/postscript/postscript.txt | 3 + tests/ppt/ppt.sh | 13 + tests/ppt/ppt.txt | 2 + tests/program/program.sh | 16 + tests/program/program.txt | 6 + tests/rar/rar.sh | 16 + tests/rar/rar.txt | 2 + tests/rfc2231/rfc2231.sh | 22 + tests/rfc2231/rfc2231.txt | 6 + tests/rtf/rtf.sh | 13 + tests/rtf/rtf.txt | 2 + tests/runtests.sh | 45 + tests/scribus/scribus.sh | 13 + tests/scribus/scribus.txt | 3 + tests/shared.sh | 62 + tests/skipped/skipped.sh | 13 + tests/skipped/skipped.txt | 2 + tests/special/special.sh | 27 + tests/special/special.txt | 10 + tests/stemming/stemming.sh | 15 + tests/stemming/stemming.txt | 5 + tests/txt/txt.sh | 18 + tests/txt/txt.txt | 6 + tests/utf8/utf8.sh | 13 + tests/utf8/utf8.txt | 2 + tests/utfInPath/utfInPath.sh | 17 + tests/utfInPath/utfInPath.txt | 6 + tests/xls/xls.sh | 13 + tests/xls/xls.txt | 2 + tests/zip/zip.sh | 17 + tests/zip/zip.txt | 6 + unac/.version | 1 + unac/AUTHORS | 1 + unac/COPYING | 340 + unac/CaseFolding-3.2.0.txt | 912 + unac/CaseFolding-5.1.0.txt | 1196 + unac/ChangeLog | 160 + unac/INSTALL | 182 + unac/Makefile.am | 101 + unac/Makefile.in | 778 + unac/NEWS | 58 + unac/README | 93 + unac/THANKS | 9 + unac/UnicodeData-3.2.0.txt | 13903 ++++++ unac/UnicodeData-5.1.0.txt | 19336 +++++++++ unac/acinclude.m4 | 156 + unac/aclocal.m4 | 5253 +++ unac/builder.in | 499 + unac/config.guess | 1325 + unac/config.h.in | 71 + unac/config.sub | 1460 + unac/configure | 10949 +++++ unac/configure.ac | 62 + unac/depcomp | 411 + unac/getopt.c | 1279 + unac/getopt.h | 181 + unac/install-sh | 251 + unac/ltconfig | 3114 ++ unac/ltmain.sh | 5055 +++ unac/missing | 283 + unac/mkinstalldirs | 40 + unac/stamp-h.in | 1 + unac/t_unac.in | 35 + unac/unac.3 | 390 + unac/unac.c | 12977 ++++++ unac/unac.h | 593 + unac/unac.pc.in | 13 + unac/unac.spec.in | 50 + unac/unac_version.h | 1 + unac/unaccent.1 | 115 + unac/unaccent.c | 137 + unac/unactest.c | 53 + unac/unactest1.c | 497 + website/BUGS.html | 768 + website/CHANGES.html | 941 + website/copydocs | 18 + website/credits.html | 80 + website/custom.html | 414 + website/devel.html | 186 + website/doc.html | 59 + website/download-1.13.html | 463 + website/download-1.14.html | 429 + website/download-1.15.html | 422 + website/download-1.16.html | 413 + website/download.html | 434 + website/features.html | 399 + website/filters/filters.html | 128 + website/fr/features.html | 210 + website/helpernotes.html | 74 + website/id3lib.html | 57 + website/index.html.en | 115 + website/index.html.fr | 139 + website/perfs.html | 114 + website/pics/index.html | 22 + website/pics/mario.png | Bin 0 -> 1792 bytes website/pics/piclist.txt | 9 + .../pics/recoll-HTML_search_results-thumb.png | Bin 0 -> 182129 bytes website/pics/recoll-HTML_search_results.html | 40 + website/pics/recoll-HTML_search_results.png | Bin 0 -> 64035 bytes website/pics/recoll-HTML_search_results.txt | 28 + website/pics/recoll0-thumb.png | Bin 0 -> 126689 bytes website/pics/recoll0.html | 13 + website/pics/recoll0.png | Bin 0 -> 130557 bytes website/pics/recoll0.txt | 2 + website/pics/recoll1-thumb.png | Bin 0 -> 157729 bytes website/pics/recoll1.html | 13 + website/pics/recoll1.png | Bin 0 -> 185674 bytes website/pics/recoll1.txt | 4 + website/pics/recoll2-thumb.png | Bin 0 -> 45853 bytes website/pics/recoll2.html | 13 + website/pics/recoll2.png | Bin 0 -> 46557 bytes website/pics/recoll2.txt | 1 + website/pics/recoll3-thumb.png | Bin 0 -> 56412 bytes website/pics/recoll3.html | 14 + website/pics/recoll3.png | Bin 0 -> 169706 bytes website/pics/recoll3.txt | 2 + website/pics/recoll4-thumb.png | Bin 0 -> 66895 bytes website/pics/recoll4.html | 14 + website/pics/recoll4.png | Bin 0 -> 55374 bytes website/pics/recoll4.txt | 2 + website/pics/recoll5-thumb.png | Bin 0 -> 53001 bytes website/pics/recoll5.html | 13 + website/pics/recoll5.png | Bin 0 -> 237133 bytes website/pics/recoll5.txt | 1 + website/pics/recoll_chinese-thumb.png | Bin 0 -> 194549 bytes website/pics/recoll_chinese.html | 14 + website/pics/recoll_chinese.png | Bin 0 -> 738329 bytes website/pics/recoll_chinese.txt | 2 + website/pics/result-table-thumb.png | Bin 0 -> 50314 bytes website/pics/result-table.html | 13 + website/pics/result-table.png | Bin 0 -> 111110 bytes website/pics/smile.png | Bin 0 -> 1394 bytes website/rclidxfmt.html | 196 + website/release-1.14.4.html | 53 + website/release-1.15.html | 194 + website/release-1.16.html | 206 + website/release-1.17.html | 235 + website/resparpics/clean.png | Bin 0 -> 38831 bytes website/resparpics/default.png | Bin 0 -> 40542 bytes website/resparpics/detailSmallGreyTable.png | Bin 0 -> 31701 bytes website/resparpics/issue73+table.png | Bin 0 -> 37617 bytes website/resparpics/issue73.png | Bin 0 -> 37751 bytes website/resparpics/pz3.png | Bin 0 -> 59963 bytes website/resparpics/structuredTable.png | Bin 0 -> 32595 bytes website/resparpics/weblike.png | Bin 0 -> 25158 bytes website/styles/style.css | 109 + website/support.html.en | 65 + website/usermanual/README-dir.txt | 1 + website/xapUpg100.html | 69 + 788 files changed, 332998 insertions(+) create mode 100644 .hgignore create mode 100644 packaging/FreeBSD/recoll/Makefile create mode 100644 packaging/FreeBSD/recoll/distinfo create mode 100644 packaging/FreeBSD/recoll/pkg-descr create mode 100644 packaging/FreeBSD/recoll/pkg-plist create mode 100644 packaging/debian/buildppa.sh create mode 100644 packaging/debian/debiankio/changelog create mode 100644 packaging/debian/debiankio/compat create mode 100644 packaging/debian/debiankio/control create mode 100644 packaging/debian/debiankio/copyright create mode 100644 packaging/debian/debiankio/dirs create mode 100644 packaging/debian/debiankio/docs create mode 100755 packaging/debian/debiankio/rules create mode 100644 packaging/debian/debiankio/watch create mode 100644 packaging/debian/debianrclqt3/changelog create mode 100644 packaging/debian/debianrclqt3/compat create mode 100644 packaging/debian/debianrclqt3/control create mode 100644 packaging/debian/debianrclqt3/copyright create mode 100644 packaging/debian/debianrclqt3/docs create mode 100644 packaging/debian/debianrclqt3/menu create mode 100755 packaging/debian/debianrclqt3/rules create mode 100644 packaging/debian/debianrclqt3/watch create mode 100644 packaging/debian/debianrclqt4/changelog create mode 100644 packaging/debian/debianrclqt4/compat create mode 100644 packaging/debian/debianrclqt4/control create mode 100644 packaging/debian/debianrclqt4/control-lucid create mode 100644 packaging/debian/debianrclqt4/copyright create mode 100644 packaging/debian/debianrclqt4/docs create mode 100644 packaging/debian/debianrclqt4/menu create mode 100644 packaging/debian/debianrclqt4/patches/fix-python-install.patch create mode 100644 packaging/debian/debianrclqt4/patches/series create mode 100755 packaging/debian/debianrclqt4/rules create mode 100644 packaging/debian/debianrclqt4/watch create mode 100644 packaging/debian/debianunitylens/changelog create mode 100644 packaging/debian/debianunitylens/compat create mode 100644 packaging/debian/debianunitylens/control create mode 100644 packaging/debian/debianunitylens/copyright create mode 100644 packaging/debian/debianunitylens/docs create mode 100755 packaging/debian/debianunitylens/rules create mode 100644 packaging/debian/debianunitylens/watch create mode 100644 packaging/macports/README.txt create mode 100644 packaging/macports/textproc/recoll/Portfile create mode 100644 packaging/macports/textproc/recoll/files/patch-configure.diff create mode 100644 packaging/macports/textproc/recoll/files/patch-sampleconf-mimeview.diff create mode 100644 packaging/rpm/kio_recoll.spec create mode 100644 packaging/rpm/recoll.spec create mode 100644 packaging/rpm/recollCooker.spec create mode 100644 packaging/rpm/recollfedora.spec create mode 100644 packaging/rpm/recollfedora10+.spec create mode 100644 packaging/rpm/recollmdk.spec create mode 100644 src/COPYING create mode 100644 src/ChangeLog create mode 100644 src/INSTALL create mode 100644 src/Makefile.in create mode 100644 src/README create mode 100644 src/VERSION create mode 100644 src/aspell/Makefile create mode 100644 src/aspell/aspell-local.h create mode 100644 src/aspell/rclaspell.cpp create mode 100644 src/aspell/rclaspell.h create mode 100644 src/bincimapmime/00README.recoll create mode 100644 src/bincimapmime/AUTHORS create mode 100644 src/bincimapmime/COPYING create mode 100644 src/bincimapmime/Makefile create mode 100644 src/bincimapmime/address.cc create mode 100644 src/bincimapmime/address.h create mode 100644 src/bincimapmime/config.h create mode 100644 src/bincimapmime/convert.cc create mode 100644 src/bincimapmime/convert.h create mode 100644 src/bincimapmime/iodevice.cc create mode 100644 src/bincimapmime/iodevice.h create mode 100644 src/bincimapmime/iofactory.cc create mode 100644 src/bincimapmime/iofactory.h create mode 100644 src/bincimapmime/mime-getpart.cc create mode 100644 src/bincimapmime/mime-inputsource.h create mode 100644 src/bincimapmime/mime-parsefull.cc create mode 100644 src/bincimapmime/mime-parseonlyheader.cc create mode 100644 src/bincimapmime/mime-printbody.cc create mode 100644 src/bincimapmime/mime-printdoc.cc create mode 100644 src/bincimapmime/mime-printheader.cc create mode 100644 src/bincimapmime/mime-utils.h create mode 100644 src/bincimapmime/mime.cc create mode 100644 src/bincimapmime/mime.h create mode 100644 src/bincimapmime/trbinc.cc create mode 100644 src/common/Makefile create mode 100644 src/common/autoconfig.h.in create mode 100644 src/common/beaglequeuecache.cpp create mode 100644 src/common/beaglequeuecache.h create mode 100644 src/common/cstr.cpp create mode 100644 src/common/cstr.h create mode 100644 src/common/rclconfig.cpp create mode 100644 src/common/rclconfig.h create mode 100644 src/common/rclinit.cpp create mode 100644 src/common/rclinit.h create mode 100644 src/common/rclversion.h.in create mode 100644 src/common/textsplit.cpp create mode 100644 src/common/textsplit.h create mode 100644 src/common/unacpp.cpp create mode 100644 src/common/unacpp.h create mode 100644 src/common/uproplist.h create mode 100755 src/configure create mode 100644 src/configure.ac create mode 100755 src/desktop/hotrecoll.py create mode 100644 src/desktop/recoll-searchgui.desktop create mode 100644 src/desktop/recoll.png create mode 100644 src/desktop/recoll.xcf create mode 100644 src/desktop/recollindex.desktop create mode 100644 src/desktop/unity-lens-recoll/AUTHORS create mode 100644 src/desktop/unity-lens-recoll/COPYING create mode 100644 src/desktop/unity-lens-recoll/ChangeLog create mode 100644 src/desktop/unity-lens-recoll/INSTALL create mode 100644 src/desktop/unity-lens-recoll/Makefile.am create mode 100644 src/desktop/unity-lens-recoll/Makefile.in create mode 100644 src/desktop/unity-lens-recoll/NEWS create mode 100644 src/desktop/unity-lens-recoll/README create mode 100644 src/desktop/unity-lens-recoll/acinclude.m4 create mode 100644 src/desktop/unity-lens-recoll/aclocal.m4 create mode 100755 src/desktop/unity-lens-recoll/bin/unity-recoll-daemon.in create mode 100755 src/desktop/unity-lens-recoll/configure create mode 100644 src/desktop/unity-lens-recoll/configure.ac create mode 100644 src/desktop/unity-lens-recoll/data/recoll.lens.in create mode 100644 src/desktop/unity-lens-recoll/data/recollbg24.png create mode 100644 src/desktop/unity-lens-recoll/data/unity-lens-recoll.service.in create mode 100644 src/desktop/unity-lens-recoll/excludefile create mode 100755 src/desktop/unity-lens-recoll/install-sh create mode 100755 src/desktop/unity-lens-recoll/missing create mode 100644 src/desktop/unity-lens-recoll/mkdist.sh create mode 100755 src/desktop/unity-lens-recoll/py-compile create mode 100644 src/desktop/unity-lens-recoll/recollscope/__init__.py create mode 100755 src/desktop/unity-lens-recoll/recollscope/rclsearch.py create mode 100644 src/desktop/xdg-utils-1.0.1/LICENSE create mode 100755 src/desktop/xdg-utils-1.0.1/scripts/xdg-desktop-menu create mode 100755 src/desktop/xdg-utils-1.0.1/scripts/xdg-icon-resource create mode 100755 src/desktop/xdg-utils-1.0.1/scripts/xdg-open create mode 100644 src/doc/man/recoll.1 create mode 100644 src/doc/man/recoll.conf.5 create mode 100644 src/doc/man/recollindex.1 create mode 100644 src/doc/man/recollq.1 create mode 100644 src/doc/prog/Doxyfile create mode 100644 src/doc/prog/Makefile create mode 100644 src/doc/prog/filters.txt create mode 100644 src/doc/prog/top.txt create mode 100644 src/doc/user/Makefile create mode 100644 src/doc/user/bldloop create mode 100644 src/doc/user/docbook.css create mode 100644 src/doc/user/usermanual-italian.html create mode 100644 src/doc/user/usermanual.sgml create mode 100644 src/excludefile create mode 100755 src/filters/injectcommon.sh create mode 100755 src/filters/rclabw create mode 100755 src/filters/rclaptosidman create mode 100755 src/filters/rclaudio create mode 100755 src/filters/rclchm create mode 100755 src/filters/rcldjvu create mode 100755 src/filters/rcldoc create mode 100755 src/filters/rcldvi create mode 100644 src/filters/rclexecm.py create mode 100755 src/filters/rclfb2 create mode 100755 src/filters/rclgaim create mode 100755 src/filters/rclgnm create mode 100755 src/filters/rclics create mode 100755 src/filters/rclimg create mode 100755 src/filters/rclinfo create mode 100755 src/filters/rclkar create mode 100755 src/filters/rclkwd create mode 100755 src/filters/rcllatinclass.py create mode 100644 src/filters/rcllatinstops.zip create mode 100755 src/filters/rcllyx create mode 100755 src/filters/rclman create mode 100755 src/filters/rclnull create mode 100755 src/filters/rclokulnote create mode 100755 src/filters/rclopxml create mode 100755 src/filters/rclpdf create mode 100755 src/filters/rclppt create mode 100755 src/filters/rclps create mode 100755 src/filters/rclpurple create mode 100755 src/filters/rclpython create mode 100755 src/filters/rclrar create mode 100755 src/filters/rclrtf create mode 100755 src/filters/rclscribus create mode 100755 src/filters/rclshowinfo create mode 100755 src/filters/rclsiduxman create mode 100755 src/filters/rclsoff create mode 100755 src/filters/rclsvg create mode 100755 src/filters/rcltex create mode 100755 src/filters/rcltext create mode 100755 src/filters/rcluncomp create mode 100755 src/filters/rclwar create mode 100755 src/filters/rclwpd create mode 100755 src/filters/rclxls create mode 100755 src/filters/rclzip create mode 100755 src/filters/recfiltcommon create mode 100644 src/index/Makefile create mode 100644 src/index/beaglequeue.cpp create mode 100644 src/index/beaglequeue.h create mode 100644 src/index/csguess.cpp create mode 100644 src/index/csguess.h create mode 100644 src/index/fsindexer.cpp create mode 100644 src/index/fsindexer.h create mode 100644 src/index/indexer.cpp create mode 100644 src/index/indexer.h create mode 100644 src/index/mimetype.cpp create mode 100644 src/index/mimetype.h create mode 100644 src/index/rclmon.h create mode 100755 src/index/rclmon.sh create mode 100644 src/index/rclmonprc.cpp create mode 100644 src/index/rclmonrcv.cpp create mode 100644 src/index/recollindex.cpp create mode 100644 src/index/recollindex.h create mode 100644 src/index/subtreelist.cpp create mode 100644 src/index/subtreelist.h create mode 100644 src/internfile/Filter.h create mode 100644 src/internfile/Makefile create mode 100644 src/internfile/htmlparse.cpp create mode 100644 src/internfile/htmlparse.h create mode 100644 src/internfile/indextext.h create mode 100644 src/internfile/internfile.cpp create mode 100644 src/internfile/internfile.h create mode 100644 src/internfile/mh_exec.cpp create mode 100644 src/internfile/mh_exec.h create mode 100644 src/internfile/mh_execm.cpp create mode 100644 src/internfile/mh_execm.h create mode 100644 src/internfile/mh_html.cpp create mode 100644 src/internfile/mh_html.h create mode 100644 src/internfile/mh_mail.cpp create mode 100644 src/internfile/mh_mail.h create mode 100644 src/internfile/mh_mbox.cpp create mode 100644 src/internfile/mh_mbox.h create mode 100644 src/internfile/mh_text.cpp create mode 100644 src/internfile/mh_text.h create mode 100644 src/internfile/mh_unknown.h create mode 100644 src/internfile/mimehandler.cpp create mode 100644 src/internfile/mimehandler.h create mode 100644 src/internfile/myhtmlparse.cpp create mode 100644 src/internfile/myhtmlparse.h create mode 100644 src/internfile/txtdcode.cpp create mode 100644 src/kde/kioslave/kio_recoll/00README.txt create mode 100644 src/kde/kioslave/kio_recoll/CMakeLists.txt create mode 100644 src/kde/kioslave/kio_recoll/Makefile.kde3 create mode 100644 src/kde/kioslave/kio_recoll/cleancmakestuff.sh create mode 100644 src/kde/kioslave/kio_recoll/data/help.html create mode 100644 src/kde/kioslave/kio_recoll/data/searchable.html create mode 100644 src/kde/kioslave/kio_recoll/data/welcome.html create mode 100644 src/kde/kioslave/kio_recoll/dirif.cpp create mode 100644 src/kde/kioslave/kio_recoll/htmlif.cpp create mode 100644 src/kde/kioslave/kio_recoll/kio_recoll.cpp create mode 100644 src/kde/kioslave/kio_recoll/kio_recoll.h create mode 100755 src/kde/kioslave/kio_recoll/kio_recoll.la create mode 100644 src/kde/kioslave/kio_recoll/notes.txt create mode 100644 src/kde/kioslave/kio_recoll/recoll.protocol create mode 100644 src/kde/kioslave/kio_recoll/recollf.protocol create mode 100644 src/kde/kioslave/kio_recoll/recollnolist.protocol create mode 100644 src/kde/recoll_applet/0README.Recoll create mode 100644 src/kde/recoll_applet/AUTHORS create mode 100644 src/kde/recoll_applet/COPYING create mode 100644 src/kde/recoll_applet/ChangeLog create mode 100644 src/kde/recoll_applet/Doxyfile create mode 100644 src/kde/recoll_applet/INSTALL create mode 100644 src/kde/recoll_applet/Makefile.am create mode 100644 src/kde/recoll_applet/Makefile.cvs create mode 100644 src/kde/recoll_applet/Makefile.in create mode 100644 src/kde/recoll_applet/NEWS create mode 100644 src/kde/recoll_applet/README create mode 100644 src/kde/recoll_applet/TODO create mode 100644 src/kde/recoll_applet/acinclude.m4 create mode 100644 src/kde/recoll_applet/aclocal.m4 create mode 100644 src/kde/recoll_applet/admin/Doxyfile.am create mode 100755 src/kde/recoll_applet/admin/Doxyfile.global create mode 100644 src/kde/recoll_applet/admin/Makefile.common create mode 100644 src/kde/recoll_applet/admin/acinclude.m4.in create mode 100644 src/kde/recoll_applet/admin/am_edit create mode 100644 src/kde/recoll_applet/admin/bcheck.pl create mode 100755 src/kde/recoll_applet/admin/compile create mode 100644 src/kde/recoll_applet/admin/conf.change.pl create mode 100755 src/kde/recoll_applet/admin/config.guess create mode 100644 src/kde/recoll_applet/admin/config.pl create mode 100755 src/kde/recoll_applet/admin/config.sub create mode 100644 src/kde/recoll_applet/admin/configure.in.bot.end create mode 100644 src/kde/recoll_applet/admin/configure.in.min create mode 100644 src/kde/recoll_applet/admin/cvs.sh create mode 100755 src/kde/recoll_applet/admin/debianrules create mode 100755 src/kde/recoll_applet/admin/depcomp create mode 100644 src/kde/recoll_applet/admin/deps.am create mode 100755 src/kde/recoll_applet/admin/detect-autoconf.pl create mode 100644 src/kde/recoll_applet/admin/doxygen.sh create mode 100755 src/kde/recoll_applet/admin/install-sh create mode 100644 src/kde/recoll_applet/admin/libtool.m4.in create mode 100644 src/kde/recoll_applet/admin/ltmain.sh create mode 100755 src/kde/recoll_applet/admin/missing create mode 100755 src/kde/recoll_applet/admin/mkinstalldirs create mode 100755 src/kde/recoll_applet/admin/nmcheck create mode 100644 src/kde/recoll_applet/admin/oldinclude.m4.in create mode 100644 src/kde/recoll_applet/admin/pkg.m4.in create mode 100755 src/kde/recoll_applet/admin/ylwrap create mode 100644 src/kde/recoll_applet/config.h.in create mode 100755 src/kde/recoll_applet/configure create mode 100644 src/kde/recoll_applet/configure.files create mode 100644 src/kde/recoll_applet/configure.in create mode 100644 src/kde/recoll_applet/configure.in.in create mode 100644 src/kde/recoll_applet/doc/Makefile.am create mode 100644 src/kde/recoll_applet/doc/Makefile.in create mode 100644 src/kde/recoll_applet/doc/en/Makefile.am create mode 100644 src/kde/recoll_applet/doc/en/Makefile.in create mode 100644 src/kde/recoll_applet/doc/en/index.docbook create mode 100644 src/kde/recoll_applet/po/Makefile.am create mode 100644 src/kde/recoll_applet/po/Makefile.in create mode 100644 src/kde/recoll_applet/src/Makefile.am create mode 100644 src/kde/recoll_applet/src/Makefile.in create mode 100644 src/kde/recoll_applet/src/kpixmapcombo.cpp create mode 100644 src/kde/recoll_applet/src/kpixmapcombo.h create mode 100644 src/kde/recoll_applet/src/recoll_applet.cpp create mode 100644 src/kde/recoll_applet/src/recoll_applet.desktop create mode 100644 src/kde/recoll_applet/src/recoll_applet.h create mode 100644 src/kde/recoll_applet/src/recoll_applet.lsm create mode 100644 src/kde/recoll_applet/stamp-h.in create mode 100644 src/kde/recoll_applet/subdirs create mode 100644 src/lib/Makefile create mode 100755 src/lib/mkMake create mode 100644 src/makesrcdist.sh create mode 100644 src/makestaticdist.sh create mode 100644 src/mk/AIX create mode 100644 src/mk/Darwin create mode 100644 src/mk/Default create mode 100644 src/mk/FreeBSD create mode 100644 src/mk/Linux create mode 100644 src/mk/OpenBSD create mode 100644 src/mk/SunOS create mode 100644 src/mk/commondefs create mode 100644 src/mk/localdefs.in create mode 100644 src/mk/manifest.txt create mode 100644 src/php/00README.txt create mode 100644 src/php/recoll/config.m4 create mode 100755 src/php/recoll/make.sh create mode 100644 src/php/recoll/php_recoll.h create mode 100644 src/php/recoll/recoll.cpp create mode 100644 src/php/sample/shell.php create mode 100644 src/python/README.txt create mode 100644 src/python/recoll/Makefile create mode 100644 src/python/recoll/pyrecoll.cpp create mode 100644 src/python/recoll/setup.py.in create mode 100755 src/python/samples/rcldlkp.py create mode 100644 src/python/samples/rclmbox.py create mode 100755 src/python/samples/recollq.py create mode 100644 src/python/samples/recollqsd.py create mode 100755 src/python/xesam/xesam-recoll-service create mode 100644 src/qtgui/advsearch.ui create mode 100644 src/qtgui/advsearch_w.cpp create mode 100644 src/qtgui/advsearch_w.h create mode 100644 src/qtgui/confgui/confgui.cpp create mode 100644 src/qtgui/confgui/confgui.h create mode 100644 src/qtgui/confgui/confguiindex.cpp create mode 100644 src/qtgui/confgui/confguiindex.h create mode 100644 src/qtgui/confgui/conflinkrcl.h create mode 100644 src/qtgui/confgui/main.cpp create mode 100644 src/qtgui/confgui/trconf.pro create mode 100644 src/qtgui/crontool.cpp create mode 100644 src/qtgui/crontool.h create mode 100644 src/qtgui/crontool.ui create mode 100644 src/qtgui/editdialog.h create mode 100644 src/qtgui/editdialog.ui create mode 100644 src/qtgui/firstidx.h create mode 100644 src/qtgui/firstidx.ui create mode 100644 src/qtgui/guiutils.cpp create mode 100644 src/qtgui/guiutils.h create mode 100644 src/qtgui/i18n/recoll_cs.ts create mode 100644 src/qtgui/i18n/recoll_de.ts create mode 100644 src/qtgui/i18n/recoll_es.ts create mode 100644 src/qtgui/i18n/recoll_fr.ts create mode 100644 src/qtgui/i18n/recoll_it.ts create mode 100644 src/qtgui/i18n/recoll_lt.ts create mode 100644 src/qtgui/i18n/recoll_ru.ts create mode 100644 src/qtgui/i18n/recoll_tr.ts create mode 100644 src/qtgui/i18n/recoll_uk.ts create mode 100644 src/qtgui/i18n/recoll_xx.ts create mode 100644 src/qtgui/i18n/recoll_zh.ts create mode 100644 src/qtgui/i18n/recoll_zh_CN.qm create mode 100644 src/qtgui/i18n/recoll_zh_CN.ts create mode 100644 src/qtgui/idxsched.h create mode 100644 src/qtgui/idxsched.ui create mode 100644 src/qtgui/images/asearch.png create mode 100755 src/qtgui/images/cancel.png create mode 100755 src/qtgui/images/close.png create mode 100755 src/qtgui/images/down.png create mode 100644 src/qtgui/images/firstpage.png create mode 100644 src/qtgui/images/history.png create mode 100644 src/qtgui/images/nextpage.png create mode 100644 src/qtgui/images/prevpage.png create mode 100644 src/qtgui/images/sortparms.png create mode 100644 src/qtgui/images/spell.png create mode 100755 src/qtgui/images/table.png create mode 100755 src/qtgui/images/up.png create mode 100644 src/qtgui/listdialog.h create mode 100644 src/qtgui/listdialog.ui create mode 100644 src/qtgui/main.cpp create mode 100644 src/qtgui/mtpics/License_sidux.txt create mode 100644 src/qtgui/mtpics/README create mode 100755 src/qtgui/mtpics/aptosid-book.png create mode 100644 src/qtgui/mtpics/aptosid-manual-copyright.txt create mode 100644 src/qtgui/mtpics/aptosid-manual.png create mode 100644 src/qtgui/mtpics/document.png create mode 100644 src/qtgui/mtpics/drawing.png create mode 100644 src/qtgui/mtpics/folder.png create mode 100644 src/qtgui/mtpics/html.png create mode 100755 src/qtgui/mtpics/image.png create mode 100644 src/qtgui/mtpics/message.png create mode 100644 src/qtgui/mtpics/mozilla_doc.png create mode 100644 src/qtgui/mtpics/pdf.png create mode 100644 src/qtgui/mtpics/pidgin.png create mode 100644 src/qtgui/mtpics/postscript.png create mode 100644 src/qtgui/mtpics/presentation.png create mode 100644 src/qtgui/mtpics/sidux-book.png create mode 100644 src/qtgui/mtpics/soffice.png create mode 100755 src/qtgui/mtpics/source.png create mode 100755 src/qtgui/mtpics/sownd.png create mode 100644 src/qtgui/mtpics/spreadsheet.png create mode 100644 src/qtgui/mtpics/text-x-python.png create mode 100644 src/qtgui/mtpics/txt.png create mode 100644 src/qtgui/mtpics/wordprocessing.png create mode 100644 src/qtgui/preview_w.cpp create mode 100644 src/qtgui/preview_w.h create mode 100644 src/qtgui/rclhelp.cpp create mode 100644 src/qtgui/rclhelp.h create mode 100644 src/qtgui/rclmain.ui create mode 100644 src/qtgui/rclmain_w.cpp create mode 100644 src/qtgui/rclmain_w.h create mode 100644 src/qtgui/rclzg.cpp create mode 100644 src/qtgui/rclzg.h create mode 100644 src/qtgui/recoll.h create mode 100644 src/qtgui/recoll.pro.in create mode 100644 src/qtgui/recoll.qrc create mode 100644 src/qtgui/reslist.cpp create mode 100644 src/qtgui/reslist.h create mode 100644 src/qtgui/restable.cpp create mode 100644 src/qtgui/restable.h create mode 100644 src/qtgui/restable.ui create mode 100644 src/qtgui/rtitool.cpp create mode 100644 src/qtgui/rtitool.h create mode 100644 src/qtgui/rtitool.ui create mode 100644 src/qtgui/searchclause_w.cpp create mode 100644 src/qtgui/searchclause_w.h create mode 100644 src/qtgui/spell.ui create mode 100644 src/qtgui/spell_w.cpp create mode 100644 src/qtgui/spell_w.h create mode 100644 src/qtgui/ssearch_w.cpp create mode 100644 src/qtgui/ssearch_w.h create mode 100644 src/qtgui/ssearchb.ui create mode 100644 src/qtgui/ui_rclmain.h-4.5 create mode 100644 src/qtgui/uiprefs.ui create mode 100644 src/qtgui/uiprefs_w.cpp create mode 100644 src/qtgui/uiprefs_w.h create mode 100644 src/qtgui/viewaction.ui create mode 100644 src/qtgui/viewaction_w.cpp create mode 100644 src/qtgui/viewaction_w.h create mode 100644 src/query/Makefile create mode 100644 src/query/docseq.cpp create mode 100644 src/query/docseq.h create mode 100644 src/query/docseqdb.cpp create mode 100644 src/query/docseqdb.h create mode 100644 src/query/docseqhist.cpp create mode 100644 src/query/docseqhist.h create mode 100644 src/query/dynconf.cpp create mode 100644 src/query/dynconf.h create mode 100644 src/query/filtseq.cpp create mode 100644 src/query/filtseq.h create mode 100644 src/query/plaintorich.cpp create mode 100644 src/query/plaintorich.h create mode 100644 src/query/recollq.cpp create mode 100644 src/query/recollq.h create mode 100644 src/query/reslistpager.cpp create mode 100644 src/query/reslistpager.h create mode 100644 src/query/sortseq.cpp create mode 100644 src/query/sortseq.h create mode 100644 src/query/wasastringtoquery.cpp create mode 100644 src/query/wasastringtoquery.h create mode 100644 src/query/wasatorcl.cpp create mode 100644 src/query/wasatorcl.h create mode 100644 src/query/xadump.cpp create mode 100644 src/rcldb/Makefile create mode 100644 src/rcldb/rcldb.cpp create mode 100644 src/rcldb/rcldb.h create mode 100644 src/rcldb/rcldb_p.h create mode 100644 src/rcldb/rcldoc.cpp create mode 100644 src/rcldb/rcldoc.h create mode 100644 src/rcldb/rclquery.cpp create mode 100644 src/rcldb/rclquery.h create mode 100644 src/rcldb/rclquery_p.h create mode 100644 src/rcldb/searchdata.cpp create mode 100644 src/rcldb/searchdata.h create mode 100644 src/rcldb/stemdb.cpp create mode 100644 src/rcldb/stemdb.h create mode 100644 src/rcldb/stoplist.cpp create mode 100644 src/rcldb/stoplist.h create mode 100644 src/rcldb/termproc.h create mode 100755 src/recollinstall.in create mode 100644 src/sampleconf/fields create mode 100644 src/sampleconf/mimeconf create mode 100644 src/sampleconf/mimemap create mode 100644 src/sampleconf/mimeview create mode 100644 src/sampleconf/mimeview.mac create mode 100644 src/sampleconf/recoll.conf.in create mode 100644 src/sampleconf/recoll.qss create mode 100644 src/unac/AUTHORS create mode 100644 src/unac/COPYING create mode 100644 src/unac/README create mode 100644 src/unac/README.recoll create mode 100644 src/unac/unac.c create mode 100644 src/unac/unac.h create mode 100644 src/unac/unac_version.h create mode 100644 src/utils/Makefile create mode 100644 src/utils/base64.cpp create mode 100644 src/utils/base64.h create mode 100644 src/utils/cancelcheck.h create mode 100644 src/utils/circache.cpp create mode 100644 src/utils/circache.h create mode 100644 src/utils/closefrom.cpp create mode 100644 src/utils/closefrom.h create mode 100644 src/utils/conftree.cpp create mode 100644 src/utils/conftree.h create mode 100644 src/utils/copyfile.cpp create mode 100644 src/utils/copyfile.h create mode 100644 src/utils/debuglog.cpp create mode 100644 src/utils/debuglog.h create mode 100644 src/utils/ecrontab.cpp create mode 100644 src/utils/ecrontab.h create mode 100644 src/utils/execmd.cpp create mode 100644 src/utils/execmd.h create mode 100644 src/utils/fileudi.cpp create mode 100644 src/utils/fileudi.h create mode 100644 src/utils/fstreewalk.cpp create mode 100644 src/utils/fstreewalk.h create mode 100644 src/utils/idfile.cpp create mode 100644 src/utils/idfile.h create mode 100644 src/utils/md5.cpp create mode 100644 src/utils/md5.h create mode 100644 src/utils/mimeparse.cpp create mode 100644 src/utils/mimeparse.h create mode 100644 src/utils/netcon.cpp create mode 100644 src/utils/netcon.h create mode 100644 src/utils/pathut.cpp create mode 100644 src/utils/pathut.h create mode 100644 src/utils/ptmutex.cpp create mode 100644 src/utils/ptmutex.h create mode 100644 src/utils/pxattr.cpp create mode 100644 src/utils/pxattr.h create mode 100644 src/utils/rclionice.cpp create mode 100644 src/utils/rclionice.h create mode 100644 src/utils/readfile.cpp create mode 100644 src/utils/readfile.h create mode 100644 src/utils/refcntr.h create mode 100644 src/utils/smallut.cpp create mode 100644 src/utils/smallut.h create mode 100644 src/utils/transcode.cpp create mode 100644 src/utils/transcode.h create mode 100644 src/utils/utf8iter.cpp create mode 100644 src/utils/utf8iter.h create mode 100644 src/utils/utf8testin.txt create mode 100644 src/utils/wipedir.cpp create mode 100644 src/utils/wipedir.h create mode 100644 src/utils/workqueue.cpp create mode 100644 src/utils/workqueue.h create mode 100644 src/utils/x11mon.cpp create mode 100644 src/utils/x11mon.h create mode 100755 tests/Maildir/Maildir.sh create mode 100644 tests/Maildir/Maildir.txt create mode 100755 tests/Maildir1/Maildir1.sh create mode 100644 tests/Maildir1/Maildir1.txt create mode 100755 tests/abiword/abiword.sh create mode 100644 tests/abiword/abiword.txt create mode 100755 tests/anchor/anchor.sh create mode 100644 tests/anchor/anchor.txt create mode 100755 tests/andor/andor.sh create mode 100644 tests/andor/andor.txt create mode 100755 tests/badsuffs/badsuffs.sh create mode 100644 tests/badsuffs/badsuffs.txt create mode 100755 tests/badsuffs1/badsuffs1.sh create mode 100644 tests/badsuffs1/badsuffs1.txt create mode 100755 tests/boolean/boolean.sh create mode 100644 tests/boolean/boolean.txt create mode 100755 tests/chm/chm.sh create mode 100644 tests/chm/chm.txt create mode 100755 tests/cjk/cjk.sh create mode 100644 tests/cjk/cjk.txt create mode 100755 tests/compressed/compressed.sh create mode 100644 tests/compressed/compressed.txt create mode 100644 tests/config/fields create mode 100644 tests/config/mimeconf create mode 100644 tests/config/mimemap create mode 100644 tests/config/mimeview create mode 100644 tests/config/recoll.conf create mode 100755 tests/dates/dates.sh create mode 100644 tests/dates/dates.txt create mode 100755 tests/delete/delete.sh create mode 100644 tests/delete/delete.txt create mode 100755 tests/dirwithblanks/dirwithblanks.sh create mode 100644 tests/dirwithblanks/dirwithblanks.txt create mode 100755 tests/djvu/djvu.sh create mode 100644 tests/djvu/djvu.txt create mode 100755 tests/dvi/dvi.sh create mode 100644 tests/dvi/dvi.txt create mode 100755 tests/embed/embed.sh create mode 100644 tests/embed/embed.txt create mode 100755 tests/empty/empty.sh create mode 100644 tests/empty/empty.txt create mode 100755 tests/gnumeric/gnumeric.sh create mode 100644 tests/gnumeric/gnumeric.txt create mode 100755 tests/html/html.sh create mode 100644 tests/html/html.txt create mode 100755 tests/ics/ics.sh create mode 100644 tests/ics/ics.txt create mode 100755 tests/images/images.sh create mode 100644 tests/images/images.txt create mode 100644 tests/indexedmimetypes/indexedmimetypes.sh create mode 100644 tests/indexedmimetypes/indexedmimetypes.txt create mode 100755 tests/info/info.sh create mode 100644 tests/info/info.txt create mode 100755 tests/kar/kar.sh create mode 100644 tests/kar/kar.txt create mode 100755 tests/koi8r/koi8r.sh create mode 100644 tests/koi8r/koi8r.txt create mode 100755 tests/lyx/lyx.sh create mode 100644 tests/lyx/lyx.txt create mode 100755 tests/mail/mail.sh create mode 100644 tests/mail/mail.txt create mode 100755 tests/man/man.sh create mode 100644 tests/man/man.txt create mode 100755 tests/media/media.sh create mode 100644 tests/media/media.txt create mode 100755 tests/msword/msword.sh create mode 100644 tests/msword/msword.txt create mode 100644 tests/non-auto/testmbox.sh create mode 100755 tests/notypes/notypes.sh create mode 100644 tests/notypes/notypes.txt create mode 100755 tests/okular-notes/okular-notes.sh create mode 100644 tests/okular-notes/okular-notes.txt create mode 100755 tests/ooff/ooff.sh create mode 100644 tests/ooff/ooff.txt create mode 100755 tests/pdf/pdf.sh create mode 100644 tests/pdf/pdf.txt create mode 100755 tests/postscript/postscript.sh create mode 100644 tests/postscript/postscript.txt create mode 100755 tests/ppt/ppt.sh create mode 100644 tests/ppt/ppt.txt create mode 100755 tests/program/program.sh create mode 100644 tests/program/program.txt create mode 100755 tests/rar/rar.sh create mode 100644 tests/rar/rar.txt create mode 100755 tests/rfc2231/rfc2231.sh create mode 100644 tests/rfc2231/rfc2231.txt create mode 100755 tests/rtf/rtf.sh create mode 100644 tests/rtf/rtf.txt create mode 100644 tests/runtests.sh create mode 100755 tests/scribus/scribus.sh create mode 100644 tests/scribus/scribus.txt create mode 100644 tests/shared.sh create mode 100755 tests/skipped/skipped.sh create mode 100644 tests/skipped/skipped.txt create mode 100755 tests/special/special.sh create mode 100644 tests/special/special.txt create mode 100755 tests/stemming/stemming.sh create mode 100644 tests/stemming/stemming.txt create mode 100755 tests/txt/txt.sh create mode 100644 tests/txt/txt.txt create mode 100755 tests/utf8/utf8.sh create mode 100644 tests/utf8/utf8.txt create mode 100755 tests/utfInPath/utfInPath.sh create mode 100644 tests/utfInPath/utfInPath.txt create mode 100755 tests/xls/xls.sh create mode 100644 tests/xls/xls.txt create mode 100755 tests/zip/zip.sh create mode 100644 tests/zip/zip.txt create mode 100644 unac/.version create mode 100644 unac/AUTHORS create mode 100644 unac/COPYING create mode 100644 unac/CaseFolding-3.2.0.txt create mode 100644 unac/CaseFolding-5.1.0.txt create mode 100644 unac/ChangeLog create mode 100644 unac/INSTALL create mode 100644 unac/Makefile.am create mode 100644 unac/Makefile.in create mode 100644 unac/NEWS create mode 100644 unac/README create mode 100644 unac/THANKS create mode 100644 unac/UnicodeData-3.2.0.txt create mode 100644 unac/UnicodeData-5.1.0.txt create mode 100644 unac/acinclude.m4 create mode 100644 unac/aclocal.m4 create mode 100644 unac/builder.in create mode 100755 unac/config.guess create mode 100644 unac/config.h.in create mode 100755 unac/config.sub create mode 100755 unac/configure create mode 100644 unac/configure.ac create mode 100755 unac/depcomp create mode 100644 unac/getopt.c create mode 100644 unac/getopt.h create mode 100755 unac/install-sh create mode 100755 unac/ltconfig create mode 100644 unac/ltmain.sh create mode 100755 unac/missing create mode 100755 unac/mkinstalldirs create mode 100644 unac/stamp-h.in create mode 100755 unac/t_unac.in create mode 100644 unac/unac.3 create mode 100644 unac/unac.c create mode 100644 unac/unac.h create mode 100644 unac/unac.pc.in create mode 100644 unac/unac.spec.in create mode 100644 unac/unac_version.h create mode 100644 unac/unaccent.1 create mode 100644 unac/unaccent.c create mode 100644 unac/unactest.c create mode 100644 unac/unactest1.c create mode 100644 website/BUGS.html create mode 100644 website/CHANGES.html create mode 100644 website/copydocs create mode 100644 website/credits.html create mode 100644 website/custom.html create mode 100644 website/devel.html create mode 100644 website/doc.html create mode 100644 website/download-1.13.html create mode 100644 website/download-1.14.html create mode 100644 website/download-1.15.html create mode 100644 website/download-1.16.html create mode 100644 website/download.html create mode 100644 website/features.html create mode 100644 website/filters/filters.html create mode 100644 website/fr/features.html create mode 100644 website/helpernotes.html create mode 100644 website/id3lib.html create mode 100644 website/index.html.en create mode 100644 website/index.html.fr create mode 100644 website/perfs.html create mode 100644 website/pics/index.html create mode 100644 website/pics/mario.png create mode 100644 website/pics/piclist.txt create mode 100644 website/pics/recoll-HTML_search_results-thumb.png create mode 100644 website/pics/recoll-HTML_search_results.html create mode 100644 website/pics/recoll-HTML_search_results.png create mode 100644 website/pics/recoll-HTML_search_results.txt create mode 100644 website/pics/recoll0-thumb.png create mode 100644 website/pics/recoll0.html create mode 100644 website/pics/recoll0.png create mode 100644 website/pics/recoll0.txt create mode 100644 website/pics/recoll1-thumb.png create mode 100644 website/pics/recoll1.html create mode 100644 website/pics/recoll1.png create mode 100644 website/pics/recoll1.txt create mode 100644 website/pics/recoll2-thumb.png create mode 100644 website/pics/recoll2.html create mode 100644 website/pics/recoll2.png create mode 100644 website/pics/recoll2.txt create mode 100644 website/pics/recoll3-thumb.png create mode 100644 website/pics/recoll3.html create mode 100644 website/pics/recoll3.png create mode 100644 website/pics/recoll3.txt create mode 100644 website/pics/recoll4-thumb.png create mode 100644 website/pics/recoll4.html create mode 100644 website/pics/recoll4.png create mode 100644 website/pics/recoll4.txt create mode 100644 website/pics/recoll5-thumb.png create mode 100644 website/pics/recoll5.html create mode 100644 website/pics/recoll5.png create mode 100644 website/pics/recoll5.txt create mode 100644 website/pics/recoll_chinese-thumb.png create mode 100644 website/pics/recoll_chinese.html create mode 100644 website/pics/recoll_chinese.png create mode 100644 website/pics/recoll_chinese.txt create mode 100644 website/pics/result-table-thumb.png create mode 100644 website/pics/result-table.html create mode 100644 website/pics/result-table.png create mode 100644 website/pics/smile.png create mode 100644 website/rclidxfmt.html create mode 100644 website/release-1.14.4.html create mode 100644 website/release-1.15.html create mode 100644 website/release-1.16.html create mode 100644 website/release-1.17.html create mode 100644 website/resparpics/clean.png create mode 100644 website/resparpics/default.png create mode 100644 website/resparpics/detailSmallGreyTable.png create mode 100644 website/resparpics/issue73+table.png create mode 100644 website/resparpics/issue73.png create mode 100644 website/resparpics/pz3.png create mode 100644 website/resparpics/structuredTable.png create mode 100644 website/resparpics/weblike.png create mode 100644 website/styles/style.css create mode 100644 website/support.html.en create mode 100644 website/usermanual/README-dir.txt create mode 100644 website/xapUpg100.html diff --git a/.hgignore b/.hgignore new file mode 100644 index 00000000..3d53af42 --- /dev/null +++ b/.hgignore @@ -0,0 +1,102 @@ +syntax: glob +*.o +*.dep +*.dep.stamp +*~ +\#* +src/Makefile +src/autom4te.cache +src/bincimapmime/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/index.html +src/doc/user/rcl.indexing.beaglequeue.html +src/doc/user/rcl.indexing.config.html +src/doc/user/rcl.indexing.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.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.html +src/doc/user/rcl.introduction.recoll.html +src/doc/user/rcl.introduction.search.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.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.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.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.searchkcl.html +src/doc/user/rcl.searchkio.html +src/doc/user/rcl.searchkio.searchabledocs.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/filters/rclexecm.pyc +src/filters/rcllatinclass.pyc +src/index/alldeps +src/index/alldeps.stamp +src/index/recollindex +src/kde/kioslave/kio_recoll/builddir +src/lib/alldeps +src/lib/librcl.a +src/mk/localdefs +src/mk/sysconf +src/python/recoll/build +src/python/recoll/setup.py +src/qtgui/.moc/* +src/qtgui/.obj/* +src/qtgui/.ui/* +src/qtgui/Makefile +src/qtgui/i18n/*.qm +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 +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..d91ef64a --- /dev/null +++ b/packaging/debian/buildppa.sh @@ -0,0 +1,86 @@ +#!/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=1.17.1 +LENSVERS=1.17.1.2654 +PPAVERS=1 + +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 maverick natty oneiric precise" +series4="natty oneiric 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 maverick natty oneiric precise" +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="natty oneiric precise" +#seriesl="oneiric" + +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/debiankio/changelog b/packaging/debian/debiankio/changelog new file mode 100644 index 00000000..718e2b09 --- /dev/null +++ b/packaging/debian/debiankio/changelog @@ -0,0 +1,48 @@ +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/debianrclqt3/changelog b/packaging/debian/debianrclqt3/changelog new file mode 100644 index 00000000..15d7fc6e --- /dev/null +++ b/packaging/debian/debianrclqt3/changelog @@ -0,0 +1,59 @@ +recoll (1.14.3-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.14.3 + -- Jean-Francois Dockes Thu, 25 Nov 2010 10:25:00 +0200 + +recoll (1.14.2-0~ppa1~SERIES1) SERIES; urgency=low + * Updated package to recoll version 1.14.2 + -- Jean-Francois Dockes Sat, 25 Sep 2010 09:37:20 +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.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/debianrclqt3/compat b/packaging/debian/debianrclqt3/compat new file mode 100644 index 00000000..7ed6ff82 --- /dev/null +++ b/packaging/debian/debianrclqt3/compat @@ -0,0 +1 @@ +5 diff --git a/packaging/debian/debianrclqt3/control b/packaging/debian/debianrclqt3/control new file mode 100644 index 00000000..d28cf84d --- /dev/null +++ b/packaging/debian/debianrclqt3/control @@ -0,0 +1,35 @@ +Source: recoll +Section: x11 +Priority: optional +Maintainer: Jean-Francois Dockes +Build-Depends: debhelper (>= 5), libqt3-headers, libqt3-mt-dev, qt3-dev-tools, libxapian-dev +Standards-Version: 3.7.2 + +Package: recoll +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Recommends: aspell +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/debianrclqt3/copyright b/packaging/debian/debianrclqt3/copyright new file mode 100644 index 00000000..3cb35945 --- /dev/null +++ b/packaging/debian/debianrclqt3/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/debianrclqt3/docs b/packaging/debian/debianrclqt3/docs new file mode 100644 index 00000000..e845566c --- /dev/null +++ b/packaging/debian/debianrclqt3/docs @@ -0,0 +1 @@ +README diff --git a/packaging/debian/debianrclqt3/menu b/packaging/debian/debianrclqt3/menu new file mode 100644 index 00000000..405ea82a --- /dev/null +++ b/packaging/debian/debianrclqt3/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/debianrclqt3/rules b/packaging/debian/debianrclqt3/rules new file mode 100755 index 00000000..829aafa6 --- /dev/null +++ b/packaging/debian/debianrclqt3/rules @@ -0,0 +1,69 @@ +#!/usr/bin/make -f + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +# This has to be exported to make some magic below work. +export DH_OPTIONS + +# These are used for cross-compiling and for saving the configure script +# from having to guess our platform (since we know it already) +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 + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +config.status: configure + dh_testdir + ./configure CFLAGS="$(CFLAGS)" LDFLAGS="-Wl,-z,defs" \ + --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) \ + --prefix=/usr --mandir=\$${prefix}/share/man + +build: build-stamp +build-stamp: config.status + dh_testdir + $(MAKE) + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp + -$(MAKE) distclean + dh_clean + +install: + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + $(MAKE) prefix=$(CURDIR)/debian/recoll/usr install + +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs ChangeLog + dh_installdocs + dh_installmenu + dh_installman + 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 clean binary-indep binary-arch binary install diff --git a/packaging/debian/debianrclqt3/watch b/packaging/debian/debianrclqt3/watch new file mode 100644 index 00000000..8b5064a9 --- /dev/null +++ b/packaging/debian/debianrclqt3/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-(.*)\.tar\.gz + diff --git a/packaging/debian/debianrclqt4/changelog b/packaging/debian/debianrclqt4/changelog new file mode 100644 index 00000000..d9cfe775 --- /dev/null +++ b/packaging/debian/debianrclqt4/changelog @@ -0,0 +1,118 @@ +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..9bcf0a0e --- /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-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-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/copyright b/packaging/debian/debianrclqt4/copyright new file mode 100644 index 00000000..3cb35945 --- /dev/null +++ b/packaging/debian/debianrclqt4/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/debianrclqt4/docs b/packaging/debian/debianrclqt4/docs new file mode 100644 index 00000000..e845566c --- /dev/null +++ b/packaging/debian/debianrclqt4/docs @@ -0,0 +1 @@ +README 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..49ce3727 --- /dev/null +++ b/packaging/debian/debianrclqt4/patches/fix-python-install.patch @@ -0,0 +1,12 @@ +setup.py --root and --user options interfer with debian wanting a dist-packages, +not site-packages installation for python modules +--- a/recollinstall.in ++++ b/recollinstall.in +@@ -139,5 +139,4 @@ + ${datadir}/recoll/translations/recoll_zh.qm || exit 1 + + +-@NOPYTHON@(cd python/recoll;python setup.py install \ +- --prefix=${REALPREFIX} ${ROOTFORPYTHON}) ++#@NOPYTHON@(cd python/recoll;python setup.py install \ ++# --prefix=${REALPREFIX} ${ROOTFORPYTHON}) 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/rules b/packaging/debian/debianrclqt4/rules new file mode 100755 index 00000000..3af18c6a --- /dev/null +++ b/packaging/debian/debianrclqt4/rules @@ -0,0 +1,72 @@ +#!/usr/bin/make -f + +include /usr/share/quilt/quilt.make + +# 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-stamp +build-stamp: $(QUILT_STAMPFN) config.status + dh_testdir + $(MAKE) + touch $@ + +clean: unpatch + 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/usr install + (cd python/recoll;python setup.py install --install-layout=deb --root=$(CURDIR)/debian/recoll/ ) + +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs ChangeLog + dh_installdocs README + dh_installmenu + dh_installman + 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 clean binary-indep binary-arch binary install diff --git a/packaging/debian/debianrclqt4/watch b/packaging/debian/debianrclqt4/watch new file mode 100644 index 00000000..8b5064a9 --- /dev/null +++ b/packaging/debian/debianrclqt4/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-(.*)\.tar\.gz + diff --git a/packaging/debian/debianunitylens/changelog b/packaging/debian/debianunitylens/changelog new file mode 100644 index 00000000..900b1a9f --- /dev/null +++ b/packaging/debian/debianunitylens/changelog @@ -0,0 +1,12 @@ +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..8b8d5faa --- /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.16.2 +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 sha1 40c18a958eeecbb70cbdf14fa7319b54525537fa \ + rmd160 fb598b9c637cab49734547a41f2e8ec232f89dbe + +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..d0d6c9f6 --- /dev/null +++ b/packaging/macports/textproc/recoll/files/patch-configure.diff @@ -0,0 +1,11 @@ +--- configure.orig 2011-10-11 06:25:31.000000000 -0500 ++++ configure 2011-11-27 20:02:11.000000000 -0600 +@@ -4366,7 +4366,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..1e7e8984 --- /dev/null +++ b/packaging/macports/textproc/recoll/files/patch-sampleconf-mimeview.diff @@ -0,0 +1,134 @@ +--- sampleconf/mimeview 2011-10-11 08:44:09.000000000 +0200 ++++ sampleconf/mimeview.mac 2011-11-27 17:55:42.000000000 +0100 +@@ -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 basically 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 +@@ -11,74 +12,71 @@ + + [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/x-kword = kword %f + application/x-abiword = abiword %f + +-application/pdf = okular %f +-application/postscript = okular %f +-application/x-dvi = okular %f ++application/pdf = open %f ++application/postscript = open %f ++application/x-dvi = open %f + + application/x-lyx = lyx %f + application/x-scribus = scribus %f + +-application/msword = libreoffice %f +-application/vnd.ms-excel = libreoffice %f +-application/vnd.ms-powerpoint = libreoffice %f ++application/msword = open %f ++application/vnd.ms-excel = open %f ++application/vnd.ms-powerpoint = open %f + + application/vnd.openxmlformats-officedocument.wordprocessingml.document = \ +- libreoffice %f ++ open %f + application/vnd.openxmlformats-officedocument.wordprocessingml.template = \ +- libreoffice %f ++ open %f + application/vnd.openxmlformats-officedocument.presentationml.template = \ +- libreoffice %f ++ open %f + application/vnd.openxmlformats-officedocument.presentationml.presentation = \ +- libreoffice %f ++ open %f + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet = \ +- libreoffice %f ++ open %f + application/vnd.openxmlformats-officedocument.spreadsheetml.template =\ +- libreoffice %f +-application/vnd.sun.xml.calc = libreoffice %f +-application/vnd.sun.xml.calc.template = libreoffice %f +-application/vnd.sun.xml.draw = libreoffice %f +-application/vnd.sun.xml.draw.template = libreoffice %f +-application/vnd.sun.xml.impress = libreoffice %f +-application/vnd.sun.xml.impress.template = libreoffice %f +-application/vnd.sun.xml.math = libreoffice %f +-application/vnd.sun.xml.writer = libreoffice %f +-application/vnd.sun.xml.writer.global = libreoffice %f +-application/vnd.sun.xml.writer.template = libreoffice %f +-application/vnd.wordperfect = libreoffice %f ++ open %f ++application/vnd.sun.xml.calc = open %f ++application/vnd.sun.xml.calc.template = open %f ++application/vnd.sun.xml.draw = open %f ++application/vnd.sun.xml.draw.template = open %f ++application/vnd.sun.xml.impress = open %f ++application/vnd.sun.xml.impress.template = open %f ++application/vnd.sun.xml.math = open %f ++application/vnd.sun.xml.writer = open %f ++application/vnd.sun.xml.writer.global = open %f ++application/vnd.sun.xml.writer.template = open %f ++application/vnd.wordperfect = open %f + + application/x-chm = kchmviewer %f +-application/x-fsdirectory = dolphin %f ++application/x-fsdirectory = open %f + application/x-gnuinfo = xterm -e "info -f %f" + +-application/x-flac = rhythmbox %f +-audio/mpeg = rhythmbox %f +-application/ogg = rhythmbox %f +- +-image/jpeg = gwenview %f +-image/png = gwenview %f +-image/tiff = gwenview %f +-image/gif = gwenview %f +-image/svg+xml = inkview %f +-image/vnd.djvu = djview %f +-image/x-xcf = gimp %f +-image/bmp = gwenview %f +-image/x-ms-bmp = gwenview %f +-image/x-xpmi = gwenview %f +- +-# Or firefox -remote "openFile(%u)" +-application/x-tex = emacsclient %f +-text/x-tex = emacsclient %f +-text/html = firefox %u ++application/x-flac = open %f ++audio/mpeg = open %f ++application/ogg = open %f ++ ++image/jpeg = open %f ++image/png = open %f ++image/tiff = open %f ++image/gif = open %f ++image/svg+xml = open %f ++image/vnd.djvu = open %f ++image/x-xcf = open %f ++image/bmp = open %f ++image/x-ms-bmp = open %f ++image/x-xpmi = open %f ++ ++application/x-tex = open %f ++text/x-tex = open %f ++text/html = open %u + text/html|gnuinfo = rclshowinfo %F %(title) +-text/plain = emacsclient %f +-text/x-c = emacsclient %f +-text/x-c+ = emacsclient %f +-text/x-c++ = emacsclient %f +-text/x-html-sidux-man = konqueror %f +-text/x-html-aptosid-man = iceweasel %f ++text/plain = open %f ++text/x-c = open %f ++text/x-c+ = open %f ++text/x-c++ = open %f + text/x-python = idle %f 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..0a95b536 --- /dev/null +++ b/packaging/rpm/recoll.spec @@ -0,0 +1,131 @@ +%define name recoll +%define version 1.17.0 +%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 + +# --------------------------------------------------------------------------- + +%clean +rm -rf $RPM_BUILD_ROOT + +# --------------------------------------------------------------------------- + +%files +%defattr(-,root,root,-) +%{_bindir}/* +%{python_sitearch}/ +%{_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 +* 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..8bf1a043 --- /dev/null +++ b/packaging/rpm/recollfedora10+.spec @@ -0,0 +1,112 @@ +Name: recoll +Version: 1.17.0 +Release: 1%{?dist} +Summary: Desktop full text search tool with a qt gui + +Group: Applications/Databases +License: GPLv2 +URL: http://www.recoll.org/ +Source0: http://www.recoll.org/recoll-1.17.0.tar.gz + +BuildRequires: qt-devel qt-webkit-devel xapian-core-devel zlib-devel desktop-file-utils + +%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 +QMAKE=qmake-qt4 +export QMAKE +%configure +# No smpflags as the builds fails for some reason if -j is used. +make + +%install +rm -rf %{buildroot} +make install DESTDIR=%{buildroot} + +desktop-file-install --delete-original \ + --dir=%{buildroot}/%{_datadir}/applications \ + %{buildroot}/%{_datadir}/applications/%{name}-searchgui.desktop + + +%clean +rm -rf %{buildroot} + +%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 +* Sun Mar 18 2012 J.F. Dockes 1.17.9-1 +- updated to release 1.16.1 +* Wed Sep 28 2011 J.F. Dockes 1.16.1-1 +- updated to release 1.16.1 +* Wed Sep 21 2011 J.F. Dockes 1.16.0-1 +- updated to release 1.16.0 +* Mon May 02 2011 J.F. Dockes 1.15.8-1 +- updated to release 1.15.8 +* Fri Mar 15 2011 J.F. Dockes 1.15.5-1 +- updated to release 1.15.5 +* Thu Feb 15 2011 J.F. Dockes 1.15.2-1 +- updated to release 1.15.2 +* Wed Feb 02 2011 J.F. Dockes 1.15.0-1 +- updated to release 1.15.0 +* Mon Sep 13 2010 J.F. Dockes 1.14.0-1 +- updated to release 1.14.0 +* 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 +- spec file 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 +- rpm spec file updated to fix Fedora desktop-file-install and install icon +* Sun Jan 10 2010 Jean-Francois Dockes 1.13.01-2 +- Rpm Spec file 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 +* Thu Dec 10 2009 Jean-Francois Dockes 1.12.4-1 +- Update to release 1.12.4 +* 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/recollmdk.spec b/packaging/rpm/recollmdk.spec new file mode 100644 index 00000000..c75850d1 --- /dev/null +++ b/packaging/rpm/recollmdk.spec @@ -0,0 +1,123 @@ +%define name recoll +%define version 1.17.0 +%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 +Requires: xapian-core + +%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* + +# --------------------------------------------------------------------------- + +%changelog +* Sun Mar 18 2012 Jean-Francois Dockes 1.17.0-1 +- Update to release 1.17.0 +* 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..b6de6273 --- /dev/null +++ b/src/INSTALL @@ -0,0 +1,961 @@ + +More documentation can be found in the doc/ directory or at http://www.recoll.org + + + Link: HOME + Link: PREVIOUS + Link: NEXT + + Recoll user manual + Prev Next + + -------------------------------------------------------------------------- + + Chapter 5. Installation and configuration + + Table of Contents + + 5.1. Installing a binary copy + + 5.2. Supporting packages + + 5.3. Building from source + + 5.4. Configuration overview + + 5.1. Installing a binary copy + + There are three types of binary Recoll installations: + + * Through your system normal software distribution framework (ie, + Debian/Ubuntu apt, FreeBSD ports, etc.). + + * From a package downloaded from the Recoll web site. + + * 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, mail 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 Home Next + API Supporting packages + Link: HOME + Link: UP + Link: PREVIOUS + Link: NEXT + + Recoll user manual + 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: + + * 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 Recoll helper applications page 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 Recoll helper applications + page. + + * TeX files need untex or detex. Check the Recoll helper applications + page 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: 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. + + * 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. + + * chm: files in microsoft help format need Python and the pychm module + (which needs chmlib). + + * 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. + + * 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 mail filter, which + introduces some mild weirdness, but still usable). + + Text, HTML, mail 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 Home Next + Installation and configuration Up Building from source + Link: HOME + Link: UP + Link: PREVIOUS + Link: NEXT + + Recoll user manual + Prev Chapter 5. Installation and configuration Next + + -------------------------------------------------------------------------- + + 5.3. Building from source + +5.3.1. Prerequisites + + C++ compiler. Up to Recoll version 1.13.04, its absence can manifest + itself by strange messages about a missing iconv_open. + + 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. + + Development files for Qt . + + Development files for X11 and zlib. + + Check the Recoll download page for up to date version information. + + You will most probably be able to find a binary package for Qt for your + system. You may have to compile Xapian but this is not difficult (if you + are using FreeBSD, there is a port). + + You may also need libiconv. Recoll currently uses version 1.9 (this should + not be critical). On Linux systems, the iconv interface is part of libc + and you should not need to do anything special. + +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. + + Depending on the Qt 3 configuration on your system, you may have to set + the QTDIR and QMAKESPECS variables in your environment: + + * QTDIR should point to the directory above the one that holds the qt + include files (ie: if qt.h is /usr/local/qt/include/qt.h, QTDIR should + be /usr/local/qt). + + * QMAKESPECS should be set to the name of one of the qt mkspecs + sub-directories (ie: linux-g++). + + On many Linux systems, QTDIR is set by the login scripts, and QMAKESPECS + is not needed because there is a default link in mkspecs/. + + Neither QTDIR nor QMAKESPECS should be needed with Qt 4, configuration + details are entirely determined by qmake (which is quite often installed + as qmake-qt4). + + Configure options: + + * --without-aspell will disable the code for phonetic matching of search + terms. + + * --with-fam or --with-inotify will enable the code for real time + indexing. Inotify support is enabled by default on recent Linux + systems. + + * --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. + + * --enable-xattr will enable code to fetch data from file extended + attributes. This is only useful is some application stores data in + there, and also needs some simple configuration (see comments in the + fields configuration file). + + * --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). + + * --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. + + * --disable-qtgui Disable the Qt interface. Will allow building the + indexer and the command line search program in absence of a Qt + environment. + + * --disable-x11mon Disable X11 connection monitoring inside recollindex. + Together with --disable-qtgui, this allows building recoll without Qt + and X11. + + * 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 Home Next + Supporting packages Up Configuration overview + Link: HOME + Link: UP + Link: PREVIOUS + + Recoll user manual + 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 Indexing + 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: + + * 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. + +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, + mail 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). + + 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. + + processbeaglequeue + + 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. + + beaglequeuedir + + 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. + + 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. + + 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. + + maildefcharset + + This can be used to define the default character set specifically + for mail 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 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. + + 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 Beagle 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 Beagle 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 depends on average document size. The default value is 10. + + 5.4.1.4. Miscellaneous parameters: + + 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. + + 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. + +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 mail message filter currently has such a section (named + [mail]). It allows indexing arbitrary mail 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 mail header and use it as a searchable field, with data + displayable inside result lists. (Side note: as the mail 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.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 + user preferences dialog. + + If Use desktop preferences to choose document editor is checked in the + Recoll GUI user preferences, all mimeview entries will be ignored except + the one labelled application/x-all (which is set to use xdg-open by + default). + + 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. + + Please note that these 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, Recoll + 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 + + * %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. Examples of configuration adjustments + + 5.4.6.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: + + * 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 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.6.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): + + * 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. + + -------------------------------------------------------------------------- + + Prev Home + Building from source Up diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 00000000..10fbe865 --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,81 @@ +# Copyright (C) 2005 J.F.Dockes + +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +mandir = @mandir@ + +QMAKE = @QMAKE@ +QTGUI = @QTGUI@ + +all: mk/sysconf + ${MAKE} -C lib + ${MAKE} -C index recollindex + @NOQTMAKE@(cd $(QTGUI); ${QMAKE} recoll.pro) + @NOQTMAKE@${MAKE} -C $(QTGUI) depth=.. + @NOPYTHON@${MAKE} -C python/recoll + ${MAKE} -C query recollq + +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 $(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 + 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} \ + 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..59fb4665 --- /dev/null +++ b/src/README @@ -0,0 +1,3338 @@ + +More documentation can be found in the doc/ directory or at http://www.recoll.org + + + Recoll user manual + + Jean-Francois Dockes + + + + Copyright (c) 2005-2012 Jean-Francois Dockes + + This document introduces full text search notions and describes the + installation and use of the Recoll application. It currently describes + Recoll 1.17. + + [ Split HTML / Single HTML ] + + ---------------------------------------------------------------------- + + 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.2. Index storage + + 2.2.1. Xapian index formats + + 2.2.2. Security aspects + + 2.3. Indexing configuration + + 2.3.1. The indexing configuration GUI + + 2.4. Using Beagle WEB browser plugins + + 2.5. Periodic indexing + + 2.5.1. Running indexing + + 2.5.2. Using cron to automate indexing + + 2.6. Real time indexing + + 2.6.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. The preview window + + 3.1.5. Complex/advanced search + + 3.1.6. The term explorer tool + + 3.1.7. Multiple databases + + 3.1.8. Document history + + 3.1.9. Sorting search results and collapsing + duplicates + + 3.1.10. Search tips, shortcuts + + 3.1.11. 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. The query language + + 3.4.1. Modifiers + + 3.5. Anchored searches and wildcards + + 3.5.1. More about wildcards + + 3.5.2. Anchored searches + + 3.6. Desktop integration + + 3.6.1. Hotkeying recoll + + 3.6.2. The KDE Kicker Recoll applet + + 4. Programming interface + + 4.1. Writing a document filter + + 4.1.1. Simple filters + + 4.1.2. Telling Recoll about the filter + + 4.1.3. Filter HTML output + + 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. 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 perform installation and start the recoll user + interface, which will 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 + ms-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 those 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 depends on the document language. Recoll stores the unstemmed + versions of terms and uses auxiliary databases for term expansion. It can + switch stemming languages, or add a language, without re-indexing. Storing + documents in different languages in the same index is possible, and useful + in practice, but does introduce possibilities of confusion. Recoll + currently makes no attempt at automatic language recognition. + + 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 parameters from this file 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 + + Indexing is started automatically the first time you execute the recoll + search graphical user interface, or by executing the recollindex command. + + Searches are usually performed inside the recoll graphical user interface + (GUI) program, 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 tool, a Python programming interface, and a KDE KIO + slave 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). + + Recoll indexing can be performed with two different methods: + + * 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. + + * 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. + + 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 mail folder files or zip archives, can + hold many individually indexed documents, which may in turn be themselves + compound ones. Such hierarchies can go quite deep, and Recoll has no + problem processing, for example, an ms-word document which would be an + attachment to an email message part of a folder file archived inside a zip + file... + + Recoll indexing processes plain text, HTML, openoffice and e-mail files, + 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 from the recoll File menu. It is stored in the missing text file + inside the configuration directory. + + Without further configuration, Recoll will index all appropriate files + from your home directory, with a reasonable set of defaults. + + 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. See the section about using multiple databases for more + information on multiple configurations and indexes. + + 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): + + * 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 that you wish to make + searchable. + + * You can also specify a different 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 document set size, 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 it will be quite typical nowadays (2006), that 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. + + Unfortunately, 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. Indexing 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 using the dialogs in the + recoll GUI. + + You can also use multiple indexes defined by separate configurations, + typically to separate personal and shared indexes, or to take advantage of + the organization of your data to improve search precision. + + 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 + + ---------------------------------------------------------------------- + + 2.3.1. The indexing configuration GUI + + Most parameters for a given indexing 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 menu. It has two main + panels. The first panel allows setting global variables, like the list of + top directories or the list of skipped paths. The second panel allows + setting variables that can be redefined for subdirectories. This second + panel 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 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. Using Beagle WEB browser plugins + + Beagle is (was?) a concurrent desktop indexer, built on Lucene and the + Mono project (C#), for which a number of add-on browser plugins were + written. These work by copying visited web pages to an indexing queue + directory, which the indexer then processes. Especially, there is a + Firefox extension. + + If, for any reason, you so happen to prefer Recoll to Beagle, you can + still use the Firefox plugin, which is written in Javascript and + completely independant of C#, Beagle, Lucene..., and set Recoll to process + the Beagle queue directory. This supposes that Beagle is not running, else + both programs will fight for the same files. + + This feature can be enabled in the GUI indexing configuration panel, or by + editing the configuration file (set processbeaglequeue to 1). + + There are more recent instructions about how to find and install the + Firefox extension on the Recoll wiki. + + Unfortunately, it seems that the plugin does not work anymore with recent + Firefox versions (tried with 10.0). This is not the trival installation + version check issue, explicit manual indexing requests still work, but + automatic indexing on page load does not. + + ---------------------------------------------------------------------- + +2.5. Periodic indexing + + 2.5.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 (^C, SIGINT) or terminate (SIGTERM) signal. Some time may elapse + before the process exits, because it needs to properly flush and close the + index. The indexing thread can be equivalently stopped from the menu. + + 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 exemple, 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 are still up to + date will not need to be reindexed). + + recollindex has a number of other options which are described in its man + page. + + Of special interest 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 . + + recollindex -i will not descend into directory parameters, but just add + them as index entries. It is up to the external file selection method to + build the complete file list. + + ---------------------------------------------------------------------- + + 2.5.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.6. 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.6.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: + + * 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 and + location in the file system. + + In most cases, you can enter the terms as you think them, even if they + contain embedded punctuation or other non-textual characters. For exemple, + Recoll can handle things like e-mail 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. + + File name will specifically look for file names. The entry will be split + at white space characters, and each fragment will be separately expanded, + then the search will be for file names matching all fragments (this is new + in 1.15, older releases did an OR of the whole thing which did not make + sense). Things to know: + + * The search is case- and accent-insensitive. + + * Fragments without any wild card character and not capitalized will be + prepended and appended with '*' (ie: etc -> *etc*, but Etc -> etc). Of + course it does not make sense to have multiple fragments if one of + them is capitalized (as this one will require an exact match). + + * If you want to search for a pattern including white space, use double + quotes (ie: "admin note*"). + + * If you have a big index (many files), excessively generic fragments + may result in inefficient searches. + + * As an example, inst recoll would match recollinstall.in (and quite a + few others...). + + The point of having a separate file name search is that wild card + expansion can be performed more efficiently on a relatively small subset + of the index (allowing wild cards on the left of terms without excessive + penality). + + All search modes allow wildcards inside terms (*, ?, []). You may want to + have a look at the section about wildcards for more information about + this. + + You can search for exact phrases (adjacent words in a given order) by + enclosing the input inside double quotes. Ex: "virtual reality". + + 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. + + 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 (the old sort tool is gone after release 1.15, because the new + result table has much better capability). + + 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 attempt to start an external viewer. The + viewer for each document type can be configured through the user + preferences dialog, or by editing the mimeview configuration file. You can + also check the Use desktop preferences option in the user preferences + dialog to use the desktop defaults for all documents. This is probably the + best option if you are using a well configured Gnome or KDE desktop. + + 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. 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 + + 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 exemple to + start a chm viewer on the parent document for a help page. + + ---------------------------------------------------------------------- + + 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. 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 ^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). + + 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 ^Up/^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. + + 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. + + You can print the current preview window contents by typing ^P (Ctrl + P) + in the window text. + + ---------------------------------------------------------------------- + + 3.1.5. 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.5.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: + + * 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. + + ---------------------------------------------------------------------- + + 3.1.5.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 + + * 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. + + ---------------------------------------------------------------------- + + 3.1.6. 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 200 results for wildcards + and regular expressions. + + 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.7. Multiple databases + + Multiple Recoll databases or 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 recollindex program instance can only update one specific index. + + A recoll program instance is also associated with a specific index, which + is the one to be updated by its indexing thread, 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. Of course, 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. + + 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 + + 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. + + ---------------------------------------------------------------------- + + 3.1.8. 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.9. 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 Query configuration dialog, and is off by default. + + ---------------------------------------------------------------------- + + 3.1.10. Search tips, shortcuts + + 3.1.10.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.10.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.10.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. + + 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. + + 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 ^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 ^P in a preview window will print the + currently displayed text. + + Quitting. Entering ^Q almost anywhere will close the application. + + ---------------------------------------------------------------------- + + 3.1.11. Customizing the search interface + + You can customize some aspects of the search interface by using the Query + 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. + + * 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. + + * Use
 tags instead of 
to display plain text as HTML in + preview: 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. + + * 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. + + * 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 and Start with sort dialog + open: If you use these dialogs all the time, checking these entries + will get them 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 Recoll 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 Recoll tries to build + document abstracts when displaying the result list. Abstracts are + constructed by taking context from the document information, around + the search terms. This can slow down result list display significantly + for big documents, and you may want to turn it off. + + * 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, + + ---------------------------------------------------------------------- + + 3.1.11.1. 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 Query 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 + exemples on the page about customising the result list on the Recoll web + site. + + ---------------------------------------------------------------------- + + 3.1.11.1.1. The paragraph format + + This is an arbitrary HTML string where the following printf-like % + substitutions will be performed: + + * %A. Abstract + + * %D. Date + + * %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. + + * %K. Keywords (if any) + + * %L. Precooked Preview and Edit links + + * %M. Mime type + + * %N. result Number inside the result page + + * %R. Relevance percentage + + * %S. Size information + + * %T. Title or Filename if not set. + + * %t. Title or Filename if not set. + + * %U. Url + + The format of the Preview and Edit 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. + For example, you could look at the fields for the document types of + interest (use the right-click menu inside the preview window), and add + what you want to the list of stored fields. A candidate example 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 + + + Or the clean looking: + + %L %R + %T
%S + %U + + +
%A
%K + + + Note that the P%N link in the above paragraph makes the title a preview + link. + + 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: + + * By passing option -t 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 -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. 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 roughly 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. Exemple: Beatles, author:balzac, dc:title:grandet + + The colon, if present, means "contains". Xesam defines other relations, + which are not supported for now. + + 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. Do not enter explicit + parenthesis, they are not supported for now. + + 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 exemple to specify a + proximity search (unordered). See the modifier section. + + Recoll 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 out of the + specified directory, only after release 1.15.8. A tilde inside the + value will be expanded to the home directory. dir is not a regular + field and only one value makes sense in a query (you can't use + dir:dir1 OR dir:dir2). Relative paths make sense, for example, + dir:share/doc would match either /usr/share/doc or + /usr/local/share/doc + + * size for filtering the results on file size. Exemple: 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. Exemples: + + * 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 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.4.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: + + * 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 + + * 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.5. 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.5.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: + + * * 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 before using wildcards. + + * 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. + + * 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.5.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. + + ---------------------------------------------------------------------- + +3.6. Desktop integration + + Being independant of the desktop type has its drawbacks: Recoll desktop + integration is minimal. Here follow a few things that may help. + + ---------------------------------------------------------------------- + + 3.6.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.6.2. The KDE Kicker Recoll applet + + 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 are executable programs which translate from a specific + format (ie: openoffice, acrobat, etc.) to the Recoll indexing input + format, which may be text/plain or text/html. + + As of Recoll 1.13, there are two kinds of filters: + + * Simple filters (the old ones) run once and exit. They can be bare + programs like antiword, or shell-scripts using other programs. They + are very simple to write, just having to write the text to the + standard output. + + * Multiple filters, new in 1.13, run as long as their master process + (ie: recollindex) is active. They can process multiple files (sparing + the process startup time which can be very significant), or multiple + documents per file (ie: 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 these new filters are written + in Python, using a common module to handle the protocol. + + The following will just describe the simple filters. If you can program + and want to write one of the other kind, it shouldn't be too difficult to + make sense of one of the existing modules. For example, look at rclzip + which uses Zip file paths as internal identifiers (ipath), and rclinfo, + which uses an integer index. + + ---------------------------------------------------------------------- + + 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 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 to one of the simple filters, for exemple rclps for a + starting point. + + Don't forget to make your filter executable before testing ! + + ---------------------------------------------------------------------- + + 4.1.2. 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: + + * 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. + + ---------------------------------------------------------------------- + + 4.1.3. 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. "&" should be transformed + into "&", "<" should be transformed into "<". This is not always + properly done by translating programs which output HTML, and of course + nerver by those which output plain text. + + 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 also make use of other header fields if they are present: + title, description, keywords. + + Filters also have the possibility to "invent" field names. This should be + output as meta tags: + + + + See the following section for details about configuring how field data is + processed by the indexer. + + ---------------------------------------------------------------------- + +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 + 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: + + * 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. + + You can find more information in the section about the fields file, or in + comments inside the file. + + ---------------------------------------------------------------------- + +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 Python interface is not built by default and can be found in the + source package, under python/recoll. + + In order to build the module, you should first build or re-build the + Recoll library using position-independant objects: + + cd recoll-xxx/ + configure --enable-pic + make + + There is no significant disadvantage in using PIC objects for the main + Recoll executables, so you can use the --enable-pic option for the main + build too. + + The python/recoll/ directory contains the usual setup.py script which you + can then use to build and install the module: + + cd recoll-xxx/python/recoll + python setup.py build + python setup.py install + + ---------------------------------------------------------------------- + + 4.3.2.2. Interface manual + + NAME + recoll - This is an interface to the Recoll full text indexer. + + FILE + /usr/local/lib/python2.5/site-packages/recoll.so + + CLASSES + Db + Doc + Query + SearchData + + class Db(__builtin__.object) + | Db([confdir=None], [extra_dbs=None], [writable = False]) + | + | A Db object holds a connection to a Recoll index. Use the connect() + | function to create one. + | confdir specifies a Recoll configuration directory (default: + | $RECOLL_CONFDIR or ~/.recoll). + | extra_dbs is a list of external databases (xapian directories) + | writable decides if we can index new data through this connection + | + | Methods defined here: + | + | + | addOrUpdate(...) + | addOrUpdate(udi, doc, parent_udi=None) -> None + | Add or update index data for a given document + | The udi string must define a unique id for the document. It is not + | interpreted inside Recoll + | doc is a Doc object + | if parent_udi is set, this is a unique identifier for the + | top-level container (ie mbox file) + | + | delete(...) + | delete(udi) -> Bool. + | Purge index from all data for udi. If udi matches a container + | document, purge all subdocs (docs with a parent_udi matching udi). + | + | makeDocAbstract(...) + | makeDocAbstract(Doc, Query) -> string + | Build and return 'keyword-in-context' abstract for document + | and query. + | + | needUpdate(...) + | needUpdate(udi, sig) -> Bool. + | Check if the index is up to date for the document defined by udi, + | having the current signature sig. + | + | purge(...) + | purge() -> Bool. + | Delete all documents that were not touched during the just finished + | indexing pass (since open-for-write). These are the documents for + | the needUpdate() call was not performed, indicating that they no + | longer exist in the primary storage system. + | + | query(...) + | query() -> Query. Return a new, blank query object for this index. + | + | setAbstractParams(...) + | setAbstractParams(maxchars, contextwords). + | Set the parameters used to build 'keyword-in-context' abstracts + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + + class Doc(__builtin__.object) + | Doc() + | + | 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 no useful methods but + | 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 + | Predefined attributes (index/query/both): + | text (index): document plain text + | url (both) + | fbytes (both) optional) file size in bytes + | filename (both) + | fmtime (both) optional file modification date. Unix time printed + | as string + | dbytes (both) document text bytes + | dmtime (both) document creation/modification date + | ipath (both) value private to the app.: internal access path + | inside file + | mtype (both) mime type for original document + | mtime (query) dmtime if set else fmtime + | origcharset (both) charset the text was converted from + | size (query) dbytes if set, else fbytes + | sig (both) app-defined file modification signature. + | For up to date checks + | relevancyrating (query) + | abstract (both) + | author (both) + | title (both) + | keywords (both) + | + | Methods defined here: + | + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + + class Query(__builtin__.object) + | Recoll Query objects are used to execute index searches. + | They must be created by the Db.query() method. + | + | Methods defined here: + | + | + | execute(...) + | execute(query_string, stemming=1|0) + | + | Starts a search for query_string, a Recoll search language string + | (mostly Xesam-compatible). + | The query can be a simple list of terms (and'ed by default), or more + | complicated with field specs etc. See the Recoll manual. + | + | executesd(...) + | executesd(SearchData) + | + | Starts a search for the query defined by the SearchData object. + | + | fetchone(...) + | fetchone(None) -> Doc + | + | Fetches the next Doc object in the current search results. + | + | sortby(...) + | sortby(field=fieldname, ascending=true) + | Sort results by 'fieldname', in ascending or descending order. + | Only one field can be used, no subsorts for now. + | Must be called before executing the search + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | next + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + + class SearchData(__builtin__.object) + | SearchData() + | + | A SearchData object describes a query. It has a number of global + | parameters and a chain of search clauses. + | + | Methods defined here: + | + | + | addclause(...) + | addclause(type='and'|'or'|'excl'|'phrase'|'near'|'sub', + | qstring=string, slack=int, field=string, stemming=1|0, + | subSearch=SearchData) + | Adds a simple clause to the SearchData And/Or chain, or a subquery + | defined by another SearchData object + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + + FUNCTIONS + connect(...) + connect([confdir=None], [extra_dbs=None], [writable = False]) + -> Db. + + Connects to a Recoll database and returns a Db object. + confdir specifies a Recoll configuration directory + (the default is built like for any Recoll program). + extra_dbs is a list of external databases (xapian directories) + writable decides if we can index new data through this connection + + ---------------------------------------------------------------------- + + 4.3.2.3. 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. + + #!/usr/bin/env python + import recoll + + db = recoll.connect() + db.setAbstractParams(maxchars=80, contextwords=2) + + query = db.query() + nres = query.execute("some user question") + print "Result count: ", nres + if nres > 5: + nres = 5 + while query.next >= 0 and query.next < nres: + doc = query.fetchone() + print query.next + for k in ("title", "size"): + print k, ":", getattr(doc, k).encode('utf-8') + abs = db.makeDocAbstract(doc, query).encode('utf-8') + print abs + print + + + ---------------------------------------------------------------------- + + Chapter 5. Installation and configuration + +5.1. Installing a binary copy + + There are three types of binary Recoll installations: + + * Through your system normal software distribution framework (ie, + Debian/Ubuntu apt, FreeBSD ports, etc.). + + * From a package downloaded from the Recoll web site. + + * 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, mail 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: + + * 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 Recoll helper applications page 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 Recoll helper applications + page. + + * TeX files need untex or detex. Check the Recoll helper applications + page 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: 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. + + * 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. + + * chm: files in microsoft help format need Python and the pychm module + (which needs chmlib). + + * 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. + + * 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 mail filter, which + introduces some mild weirdness, but still usable). + + Text, HTML, mail 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 + + C++ compiler. Up to Recoll version 1.13.04, its absence can manifest + itself by strange messages about a missing iconv_open. + + 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. + + Development files for Qt . + + Development files for X11 and zlib. + + Check the Recoll download page for up to date version information. + + You will most probably be able to find a binary package for Qt for your + system. You may have to compile Xapian but this is not difficult (if you + are using FreeBSD, there is a port). + + You may also need libiconv. Recoll currently uses version 1.9 (this should + not be critical). On Linux systems, the iconv interface is part of libc + and you should not need to do anything special. + + ---------------------------------------------------------------------- + + 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. + + Depending on the Qt 3 configuration on your system, you may have to set + the QTDIR and QMAKESPECS variables in your environment: + + * QTDIR should point to the directory above the one that holds the qt + include files (ie: if qt.h is /usr/local/qt/include/qt.h, QTDIR should + be /usr/local/qt). + + * QMAKESPECS should be set to the name of one of the qt mkspecs + sub-directories (ie: linux-g++). + + On many Linux systems, QTDIR is set by the login scripts, and QMAKESPECS + is not needed because there is a default link in mkspecs/. + + Neither QTDIR nor QMAKESPECS should be needed with Qt 4, configuration + details are entirely determined by qmake (which is quite often installed + as qmake-qt4). + + Configure options: + + * --without-aspell will disable the code for phonetic matching of search + terms. + + * --with-fam or --with-inotify will enable the code for real time + indexing. Inotify support is enabled by default on recent Linux + systems. + + * --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. + + * --enable-xattr will enable code to fetch data from file extended + attributes. This is only useful is some application stores data in + there, and also needs some simple configuration (see comments in the + fields configuration file). + + * --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). + + * --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. + + * --disable-qtgui Disable the Qt interface. Will allow building the + indexer and the command line search program in absence of a Qt + environment. + + * --disable-x11mon Disable X11 connection monitoring inside recollindex. + Together with --disable-qtgui, this allows building recoll without Qt + and X11. + + * 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 Indexing + 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: + + * 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. + + ---------------------------------------------------------------------- + + 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, + mail 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). + + 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. + + processbeaglequeue + + 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. + + beaglequeuedir + + 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. + + ---------------------------------------------------------------------- + + 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. + + 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. + + maildefcharset + + This can be used to define the default character set specifically + for mail 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 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. + + ---------------------------------------------------------------------- + + 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 Beagle 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 Beagle 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 depends on average document size. The default value is 10. + + ---------------------------------------------------------------------- + + 5.4.1.4. Miscellaneous parameters: + + 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. + + 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. + + ---------------------------------------------------------------------- + + 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 mail message filter currently has such a section (named + [mail]). It allows indexing arbitrary mail 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 mail header and use it as a searchable field, with data + displayable inside result lists. (Side note: as the mail 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.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 + user preferences dialog. + + If Use desktop preferences to choose document editor is checked in the + Recoll GUI user preferences, all mimeview entries will be ignored except + the one labelled application/x-all (which is set to use xdg-open by + default). + + 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. + + Please note that these 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, Recoll + 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 + + * %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. Examples of configuration adjustments + + 5.4.6.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: + + * 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 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.6.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): + + * 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/VERSION b/src/VERSION new file mode 100644 index 00000000..511a76e6 --- /dev/null +++ b/src/VERSION @@ -0,0 +1 @@ +1.17.1 diff --git a/src/aspell/Makefile b/src/aspell/Makefile new file mode 100644 index 00000000..bdbe5cd7 --- /dev/null +++ b/src/aspell/Makefile @@ -0,0 +1,31 @@ +depth = .. +include $(depth)/mk/sysconf + +PROGS = rclaspell +SRCS = rclaspell.cpp + +all: depend $(BIGLIB) $(PROGS) + +RCLASPELL_OBJS= trrclaspell.o $(BIGLIB) +rclaspell : $(RCLASPELL_OBJS) + $(CXX) $(ALL_CXXFLAGS) -o rclaspell $(RCLASPELL_OBJS) \ + $(LIBXAPIAN) $(LIBICONV) +trrclaspell.o : rclaspell.cpp + $(CXX) $(ALL_CXXFLAGS) -DTEST_RCLASPELL -c -o trrclaspell.o \ + rclaspell.cpp + +$(BIGLIB): force + cd $(depth)/lib;$(MAKE) +force: + +depend: alldeps.stamp +alldeps.stamp : $(SRCS) + $(CXX) -M $(ALL_CXXFLAGS) $(SRCS) > alldeps + touch alldeps.stamp + +clean: + cp /dev/null alldeps + rm -f alldeps.stamp + rm -f *.o $(PROGS) + +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..d08b6ad1 --- /dev/null +++ b/src/aspell/rclaspell.cpp @@ -0,0 +1,520 @@ +#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 +#include +#include + +#include ASPELL_INCLUDE + +#include "pathut.h" +#include "execmd.h" +#include "rclaspell.h" +#include "debuglog.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)) { + // Prefixed terms are also somewhere else without the suffix, + // skip them + if (m_input->empty() || + ('A' <= m_input->at(0) && m_input->at(0) <= 'Z')) + continue; + if (!Rcl::Db::isSpellingCandidate(*m_input)) + continue; + // Got a non-empty sort-of appropriate term, let's send it to + // aspell + 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; + list 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()); + 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)) { + 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(Rcl::Db &db, const string &term, string& reason) +{ + LOGDEB2(("Aspell::check [%s]\n", term.c_str())); + + if (!ok() || !make_speller(reason)) + return false; + if (term.empty()) + return true; //?? + + int ret = aapi.aspell_speller_check(m_data->m_speller, + term.c_str(), term.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; + if (term.empty()) + return true; //?? + + AspellCanHaveError *ret; + + const AspellWordList *wl = + aapi.aspell_speller_suggest(m_data->m_speller, + term.c_str(), term.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) { + // stemDiffers checks that the word exists (we don't want + // aspell computed stuff, only exact terms from the dictionary), + // and that it stems differently to the base word (else it's not + // useful to expand the search). Or is it ? + // ******** This should depend if + // stemming is turned on or not for querying ******* + string sw(word); + if (db.termExists(sw) && db.stemDiffers("english", sw, term)) + 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; +Rcl::Db rcldb; + +static char usage [] = +" -b : build dictionary\n" +" -s : suggestions for term\n" +"\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 + +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 '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); + } + + if (!rcldb.open(dbdir, 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 { + 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..06032495 --- /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" + +#ifndef NO_NAMESPACES +using std::string; +using std::list; +#endif // NO_NAMESPACES + +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(string &reason); + + /** Build dictionary out of index term list. This is done at the end + * of an indexing pass. */ + bool buildDict(Rcl::Db &db, string &reason); + + /** Check that word is in dictionary. ret==false && !reason.empty() => err*/ + bool check(Rcl::Db &db, const string& term, string& reason); + + /** Return a list of possible expansions for a given word */ + bool suggest(Rcl::Db &db, const string& term, list &suggestions, + string &reason); + + private: + string dicPath(); + RclConfig *m_config; + string m_lang; + AspellData *m_data; + + bool make_speller(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 +Jürgen 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..af3f49d5 --- /dev/null +++ b/src/bincimapmime/Makefile @@ -0,0 +1,39 @@ +# @(#$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-getpart.cc mime-parsefull.cc mime-parseonlyheader.cc \ + mime-printbody.cc mime-printdoc.cc mime-printheader.cc mime.cc \ + convert.cc iodevice.cc iofactory.cc + +OBJS = mime-getpart.o mime-parsefull.o mime-parseonlyheader.o \ + mime-printbody.o mime-printdoc.o mime-printheader.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 + +depend: alldeps.stamp +alldeps.stamp : $(SRCS) + $(CXX) -M $(ALL_CXXFLAGS) $(SRCS) > alldeps + touch alldeps.stamp + +clean: + cp /dev/null alldeps + rm -f alldeps.stamp + rm -f ${LIBS} ${PROGS} ${OBJS} + +include alldeps diff --git a/src/bincimapmime/address.cc b/src/bincimapmime/address.cc new file mode 100644 index 00000000..59d58ea8 --- /dev/null +++ b/src/bincimapmime/address.cc @@ -0,0 +1,90 @@ +/* -*- mode:c++;c-basic-offset:2 -*- */ +/* -------------------------------------------------------------------- + * Filename: + * address.cc + * + * Description: + * Implementation of the Address class. + * -------------------------------------------------------------------- + * 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 "address.h" +#include "convert.h" +#include + +#ifndef NO_NAMESPACES +using namespace ::std; +using namespace Binc; +#endif /* NO_NAMESPACES */ + +//------------------------------------------------------------------------ +Address::Address(const string &name, const string &addr) +{ + string::size_type pos = addr.find('@'); + this->name = name; + if (pos != string::npos) { + this->local = addr.substr(0, pos); + this->host = addr.substr(pos + 1); + } else this->local = addr; +} + +//------------------------------------------------------------------------ +Address::Address(const string &wholeaddress) +{ + string::size_type start = wholeaddress.find('<'); + string addr; + if (start != string::npos) + addr = wholeaddress.substr(start + 1); + else + addr = wholeaddress; + + trim(addr, "<>"); + + if (start != string::npos) + name = wholeaddress.substr(0, start); + else + name = string(); + trim(name); + trim(name, "\""); + + start = addr.find('@'); + local = addr.substr(0, start); + host = addr.substr(start + 1); + + trim(local); + trim(host); + trim(name); +} + +//------------------------------------------------------------------------ +string Address::toParenList(void) const +{ + string tmp = "("; + tmp += name.empty() ? "NIL" : toImapString(name); + tmp += " NIL "; + tmp += local.empty() ? "\"\"" : toImapString(local); + tmp += " "; + tmp += host.empty() ? "\"\"" : toImapString(host); + tmp += ")"; + + return tmp; +} diff --git a/src/bincimapmime/address.h b/src/bincimapmime/address.h new file mode 100644 index 00000000..04cc8e21 --- /dev/null +++ b/src/bincimapmime/address.h @@ -0,0 +1,52 @@ +/* -*- mode:c++;c-basic-offset:2 -*- */ +/* -------------------------------------------------------------------- + * Filename: + * src/mailbox/address.h + * + * Description: + * Declaration of the Address class. + * -------------------------------------------------------------------- + * 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 address_h_included +#define address_h_included +#include + +namespace Binc { + + //------------------------------------------------------------------------ + class Address { + public: + std::string name; + std::string local; + std::string host; + + //-- + std::string toParenList(void) const; + + //-- + Address(const std::string &name, const std::string &addr); + Address(const std::string &wholeaddr); + }; +} + +#endif 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..ebb86601 --- /dev/null +++ b/src/bincimapmime/convert.h @@ -0,0 +1,323 @@ +/* -*- 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 + +#include "address.h" +//#include "depot.h" + +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-getpart.cc b/src/bincimapmime/mime-getpart.cc new file mode 100644 index 00000000..a6869352 --- /dev/null +++ b/src/bincimapmime/mime-getpart.cc @@ -0,0 +1,96 @@ +/* -*- mode:c++;c-basic-offset:2 -*- */ +/* -------------------------------------------------------------------- + * Filename: + * mime-getpart.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 "convert.h" +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#ifndef NO_NAMESPACES +using namespace ::std; +#endif /* NO_NAMESPACES */ + +//------------------------------------------------------------------------ +const Binc::MimePart *Binc::MimePart::getPart(const string &findpart, + string genpart, FetchType fetchType) const +{ + if (findpart == genpart) + return this; + + if (isMultipart()) { + if (members.size() != 0) { + vector::const_iterator i = members.begin(); + int part = 1; + while (i != members.end()) { + BincStream ss; + + ss << genpart; + if (genpart != "") + ss << "."; + ss << part; + + const MimePart *m; + if ((m = (*i).getPart(findpart, ss.str())) != 0) { + if (fetchType == FetchHeader && m->isMessageRFC822()) + m = &m->members[0]; + + return m; + } + + ++i; + ++part; + } + } + } else if (isMessageRFC822()) { + if (members.size() == 1) { + const MimePart *m = members[0].getPart(findpart, genpart); + return m; + } else { + return 0; + } + } else { + // Singlepart + if (genpart != "") + genpart += "."; + genpart += "1"; + + if (findpart == genpart) + return this; + } + + return 0; +} diff --git a/src/bincimapmime/mime-inputsource.h b/src/bincimapmime/mime-inputsource.h new file mode 100644 index 00000000..ce434142 --- /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: + 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); + } + +} +extern Binc::MimeInputSource *mimeSource; + +#endif diff --git a/src/bincimapmime/mime-parsefull.cc b/src/bincimapmime/mime-parsefull.cc new file mode 100644 index 00000000..050cf498 --- /dev/null +++ b/src/bincimapmime/mime-parsefull.cc @@ -0,0 +1,631 @@ + /* -*- 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 "mime.h" +#include "mime-utils.h" +#include "mime-inputsource.h" +#include "convert.h" +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +Binc::MimeInputSource *mimeSource = 0; + +#ifndef NO_NAMESPACES +using namespace ::std; +#endif /* NO_NAMESPACES */ + +#undef MPF +#ifdef MPF +#define MPFDEB(X) fprintf X +#else +#define MPFDEB(X) +#endif + +//------------------------------------------------------------------------ +void Binc::MimeDocument::parseFull(int fd) const +{ + if (allIsParsed) + return; + + allIsParsed = true; + + if (!mimeSource || mimeSource->getFileDescriptor() != fd) { + delete mimeSource; + mimeSource = new MimeInputSource(fd); + } else { + mimeSource->reset(); + } + + headerstartoffsetcrlf = 0; + headerlength = 0; + bodystartoffsetcrlf = 0; + bodylength = 0; + size = 0; + messagerfc822 = false; + multipart = false; + + int bsize = 0; + string bound; + MimePart::parseFull(bound, bsize); + + // eat any trailing junk to get the correct size + char c; + while (mimeSource->getChar(&c)); + + size = mimeSource->getOffset(); +} + +void Binc::MimeDocument::parseFull(istream& s) const +{ + if (allIsParsed) + return; + + allIsParsed = true; + + delete mimeSource; + mimeSource = new MimeInputSourceStream(s); + + headerstartoffsetcrlf = 0; + headerlength = 0; + bodystartoffsetcrlf = 0; + bodylength = 0; + size = 0; + messagerfc822 = false; + multipart = false; + + int bsize = 0; + string bound; + MimePart::parseFull(bound, bsize); + + // eat any trailing junk to get the correct size + char c; + while (mimeSource->getChar(&c)); + + size = mimeSource->getOffset(); +} + +//------------------------------------------------------------------------ +static bool 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); +} + +//------------------------------------------------------------------------ +static void parseHeader(Binc::Header *header, unsigned int *nlines) +{ + while (parseOneHeaderLine(header, nlines)) + { } +} + +//------------------------------------------------------------------------ +static void 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; + } + } + } + } +} + +static void 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.parseFull(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); +} + +static bool 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) +static inline void 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(); + } +} + +static void 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.parseFull(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")); +} + +static void 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::parseFull(const string &toboundary, + int &boundarysize) const +{ + MPFDEB((stderr, "BINC: parsefull, toboundary[%s]\n", toboundary.c_str())); + 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(); + 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: parsefull 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..f4726b55 --- /dev/null +++ b/src/bincimapmime/mime-parseonlyheader.cc @@ -0,0 +1,196 @@ +/* -*- 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) const +{ + if (allIsParsed || headerIsParsed) + return; + + headerIsParsed = true; + + if (!mimeSource || mimeSource->getFileDescriptor() != fd) { + delete mimeSource; + mimeSource = new MimeInputSource(fd); + } else { + mimeSource->reset(); + } + + + headerstartoffsetcrlf = 0; + headerlength = 0; + bodystartoffsetcrlf = 0; + bodylength = 0; + messagerfc822 = false; + multipart = false; + + nlines = 0; + nbodylines = 0; + + MimePart::parseOnlyHeader(""); +} + +void Binc::MimeDocument::parseOnlyHeader(istream& s) const +{ + if (allIsParsed || headerIsParsed) + return; + + headerIsParsed = true; + + delete mimeSource; + mimeSource = new MimeInputSourceStream(s); + + headerstartoffsetcrlf = 0; + headerlength = 0; + bodystartoffsetcrlf = 0; + bodylength = 0; + messagerfc822 = false; + multipart = false; + + nlines = 0; + nbodylines = 0; + + MimePart::parseOnlyHeader(""); +} + +//------------------------------------------------------------------------ +int Binc::MimePart::parseOnlyHeader(const string &toboundary) const +{ + 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..d46acb0b --- /dev/null +++ b/src/bincimapmime/mime-printbody.cc @@ -0,0 +1,107 @@ +/* -*- 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(int fd, IODevice &output, + unsigned int startoffset, + unsigned int length) const +{ + if (!mimeSource || mimeSource->getFileDescriptor() != fd) { + delete mimeSource; + mimeSource = new MimeInputSource(fd); + } + + 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(int fd, string &s, + unsigned int startoffset, + unsigned int length) const +{ + + if (!mimeSource || mimeSource->getFileDescriptor() != fd) { + delete mimeSource; + mimeSource = new MimeInputSource(fd); + } + getBody(s, startoffset, length); +} + +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-printdoc.cc b/src/bincimapmime/mime-printdoc.cc new file mode 100644 index 00000000..998be7e4 --- /dev/null +++ b/src/bincimapmime/mime-printdoc.cc @@ -0,0 +1,72 @@ +/* -*- mode:c++;c-basic-offset:2 -*- */ +/* -------------------------------------------------------------------- + * Filename: + * mime-printdoc.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::printDoc(int fd, IODevice &output, + unsigned int startoffset, + unsigned int length) const +{ + if (!mimeSource || mimeSource->getFileDescriptor() != fd) { + delete mimeSource; + mimeSource = new MimeInputSource(fd); + } + + mimeSource->reset(); + mimeSource->seek(headerstartoffsetcrlf); + + char c; + for (unsigned int i = 0; i < length; ++i) { + if (!mimeSource->getChar(&c)) + break; + + output << (char)c; + } +} diff --git a/src/bincimapmime/mime-printheader.cc b/src/bincimapmime/mime-printheader.cc new file mode 100644 index 00000000..7178af35 --- /dev/null +++ b/src/bincimapmime/mime-printheader.cc @@ -0,0 +1,200 @@ +/* -*- mode:c++;c-basic-offset:2 -*- */ +/* -------------------------------------------------------------------- + * Filename: + * mime-printheader.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::printHeader(int fd, IODevice &output, + vector headers, bool includeheaders, + unsigned int startoffset, + unsigned int length, string &store) const +{ + if (!mimeSource || mimeSource->getFileDescriptor() != fd) { + delete mimeSource; + mimeSource = new MimeInputSource(fd); + } + + mimeSource->seek(headerstartoffsetcrlf); + + string name; + string content; + char cqueue[2]; + memset(cqueue, 0, sizeof(cqueue)); + + bool quit = false; + char c = '\0'; + + unsigned int wrotebytes = 0; + unsigned int processedbytes = 0; + bool hasHeaderSeparator = false; + + while (!quit) { + // read name + while (1) { + // allow EOF to end the header + if (!mimeSource->getChar(&c)) { + quit = true; + break; + } + + // assume this character is part of the header name. + name += c; + + // break on the first colon + if (c == ':') + break; + + // break if a '\n' turned up. + if (c == '\n') { + // end of headers detected + if (name == "\r\n") { + hasHeaderSeparator = true; + quit = true; + break; + } + + // put all data back in the buffer to the beginning of this + // line. + for (int i = name.length(); i >= 0; --i) + mimeSource->ungetChar(); + + // abort printing of header. note that in this case, the + // headers will not end with a seperate \r\n. + quit = true; + name.clear(); + break; + } + } + + if (quit) break; + + // at this point, we have a name, that is - the start of a + // header. we'll read until the end of the header. + while (!quit) { + // allow EOF to end the header. + if (!mimeSource->getChar(&c)) { + quit = true; + break; + } + + if (c == '\n') ++nlines; + + // make a fifo queue of the last 4 characters. + cqueue[0] = cqueue[1]; + cqueue[1] = c; + + // print header + if (cqueue[0] == '\n' && cqueue[1] != '\t' && cqueue[1] != ' ') { + // it wasn't a space, so put it back as it is most likely + // the start of a header name. in any case it terminates the + // content part of this header. + mimeSource->ungetChar(); + + string lowername = name; + lowercase(lowername); + trim(lowername, ": \t"); + bool foundMatch = false; + for (vector::const_iterator i = headers.begin(); + i != headers.end(); ++i) { + string nametmp = *i; + lowercase(nametmp); + if (nametmp == lowername) { + foundMatch = true; + break; + } + } + + if (foundMatch == includeheaders || headers.size() == 0) { + string out = name + content; + for (string::const_iterator i = out.begin(); i != out.end(); ++i) + if (processedbytes >= startoffset && wrotebytes < length) { + if (processedbytes >= startoffset) { + store += *i; + ++wrotebytes; + } + } else + ++processedbytes; + } + + // move on to the next header + content.clear(); + name.clear(); + break; + } + + content += c; + } + } + + if (name != "") { + string lowername = name; + lowercase(lowername); + trim(lowername, ": \t"); + bool foundMatch = false; + for (vector::const_iterator i = headers.begin(); + i != headers.end(); ++i) { + string nametmp = *i; + lowercase(nametmp); + if (nametmp == lowername) { + foundMatch = true; + break; + } + } + + if (hasHeaderSeparator || foundMatch == includeheaders || headers.size() == 0) { + string out = name + content; + for (string::const_iterator i = out.begin(); i != out.end(); ++i) + if (processedbytes >= startoffset && wrotebytes < length) { + store += *i; + ++wrotebytes; + } else + ++processedbytes; + } + } +} 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..9ed7cde2 --- /dev/null +++ b/src/bincimapmime/mime.cc @@ -0,0 +1,159 @@ +/* -*- 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 "mime.h" +#include "convert.h" +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#ifndef NO_NAMESPACES +using namespace ::std; +#endif /* NO_NAMESPACES */ + +//------------------------------------------------------------------------ +Binc::MimeDocument::MimeDocument(void) : MimePart() +{ + allIsParsed = false; + headerIsParsed = false; +} + +//------------------------------------------------------------------------ +Binc::MimeDocument::~MimeDocument(void) +{ +} + +//------------------------------------------------------------------------ +void Binc::MimeDocument::clear(void) const +{ + members.clear(); + h.clear(); + headerIsParsed = false; + allIsParsed = false; +} + +//------------------------------------------------------------------------ +void Binc::MimePart::clear(void) const +{ + members.clear(); + h.clear(); +} + +//------------------------------------------------------------------------ +Binc::MimePart::MimePart(void) +{ + size = 0; + messagerfc822 = false; + multipart = false; + + nlines = 0; + nbodylines = 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) const +{ + 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..df12227b --- /dev/null +++ b/src/bincimapmime/mime.h @@ -0,0 +1,147 @@ +/* -*- 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 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) const; + + //-- + 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(int fd, Binc::IODevice &output, unsigned int startoffset, unsigned int length) const; + void getBody(int fd, std::string& s, unsigned int startoffset, unsigned int length) const; + void getBody(std::string& s, unsigned int startoffset, unsigned int length) const; + void printHeader(int fd, Binc::IODevice &output, std::vector headers, bool includeheaders, unsigned int startoffset, unsigned int length, std::string &storage) const; + void printDoc(int fd, Binc::IODevice &output, unsigned int startoffset, unsigned int length) const; + virtual void clear(void) const; + + const MimePart *getPart(const std::string &findpart, std::string genpart, FetchType fetchType = FetchBody) const; + virtual int parseOnlyHeader(const std::string &toboundary) const; + virtual int parseFull(const std::string &toboundary, int &boundarysize) const; + + MimePart(void); + virtual ~MimePart(void); + }; + + //---------------------------------------------------------------------- + class MimeDocument : public MimePart { + private: + mutable bool headerIsParsed; + mutable bool allIsParsed; + + public: + void parseOnlyHeader(int fd) const; + void parseFull(int fd) const; + void parseOnlyHeader(std::istream& s) const; + void parseFull(std::istream& s) const; + void clear(void) const; + + inline bool isHeaderParsed(void) { return headerIsParsed; } + inline bool isAllParsed(void) { return allIsParsed; } + + //-- + MimeDocument(void); + ~MimeDocument(void); + }; + +}; + +#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..fcc3a943 --- /dev/null +++ b/src/common/Makefile @@ -0,0 +1,38 @@ +# @(#$Id: Makefile,v 1.16 2008-12-17 14:26:49 dockes Exp $ (C) 2005 J.F.Dockes +depth = .. +include $(depth)/mk/sysconf + +# Only test executables get build in here +PROGS = unacpp textsplit rclconfig + +all: $(BIGLIB) $(PROGS) + +$(BIGLIB): force + cd $(depth)/lib;$(MAKE) +force: + +UNACPP_OBJS= trunacpp.o $(BIGLIB) +unacpp : $(UNACPP_OBJS) + $(CXX) $(ALL_CXXFLAGS) -o unacpp $(UNACPP_OBJS) \ + $(LIBICONV) +trunacpp.o : unacpp.cpp unacpp.h + $(CXX) $(ALL_CXXFLAGS) -DTEST_UNACPP -c -o trunacpp.o unacpp.cpp + +TEXTSPLIT_OBJS= trtextsplit.o $(BIGLIB) +textsplit : $(TEXTSPLIT_OBJS) + $(CXX) $(ALL_CXXFLAGS) -o textsplit $(TEXTSPLIT_OBJS) $(LIBICONV) +trtextsplit.o : textsplit.cpp + $(CXX) $(ALL_CXXFLAGS) -DTEST_TEXTSPLIT -c -o trtextsplit.o \ + textsplit.cpp + +RCLCONFIG_OBJS= trrclconfig.o $(BIGLIB) +rclconfig : $(RCLCONFIG_OBJS) + $(CXX) $(ALL_CXXFLAGS) -o rclconfig $(RCLCONFIG_OBJS) \ + $(LIBICONV) $(LIBSYS) +trrclconfig.o : rclconfig.cpp + $(CXX) $(ALL_CXXFLAGS) -DTEST_RCLCONFIG -c -o trrclconfig.o \ + rclconfig.cpp + +clean: + rm -f *.o $(PROGS) + diff --git a/src/common/autoconfig.h.in b/src/common/autoconfig.h.in new file mode 100644 index 00000000..5e99c482 --- /dev/null +++ b/src/common/autoconfig.h.in @@ -0,0 +1,116 @@ +/* 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 + +/* 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 + +#if _FILE_OFFSET_BITS == 64 || defined(__APPLE__) || defined(__OpenBSD__) +#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..5478bc60 --- /dev/null +++ b/src/common/beaglequeuecache.cpp @@ -0,0 +1,80 @@ +/* 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); + m_cache = new CirCache(ccdir); + m_cache->create(off_t(maxmbs)*1000*1024, CirCache::CC_CRUNIQUE); +} + +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->get(udi, dict, data)) + 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(); + list names = cf.getNames(cstr_null); + for (list::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..4d451127 --- /dev/null +++ b/src/common/cstr.h @@ -0,0 +1,78 @@ +/* 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(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(minwilds, "*?["); +DEF_CSTR(newline, "\n"); +DEF_CSTR(null, ""); +DEF_CSTR(plus, "+"); +DEF_CSTR(textplain, "text/plain"); +DEF_CSTR(url, "url"); + + +// 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"); + +#endif /* _CSTR_H_INCLUDED_ */ diff --git a/src/common/rclconfig.cpp b/src/common/rclconfig.cpp new file mode 100644 index 00000000..58941c74 --- /dev/null +++ b/src/common/rclconfig.cpp @@ -0,0 +1,1300 @@ +/* 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 +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#ifdef __FreeBSD__ +#include +#endif + +#include +#include +#include + +#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" + +#ifndef NO_NAMESPACES +using namespace std; +#endif /* NO_NAMESPACES */ + +#ifndef MIN +#define MIN(A,B) (((A)<(B)) ? (A) : (B)) +#endif +#ifndef MAX +#define MAX(A,B) (((A)>(B)) ? (A) : (B)) +#endif + +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_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() +{ + 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 = 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; + } + + 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, true); + if (mimeview == 0 || !mimeview->ok()) { + m_reason = string("No/bad mimeview in: ") + cnferrloc; + return; + } + if (!readFieldsConfig(cnferrloc)) + return; + + 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(); + } + + 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", defcharset, m_keydir)) + defcharset.erase(); +} + +bool RclConfig::getConfParam(const string &name, int *ivp) +{ + 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) +{ + 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) +{ + if (!svvp) + return false; + svvp->clear(); + string s; + if (!getConfParam(name, s)) + return false; + return stringToStrings(s, *svvp); +} +bool RclConfig::getConfParam(const string &name, list *svvp) +{ + if (!svvp) + return false; + svvp->clear(); + string s; + if (!getConfParam(name, s)) + return false; + return stringToStrings(s, *svvp); +} + +list RclConfig::getTopdirs() +{ + list tdl; + if (!getConfParam("topdirs", &tdl)) { + LOGERR(("RclConfig::getTopdirs: no top directories in config or bad list format\n")); + return tdl; + } + + for (list::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 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) +{ + // 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 calling + // getDefCharset from recollinit + static string localecharset; + if (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 + ) { + localecharset = string(cp); + } else { + // Note: it seems that all versions of iconv will take + // iso-8859. Some won't take iso8859 + localecharset = string(cstr_iso_8859_1); + } + LOGDEB1(("RclConfig::getDefCharset: localecharset [%s]\n", + localecharset.c_str())); + } + + if (defcharset.empty()) { + defcharset = localecharset; + } + + if (filename) { + return localecharset; + } else { + return defcharset; + } +} + +bool RclConfig::addLocalFields(map *tgt) +{ + LOGDEB0(("RclConfig::addLocalFields: keydir [%s]\n", m_keydir.c_str())); + string sfields; + if (tgt == 0 || ! getConfParam("localfields", sfields)) + return false; + // Substitute ':' with '\n' inside the string. There is no way to escape ':' + for (string::size_type i = 0; i < sfields.size(); i++) + if (sfields[i] == ':') + sfields[i] = '\n'; + // Parse the result with a confsimple and add the results to the metadata + ConfSimple conf(sfields, 1, true); + list nmlst = conf.getNames(cstr_null); + for (list::const_iterator it = nmlst.begin(); + it != nmlst.end(); it++) { + conf.get(*it, (*tgt)[*it]); + LOGDEB(("RclConfig::addLocalFields: [%s] => [%s]\n", + (*it).c_str(), (*tgt)[*it].c_str())); + } + return true; +} + +// 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. +list RclConfig::getAllMimeTypes() +{ + list lst; + if (mimeconf == 0) + return lst; + lst = mimeconf->getNames("index"); + lst.sort(); + lst.unique(); + return lst; +} + +// 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) +{ + string mtype; + mimemap->get(suff, mtype, m_keydir); + return mtype; +} + +string RclConfig::getSuffixFromMimeType(const string &mt) +{ + string suffix; + listsfs = mimemap->getNames(cstr_null); + string mt1; + for (list::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(list& cats) +{ + if (!mimeconf) + return false; + cats = mimeconf->getNames("categories"); + return true; +} + +bool RclConfig::isMimeCategory(string& cat) +{ + listcats; + getMimeCategories(cats); + for (list::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, list& tps) +{ + 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(list& cats) +{ + if (!mimeconf) + return false; + cats = mimeconf->getNamesShallow("guifilters"); + return true; +} + +bool RclConfig::getGuiFilter(const string& catfiltername, string& frag) +{ + 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 = ConfSimple(attrstr); + } + return true; +} + + +string RclConfig::getMissingHelperDesc() +{ + string fmiss = path_cat(getConfDir(), "missing"); + string out; + file_to_string(fmiss, out); + return out; +} + +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 + listtps = m_fields->getNames("prefixes"); + for (list::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 (list::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"); + list l; + stringToStrings(aliases, l); + for (list::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 + + list sl = m_fields->getNames("stored"); + if (!sl.empty()) { + for (list::const_iterator it = sl.begin(); + it != sl.end(); it++) { + string fld = fieldCanon(stringtolower(*it)); + m_storedFields.insert(fld); + } + } + + // Extended file attribute to field translations + listxattrs = m_fields->getNames("xattrtofields"); + for (list::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) +{ + 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(), ft.pfx.c_str())); + return true; + } else { + LOGDEB1(("RclConfig::readFieldsConfig: no prefix for field [%s]\n", + fld.c_str())); + *ftpp = 0; + return false; + } +} + +set RclConfig::getIndexedFields() +{ + set flds; + if (m_fields == 0) + return flds; + + list sl = m_fields->getNames("prefixes"); + flds.insert(sl.begin(), sl.end()); + return flds; +} + +string RclConfig::fieldCanon(const string& f) +{ + 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; +} + +list RclConfig::getFieldSectNames(const string &sk, const char* patrn) +{ + if (m_fields == 0) + return list(); + return m_fields->getNames(sk, patrn); +} + +bool RclConfig::getFieldConfParam(const string &name, const string &sk, + string &value) +{ + if (m_fields == 0) + return false; + return m_fields->get(name, value, sk); +} + + +string RclConfig::getMimeViewerDef(const string &mtype, const string& apptag) +{ + LOGDEB2(("RclConfig::getMimeViewerDef: mtype [%s] apptag [%s]\n", + mtype.c_str(), apptag.c_str())); + string hs; + if (mimeview == 0) + return hs; + if (apptag.empty() || !mimeview->get(mtype + string("|") + apptag, + hs, "view")) + mimeview->get(mtype, hs, "view"); + return hs; +} + +bool RclConfig::getMimeViewerDefs(vector >& defs) +{ + if (mimeview == 0) + return false; + listtps = mimeview->getNames("view"); + for (list::const_iterator it = tps.begin(); it != tps.end();it++) { + defs.push_back(pair(*it, getMimeViewerDef(*it, ""))); + } + return true; +} + +bool RclConfig::setMimeViewerDef(const string& mt, const string& def) +{ + if (mimeview == 0) + return false; + string pconfname = path_cat(getConfDir(), "mimeview"); + // Make sure this exists + close(open(pconfname.c_str(), O_CREAT|O_WRONLY, 0600)); + ConfTree tree(pconfname.c_str()); + if (!tree.set(mt, def, "view")) { + m_reason = string("RclConfig::setMimeViewerDef: cant set value in ") + + pconfname; + return false; + } + + list cdirs; + cdirs.push_back(m_confdir); + cdirs.push_back(path_cat(m_datadir, "examples")); + + delete mimeview; + mimeview = new ConfStack("mimeview", cdirs, true); + if (mimeview == 0 || !mimeview->ok()) { + m_reason = string("No/bad mimeview in: ") + m_confdir; + return false; + } + return true; +} + +bool RclConfig::mimeViewerNeedsUncomp(const string &mimetype) +{ + 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; +} + +/** + * Return icon name and path + */ +string RclConfig::getMimeIconName(const string &mtype, string *path) +{ + string iconname; + mimeconf->get(mtype, iconname, "icons"); + if (iconname.empty()) + iconname = "document"; + + if (path) { + string iconsdir; + +#if defined (__FreeBSD__) && __FreeBSD_version < 500000 + // gcc 2.95 dies if we call getConfParam here ?? + if (m_conf) m_conf->get(string("iconsdir"), iconsdir, m_keydir); +#else + getConfParam("iconsdir", iconsdir); +#endif + if (iconsdir.empty()) { + iconsdir = path_cat(m_datadir, "images"); + } else { + iconsdir = path_tildexpand(iconsdir); + } + *path = path_cat(iconsdir, iconname) + ".png"; + } + return iconname; +} + +string RclConfig::getDbDir() +{ + 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); +} + +bool RclConfig::sourceChanged() +{ + 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; + return false; +} + +string RclConfig::getStopfile() +{ + return path_cat(getConfDir(), "stoplist.txt"); +} +string RclConfig::getPidfile() +{ + 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() +{ + 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); + } +} + +list& RclConfig::getSkippedNames() +{ + if (m_skpnstate.needrecompute()) { + stringToStrings(m_skpnstate.savedvalue, m_skpnlist); + } + return m_skpnlist; +} + +list RclConfig::getSkippedPaths() +{ + list 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()); + for (list::iterator it = skpl.begin(); it != skpl.end(); it++) { + *it = path_tildexpand(*it); + *it = path_canon(*it); + } + skpl.sort(); + skpl.unique(); + return skpl; +} + +list RclConfig::getDaemSkippedPaths() +{ + list skpl = getSkippedPaths(); + + list dskpl; + getConfParam("daemSkippedPaths", &dskpl); + + for (list::iterator it = dskpl.begin(); it != dskpl.end(); it++) { + *it = path_tildexpand(*it); + *it = path_canon(*it); + } + dskpl.sort(); + + skpl.merge(dskpl); + skpl.unique(); + 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) +{ + // 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, list& cmd) +{ + string hs; + + mimeconf->get(mtype, hs, cstr_null); + if (hs.empty()) + return false; + list tokens; + stringToStrings(hs, tokens); + if (tokens.empty()) { + LOGERR(("getUncompressor: empty spec for mtype %s\n", mtype.c_str())); + return false; + } + list::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" + ; + +// 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; + } + 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); + 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 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; + // We should use reference-counted objects instead! + 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)); + 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; + defcharset = r.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); +} + +#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) { + // Check that all known mime types have an icon and belong to + // some category + list catnames; + config->getMimeCategories(catnames); + cout << "Categories: "; + set allmtsfromcats; + for (list::const_iterator it = catnames.begin(); + it != catnames.end(); it++) { + cout << *it << " "; + } + cout << endl; + for (list::const_iterator it = catnames.begin(); + it != catnames.end(); it++) { + list cts; + config->getMimeCatTypes(*it, cts); + for (list::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); + } + } + + list mtypes = config->getAllMimeTypes(); + for (list::const_iterator it = mtypes.begin(); + it != mtypes.end(); it++) { + if (allmtsfromcats.find(*it) == allmtsfromcats.end()) { + cout << "Not found in catgs: [" << *it << "]" << endl; + } + } + } else { + config->setKeyDir(cstr_null); + list names = config->getConfNames(); + names.sort(); + names.unique(); + for (list::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..6d524fd7 --- /dev/null +++ b/src/common/rclconfig.h @@ -0,0 +1,307 @@ +/* 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 +#include +#include +#ifndef NO_NAMESPACES +using std::list; +using std::string; +using std::vector; +using std::pair; +using std::set; +using std::map; +using std::set; +#endif + +#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() {return m_ok;} + const string &getReason() {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() {return m_confdir;} + + /** Check if the config files were modified since we read them */ + bool sourceChanged(); + + /** Returns true if this is ~/.recoll */ + bool isDefaultConfig(); + /** Get the local value for /usr/local/share/recoll/ */ + const string& getDatadir() {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) + { + 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); + /** Variant with autoconversion to bool */ + bool getConfParam(const string &name, bool *value); + /** Variant with conversion to string list/vector + * (stringToStrings). Can fail if the string is malformed. */ + bool getConfParam(const string &name, vector *value); + bool getConfParam(const string &name, list *value); + + /** + * Get list of config names under current sk, with possible + * wildcard filtering + */ + list getConfNames(const char *pattern = 0) { + return m_conf->getNames(m_keydir, pattern); + } + + /** Check if name exists anywhere in config */ + bool hasNameAnywhere(const string& nm) + { + 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); + + /** 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 */ + list getTopdirs(); + + /** Get database directory */ + string getDbDir(); + /** Get stoplist file name */ + string getStopfile(); + /** Get indexing pid file name */ + string getPidfile(); + /** Get indexing status file name */ + string getIdxStatusFile(); + + /** Get list of skipped file names for current keydir */ + list& getSkippedNames(); + + /** Get list of skipped paths patterns. Doesn't depend on the keydir */ + list getSkippedPaths(); + /** Get list of skipped paths patterns, daemon version (may add some) + Doesn't depend on the keydir */ + list getDaemSkippedPaths(); + + /** conf: Add local fields to target dic */ + bool addLocalFields(map *tgt); + + /** + * 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, list& cmd); + + /** mimemap: compute mimetype */ + string getMimeTypeFromSuffix(const string &suffix); + /** mimemap: get a list of all indexable mime types defined */ + list getAllMimeTypes(); + /** mimemap: Get appropriate suffix for mime type. This is inefficient */ + string getSuffixFromMimeType(const string &mt); + + /** 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. + */ + bool valueSplitAttributes(const string& whole, string& value, + ConfSimple& attrs); + + /** mimeconf: get icon name for mimetype */ + string getMimeIconName(const string &mtype, string *path = 0); + + /** mimeconf: get list of file categories */ + bool getMimeCategories(list&); + /** mimeconf: is parameter one of the categories ? */ + bool isMimeCategory(string&); + /** mimeconf: get list of mime types for category */ + bool getMimeCatTypes(const string& cat, list&); + + /** mimeconf: get list of gui filters (doc cats by default */ + bool getGuiFilterNames(list&); + /** mimeconf: get query lang frag for named filter */ + bool getGuiFilter(const string& filtername, string& frag); + + /** fields: get field prefix from field name */ + bool getFieldTraits(const string& fldname, const FieldTraits **); + const set& getStoredFields() {return m_storedFields;} + set getIndexedFields(); + /** Get canonic name for possible alias */ + string fieldCanon(const string& fld); + /** Get xattr name to field names translations */ + const map& getXattrToField() {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]) */ + list getFieldSectNames(const string &sk, const char* = 0); + bool getFieldConfParam(const string &name, const string &sk, string &value); + + /** mimeview: get/set external viewer exec string(s) for mimetype(s) */ + string getMimeViewerDef(const string &mimetype, const string& apptag); + bool getMimeViewerDefs(vector >&); + 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); + + /** Store/retrieve missing helpers description string */ + string getMissingHelperDesc(); + 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); + + ~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. + + list 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; + 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; + list m_skpnlist; + + // Parameters auto-fetched on setkeydir + string defcharset; + // Limiting set of mime types to be processed. Normally empty. + ParamStale m_rmtstate; + set m_restrictMTypes; + + /** 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); +}; + + +#endif /* _RCLCONFIG_H_INCLUDED_ */ diff --git a/src/common/rclinit.cpp b/src/common/rclinit.cpp new file mode 100644 index 00000000..37391888 --- /dev/null +++ b/src/common/rclinit.cpp @@ -0,0 +1,138 @@ +/* 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" + +static const int catchedSigs[] = {SIGHUP, SIGINT, SIGQUIT, SIGTERM, + SIGUSR1, SIGUSR2}; + +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); + + // We would like to block SIGCHLD globally, but we can't because + // QT uses it. Have to block it inside execmd.cpp + + // Install 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); + } + + // Make sure the locale is set. This is only for converting file names + // to utf8 for indexing. + setlocale(LC_CTYPE, ""); + + // Make sure the locale charset is initialized (so that multiple + // threads don't try to do it at once). + config->getDefCharset(); + // Init unac locking + unac_init_mt(); + + 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]); + pthread_sigmask(SIG_BLOCK, &sset, 0); +} diff --git a/src/common/rclinit.h b/src/common/rclinit.h new file mode 100644 index 00000000..225db26e --- /dev/null +++ b/src/common/rclinit.h @@ -0,0 +1,57 @@ +/* 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(); + +#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..2c0cf283 --- /dev/null +++ b/src/common/textsplit.cpp @@ -0,0 +1,987 @@ +/* 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 "textsplit.h" +#include "debuglog.h" +//#define UTF8ITER_CHECK +#include "utf8iter.h" +#include "uproplist.h" + +#ifndef NO_NAMESPACES +using namespace std; +#endif /* NO_NAMESPACES */ + +/** + * 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}; +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 set unicign; +static set visiblewhite; + +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"; + for (i = 0; i < strlen(special); i++) + charclasses[int(special[i])] = special[i]; + + for (i = 0; i < sizeof(uniign) / sizeof(int); i++) { + unicign.insert(uniign[i]); + } + unicign.insert((unsigned int)-1); + + for (i = 0; i < sizeof(avsbwht) / sizeof(int); i++) { + visiblewhite.insert(avsbwht[i]); + } + } +}; +static const CharClassInit charClassInitInstance; + +static inline int whatcc(unsigned int c) +{ + if (c <= 127) { + return charclasses[c]; + } else { + if (unicign.find(c) != unicign.end()) + return SPACE; + else + return LETTER; + } +} + + +// 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(); + 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) { + int c = (int)w[0]; + if (charclasses[c] != A_ULETTER && charclasses[c] != A_LLETTER && + charclasses[c] != DIGIT) { + //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 = 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 = 0; +} + +/** + * 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())); + + m_span.erase(); + m_inNumber = false; + m_wordStart = m_wordLen = m_prevpos = m_prevlen = m_wordpos = m_spanpos = 0; + int curspanglue = 0; + + // 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 DIGIT: + if (m_wordLen == 0) + m_inNumber = true; + m_wordLen += it.appendchartostring(m_span); + 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; + } + 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 (whatcc(it[it.getCpos()+1]) == DIGIT) { + // -10 + m_inNumber = true; + m_wordLen += it.appendchartostring(m_span); + } else { + goto SPACE; + } + } else if (m_inNumber && (m_span[m_span.length() - 1] == 'e' || + m_span[m_span.length() - 1] == 'E')) { + if (whatcc(it[it.getCpos()+1]) == DIGIT) { + m_wordLen += it.appendchartostring(m_span); + } else { + goto SPACE; + } + } else { + if (!doemit(false, it.getBpos())) + return false; + m_inNumber = false; + m_wordStart += it.appendchartostring(m_span); + } + break; + + case '.': + 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) { + // we're eliminating 132.jpg here. Good idea ? + if (nextwhat != DIGIT && nextc != 'e' && nextc != 'E') + goto SPACE; + m_wordLen += it.appendchartostring(m_span); + 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 (nextwhat != A_LLETTER && nextwhat != A_ULETTER && + nextwhat != DIGIT && nextwhat != LETTER) + goto SPACE; + + if (cc == '.') { + // Check for number like .1 + if (m_span.length() == 0 && nextwhat == DIGIT) { + m_inNumber = true; + m_wordLen += it.appendchartostring(m_span); + 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); + 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); + break; + } + } + goto SPACE; + break; + case '\n': + case '\r': + if (m_span.length() && m_span[m_span.length() - 1] == '-') { + // 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. + // Also we'd need to check for a soft-hyphen and remove it, + // but this would require more utf-8 magic + } else { + // Handle like a normal separator + 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); + nonalnumcnt = 0; + break; + } + } + 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_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, list &tokens) +{ + return u8stringToStrings >(s, tokens); +} + +#else // TEST driver -> + +#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 " +; + +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); + + } +} +#endif // TEST diff --git a/src/common/textsplit.h b/src/common/textsplit.h new file mode 100644 index 00000000..2b58e977 --- /dev/null +++ b/src/common/textsplit.h @@ -0,0 +1,134 @@ +/* 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 + +#ifndef NO_NAMESPACES +using std::string; +using std::list; +#endif + +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() {} + + /** 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; + + + // 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, list &tokens); + + /** Is char CJK ? */ + static bool isCJK(int c); + +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; + + // 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..280e8ef5 --- /dev/null +++ b/src/common/unacpp.cpp @@ -0,0 +1,128 @@ +/* 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, bool dofold) +{ + char *cout = 0; + size_t out_len; + int status; + status = dofold ? + unacfold_string(encoding, in.c_str(), in.length(), &cout, &out_len) : + unac_string(encoding, in.c_str(), in.length(), &cout, &out_len); + 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; +} + +bool unaciscapital(const string& in) +{ + if (in.empty()) + return false; + Utf8Iter it(in); + string shorter; + it.appendchartostring(shorter); + + string noacterm, noaclowterm; + if (!unacmaybefold(shorter, noacterm, "UTF-8", false)) { + LOGINFO(("unaciscapital: unac failed for [%s]\n", in.c_str())); + return false; + } + if (!unacmaybefold(noacterm, noaclowterm, "UTF-8", true)) { + LOGINFO(("unaciscapital: unacfold failed for [%s]\n", in.c_str())); + return false; + } + Utf8Iter it1(noacterm); + Utf8Iter it2(noaclowterm); + if (*it1 != *it2) + return true; + else + return false; +} + +#else // not testing + +#include +#include +#include +#include + +#include + +using namespace std; + +#include "unacpp.h" +#include "readfile.h" + +int main(int argc, char **argv) +{ + bool dofold = true; + if (argc != 4) { + cerr << "Usage: unacpp " << endl; + exit(1); + } + const char *encoding = argv[1]; + string ifn = argv[2]; + const char *ofn = argv[3]; + + string odata; + if (!file_to_string(ifn, odata)) { + cerr << "file_to_string: " << odata << endl; + exit(1); + } + string ndata; + if (!unacmaybefold(odata, ndata, encoding, dofold)) { + cerr << "unac: " << ndata << endl; + exit(1); + } + + int fd = open(ofn, O_CREAT|O_EXCL|O_WRONLY, 0666); + if (fd < 0) { + cerr << "Open/Create " << ofn << " failed: " << strerror(errno) + << endl; + exit(1); + } + if (write(fd, ndata.c_str(), ndata.length()) != (int)ndata.length()) { + cerr << "Write(2) failed: " << strerror(errno) << endl; + exit(1); + } + close(fd); + exit(0); +} + +#endif diff --git a/src/common/unacpp.h b/src/common/unacpp.h new file mode 100644 index 00000000..5bd4cbc7 --- /dev/null +++ b/src/common/unacpp.h @@ -0,0 +1,33 @@ +/* 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 +extern bool unacmaybefold(const string& in, string& out, + const char *encoding, bool dofold); + +// Utility function to determine if string begins with capital +extern bool unaciscapital(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..d81f4f73 --- /dev/null +++ b/src/common/uproplist.h @@ -0,0 +1,220 @@ +/* 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. + * + * Data from: +# PropList-4.0.1.txt +# Date: 2004-03-02, 02:42:40 GMT [MD] +# +# Unicode Character Database +# Copyright (c) 1991-2004 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see UCD.html +*/ +static const unsigned int uniign[] = { + 0x0021, /* ; Terminal_Punctuation # Po EXCLAMATION MARK*/ + 0x002C, /* ; Terminal_Punctuation # Po COMMA*/ + 0x002D, /* ; Dash # Pd HYPHEN-MINUS*/ + 0x002E, /* ; Terminal_Punctuation # Po FULL STOP*/ + 0x003A, /* ; Terminal_Punctuation # Po [2] COLON..SEMICOLON*/ + 0x003B, /* ; Terminal_Punctuation # Po [2] COLON..SEMICOLON*/ + 0x003F, /* ; Terminal_Punctuation # Po QUESTION MARK*/ + 0x0085, /* NEXT LINE NEL;Cc */ + 0x00A0, /* NO-BREAK SPACE; Zs */ + 0x00A1, /* INVERTED EXCLAMATION MARK;Po */ + 0x00A2, /* CENT SIGN;Sc */ + 0x00A3, /* POUND SIGN;Sc; */ + 0x00A4, /* CURRENCY SIGN;Sc; */ + 0x00A5, /* YEN SIGN;Sc; */ + 0x00A6, /* BROKEN BAR;So */ + 0x00A7, /* SECTION SIGN;So; */ + 0x00A9, /* COPYRIGHT SIGN;So */ + 0x00AB, /* ; Quotation_Mark # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK*/ + 0x00AC, /* NOT SIGN;Sm */ + 0x00AD, /* ; Hyphen # Cf SOFT HYPHEN*/ + 0x00AE, /* registered sign */ + 0x00B0, /* DEGREE SIGN;So;0;ET;;;;;N;;;;; */ + 0x00B1, /* PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;*/ + 0x00B7, /* MIDDLE DOT;Po;0;ON;;;;;N;;;;;*/ + 0x00BB, /* ; Quotation_Mark # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK*/ + 0x00BF, /* INVERTED QUESTION MARK;Po */ + 0x00D7, /* MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;; */ + 0x037E, /* ; Terminal_Punctuation # Po GREEK QUESTION MARK*/ + 0x0387, /* ; Terminal_Punctuation # Po GREEK ANO TELEIA*/ + 0x055C, /* ; STerm # Po ARMENIAN EXCLAMATION MARK*/ + 0x055E, /* ; STerm # Po ARMENIAN QUESTION MARK*/ + 0x0589, /* ; STerm # Po ARMENIAN FULL STOP*/ + 0x0589, /* ; Terminal_Punctuation # Po ARMENIAN FULL STOP*/ + 0x058A, /* ; Dash # Pd ARMENIAN HYPHEN*/ + 0x058A, /* ; Hyphen # Pd ARMENIAN HYPHEN*/ + 0x05C3, /* ; Terminal_Punctuation # Po HEBREW PUNCTUATION SOF PASUQ*/ + 0x060C, /* ; Terminal_Punctuation # Po ARABIC COMMA*/ + 0x061B, /* ; Terminal_Punctuation # Po ARABIC SEMICOLON*/ + 0x061F, /* ; STerm # Po ARABIC QUESTION MARK*/ + 0x061F, /* ; Terminal_Punctuation # Po ARABIC QUESTION MARK*/ + 0x06D4, /* ; STerm # Po ARABIC FULL STOP*/ + 0x06D4, /* ; Terminal_Punctuation # Po ARABIC FULL STOP*/ + 0x166E, /* ; STerm # Po CANADIAN SYLLABICS FULL STOP*/ + 0x1680, /* ; White_Space # Zs OGHAM SPACE MARK*/ + 0x16EB, /* RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;*/ + 0x16EC, /* RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;;*/ + 0x16ED, /* RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;; */ + 0x1803, /* ; STerm # Po MONGOLIAN FULL STOP*/ + 0x1806, /* ; Hyphen # Pd MONGOLIAN TODO SOFT HYPHEN*/ + 0x1809, /* ; STerm # Po MONGOLIAN MANCHU FULL STOP*/ + 0x180E, /* ; White_Space # Zs MONGOLIAN VOWEL SEPARATOR*/ + 0x2000, /* ; White_Space # Zs [11] EN QUAD..HAIR SPACE*/ + 0x2001, /* ; White_Space # Zs [11] EN QUAD..HAIR SPACE*/ + 0x2002, /* ; White_Space # Zs [11] EN QUAD..HAIR SPACE*/ + 0x2003, /* ; White_Space # Zs [11] EN QUAD..HAIR SPACE*/ + 0x2004, /* ; White_Space # Zs [11] EN QUAD..HAIR SPACE*/ + 0x2005, /* ; White_Space # Zs [11] EN QUAD..HAIR SPACE*/ + 0x2006, /* ; White_Space # Zs [11] EN QUAD..HAIR SPACE*/ + 0x2007, /* ; White_Space # Zs [11] EN QUAD..HAIR SPACE*/ + 0x2008, /* ; White_Space # Zs [11] EN QUAD..HAIR SPACE*/ + 0x2009, /* ; White_Space # Zs [11] EN QUAD..HAIR SPACE*/ + 0x200A, /* ; White_Space # Zs [11] EN QUAD..HAIR SPACE*/ + 0x2010, /* ; Hyphen # Pd [2] HYPHEN..NON-BREAKING HYPHEN*/ + 0x2011, /* ; Hyphen # Pd [2] HYPHEN..NON-BREAKING HYPHEN*/ + 0x2012, /* ; Dash # Pd [6] HYPHEN..HORIZONTAL BAR*/ + 0x2013, /* ; Dash # Pd [6] HYPHEN..HORIZONTAL BAR*/ + 0x2014, /* ; Dash # Pd [6] HYPHEN..HORIZONTAL BAR*/ + 0x2015, /* ; Dash # Pd [6] HYPHEN..HORIZONTAL BAR*/ + 0x2018, /* ; Quotation_Mark # Pi LEFT SINGLE QUOTATION MARK*/ + 0x2019, /* ; Quotation_Mark # Pf RIGHT SINGLE QUOTATION MARK*/ + 0x201A, /* ; Quotation_Mark # Ps SINGLE LOW-9 QUOTATION MARK*/ + 0x201B, /* ; Quotation_Mark # Pi SINGLE HIGH-REVERSED-9 QUOTATION MARK*/ + 0x201C, /* ; Quotation_Mark # Pi LEFT DOUBLE QUOTATION MARK*/ + 0x201D, /* ; Quotation_Mark # Pf RIGHT DOUBLE QUOTATION MARK*/ + 0x201E, /* ; Quotation_Mark # Ps DOUBLE LOW-9 QUOTATION MARK*/ + 0x201F, /* ; Quotation_Mark # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK*/ + 0x2022, /* BULLET;Po;0;ON;;;;;N;;;;; */ + 0x2023, /* TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;*/ + 0x2024, /* ONE DOT LEADER;Po;0;ON; 002E;;;;N;;;;;*/ + 0x2025, /* TWO DOT LEADER;Po;0;ON; 002E 002E;;;;N;;;;; */ + 0x2026, /* HORIZONTAL ELLIPSIS;Po;0;ON; 002E 002E 002E;;;;N;;;;; */ + 0x2028, /* ; White_Space # Zl LINE SEPARATOR*/ + 0x2029, /* ; White_Space # Zp PARAGRAPH SEPARATOR*/ + 0x202F, /* ; White_Space # Zs NARROW NO-BREAK SPACE*/ + 0x2032, /* PRIME;Po;0;ET;;;;;N;;;;;*/ + 0x2039, /* ; Quotation_Mark # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK*/ + 0x203A, /* ; Quotation_Mark # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK*/ + 0x203C, /* ; STerm # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG*/ + 0x203D, /* ; STerm # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG*/ + 0x2047, /* ; Terminal_Punctuation # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK*/ + 0x2048, /* ; Terminal_Punctuation # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK*/ + 0x2049, /* ; Terminal_Punctuation # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK*/ + 0x2053, /* ; Dash # Po SWUNG DASH*/ + 0x205F, /* ; White_Space # Zs MEDIUM MATHEMATICAL SPACE*/ + 0x207B, /* ; Dash # Sm SUPERSCRIPT MINUS*/ + 0x208B, /* ; Dash # Sm SUBSCRIPT MINUS*/ + 0x2117, /* SOUND RECORDING COPYRIGHT;So */ + 0x2122, /* TRADE MARK SIGN;So; */ + 0x2192, /* RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;*/ + 0x2212, /* ; Dash # Sm MINUS SIGN*/ + 0x2E2E, /* REVERSED QUESTION MARK;Po;0;ON;;;;;N;;;;; */ + 0x3000, /* ; White_Space # Zs IDEOGRAPHIC SPACE*/ + 0x3002, /* ; STerm # Po IDEOGRAPHIC FULL STOP*/ + 0x300C, /* ; Quotation_Mark # Ps LEFT CORNER BRACKET*/ + 0x300D, /* ; Quotation_Mark # Pe RIGHT CORNER BRACKET*/ + 0x300E, /* ; Quotation_Mark # Ps LEFT WHITE CORNER BRACKET*/ + 0x300F, /* ; Quotation_Mark # Pe RIGHT WHITE CORNER BRACKET*/ + 0x301C, /* ; Dash # Pd WAVE DASH*/ + 0x301D, /* ; Quotation_Mark # Ps REVERSED DOUBLE PRIME QUOTATION MARK*/ + 0x301E, /* ; Quotation_Mark # Pe LOW DOUBLE PRIME QUOTATION MARK*/ + 0x3030, /* ; Dash # Pd WAVY DASH*/ + 0x30FB, /* ; Hyphen # Pc KATAKANA MIDDLE DOT*/ + 0xC2B6, /* PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;; */ + 0xC3B7, /* DIVISION SIGN;Sm;0;ON;;;;;N;;;;; */ + 0xFE31, /* ; Dash # Pd PRESENTATION FORM FOR VERTICAL EM DASH*/ + 0xFE32, /* ; Dash # Pd PRESENTATION FORM FOR VERTICAL EN DASH*/ + 0xFE41, /* ; Quotation_Mark # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET*/ + 0xFE42, /* ; Quotation_Mark # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET*/ + 0xFE43, /* ; Quotation_Mark # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET*/ + 0xFE44, /* ; Quotation_Mark # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET*/ + 0xFE50, /* ; Terminal_Punctuation # Po [3] SMALL COMMA..SMALL FULL STOP*/ + 0xFE51, /* ; Terminal_Punctuation # Po [3] SMALL COMMA..SMALL FULL STOP*/ + 0xFE52, /* ; STerm # Po SMALL FULL STOP*/ + 0xFE52, /* ; Terminal_Punctuation # Po [3] SMALL COMMA..SMALL FULL STOP*/ + 0xFE54, /* ; Terminal_Punctuation # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK*/ + 0xFE55, /* ; Terminal_Punctuation # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK*/ + 0xFE56, /* ; Terminal_Punctuation # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK*/ + 0xFE57, /* ; Terminal_Punctuation # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK*/ + 0xFE58, /* ; Dash # Pd SMALL EM DASH*/ + 0xFE63, /* ; Hyphen # Pd SMALL HYPHEN-MINUS*/ + 0xFF01, /* FULLWIDTH EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; */ + 0xFF02, /* FULLWIDTH QUOTATION MARK;Po;0;ON; 0022;;;;N;;;;; */ + 0xFF03, /* FULLWIDTH NUMBER SIGN;Po;0;ET; 0023;;;;N;;;;; */ + 0xFF04, /* FULLWIDTH DOLLAR SIGN;Sc;0;ET; 0024;;;;N;;;;; */ + 0xFF05, /* FULLWIDTH PERCENT SIGN;Po;0;ET; 0025;;;;N;;;;; */ + 0xFF06, /* FULLWIDTH AMPERSAND;Po;0;ON; 0026;;;;N;;;;; */ + 0xFF07, /* FULLWIDTH APOSTROPHE;Po;0;ON; 0027;;;;N;;;;; */ + 0xFF08, /* FULLWIDTH LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;FULLWIDTH OPENIN*/ + 0xFF09, /* FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;FULLWIDTH CLOS*/ + 0xFF0A, /* FULLWIDTH ASTERISK;Po;0;ON; 002A;;;;N;;;;; */ + 0xFF0B, /* FULLWIDTH PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; */ + 0xFF0C, /* FULLWIDTH COMMA;Po;0;CS; 002C;;;;N;;;;; */ + 0xFF0D, /* FULLWIDTH HYPHEN-MINUS;Pd;0;ES; 002D;;;;N;;;;; */ + 0xFF0E, /* FULLWIDTH FULL STOP;Po;0;CS; 002E;;;;N;FULLWIDTH PERIOD;;;; */ + 0xFF0F, /* FULLWIDTH SOLIDUS;Po;0;CS; 002F;;;;N;FULLWIDTH SLASH;;;; */ + 0xFF1A, /* ; Terminal_Punctuation # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON*/ + 0xFF1B, /* ; Terminal_Punctuation # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON*/ + 0xFF1F, /* ; Terminal_Punctuation # Po FULLWIDTH QUESTION MARK*/ + 0xFF61, /* ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC FULL STOP*/ + 0xFF62, /* ; Quotation_Mark # Ps HALFWIDTH LEFT CORNER BRACKET*/ + 0xFF63, /* ; Quotation_Mark # Pe HALFWIDTH RIGHT CORNER BRACKET*/ + 0xFF64, /* ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC COMMA*/ + 0xFF65, /* ; Hyphen # Pc HALFWIDTH KATAKANA MIDDLE DOT*/ +}; + +/* 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..e461ab05 --- /dev/null +++ b/src/configure @@ -0,0 +1,6994 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.68 for Recoll 1.17.0. +# +# +# 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 +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 : + # 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 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_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='Recoll' +PACKAGE_TARNAME='recoll' +PACKAGE_VERSION='1.17.0' +PACKAGE_STRING='Recoll 1.17.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 +RCLVERSION +NOPYTHON +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 +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_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 + $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 Recoll 1.17.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.17.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 + --enable-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. + --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. + --enable-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. + --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. + --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.17.0 +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. ## +## ------------------------ ## + +# 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 || + $as_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 || + $as_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.17.0, 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 + + +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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { 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_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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { 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_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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { 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_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 +#include +#include +/* 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" + { test -f "$ac_path_GREP" && $as_test_x "$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" + { test -f "$ac_path_EGREP" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 + +# Enable use of file extended attributes. +# Not by default as these are little used for now. +# Check whether --enable-xattr was given. +if test "${enable_xattr+set}" = set; then : + enableval=$enable_xattr; xattrEnabled=$enableval +else + xattrEnabled=no +fi + + +if test X$xattrEnabled = Xyes ; then + +$as_echo "#define RCL_USE_XATTR 1" >>confdefs.h + +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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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" +XAPIANCXXFLAGS=`$XAPIAN_CONFIG --cxxflags` + +#echo XAPIAN_CONFIG: $XAPIAN_CONFIG +#echo LIBXAPIAN: $LIBXAPIAN +#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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 indincate 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='1.17.0' + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 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;test -f Makefile && chmod +w Makefile;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 -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 Recoll $as_me 1.17.0, 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 + +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.17.0 +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' +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..7fb79821 --- /dev/null +++ b/src/configure.ac @@ -0,0 +1,549 @@ +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.]), + 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 + +# Enable use of file extended attributes. +# Not by default as these are little used for now. +AC_ARG_ENABLE(xattr, + AC_HELP_STRING([--enable-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=no) + +if test X$xattrEnabled = Xyes ; then + AC_DEFINE(RCL_USE_XATTR, 1, [Use file extended attributes]) +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([--enable-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" +XAPIANCXXFLAGS=`$XAPIAN_CONFIG --cxxflags` + +#echo XAPIAN_CONFIG: $XAPIAN_CONFIG +#echo LIBXAPIAN: $LIBXAPIAN +#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 indincate 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.]), + 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='m4_esyscmd_s(cat VERSION)' + +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(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(NOPYTHON) +AC_SUBST(RCLVERSION) + +# 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;test -f Makefile && chmod +w Makefile;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 0000000000000000000000000000000000000000..42e7848309f8d4f9c23ad2aff78b47b8bcf27835 GIT binary patch literal 457 zcmV;)0XF`LP)6jNii`DGC+xg7zdey{{J6rAvD;cjBzx|hFS>G2C(2MzPP^rdM(C_ zC(7{X{mRY8fLkvfjf^jva2A@c#dr@os^OB=y82w}$}?QD2OZV$cqU}!*^!X#M+?T$ zf^js;hGvv8?py1FOYYNu(W}4hp-r*>3}_4)rfagy*Qj50T+_kXF8=vk_Tx5doLY?- zKkI*>Yn%H2Xf7k*AjZL#%LZMP4Z08-bZKZb$`}|J7#J_laKI(^j!W>2oDnWroaS<}W#odCRH!lU<^wj`c5wJ7dEmC=6LXjghP%0{DX zpaCQK!@}BCovkmTdB$|`(k)VcMlP;sS>Hksifz=jBc< zbI7jk+Q!tQIa8Z{`F}!FC*?_;m@JjMjV&n8<|(aiaGIG4&L=}fUQcqZOI7`GkY@j@ z`mMP=mCnOT=WD~zo?DQLAH>Orw8&4h`uMt}gU}7pP5lIVmeXZCv>XlFXmQ@+k6Juv z@h9N4RwEBU$OcLC%V_LF)irg`Uw7|7_nEQB*SGcEE5`19!P4KboA1;ors5{@01g{s z8hHSR4e=3sS{U$cCN3fm;IJWPkq2sqEp(79Aupxe6PYZ+Vz(X`p z#D&wqLo`stg*UEyf^Qz8fg&!P1sKd_dE^X&s&pCgkb!_<>vCcW)^%b~$jacWL@A?W{ TzDBHb&UbwUh8lk*_AS^i(2}&` literal 0 HcmV?d00001 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..718bd605 --- /dev/null +++ b/src/desktop/unity-lens-recoll/README @@ -0,0 +1,35 @@ +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 + +or if you checked the code out from a bazaar branch: + + ./autogen.sh --prefix=/usr --sysconfdir=/etc && make && sudo make install + +RESOURCES +--------- +The source code and releases packages can be found on + http://www.recoll.org. +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..f44fc6ae --- /dev/null +++ b/src/desktop/unity-lens-recoll/bin/unity-recoll-daemon.in @@ -0,0 +1,89 @@ +#! /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 + 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); + + filters.append(filter) + + lens.props.filters = filters + 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 0000000000000000000000000000000000000000..e1fe5bcac93e22fc108d2c3c9ceed4fc7664290e GIT binary patch literal 560 zcmV-00?+-4P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyY| z4if=~j96&^001FrR9JLFZ*6U5Zgc_CX>@2HRA^-&M@dakZLpUB z0004lNkl{6#e!s_TQ4~c{AQbFz2q98R z?70x^Me#DCH)@L3+Bt{q0Dw{o05Uutk2GtHc}V1(o6Tn4`wW-MrIZqHh7hLHX$T=h zDWy{CMnqXtO5S@c_1<&Nso&mv6xem$vmOZ{{=)3T;eY@Dj4>!arKGjyoMXXav4}C| zv$fV*iz&X@Y-lfo!2p|Iuh+d^58-OH+U<5|Sy`6D;qayie?TS*Az*2Yv29x<0sxeg z;oaT;H`(;}#~AzlKAL^GTu!GGcB-`o06N)C)7*&YW^m4p$73AG?RI;;UeOl-m`o;^ zRZ4v|*_?Cw-gK-}N+E<_PWEf|QP*`;-8W{_b!m)|Qle&S?PxT@UW_qHDcTXedq7%8aOV0p6Z$a0000&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..a77fccb1 --- /dev/null +++ b/src/desktop/unity-lens-recoll/recollscope/rclsearch.py @@ -0,0 +1,246 @@ + +import sys +import subprocess +import time + +from gi.repository import GLib, GObject, Gio +from gi.repository import Dee +from gi.repository import Unity + +import recoll + +BUS_PATH = "/org/recoll/unitylensrecoll/scope/main" + +# 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 = recoll.connect() + self.db.setAbstractParams(maxchars=200, contextwords=4) + + 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 + + fcat = self.get_filter("rclcat") + for option in fcat.options: + if option.props.active: + search_string += " rclcat:" + option.props.id + + # Do the recoll thing + query = self.db.query() + try: + nres = query.execute(search_string) + except: + return + + actual_results = 0 + while query.next >= 0 and query.next < nres: + try: + doc = query.fetchone() + except: + break + + # No sense in returning unusable results (until + # I get an idea of what to do with them) + if doc.ipath != "": + mimetype = "application/x-recoll" + url = doc.url + "#" + doc.ipath + else: + mimetype = doc.mimetype + url = doc.url + + #print "Recoll Lens: Using MIMETYPE", mimetype, " URL", url + + titleorfilename = doc.title + if titleorfilename == "": + titleorfilename = doc.filename + + icon = Gio.content_type_get_icon(doc.mimetype) + if icon: + iconname = icon.get_names()[0] + + abstract = self.db.makeDocAbstract(doc, query).encode('utf-8') + + model.append (url, + iconname, + CATEGORY_ALL, + mimetype, + titleorfilename, + abstract, + doc.url) + + actual_results += 1 + if actual_results >= 20: + 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..88b80492 --- /dev/null +++ b/src/doc/man/recoll.1 @@ -0,0 +1,78 @@ +.\" $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 + +] +.SH DESCRIPTION +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. +.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..f0be5743 --- /dev/null +++ b/src/doc/man/recoll.conf.5 @@ -0,0 +1,216 @@ +.\" $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 indexation 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 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 indexaction 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 "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 "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. daemSkippedPaths can be used to define a specific value for the +real time indexing monitor. +.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 "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 "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 "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 "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 "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 "guesscharset = " boolean +Try to guess the character set of files if no internal value is available +(ie: for plain text files). This does not work well in general, and should +probably not be used. +.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 indexation of many bogus "text" files. +.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 "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 indexation, or for all files inside +the selected subtrees, independent of mime type. +.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 "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. +.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..803f00c1 --- /dev/null +++ b/src/doc/man/recollindex.1 @@ -0,0 +1,202 @@ +.\" $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 +] +[ +.B \-m +] +[ +.B \-w + +] +[ +.B \-D +] +[ +.B \-x +] +.br +.B recollindex +[ +.B \-c + +] +.B \-i +[ +.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. +.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. +.PP +.B recollindex \-l +will list the names of available language stemmers. +.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 +.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). +.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/Makefile b/src/doc/user/Makefile new file mode 100644 index 00000000..5c1d49fb --- /dev/null +++ b/src/doc/user/Makefile @@ -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/bldloop b/src/doc/user/bldloop new file mode 100644 index 00000000..3b005359 --- /dev/null +++ b/src/doc/user/bldloop @@ -0,0 +1,7 @@ +#!/bin/sh + +while true;do + make FORMATS="html html-split" + cp *.html /usr/local/www/lesbonscomptes/recoll/usermanual/ + sleep 1 +done 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..d5432611 --- /dev/null +++ b/src/doc/user/usermanual.sgml @@ -0,0 +1,4353 @@ + + + + +Recoll"> +Recoll helper applications page"> + +Xapian"> +]> + + + + + Recoll user manual + + + Jean-Francois + Dockes + +
jfd@recoll.org
+
+
+ + + 2005-2012 + Jean-Francois + Dockes + + + + 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 perform installation and start the + recoll user interface, which will 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 ms-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 + those 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 depends on the document language. &RCL; stores + the unstemmed versions of terms and uses auxiliary databases for + term expansion. It can switch stemming languages, or add a + language, without re-indexing. Storing documents in different + languages in the same index is possible, and useful in + practice, but does introduce possibilities of confusion. &RCL; + currently makes no attempt at automatic language recognition. + + &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 parameters from this file 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 + + Indexing + is started automatically the first time you execute the + recoll search graphical user interface, or by + executing the recollindex command. + + Searches are usually + performed inside the recoll graphical user + interface (GUI) program, 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 tool, a + + Python + programming interface, and a + KDE KIO slave 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 -z). + + &RCL; indexing can be performed with two different + methods: + + + + + 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. + + + + + 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. + + &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 mail folder files or zip + archives, can hold many individually indexed documents, which may + in turn be themselves compound ones. Such hierarchies can go quite + deep, and &RCL; has no problem processing, for example, an ms-word + document which would be an attachment to an email message part of + a folder file archived inside a zip file... + + &RCL; indexing processes plain text, HTML, openoffice + and e-mail files, 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 from the + recoll File menu. It is + stored in the missing text file + inside the configuration directory. + + Without further configuration, &RCL; will index all + appropriate files from your home directory, with a reasonable + set of defaults. + + 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. See the + section about using multiple + databases for more information on multiple configurations + and indexes. + + 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. + + + + + + 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 -c + 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 + that you wish to make searchable. + + + You can also specify a different 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 document set size, + 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 it will be quite typical nowadays + (2006), that 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. + + + Xapian 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. + + Unfortunately, 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. + + + + + 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. + + + + + + + + Indexing 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 using the dialogs in the + recoll GUI. + + You can also use multiple + indexes defined by separate configurations, typically to + separate personal and shared indexes, or to take advantage of + the organization of your data to improve search precision. + + 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 + + + The indexing configuration GUI + + Most parameters for a given indexing 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 menu. It has two main + panels. The first panel allows setting global variables, like + the list of top directories or the list of skipped paths. The + second panel allows setting variables that can be redefined + for subdirectories. This second panel 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 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... + + + + + + + Using Beagle WEB browser plugins + + Beagle is (was?) a concurrent desktop + indexer, built on Lucene and the Mono project (C#), for which a + number of add-on browser plugins were written. These work by + copying visited web pages to an indexing queue directory, which the + indexer then processes. Especially, there is a + Firefox extension. + + If, for any reason, you so happen to prefer &RCL; to + Beagle, you can still use the + Firefox plugin, which is written in + Javascript and completely independant of C#, Beagle, Lucene..., and + set &RCL; to process the Beagle queue + directory. This supposes that Beagle is + not running, else both programs will fight for the same + files. + + This feature can be enabled in the GUI indexing configuration + panel, or by editing the configuration file (set + processbeaglequeue to 1). + + There are more recent instructions about how to find and + install the Firefox extension on the + + Recoll wiki. + + Unfortunately, it seems that the plugin does not work anymore + with recent Firefox versions (tried with 10.0). This is not the + trival installation version check issue, explicit manual indexing + requests still work, but automatic indexing on page load does + not. + + + + + 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 + -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 (^C, SIGINT) or terminate + (SIGTERM) signal. Some time may elapse before the process exits, + because it needs to properly flush and close the index. The + indexing thread can be equivalently stopped from the menu. + + 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 + exemple, 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 are still + up to date will not need to be reindexed). + + recollindex has a number of other options + which are described in its man page. + + Of special interest 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 . + + recollindex -i will not descend into + directory 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): + + 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 &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 -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. + + + + + + + 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 &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 + -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 &RCL;, 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. + + + 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 and location + in the file system. + + + + In most cases, you can enter the terms as you + think them, even if they contain embedded punctuation or other + non-textual characters. For + exemple, &RCL; can handle things like e-mail 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. + + File name will specifically look for file + names. The entry will be split at white space characters, + and each fragment will be separately expanded, then the search will + be for file names matching all fragments (this is new in 1.15, + older releases did an OR of the whole thing which did not make + sense). Things to know: + + The search is case- and accent-insensitive. + + Fragments without any wild card + character and not capitalized will be prepended and appended + with '*' (ie: etc -> + *etc*, but + Etc -> + etc). Of course it does not make + sense to have multiple fragments if one of them is capitalized + (as this one will require an exact match). + + If you want to search for a pattern including + white space, use double quotes (ie: "admin + note*"). + + If you have a big index (many files), + excessively generic fragments may result in inefficient + searches. + + As an example, inst + recoll would match + recollinstall.in (and quite a few + others...). + + + The point of having a separate file name + search is that wild card expansion can be performed more + efficiently on a relatively small subset of the index (allowing + wild cards on the left of terms without excessive penality). + + All search modes allow wildcards inside terms + (*, ?, + []). You may want to have a look at the + section about wildcards + for more information about this. + + You can search for exact phrases (adjacent words in a + given order) by enclosing the input inside double quotes. Ex: + "virtual reality". + + 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. + + &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 (the old + sort tool is gone after release 1.15, because the new result table has much better + capability). + + 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 attempt to + start an external viewer. The viewer for each document type can be + configured through the user preferences dialog, or by editing the + mimeview configuration file. You can also check + the Use desktop preferences option in the user + preferences dialog to use the desktop defaults for all + documents. This is probably the best option if you are using a well + configured Gnome or KDE desktop. + + 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. + + + + 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 + + + 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 exemple to + start a chm viewer on the parent + document for a help page. + + + + + + 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. + + + + + 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 ^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). + + 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 ^Up/^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. + + 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. + + You can print the current preview window contents by typing + ^P (Ctrl + P) in + the window text. + + + + + 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. + + + + + + + + + + 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 200 results for + wildcards and regular expressions. + + 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 databases + + Multiple &RCL; databases or 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 recollindex program instance can only + update one specific index. + + A recoll program instance is also + associated with a specific index, which is the one to be + updated by its indexing thread, 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. Of course, 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. + + 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 + + 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. + + + + + 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 Query 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. + + + 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. + + + 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 ^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 ^P in a preview window will print + the currently displayed text. + + + Quitting + Entering ^Q almost anywhere will + close the application. + + + + + + Customizing the search interface + + You can customize some aspects of the search interface by using + the Query 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. + + + 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. + + + Use <PRE> tags instead of + <BR> to display plain text as HTML in preview: + 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. + + + 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. + + + 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 + and Start with sort dialog + open: If you use these dialogs all the time, checking + these entries will get them 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 when displaying the result list. Abstracts + are constructed by taking context from the document + information, around the search terms. This can slow down + result list display significantly for big documents, and you + may want to turn it off. + + + 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 Query 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 exemples 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 and + Edit 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 and Edit links is + <a href="P%N"> + and + <a href="E%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. For + example, you could look at the fields for the document types of + interest (use the right-click menu inside the preview window), and + add what you want to the list of stored fields. A candidate example + would be the recipient field which is generated + by the message filters. + + The default value for the paragraph format string is: + <img src="%I" align="left">%R %S %L &nbsp;&nbsp;<b>%T</b><br> +%M&nbsp;%D&nbsp;&nbsp;&nbsp;<i>%U</i>&nbsp;%i<br> +%A %K + + You may, for example, try the following for a more web-like + experience: + <u><b><a href="P%N">%T</a></b></u><br> +%A<font color=#008000>%U - %S</font> - %L + + Or the clean looking: + <img src="%I" align="left">%L <font color="#900000">%R</font> +  <b>%T</b><br>%S  +<font color="#808080"><i>%U</i></font> +<table bgcolor="#e0e0e0"> +<tr><td><div>%A</div></td></tr> +</table>%K + + Note that the P%N link in the above paragraph makes the title a + preview link. + + + 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 + <a href="recoll:/..."> 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 -t 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 -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] <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.... + + + + + 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 roughly 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. Exemple: + Beatles, + author:balzac, + dc:title:grandet + + The colon, if present, means "contains". Xesam defines other + relations, which are not supported for now. + + 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. Do not enter explicit + parenthesis, they are not supported for now. + + 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 exemple 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 out of the specified directory, only + after release 1.15.8. A tilde inside the value will be expanded to + the home directory. dir is not a regular field + and only one value makes sense in a query (you can't use + dir:dir1 OR dir:dir2). Relative paths make + sense, for example, + dir:share/doc would match either + /usr/share/doc or + /usr/local/share/doc + + + size for filtering the + results on file size. Exemple: + 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. Exemples: + + 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 + + + A weight can be specified for a query element + by specifying a decimal value at the start of the + modifiers. Example: "Important"2.5. + + + + + + + + + + + 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 before 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. + + 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). + + + + + + + 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. + + + + + + + Desktop integration + + Being independant of the desktop type has its drawbacks: &RCL; + desktop integration is minimal. Here follow a few 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 + + 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 are executable programs which + translate from a specific format (ie: + openoffice, + acrobat, etc.) to the &RCL; + indexing input format, which may be + text/plain or + text/html. + + As of &RCL; 1.13, there are two kinds of filters: + + Simple filters (the old ones) run once and + exit. They can be bare programs like + antiword, or shell-scripts using other + programs. They are very simple to write, just having to write the + text to the standard output. + + Multiple filters, new in 1.13, run as long as + their master process (ie: recollindex) is active. They can + process multiple files (sparing the process startup time which + can be very significant), or multiple documents per file (ie: 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 these new filters are written in + Python, using a common module to + handle the protocol. + + + The following will just describe the simple filters. If you can + program and want to write one of the other kind, it shouldn't be too + difficult to make sense of one of the existing modules. For example, + look at rclzip which uses Zip file paths as + internal identifiers (ipath), and + rclinfo, which uses an integer index. + + + 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 + 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 to one of the simple filters, for exemple + rclps for a starting point. + + Don't forget to make your filter executable before + testing ! + + + + + 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. "&" 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 nerver by those which output plain text. + + 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 also make use of other header fields if + they are present: title, + description, + keywords. + + Filters also have the possibility to "invent" field + names. This should be output as meta tags: + + +<meta name="somefield" content="Some textual data" /> + + + See the following section for details about configuring + how field data is processed by the indexer. + + + + + + + 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 + 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. + + You can find more information in the + section about the + fields file, or in comments inside the + file. + + + + + + + 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 Python interface is not built by default and can be + found in the source package, + under python/recoll. + In order to build the module, you should first build + or re-build the Recoll library using position-independant + objects: + + cd recoll-xxx/ + configure --enable-pic + make + + There is no significant disadvantage in using PIC objects + for the main Recoll executables, so you can use the + --enable-pic option for the main build + too. + + The python/recoll/ directory + contains the usual setup.py + script which you can then use to build and install the + module: + + cd recoll-xxx/python/recoll + python setup.py build + python setup.py install + + + + + + + + Interface manual + + +NAME + recoll - This is an interface to the Recoll full text indexer. + +FILE + /usr/local/lib/python2.5/site-packages/recoll.so + +CLASSES + Db + Doc + Query + SearchData + + class Db(__builtin__.object) + | Db([confdir=None], [extra_dbs=None], [writable = False]) + | + | A Db object holds a connection to a Recoll index. Use the connect() + | function to create one. + | confdir specifies a Recoll configuration directory (default: + | $RECOLL_CONFDIR or ~/.recoll). + | extra_dbs is a list of external databases (xapian directories) + | writable decides if we can index new data through this connection + | + | Methods defined here: + | + | + | addOrUpdate(...) + | addOrUpdate(udi, doc, parent_udi=None) -> None + | Add or update index data for a given document + | The udi string must define a unique id for the document. It is not + | interpreted inside Recoll + | doc is a Doc object + | if parent_udi is set, this is a unique identifier for the + | top-level container (ie mbox file) + | + | delete(...) + | delete(udi) -> Bool. + | Purge index from all data for udi. If udi matches a container + | document, purge all subdocs (docs with a parent_udi matching udi). + | + | makeDocAbstract(...) + | makeDocAbstract(Doc, Query) -> string + | Build and return 'keyword-in-context' abstract for document + | and query. + | + | needUpdate(...) + | needUpdate(udi, sig) -> Bool. + | Check if the index is up to date for the document defined by udi, + | having the current signature sig. + | + | purge(...) + | purge() -> Bool. + | Delete all documents that were not touched during the just finished + | indexing pass (since open-for-write). These are the documents for + | the needUpdate() call was not performed, indicating that they no + | longer exist in the primary storage system. + | + | query(...) + | query() -> Query. Return a new, blank query object for this index. + | + | setAbstractParams(...) + | setAbstractParams(maxchars, contextwords). + | Set the parameters used to build 'keyword-in-context' abstracts + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + + class Doc(__builtin__.object) + | Doc() + | + | 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 no useful methods but + | 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 + | Predefined attributes (index/query/both): + | text (index): document plain text + | url (both) + | fbytes (both) optional) file size in bytes + | filename (both) + | fmtime (both) optional file modification date. Unix time printed + | as string + | dbytes (both) document text bytes + | dmtime (both) document creation/modification date + | ipath (both) value private to the app.: internal access path + | inside file + | mtype (both) mime type for original document + | mtime (query) dmtime if set else fmtime + | origcharset (both) charset the text was converted from + | size (query) dbytes if set, else fbytes + | sig (both) app-defined file modification signature. + | For up to date checks + | relevancyrating (query) + | abstract (both) + | author (both) + | title (both) + | keywords (both) + | + | Methods defined here: + | + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + + class Query(__builtin__.object) + | Recoll Query objects are used to execute index searches. + | They must be created by the Db.query() method. + | + | Methods defined here: + | + | + | execute(...) + | execute(query_string, stemming=1|0) + | + | Starts a search for query_string, a Recoll search language string + | (mostly Xesam-compatible). + | The query can be a simple list of terms (and'ed by default), or more + | complicated with field specs etc. See the Recoll manual. + | + | executesd(...) + | executesd(SearchData) + | + | Starts a search for the query defined by the SearchData object. + | + | fetchone(...) + | fetchone(None) -> Doc + | + | Fetches the next Doc object in the current search results. + | + | sortby(...) + | sortby(field=fieldname, ascending=true) + | Sort results by 'fieldname', in ascending or descending order. + | Only one field can be used, no subsorts for now. + | Must be called before executing the search + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | next + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + + class SearchData(__builtin__.object) + | SearchData() + | + | A SearchData object describes a query. It has a number of global + | parameters and a chain of search clauses. + | + | Methods defined here: + | + | + | addclause(...) + | addclause(type='and'|'or'|'excl'|'phrase'|'near'|'sub', + | qstring=string, slack=int, field=string, stemming=1|0, + | subSearch=SearchData) + | Adds a simple clause to the SearchData And/Or chain, or a subquery + | defined by another SearchData object + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + +FUNCTIONS + connect(...) + connect([confdir=None], [extra_dbs=None], [writable = False]) + -> Db. + + Connects to a Recoll database and returns a Db object. + confdir specifies a Recoll configuration directory + (the default is built like for any Recoll program). + extra_dbs is a list of external databases (xapian directories) + writable decides if we can index new data through this connection + + + + + + + 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. + + +#!/usr/bin/env python + 5: + nres = 5 +while query.next >= 0 and query.next < nres: + doc = query.fetchone() + print query.next + for k in ("title", "size"): + print k, ":", getattr(doc, k).encode('utf-8') + abs = db.makeDocAbstract(doc, query).encode('utf-8') + print abs + print + + +]]> + + + + + + + + + + + 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, mail 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 mail + filter, which introduces some mild weirdness, but still + usable). + + + + Text, HTML, mail 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 + + 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 --disable-sse flag to the configure + command. Else all Xapian application will crash with an + illegal instruction error. + + + Development files for + + Qt . + + Development files for X11 and + zlib. + + Check the + &RCL; download page for up to date version + information. + + You will most probably be able to find a binary package for + Qt for your system. You may have to + compile &XAP; but this is not difficult (if you are using + FreeBSD, there is a port). + + You may also need + libiconv. &RCL; + currently uses version 1.9 (this should not be critical). On + Linux systems, the iconv interface + is part of libc and you should not need to do anything + special. + + + + + 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. + + Depending on the Qt 3 + configuration on your system, you may have to set the + QTDIR and QMAKESPECS + variables in your environment: + + QTDIR should point to the + directory above the one that holds the qt include files (ie: + if qt.h is + /usr/local/qt/include/qt.h, QTDIR + should be /usr/local/qt). + + QMAKESPECS should + be set to the name of one of the + qt mkspecs sub-directories (ie: + linux-g++). + + + + On many Linux systems, QTDIR is set + by the login scripts, and QMAKESPECS is not + needed because there is a default link in + mkspecs/. + + Neither QTDIR nor + QMAKESPECS should be needed with + Qt 4, configuration details are entirely determined by + qmake (which is quite often installed as + qmake-qt4). + + Configure options: + + + --without-aspell + will disable the code for phonetic matching of search + terms. + + --with-fam or + --with-inotify will enable the code for + real time indexing. Inotify support is enabled by default on + recent Linux systems. + + --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. + + --enable-xattr will enable + code to fetch data from file extended attributes. This is only + useful is some application stores data in there, and also needs + some simple configuration (see comments in the + fields configuration file). + + --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). + + --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. + + --disable-qtgui Disable the Qt + interface. Will allow building the indexer and the command line + search program in absence of a Qt environment. + + --disable-x11mon Disable + X11 connection monitoring inside recollindex. Together with + --disable-qtgui, this allows building recoll without Qt and + X11. + + 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). + + + + 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 Indexing 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: + + 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. + + + 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, mail 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). + + + + 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 -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. + + + + processbeaglequeue + 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. + + + + beaglequeuedir + 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. + + + + + + + + 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. + + + + 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. + + + + maildefcharset + This can be used to define the default + character set specifically for mail 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 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. + + + + + + + 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 Beagle 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 Beagle 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 depends on average document + size. The default value is 10. + + + + + + + + Miscellaneous parameters: + + + + 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. + + + + + + + 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. + + + + + + + + + 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 mail message filter + currently has such a section (named + [mail]). It allows indexing arbitrary mail + 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 mail header and + use it as a searchable field, with data displayable inside result + lists. (Side note: as the mail 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 + + + + + + + + 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 &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 user preferences dialog. + + If Use desktop preferences to choose document + editor is checked in the &RCL; GUI user preferences, all + mimeview entries will be ignored except the + one labelled application/x-all (which is set to + use xdg-open by default). + + 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. + Please note that these 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: + + + + %DDocument date + %fFile + 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). + + %FOriginal file name. + Same as %f except if a temporary file is used. + + %iInternal 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. + + %MMime + type + + %U, %uUrl. + + + + + 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. + + + + + 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/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