1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
|
dnl Functions to check what database to use for libsasldb
dnl Berkeley DB specific checks first..
dnl Figure out what database type we're using
AC_DEFUN([SASL_DB_CHECK], [
cmu_save_LIBS="$LIBS"
AC_ARG_WITH(dblib,
[AC_HELP_STRING([--with-dblib={berkeley|gdbm|lmdb|ndbm|none|auto_detect}],
[set the DB library to use [[berkeley]]])],
dblib=$withval,
dblib=auto_detect)
CYRUS_BERKELEY_DB_OPTS()
SASL_DB_LIB=""
case "$dblib" in
dnl this is unbelievably painful due to confusion over what db-3 should be
dnl named. arg.
berkeley)
CYRUS_BERKELEY_DB_CHK()
CPPFLAGS="${CPPFLAGS} ${BDB_INCADD}"
SASL_DB_INC=$BDB_INCADD
SASL_DB_LIB="${BDB_LIBADD}"
;;
gdbm)
AC_ARG_WITH(gdbm,[ --with-gdbm=PATH use gdbm from PATH],
with_gdbm="${withval}")
case "$with_gdbm" in
""|yes)
AC_CHECK_HEADER(gdbm.h, [
AC_CHECK_LIB(gdbm, gdbm_open, SASL_DB_LIB="-lgdbm",
dblib="no")],
dblib="no")
;;
*)
if test -d $with_gdbm; then
CPPFLAGS="${CPPFLAGS} -I${with_gdbm}/include"
LDFLAGS="${LDFLAGS} -L${with_gdbm}/lib"
SASL_DB_LIB="-lgdbm"
else
with_gdbm="no"
fi
esac
;;
lmdb)
AC_CHECK_HEADER(lmdb.h, [
AC_CHECK_LIB(lmdb, mdb_env_create, SASL_DB_LIB="-llmdb"; enable_keep_db_open=yes, dblib="no")],
dblib="no")
;;
ndbm)
dnl We want to attempt to use -lndbm if we can, just in case
dnl there's some version of it installed and overriding libc
AC_CHECK_HEADER(ndbm.h, [
AC_CHECK_LIB(ndbm, dbm_open, SASL_DB_LIB="-lndbm", [
AC_CHECK_FUNC(dbm_open,,dblib="no")])],
dblib="no")
;;
auto_detect)
dnl How about berkeley db?
CYRUS_BERKELEY_DB_CHK()
if test "$dblib" = no; then
dnl How about OpenLDAP's lmdb?
AC_CHECK_HEADER(lmdb.h, [
AC_CHECK_LIB(lmdb, mdb_env_create, SASL_DB_LIB="-llmdb"; enable_keep_db_open=yes, dblib="no")],
dblib="no")
fi
if test "$dblib" = no; then
dnl How about ndbm?
AC_CHECK_HEADER(ndbm.h, [
AC_CHECK_LIB(ndbm, dbm_open,
dblib="ndbm"; SASL_DB_LIB="-lndbm",
dblib="weird")],
dblib="no")
if test "$dblib" = "weird"; then
dnl Is ndbm in the standard library?
AC_CHECK_FUNC(dbm_open, dblib="ndbm", dblib="no")
fi
if test "$dblib" = no; then
dnl Can we use gdbm?
AC_CHECK_HEADER(gdbm.h, [
AC_CHECK_LIB(gdbm, gdbm_open, dblib="gdbm";
SASL_DB_LIB="-lgdbm", dblib="no")],
dblib="no")
fi
else
dnl we took Berkeley
CPPFLAGS="${CPPFLAGS} ${BDB_INCADD}"
SASL_DB_INC=$BDB_INCADD
SASL_DB_LIB="${BDB_LIBADD}"
fi
;;
none)
;;
no)
;;
*)
AC_MSG_WARN([Bad DB library implementation specified;])
AC_ERROR([Use either \"berkeley\", \"gdbm\", \"lmdb\", \"ndbm\" or \"none\"])
dblib=no
;;
esac
LIBS="$cmu_save_LIBS"
AC_MSG_CHECKING(DB library to use)
AC_MSG_RESULT($dblib)
SASL_DB_BACKEND="db_${dblib}.lo"
SASL_DB_BACKEND_STATIC="db_${dblib}.o allockey.o"
SASL_DB_BACKEND_STATIC_SRCS="\$(top_srcdir)/sasldb/db_${dblib}.c \$(top_srcdir)/sasldb/allockey.c"
SASL_DB_UTILS="saslpasswd2\$(EXEEXT) sasldblistusers2\$(EXEEXT)"
SASL_DB_MANS="saslpasswd2.8 sasldblistusers2.8"
case "$dblib" in
gdbm)
SASL_MECHS="$SASL_MECHS libsasldb.la"
AC_DEFINE(SASL_GDBM,[],[Use GDBM for SASLdb])
;;
lmdb)
SASL_MECHS="$SASL_MECHS libsasldb.la"
AC_DEFINE(SASL_LMDB,[],[Use LMDB for SASLdb])
;;
ndbm)
SASL_MECHS="$SASL_MECHS libsasldb.la"
AC_DEFINE(SASL_NDBM,[],[Use NDBM for SASLdb])
;;
berkeley)
SASL_MECHS="$SASL_MECHS libsasldb.la"
AC_DEFINE(SASL_BERKELEYDB,[],[Use BerkeleyDB for SASLdb])
;;
*)
AC_MSG_WARN([Disabling SASL authentication database support])
dnl note that we do not add libsasldb.la to SASL_MECHS, since it
dnl will just fail to load anyway.
SASL_DB_BACKEND="db_none.lo"
SASL_DB_BACKEND_STATIC="db_none.o"
SASL_DB_BACKEND_STATIC_SRCS="\$(top_srcdir)/sasldb/db_none.c"
SASL_DB_UTILS=""
SASL_DB_MANS=""
SASL_DB_LIB=""
;;
esac
if test "$enable_static" = yes; then
if test "$dblib" != "none"; then
SASL_STATIC_SRCS="$SASL_STATIC_SRCS \$(top_srcdir)/plugins/sasldb.c $SASL_DB_BACKEND_STATIC_SRCS"
SASL_STATIC_OBJS="$SASL_STATIC_OBJS sasldb.o $SASL_DB_BACKEND_STATIC"
AC_DEFINE(STATIC_SASLDB,[],[Link SASLdb Staticly])
else
SASL_STATIC_OBJS="$SASL_STATIC_OBJS $SASL_DB_BACKEND_STATIC"
SASL_STATIC_SRCS="$SASL_STATIC_SRCS $SASL_DB_BACKEND_STATIC_SRCS"
fi
fi
AC_SUBST(SASL_DB_UTILS)
AC_SUBST(SASL_DB_MANS)
AC_SUBST(SASL_DB_BACKEND)
AC_SUBST(SASL_DB_BACKEND_STATIC)
AC_SUBST(SASL_DB_INC)
AC_SUBST(SASL_DB_LIB)
])
dnl Figure out what database path we're using
AC_DEFUN([SASL_DB_PATH_CHECK], [
AC_ARG_WITH(dbpath, [ --with-dbpath=PATH set the DB path to use [/etc/sasldb2] ],
dbpath=$withval,
dbpath=/etc/sasldb2)
AC_MSG_CHECKING(DB path to use)
AC_MSG_RESULT($dbpath)
AC_DEFINE_UNQUOTED(SASL_DB_PATH, "$dbpath", [Path to default SASLdb database])])
|