conftest.err
conststrings.c
depcomp
-hcachever.sh
-hcversion.h
+hcache/hcversion.h
install-sh
keymap_alldefs.h
keymap_defs.h
--with-gnutls --with-gss --with-kyotocabinet --with-lmdb --with-qdbm \
--with-sasl --with-tokyocabinet
-SUBDIRS = m4 contrib
+SUBDIRS = m4 contrib hcache
if BUILD_DOC
SUBDIRS += doc
bin_SCRIPTS = $(SMIMEAUX_TARGET)
-if BUILD_HCACHE
-HCVERSION = hcversion.h
-endif
-
DOTLOCK_GROUP='mail'
DOTLOCK_PERMISSION='2755'
distdir = neo$(PACKAGE)-$(VERSION)
-BUILT_SOURCES = keymap_defs.h keymap_alldefs.h patchlist.c git_ver.h conststrings.c hcachever.sh $(HCVERSION)
+BUILT_SOURCES = keymap_defs.h keymap_alldefs.h patchlist.c git_ver.h conststrings.c
bin_PROGRAMS = mutt $(DOTLOCK_TARGET) $(PGPAUX_TARGET)
mutt_SOURCES = addrbook.c alias.c ascii.c attach.c base64.c browser.c buffer.c \
nodist_mutt_SOURCES = $(BUILT_SOURCES)
mutt_LDADD = $(MUTT_LIB_OBJECTS) $(LIBOBJS) $(LIBIMAP) $(MUTTLIBS) \
- $(INTLLIBS) $(LIBICONV) $(GPGME_LIBS)
+ $(INTLLIBS) $(LIBICONV) $(GPGME_LIBS) $(HCACHE_LIBS)
mutt_DEPENDENCIES = $(MUTT_LIB_OBJECTS) $(LIBOBJS) $(LIBIMAPDEPS) \
$(INTLDEPS)
EXTRA_mutt_SOURCES = account.c bcache.c bcache.h browser.h compress.c \
crypt_gpgme.c crypt_mod_pgp_classic.c crypt_mod_pgp_gpgme.c \
crypt_mod_smime_classic.c crypt_mod_smime_gpgme.c dotlock.c \
- gnupgparse.c hcache.c hcache.h mbyte.h md5.c mutt_idna.c mutt_idna.h \
+ gnupgparse.c mbyte.h md5.c mutt_idna.c mutt_idna.h \
mutt_lua.c mutt_sasl.c mutt_notmuch.c mutt_socket.c mutt_ssl.c mutt_ssl_gnutls.c \
mutt_tunnel.c newsrc.c nntp.c pgp.c pgpinvoke.c pgpkey.c pgplib.c \
pgpmicalg.c pgppacket.c pop.c pop_auth.c pop_lib.c remailer.c \
ChangeLog.neomutt ChangeLog.nntp charset.h compress.h config.rpath \
copy.h COPYRIGHT crypt_gpgme.h crypthash.h depcomp dotlock.h extlib.c \
filter.h functions.h gen_defs globals.h group.h hash.h \
- hcache_backend.h hcache_bdb.c hcache_gdbm.c hcache_kc.c hcache_lmdb.c \
- hcache_qdbm.c hcache_tc.c hcachever.sh.in history.h init.h keymap.h \
+ history.h init.h keymap.h \
lib.h LICENSE.md mailbox.h mapping.h mbyte.h md5.h mime.h mime.types \
mutt.h mutt_commands.h mutt_crypt.h mutt_curses.h mutt_idna.h \
mutt_lua.h mutt_menu.h mutt_notmuch.h mutt_options.h mutt_regex.h mutt_sasl.h \
cmp -s git_ver.h.tmp git_ver.h || mv git_ver.h.tmp git_ver.h; \
rm -f git_ver.h.tmp
-hcversion.h: $(srcdir)/mutt.h $(srcdir)/rfc822.h hcachever.sh $(MUTT_MD5)
- ( echo '#include "config.h"'; echo '#include "mutt.h"'; ) \
- | $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) - | sh ./hcachever.sh hcversion.h
-
patchlist.c: $(srcdir)/PATCHES $(srcdir)/patchlist.sh
$(srcdir)/patchlist.sh < $(srcdir)/PATCHES > patchlist.c
AC_CHECK_HEADER(tcbdb.h,
AC_CHECK_LIB(tokyocabinet, tcbdbopen,
[
- MUTTLIBS="$MUTTLIBS -ltokyocabinet"
+ HCACHE_LIBS="$HCACHE_LIBS -ltokyocabinet"
AC_DEFINE(HAVE_TC, 1, [Tokyo Cabinet Support])
- MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS hcache_tc.o"
hcache_db_used="tokyocabinet $hcache_db_used"
+ build_hc_tc="yes"
],[
- CPPFLAGS="$OLDCPPFLAGS"
- LDFLAGS="$OLDLDFLAGS"
AC_MSG_ERROR(Unable to find TokyoCabinet)
]), AC_MSG_ERROR(Unable to find TokyoCabinet))
fi
AC_CHECK_HEADER(kclangc.h,
AC_CHECK_LIB(kyotocabinet, kcdbopen,
[
- MUTTLIBS="$MUTTLIBS -lkyotocabinet"
+ HCACHE_LIBS="$HCACHE_LIBS -lkyotocabinet"
AC_DEFINE(HAVE_KC, 1, [Kyoto Cabinet Support])
- MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS hcache_kc.o"
hcache_db_used="kyotocabinet $hcache_db_used"
+ build_hc_kc="yes"
],[
- CPPFLAGS="$OLDCPPFLAGS"
- LDFLAGS="$OLDLDFLAGS"
AC_MSG_ERROR(Unable to find KyotoCabinet)
]), AC_MSG_ERROR(Unable to find KyotoCabinet))
fi
AC_CHECK_HEADERS(gdbm.h,
AC_CHECK_LIB(gdbm, gdbm_open,
[
- MUTTLIBS="$MUTTLIBS -lgdbm"
- MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS hcache_gdbm.o"
+ HCACHE_LIBS="$HCACHE_LIBS -lgdbm"
AC_DEFINE(HAVE_GDBM, 1, [GDBM Support])
hcache_db_used="gdbm $hcache_db_used"
+ build_hc_gdbm="yes"
],[
- CPPFLAGS="$OLDCPPFLAGS"
- LDFLAGS="$OLDLDFLAGS"
AC_MSG_ERROR(Unable to find GDBM)
]), AC_MSG_ERROR(Unable to find GDBM))
fi
AC_CHECK_HEADERS(villa.h,
AC_CHECK_LIB(qdbm, vlopen,
[
- MUTTLIBS="$MUTTLIBS -lqdbm"
- MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS hcache_qdbm.o"
+ HCACHE_LIBS="$HCACHE_LIBS -lqdbm"
AC_DEFINE(HAVE_QDBM, 1, [QDBM Support])
hcache_db_used="qdbm $hcache_db_used"
+ build_hc_qdbm="yes"
],[
- CPPFLAGS="$OLDCPPFLAGS"
- LDFLAGS="$OLDLDFLAGS"
AC_MSG_ERROR(Unable to find QDBM)
]), AC_MSG_ERROR(Unable to find QDBM))
fi
LDFLAGS="$OLDLDFLAGS -L$BDB_LIB_DIR"
AC_CHECK_LIB($BDB_LIB_NAME, db_env_create,
[
- MUTTLIBS="$MUTTLIBS -l$BDB_LIB_NAME"
- MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS hcache_bdb.o"
+ HCACHE_LIBS="$HCACHE_LIBS -l$BDB_LIB_NAME"
AC_DEFINE(HAVE_BDB, 1, [Berkeley DB Support])
hcache_db_used="bdb $hcache_db_used"
+ build_hc_bdb="yes"
BDB_FOUND=yes
break
],[
AC_CHECK_LIB(lmdb, mdb_env_create,
[
AC_DEFINE(HAVE_LMDB, 1, [LMDB Support])
- MUTTLIBS="$MUTTLIBS -llmdb"
- MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS hcache_lmdb.o"
+ HCACHE_LIBS="$HCACHE_LIBS -llmdb"
hcache_db_used="lmdb $hcache_db_used"
+ build_hc_lmdb="yes"
],[
- CPPFLAGS="$OLDCPPFLAGS"
- LDFLAGS="$OLDLDFLAGS"
AC_MSG_ERROR(Unable to find LMDB)
]), AC_MSG_ERROR(Unable to find LMDB))
fi
AM_CONDITIONAL(BUILD_HCACHE, test -n "$hcache_db_used")
if test -n "$hcache_db_used"; then
AC_DEFINE(USE_HCACHE, 1, [Enable header caching])
- MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS hcache.o"
+ HCACHE_LIBS="-Lhcache -lhcache $HCACHE_LIBS"
need_md5="yes"
else
# For outputting in the summary
hcache_db_used="no"
fi
+
+AM_CONDITIONAL(BUILD_HC_BDB, test "x$build_hc_bdb" = "xyes")
+AM_CONDITIONAL(BUILD_HC_GDBM, test "x$build_hc_gdbm" = "xyes")
+AM_CONDITIONAL(BUILD_HC_KC, test "x$build_hc_kc" = "xyes")
+AM_CONDITIONAL(BUILD_HC_LMDB, test "x$build_hc_lmdb" = "xyes")
+AM_CONDITIONAL(BUILD_HC_QDBM, test "x$build_hc_qdbm" = "xyes")
+AM_CONDITIONAL(BUILD_HC_TC, test "x$build_hc_tc" = "xyes")
dnl -- end cache --
if test "$need_md5" = "yes"; then
AC_SUBST(MUTT_LIB_OBJECTS)
AC_SUBST(LIBIMAP)
AC_SUBST(LIBIMAPDEPS)
+AC_SUBST(HCACHE_LIBS)
dnl -- iconv/gettext --
fi
AC_CONFIG_FILES(Makefile contrib/Makefile doc/Makefile imap/Makefile
- m4/Makefile po/Makefile.in
- hcachever.sh doc/instdoc.sh)
+ m4/Makefile po/Makefile.in hcache/Makefile doc/instdoc.sh)
AC_OUTPUT
AC_MSG_NOTICE([Summary of build options:
CFlags: ${CFLAGS} ${CPPFLAGS}
LDFlags: ${LDFLAGS}
Libs: ${LIBS}
- Mutt libs: ${MUTTLIBS}
+ Mutt libs: ${MUTTLIBS} ${HCACHE_LIBS}
GPGME: $use_gpgme
PGP: $use_pgp
--- /dev/null
+## Process this file with automake to produce Makefile.in
+include $(top_srcdir)/flymake.am
+
+AUTOMAKE_OPTIONS = 1.6 foreign
+
+EXTRA_DIST = bdb.c gdbm.c hcache.c kc.c lmdb.c qdbm.c tc.c hcachever.sh
+
+AM_CPPFLAGS = -I$(top_srcdir)
+
+noinst_LIBRARIES = libhcache.a
+noinst_HEADERS = backend.h hcache.h
+
+libhcache_a_SOURCES =
+
+if BUILD_HCACHE
+HCVERSION = hcversion.h
+CLEANFILES = $(HCVERSION)
+libhcache_a_SOURCES += hcache.c
+endif
+if BUILD_HC_BDB
+libhcache_a_SOURCES += bdb.c
+endif
+if BUILD_HC_GDBM
+libhcache_a_SOURCES += gdbm.c
+endif
+if BUILD_HC_KC
+libhcache_a_SOURCES += kc.c
+endif
+if BUILD_HC_LMDB
+libhcache_a_SOURCES += lmdb.c
+endif
+if BUILD_HC_QDBM
+libhcache_a_SOURCES += qdbm.c
+endif
+if BUILD_HC_TC
+libhcache_a_SOURCES += tc.c
+endif
+
+BUILT_SOURCES = $(HCVERSION)
+
+../$(MUTT_MD5):
+ +$(MAKE) -C .. $(MUTT_MD5)
+
+$(top_srcdir)/keymap_defs.h:
+ +$(MAKE) -C $(top_srcdir) keymap_defs.h
+
+hcversion.h: $(top_srcdir)/mutt.h $(top_srcdir)/rfc822.h $(srcdir)/hcachever.sh ../$(MUTT_MD5)
+ ( echo '#include "config.h"'; echo '#include "mutt.h"'; ) \
+ | $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) - | sh $(srcdir)/hcachever.sh hcversion.h
+
--- /dev/null
+# Header Cache
+
+These files make up NeoMutt's header cache.
+There are six different databases to choose from:
+- BerkeleyDB
+- GDBM
+- KyotoCabinet
+- LMDB
+- QDBM
+- TokyoCabinet
+
+Each backend implements the interface which is defined in `hcache.h`
+
#include <errno.h>
#include <fcntl.h>
#include "mutt.h"
-#include "hcache_backend.h"
+#include "backend.h"
#include "mx.h"
typedef struct
#include "config.h"
#include <gdbm.h>
#include "mutt.h"
-#include "hcache_backend.h"
+#include "backend.h"
static void *hcache_gdbm_open(const char *path)
{
#include <errno.h>
#include <sys/time.h>
#include "hcache.h"
-#include "hcache_backend.h"
+#include "backend.h"
#include "hcversion.h"
#include "md5.h"
done
echo " */" >> $TMPD
-MD5TEXT=`echo "$TEXT" | ./mutt_md5`
+MD5TEXT=`echo "$TEXT" | ../mutt_md5`
echo "#define HCACHEVER 0x"`echo $MD5TEXT | cut -c-8` >> $TMPD
# TODO: validate we have all structs
#include "config.h"
#include <kclangc.h>
#include "mutt.h"
-#include "hcache_backend.h"
+#include "backend.h"
static void *hcache_kyotocabinet_open(const char *path)
{
#include "config.h"
#include <lmdb.h>
-#include "hcache_backend.h"
+#include "backend.h"
#include "lib.h"
/* The maximum size of the database file (2GiB).
#include <depot.h>
#include <villa.h>
#include "mutt.h"
-#include "hcache_backend.h"
+#include "backend.h"
static void *hcache_qdbm_open(const char *path)
{
#include "config.h"
#include <tcbdb.h>
#include "mutt.h"
-#include "hcache_backend.h"
+#include "backend.h"
static void *hcache_tokyocabinet_open(const char *path)
{
#include "mx.h"
#include "sort.h"
#ifdef USE_HCACHE
-#include "hcache.h"
+#include "hcache/hcache.h"
#endif
#ifdef USE_SSL
#include "mutt_ssl.h"
#include "mutt_curses.h"
#include "mutt_socket.h"
#ifdef USE_HCACHE
-#include "hcache.h"
+#include "hcache/hcache.h"
#endif
/* -- symbols -- */
#include "bcache.h"
#include "mx.h"
#ifdef USE_HCACHE
-#include "hcache.h"
+#include "hcache/hcache.h"
#endif
static void imap_update_context(IMAP_DATA *idata, int oldmsgcount)
#include "mx.h"
#include "url.h"
#ifdef USE_HCACHE
-#include "hcache.h"
+#include "hcache/hcache.h"
#endif
/* -- public functions -- */
#include "imap/imap.h"
#endif
#ifdef USE_HCACHE
-#include "hcache.h"
+#include "hcache/hcache.h"
#endif
#ifdef USE_NNTP
#include "nntp.h"
#endif
-
#ifdef HAVE_STRINGPREP_H
#include <stringprep.h>
#elif defined(HAVE_IDN_STRINGPREP_H)
#include "mutt_notmuch.h"
#endif
#ifdef USE_HCACHE
-#include "hcache.h"
+#include "hcache/hcache.h"
#endif
#define INS_SORT_THRESHOLD 6
void maildir_flags(char *dest, size_t destlen, HEADER *hdr);
#ifdef USE_HCACHE
-#include "hcache.h"
+#include "hcache/hcache.h"
int mh_sync_mailbox_message(CONTEXT *ctx, int msgno, header_cache_t *hc);
#else
int mh_sync_mailbox_message(CONTEXT *ctx, int msgno);
#include "rfc822.h"
#include "sort.h"
#ifdef USE_HCACHE
-#include "hcache.h"
+#include "hcache/hcache.h"
#endif
/* Find NNTP_DATA for given newsgroup or add it */
#include "mutt_ssl.h"
#endif
#ifdef USE_HCACHE
-#include "hcache.h"
+#include "hcache/hcache.h"
#endif
#ifdef USE_SASL
#include <sasl/sasl.h>
#include "mailbox.h"
#include "mutt_socket.h"
#ifdef USE_HCACHE
-#include "hcache.h"
+#include "hcache/hcache.h"
#endif
#define NNTP_PORT 119
group.c
handler.c
hash.c
-hcache.c
-hcache_bdb.c
-hcache_gdbm.c
-hcache_kc.c
-hcache_lmdb.c
-hcache_qdbm.c
-hcache_tc.c
+hcache/hcache.c
+hcache/bdb.c
+hcache/gdbm.c
+hcache/kc.c
+hcache/lmdb.c
+hcache/qdbm.c
+hcache/tc.c
hdrline.c
headers.c
help.c
#include "mutt_curses.h"
#include "mx.h"
#ifdef USE_HCACHE
-#include "hcache.h"
+#include "hcache/hcache.h"
#endif
#ifdef USE_HCACHE
/* #include "protos.h" */
const char *mutt_make_version(void);
void mutt_print_patchlist(void);
-/* #include "hcache.h" */
+/* #include "hcache/hcache.h" */
const char *mutt_hcache_backend_list(void);
const int SCREEN_WIDTH = 80;