slight config cleanup

This commit is contained in:
dockes 2006-01-19 17:11:46 +00:00
parent 9f4b399f92
commit e93dd142d6
11 changed files with 122 additions and 65 deletions

View File

@ -1,14 +1,21 @@
# @(#$Id: Makefile,v 1.26 2006-01-19 12:01:42 dockes Exp $ (C) 2005 J.F.Dockes
# @(#$Id: Makefile.in,v 1.1 2006-01-19 17:11:45 dockes Exp $ (C) 2005 J.F.Dockes
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
datadir = @datadir@
mandir = @mandir@
all: mk/sysconf common/rclversion.h
cd lib; ${MAKE}
cd bincimapmime; ${MAKE}
cd index; ${MAKE} recollindex
cd qtgui; PATH=${PATH}:${QTDIR}/bin; export PATH; qmake recoll.pro; \
cat ../mk/sysconf Makefile | ${MAKE} -f - depth=..
cat ../mk/sysconf Makefile | ${MAKE} -f - depth=..
mk/sysconf:
./configure
@echo "You need to run configure first" ; exit 1
common/rclversion.h: VERSION
echo 'static const char *rclversion = "'`cat VERSION`'";' \
@ -22,7 +29,8 @@ static:
cd qtgui; PATH=${PATH}:${QTDIR}/bin; export PATH; qmake recoll.pro; \
rm -f recoll;
cat ../mk/sysconf Makefile | \
${MAKE} -f - BSTATIC=-Wl,-Bstatic BDYNAMIC=-Wl,-Bdynamic depth=..
${MAKE} -f - \
BSTATIC=-Wl,-Bstatic BDYNAMIC=-Wl,-Bdynamic depth=..
clean:
cd common; ${MAKE} clean
@ -39,9 +47,14 @@ distclean: clean
rm -f mk/sysconf mk/localdefs sampleconf/recoll.conf \
recollinstall \
doc/user/*.html* doc/user/*.txt doc/user/HTML.manifest
# 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
bindir=${bindir} datadir=${datadir} ./recollinstall ${prefix}
DESTDIR=${DESTDIR} bindir=${bindir} datadir=${datadir} \
mandir=${mandir} \
./recollinstall ${prefix}
.PHONY: all static clean distclean install

View File

@ -1,5 +1,5 @@
#ifndef lint
static char rcsid[] = "@(#$Id: rclconfig.cpp,v 1.18 2006-01-10 12:58:39 dockes Exp $ (C) 2004 J.F.Dockes";
static char rcsid[] = "@(#$Id: rclconfig.cpp,v 1.19 2006-01-19 17:11:46 dockes Exp $ (C) 2004 J.F.Dockes";
#endif
#include <unistd.h>
#include <stdio.h>
@ -23,13 +23,11 @@ using namespace std;
static const char *configfiles[] = {"recoll.conf", "mimemap", "mimeconf"};
static int ncffiles = sizeof(configfiles) / sizeof(char *);
static bool createConfig(string &reason)
static bool createConfig(const string &datadir, string &reason)
{
const char *cprefix = getenv("RECOLL_PREFIX");
if (cprefix == 0)
cprefix = RECOLL_PREFIX;
string prefix = path_cat(cprefix, "share/recoll/examples");
// Samples directory
string exdir = path_cat(datadir, "examples");
// User's
string recolldir = path_tildexpand("~/.recoll");
if (mkdir(recolldir.c_str(), 0755) < 0) {
reason += string("mkdir(") + recolldir + ") failed: " +
@ -37,7 +35,7 @@ static bool createConfig(string &reason)
return false;
}
for (int i = 0; i < ncffiles; i++) {
string src = path_cat((const string&)prefix, string(configfiles[i]));
string src = path_cat((const string&)exdir, string(configfiles[i]));
string dst = path_cat((const string&)recolldir, string(configfiles[i]));
if (!copyfile(src.c_str(), dst.c_str(), reason)) {
LOGERR(("Copyfile failed: %s\n", reason.c_str()));
@ -49,8 +47,8 @@ static bool createConfig(string &reason)
RclConfig::RclConfig()
: m_ok(false), conf(0), mimemap(0), mimeconf(0), stopsuffixes(0)
: m_ok(false), m_conf(0), mimemap(0), mimeconf(0), mimemap_local(0),
stopsuffixes(0)
{
static int loginit = 0;
if (!loginit) {
@ -59,35 +57,45 @@ RclConfig::RclConfig()
loginit = 1;
}
// 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;
}
const char *cp = getenv("RECOLL_CONFDIR");
if (cp) {
confdir = cp;
m_confdir = cp;
} else {
confdir = path_home();
confdir += ".recoll/";
m_confdir = path_home();
m_confdir += ".recoll/";
}
string cfilename = path_cat(confdir, "recoll.conf");
string cfilename = path_cat(m_confdir, "recoll.conf");
if (access(confdir.c_str(), 0) != 0 || access(cfilename.c_str(), 0) != 0) {
if (!createConfig(reason))
if (access(m_confdir.c_str(), 0) != 0 ||
access(cfilename.c_str(), 0) != 0) {
if (!createConfig(m_datadir, reason))
return;
}
// Open readonly here so as not to casually create a config file
conf = new ConfTree(cfilename.c_str(), true);
if (conf == 0 ||
(conf->getStatus() != ConfSimple::STATUS_RO &&
conf->getStatus() != ConfSimple::STATUS_RW)) {
m_conf = new ConfTree(cfilename.c_str(), true);
if (m_conf == 0 ||
(m_conf->getStatus() != ConfSimple::STATUS_RO &&
m_conf->getStatus() != ConfSimple::STATUS_RW)) {
reason = string("No main configuration file: ") + cfilename +
" does not exist or cannot be parsed";
return;
}
string mimemapfile;
if (!conf->get("mimemapfile", mimemapfile, "")) {
if (!m_conf->get("mimemapfile", mimemapfile, "")) {
mimemapfile = "mimemap";
}
string mpath = path_cat(confdir, mimemapfile);
string mpath = path_cat(m_confdir, mimemapfile);
mimemap = new ConfTree(mpath.c_str(), true);
if (mimemap == 0 ||
(mimemap->getStatus() != ConfSimple::STATUS_RO &&
@ -99,10 +107,10 @@ RclConfig::RclConfig()
// mimemap->list();
string mimeconffile;
if (!conf->get("mimeconffile", mimeconffile, "")) {
if (!m_conf->get("mimeconffile", mimeconffile, "")) {
mimeconffile = "mimeconf";
}
mpath = path_cat(confdir, mimeconffile);
mpath = path_cat(m_confdir, mimeconffile);
mimeconf = new ConfTree(mpath.c_str(), true);
if (mimeconf == 0 ||
(mimeconf->getStatus() != ConfSimple::STATUS_RO &&
@ -210,10 +218,9 @@ string RclConfig::getMimeIconName(const string &mtype)
return hs;
}
// Look up an executable filter.
// We look in RECOLL_FILTERSDIR, filtersdir param, then
// let the system use the PATH
string find_filter(RclConfig *conf, const string &icmd)
// 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] == '/')
@ -222,19 +229,33 @@ string find_filter(RclConfig *conf, const string &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;
} else if (conf->getConfParam(string("filtersdir"), 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;
} else {
cmd = path_cat(conf->getConfDir(), 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;
}

View File

@ -1,6 +1,6 @@
#ifndef _RCLCONFIG_H_INCLUDED_
#define _RCLCONFIG_H_INCLUDED_
/* @(#$Id: rclconfig.h,v 1.11 2006-01-10 11:07:21 dockes Exp $ (C) 2004 J.F.Dockes */
/* @(#$Id: rclconfig.h,v 1.12 2006-01-19 17:11:46 dockes Exp $ (C) 2004 J.F.Dockes */
#include <list>
@ -11,19 +11,25 @@ class RclConfig {
public:
RclConfig();
~RclConfig() {delete conf;delete mimemap;delete mimeconf;}
~RclConfig() {
delete m_conf;
delete mimemap;
delete mimeconf;
delete mimemap_local;
delete stopsuffixes;
}
bool ok() {return m_ok;}
const string &getReason() {return reason;}
string getConfDir() {return confdir;}
string getConfDir() {return m_confdir;}
//ConfTree *getConfig() {return m_ok ? conf : 0;}
/// Get generic configuration parameter according to current keydir
bool getConfParam(const string &name, string &value)
{
if (conf == 0)
if (m_conf == 0)
return false;
return conf->get(name, value, keydir);
return m_conf->get(name, value, keydir);
}
/*
@ -36,9 +42,9 @@ class RclConfig {
void setKeyDir(const string &dir)
{
keydir = dir;
conf->get("defaultcharset", defcharset, keydir);
m_conf->get("defaultcharset", defcharset, keydir);
string str;
conf->get("guesscharset", str, keydir);
m_conf->get("guesscharset", str, keydir);
guesscharset = stringToBool(str);
}
@ -65,11 +71,14 @@ class RclConfig {
bool getGuessCharset() {return guesscharset;}
std::list<string> getAllMimeTypes();
std::string findFilter(const std::string& cmd);
private:
int m_ok;
string reason; // Explanation for bad state
string confdir; // Directory where the files are stored
ConfTree *conf; // Parsed main configuration
string m_confdir; // Directory where the files are stored
string m_datadir; // Example: /usr/local/share/recoll
ConfTree *m_conf; // Parsed main configuration
string keydir; // Current directory used for parameter fetches.
ConfTree *mimemap; // These are independant of current keydir.
@ -82,6 +91,5 @@ class RclConfig {
bool guesscharset; // They are fetched initially or on setKeydir()
};
std::string find_filter(RclConfig *conf, const string& cmd);
#endif /* _RCLCONFIG_H_INCLUDED_ */

3
src/configure vendored
View File

@ -2296,6 +2296,8 @@ ac_config_files="$ac_config_files recollinstall"
ac_config_files="$ac_config_files sampleconf/recoll.conf"
ac_config_files="$ac_config_files Makefile"
for d in bincimapmime index lib query
do
@ -2802,6 +2804,7 @@ do
"mk/localdefs" ) CONFIG_FILES="$CONFIG_FILES mk/localdefs" ;;
"recollinstall" ) CONFIG_FILES="$CONFIG_FILES recollinstall" ;;
"sampleconf/recoll.conf" ) CONFIG_FILES="$CONFIG_FILES sampleconf/recoll.conf" ;;
"Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
*) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
{ (exit 1); exit 1; }; };;

View File

@ -116,6 +116,7 @@ AC_SUBST(INCICONV)
AC_CONFIG_FILES(mk/localdefs)
AC_CONFIG_FILES(recollinstall)
AC_CONFIG_FILES(sampleconf/recoll.conf)
AC_CONFIG_FILES(Makefile)
for d in bincimapmime index lib query
do

View File

@ -1,5 +1,5 @@
#ifndef lint
static char rcsid[] = "@(#$Id: internfile.cpp,v 1.13 2005-12-08 08:44:14 dockes Exp $ (C) 2004 J.F.Dockes";
static char rcsid[] = "@(#$Id: internfile.cpp,v 1.14 2006-01-19 17:11:46 dockes Exp $ (C) 2004 J.F.Dockes";
#endif
#ifndef TEST_INTERNFILE
@ -33,7 +33,7 @@ static bool uncompressfile(RclConfig *conf, const string& ifn,
LOGERR(("uncompressfile: can't clear temp dir %s\n", tdir.c_str()));
return false;
}
string cmd = find_filter(conf, cmdv.front());
string cmd = conf->findFilter(cmdv.front());
// Substitute file name and temp dir in command elements
list<string>::const_iterator it = cmdv.begin();

View File

@ -1,5 +1,5 @@
#ifndef lint
static char rcsid[] = "@(#$Id: mh_exec.cpp,v 1.3 2005-11-24 07:16:15 dockes Exp $ (C) 2005 J.F.Dockes";
static char rcsid[] = "@(#$Id: mh_exec.cpp,v 1.4 2006-01-19 17:11:46 dockes Exp $ (C) 2005 J.F.Dockes";
#endif
#include "execmd.h"
@ -24,7 +24,7 @@ MimeHandlerExec::mkDoc(RclConfig *conf, const string &fn,
return MimeHandler::MHError;
}
// Command name
string cmd = find_filter(conf, params.front());
string cmd = conf->findFilter(params.front());
// Build parameter list: delete cmd name and add the file name
list<string>::iterator it = params.begin();

View File

@ -4,9 +4,12 @@ XAPIANCXXFLAGS=@XAPIANCXXFLAGS@
LIBICONV=@LIBICONV@
INCICONV=@INCICONV@
RECOLL_PREFIX=@prefix@
prefix = @prefix@
datadir = @datadir@
RECOLL_DATADIR = ${datadir}/recoll
LOCALCXXFLAGS = $(INCICONV) $(XAPIANCXXFLAGS) \
-DRECOLL_PREFIX=\"$(RECOLL_PREFIX)\"
-DRECOLL_DATADIR=\"$(RECOLL_DATADIR)\"
CXXFLAGS = -g

View File

@ -1,5 +1,5 @@
#ifndef lint
static char rcsid[] = "@(#$Id: main.cpp,v 1.28 2006-01-04 11:33:44 dockes Exp $ (C) 2005 J.F.Dockes";
static char rcsid[] = "@(#$Id: main.cpp,v 1.29 2006-01-19 17:11:46 dockes Exp $ (C) 2005 J.F.Dockes";
#endif
#include <unistd.h>
@ -30,7 +30,7 @@ using Rcl::AdvSearchData;
#include "recollmain.h"
static const char *recollprefix = RECOLL_PREFIX;
static const char *recoll_datadir = RECOLL_DATADIR;
RclConfig *rclconfig;
Rcl::Db *rcldb;
@ -137,8 +137,7 @@ int main( int argc, char ** argv )
a.installTranslator( &qt );
// Translations for Recoll
recollsharedir = path_cat(recollprefix, "share/recoll");
string translatdir = path_cat(recollsharedir, "translations");
string translatdir = path_cat(recoll_datadir, "translations");
QTranslator translator( 0 );
// QTextCodec::locale() returns $LANG
translator.load( QString("recoll_") + QTextCodec::locale(),
@ -175,7 +174,7 @@ int main( int argc, char ** argv )
rclconfig->getConfParam("iconsdir", iconsdir);
if (iconsdir.empty()) {
iconsdir = path_cat(recollsharedir, "images");
iconsdir = path_cat(recoll_datadir, "images");
} else {
iconsdir = path_tildexpand(iconsdir);
}
@ -232,7 +231,7 @@ bool startHelpBrowser(const string &iurl)
{
string url;
if (iurl.empty()) {
url = path_cat(recollsharedir, "doc");
url = path_cat(recoll_datadir, "doc");
url = path_cat(url, "usermanual.html");
url = string("file://") + url;
} else

View File

@ -33,7 +33,7 @@ unix {
UI_DIR = .ui
MOC_DIR = .moc
OBJECTS_DIR = .obj
DEFINES += RECOLL_PREFIX=\"$(RECOLL_PREFIX)\"
DEFINES += RECOLL_DATADIR=\"$(RECOLL_DATADIR)\"
LIBS += ../lib/librcl.a ../bincimapmime/libmime.a \
$(BSTATIC) $(LIBXAPIAN) $(LIBICONV) $(BDYNAMIC) \
-lz

View File

@ -19,7 +19,7 @@ else
usage
fi
echo "Installing to $PREFIX"
test -n "$bindir" || bindir=${PREFIX}/bin
test -n "$datadir" || datadir=${PREFIX}/share
if test -z "$mandir" ; then
@ -30,7 +30,16 @@ if test -z "$mandir" ; then
fi
fi
INSTALL=${INSTALL:="install -c"}
if test -n "$DESTDIR" ; then
PREFIX=$DESTDIR/$PREFIX
bindir=$DESTDIR/$bindir
datadir=$DESTDIR/$datadir
mandir=$DESTDIR/$mandir
fi
echo "Installing to $PREFIX"
INSTALL=${INSTALL:="install -c -v"}
STRIP=${STRIP:=strip}
test -x qtgui/recoll || fatal "qtgui/recoll does not exist." \