mirror of
https://github.com/donl/rmilter.git
synced 2026-06-30 06:12:17 -06:00
836 lines
19 KiB
Bash
Executable file
836 lines
19 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
GCC="gcc"
|
|
MAKE=""
|
|
LEX=""
|
|
YACC=""
|
|
OS=""
|
|
|
|
LOCALBASE=/usr/local
|
|
PREFIX=$LOCALBASE
|
|
|
|
DCC_VER=1.2.74
|
|
COMPAT_DIR="./compat"
|
|
|
|
YACC_SRC="cfg_file.y"
|
|
LEX_SRC="cfg_file.l"
|
|
YACC_OUTPUT="cfg_yacc.c"
|
|
LEX_OUTPUT="cfg_lex.c"
|
|
|
|
SOURCES="upstream.c regexp.c rmilter.c libclamc.c cfg_file.c ratelimit.c memcached.c beanstalk.c main.c radix.c awl.c libspamd.c greylist.c ${LEX_OUTPUT} ${YACC_OUTPUT}"
|
|
|
|
CFLAGS="$CFLAGS -Wall -Wpointer-arith"
|
|
CFLAGS="$CFLAGS -ggdb -I${LOCALBASE}/include"
|
|
CFLAGS="$CFLAGS -DHASH_COMPAT"
|
|
LDFLAGS="$LDFLAGS -L${LOCALBASE}/lib"
|
|
PTHREAD_CFLAGS="-D_THREAD_SAFE"
|
|
OPT_FLAGS="-O -pipe -fno-omit-frame-pointer"
|
|
DEPS="awl.h cfg_file.h libclamc.h libspamd.h memcached.h radix.h ratelimit.h regexp.h \
|
|
rmilter.h spf.h upstream.h greylist.h ${LEX_OUTPUT} ${YACC_OUTPUT} \
|
|
uthash/uthash.h"
|
|
EXEC=rmilter
|
|
USER=postfix
|
|
GROUP=postfix
|
|
SENDMAIL=no
|
|
INSTALL="/usr/bin/install -v"
|
|
MKDIR="/usr/bin/install -v -d"
|
|
MANPATH="${PREFIX}/share/man"
|
|
CACHE=config.cache
|
|
|
|
MAKEFILE="Makefile"
|
|
MAKEFILE_IN="Makefile.in"
|
|
|
|
TARGETS="${EXEC}"
|
|
|
|
check_cache()
|
|
{
|
|
type=$1
|
|
name=$2
|
|
|
|
if [ -f $CACHE ] ; then
|
|
line=`fgrep "$type:$name" $CACHE 2>/dev/null`
|
|
if [ $? -eq 0 ] ; then
|
|
result=`echo $line | cut -d ':' -f 3`
|
|
CACHED=`echo $line | cut -d ':' -f 4-`
|
|
if [ "F$result" = "Fyes" ] ; then
|
|
return 0
|
|
elif [ "F$result" = "Fno" ] ; then
|
|
return 1
|
|
else
|
|
return 2
|
|
fi
|
|
else
|
|
return 3
|
|
fi
|
|
else
|
|
return 3
|
|
fi
|
|
}
|
|
|
|
write_cache()
|
|
{
|
|
type=$1
|
|
name=$2
|
|
result=$3
|
|
value=$4
|
|
|
|
echo "$type:$name:$result:$value" >> $CACHE
|
|
}
|
|
|
|
cleanup()
|
|
{
|
|
rm -f autotest.c
|
|
rm -f autotest
|
|
INCLUDE=""
|
|
}
|
|
|
|
test_binary()
|
|
{
|
|
path="$PATH:$PREFIX/bin:$LOCALBASE/bin"
|
|
|
|
while [ $# -ne 0 ] ; do
|
|
_binary=$1
|
|
_tmp_bin=`PATH="$PATH:$PREFIX/bin:$LOCALBASE/bin" which ${_binary} 2>/dev/null`
|
|
if [ $? -eq 0 ] ; then
|
|
BIN=$_binary
|
|
return 0
|
|
fi
|
|
shift
|
|
done
|
|
|
|
return 1
|
|
}
|
|
|
|
check_compiler()
|
|
{
|
|
if [ "F${CC}" != "F" ] ; then
|
|
GCC=${CC}
|
|
test_binary ${CC}
|
|
if [ $? -eq 0 ] ; then
|
|
GCC=$BIN
|
|
echo "found -> $GCC"
|
|
write_cache "compiler" "${GCC}" "yes" "$GCC"
|
|
return 0
|
|
else
|
|
echo "not found"
|
|
exit 1
|
|
fi
|
|
fi
|
|
echo -n "Testing for ${GCC}: "
|
|
check_cache "compiler" "${GCC}"
|
|
if [ $? -eq 0 ] ; then
|
|
GCC=$CACHED
|
|
echo "found(cached) -> $GCC"
|
|
return 0
|
|
fi
|
|
|
|
test_binary "gcc" "cc" "pcc" "clang"
|
|
if [ $? -eq 0 ] ; then
|
|
GCC=$BIN
|
|
echo "found -> $GCC"
|
|
write_cache "compiler" "${GCC}" "yes" "$GCC"
|
|
return 0
|
|
else
|
|
echo "not found"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
check_make()
|
|
{
|
|
echo -n "Testing for make: "
|
|
check_cache "make" "make"
|
|
if [ $? -eq 0 ] ; then
|
|
MAKE=$CACHED
|
|
echo "found(cached) -> $MAKE"
|
|
return 0
|
|
fi
|
|
|
|
test_binary "make" "pmake"
|
|
if [ $? -eq 0 ] ; then
|
|
MAKE=$BIN
|
|
echo "found -> $MAKE"
|
|
write_cache "make" "make" "yes" "$MAKE"
|
|
return 0
|
|
else
|
|
echo "not found"
|
|
exit 1
|
|
fi
|
|
|
|
}
|
|
|
|
check_lex()
|
|
{
|
|
echo -n "Testing for lex: "
|
|
check_cache "binary" "lex"
|
|
if [ $? -eq 0 ] ; then
|
|
LEX=$CACHED
|
|
echo "found(cached) -> $LEX"
|
|
return 0
|
|
fi
|
|
|
|
test_binary "lex" "flex"
|
|
if [ $? -eq 0 ] ; then
|
|
LEX=$BIN
|
|
echo "found -> $LEX"
|
|
write_cache "binary" "lex" "yes" "$LEX"
|
|
return 0
|
|
else
|
|
echo "not found"
|
|
exit 1
|
|
fi
|
|
|
|
}
|
|
|
|
check_yacc()
|
|
{
|
|
echo -n "Testing for yacc: "
|
|
check_cache "binary" "yacc"
|
|
if [ $? -eq 0 ] ; then
|
|
YACC=$CACHED
|
|
echo "found(cached) -> $YACC"
|
|
return 0
|
|
fi
|
|
|
|
echo -n "Testing for yacc: "
|
|
test_binary "yacc" "byacc"
|
|
if [ $? -eq 0 ] ; then
|
|
YACC=$BIN
|
|
echo "found -> $YACC"
|
|
write_cache "binary" "yacc" "yes" "$YACC"
|
|
return 0
|
|
else
|
|
echo "not found"
|
|
exit 1
|
|
fi
|
|
|
|
}
|
|
|
|
check_util()
|
|
{
|
|
echo -n "Testing for $1: "
|
|
check_cache "binary" "$1"
|
|
if [ $? -eq 0 ] ; then
|
|
echo "found(cached) -> $CACHED"
|
|
return 0
|
|
fi
|
|
test_binary "$1"
|
|
if [ $? -eq 0 ] ; then
|
|
UTIL=$BIN
|
|
echo "found -> $UTIL"
|
|
write_cache "binary" "$1" "yes" "$UTIL"
|
|
return 0
|
|
else
|
|
echo "not found"
|
|
exit 1
|
|
fi
|
|
|
|
}
|
|
|
|
check_function()
|
|
{
|
|
FUNCTION=$1
|
|
while [ $# -ne 0 ] ; do
|
|
if [ ! -n $2 ] ; then
|
|
break
|
|
fi
|
|
shift
|
|
if [ "F$INCLUDE" = "F" ] ; then
|
|
INCLUDE="$1"
|
|
else
|
|
INCLUDE="$INCLUDE $1"
|
|
fi
|
|
done
|
|
echo -n "Testing for $FUNCTION: "
|
|
echo >> config.log
|
|
echo "Testing for $FUNCTION: " >> config.log
|
|
check_cache "function" "$FUNCTION"
|
|
if [ $? -eq 0 ] ; then
|
|
echo "-> OK (cached)"
|
|
echo "-> OK (cached)" >> config.log
|
|
return 0
|
|
fi
|
|
echo "#include <sys/types.h>" > autotest.c
|
|
if [ "F$INCLUDE" != "F" ] ; then
|
|
for inc in $INCLUDE ; do
|
|
echo "#include \"$inc\"" >> autotest.c
|
|
done
|
|
fi
|
|
echo "#include <stdlib.h>" >> autotest.c
|
|
echo "int main (int argc, char **argv) { $FUNCTION; return 0; }" >> autotest.c
|
|
echo "$GCC $PTHREAD_CFLAGS $CFLAGS -o autotest $LDFLAGS $LIBS $PTHREAD_LDFLAGS autotest.c" >>config.log
|
|
$GCC $PTHREAD_CFLAGS $CFLAGS -o autotest $LDFLAGS $LIBS $PTHREAD_LDFLAGS autotest.c >>config.log 2>&1
|
|
if [ $? -eq 0 ] ; then
|
|
echo "found"
|
|
cleanup
|
|
echo "-> OK" >> config.log
|
|
write_cache "function" "$FUNCTION" "yes" ""
|
|
return 0
|
|
else
|
|
echo "not found"
|
|
echo "-> FAILED" >> config.log
|
|
echo "Failed program was:" >> config.log
|
|
cat autotest.c >> config.log
|
|
cleanup
|
|
write_cache "function" "$FUNCTION" "no" ""
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
check_include()
|
|
{
|
|
_INCLUDE="$1"
|
|
echo -n "Testing for $_INCLUDE: "
|
|
echo >> config.log
|
|
echo "Testing for $_INCLUDE: " >> config.log
|
|
check_cache "include" "$_INCLUDE"
|
|
if [ $? -eq 0 ] ; then
|
|
echo "-> OK (cached)"
|
|
echo "-> OK (cached)" >> config.log
|
|
_CFLAG=`echo "$_INCLUDE" | sed -e 's/[./]/_/g' | tr '[:lower:]' '[:upper:]'`
|
|
CFLAGS="$CFLAGS -DHAVE_$_CFLAG"
|
|
return 0
|
|
fi
|
|
echo "#include <sys/types.h>" > autotest.c
|
|
echo "#include \"$_INCLUDE\"" >> autotest.c
|
|
echo "#include <stdlib.h>" >> autotest.c
|
|
echo "int main (int argc, char **argv) { return 0; }" >> autotest.c
|
|
echo "$GCC $CFLAGS $PTHREAD_CFLAGS -o autotest $LDFLAGS $LIBS $PTHREAD_LDFLAGS autotest.c" >>config.log
|
|
$GCC $CFLAGS $PTHREAD_CFLAGS -o autotest $LDFLAGS $LIBS $PTHREAD_LDFLAGS autotest.c >>config.log 2>&1
|
|
if [ $? -eq 0 ] ; then
|
|
echo "found"
|
|
echo "-> OK" >> config.log
|
|
_CFLAG=`echo "$_INCLUDE" | sed -e 's/[./]/_/g' | tr '[:lower:]' '[:upper:]'`
|
|
CFLAGS="$CFLAGS -DHAVE_$_CFLAG"
|
|
write_cache "include" "$_INCLUDE" "yes" "$_CFLAG"
|
|
cleanup
|
|
return 0
|
|
else
|
|
echo "not found"
|
|
echo "-> FAILED" >> config.log
|
|
echo "Failed program was:" >> config.log
|
|
cat autotest.c >> config.log
|
|
write_cache "include" "$_INCLUDE" "no" ""
|
|
cleanup
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
check_macro()
|
|
{
|
|
MACRO=$1
|
|
_INCLUDE=""
|
|
while [ $# -ne 1 -a -n $1 ] ; do
|
|
shift
|
|
if [ "F$_INCLUDE" = "F" ] ; then
|
|
_INCLUDE="$1"
|
|
else
|
|
_INCLUDE="$_INCLUDE $1"
|
|
fi
|
|
done
|
|
echo -n "Testing for $MACRO: "
|
|
echo >> config.log
|
|
echo "Testing for $MACRO: " >> config.log
|
|
check_cache "macro" "$MACRO"
|
|
if [ $? -eq 0 ] ; then
|
|
echo "-> OK (cached)"
|
|
echo "-> OK (cached)" >> config.log
|
|
return 0
|
|
fi
|
|
echo "#include <sys/types.h>" > autotest.c
|
|
for _inc in $_INCLUDE ; do
|
|
echo "#include \"$_inc\"" >> autotest.c
|
|
done
|
|
echo "#include <stdlib.h>" >> autotest.c
|
|
echo "int main (int argc, char **argv) {" >>autotest.c
|
|
echo "#ifndef $MACRO" >>autotest.c
|
|
echo "#error \"$MACRO not defined\"" >>autotest.c
|
|
echo "#endif" >> autotest.c
|
|
echo "}" >>autotest.c
|
|
echo "$GCC $CFLAGS $PTHREAD_CFLAGS -o autotest $LDFLAGS $LIBS $PTHREAD_LDFLAGS autotest.c" >> config.log
|
|
$GCC $CFLAGS $PTHREAD_CFLAGS -o autotest $LDFLAGS $LIBS $PTHREAD_LDFLAGS autotest.c >>config.log 2>&1
|
|
if [ $? -eq 0 ] ; then
|
|
echo "found"
|
|
echo "-> OK" >> config.log
|
|
write_cache "macro" "$MACRO" "yes" ""
|
|
cleanup
|
|
return 0
|
|
else
|
|
echo "not found"
|
|
echo "-> FAILED" >> config.log
|
|
echo "Failed program was:" >> config.log
|
|
cat autotest.c >> config.log
|
|
write_cache "macro" "$MACRO" "no" ""
|
|
cleanup
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
check_single_lib()
|
|
{
|
|
_slib=$1
|
|
_path=$2
|
|
|
|
echo "#include <sys/types.h>" > autotest.c
|
|
if [ "F$INCLUDE" != "F" ] ; then
|
|
for inc in $INCLUDE ; do
|
|
echo "#include \"$inc\"" >> autotest.c
|
|
done
|
|
fi
|
|
echo "#include <stdlib.h>" >> autotest.c
|
|
echo "int main (int argc, char **argv) { return 0; }" >> autotest.c
|
|
echo "$GCC $CFLAGS $PTHREAD_CFLAGS -o autotest $LDFLAGS $LIBS -L$_path -l$_slib $PTHREAD_LDFLAGS autotest.c" >>config.log
|
|
$GCC $CFLAGS $PTHREAD_CFLAGS -o autotest $LDFLAGS $LIBS -L$_path -l$_slib $PTHREAD_LDFLAGS autotest.c >>config.log 2>&1
|
|
if [ $? -eq 0 ] ; then
|
|
_found="yes"
|
|
return 0
|
|
fi
|
|
|
|
return 1
|
|
}
|
|
|
|
check_lib()
|
|
{
|
|
_SEARCH=""
|
|
echo $1 | grep -- '--search=' > /dev/null
|
|
if [ $? -eq 0 ] ; then
|
|
_SEARCH=`echo $1 | sed -e 's/^--search=//'`
|
|
shift
|
|
fi
|
|
|
|
LIB=$1
|
|
while [ $# -ne 1 -a -n $1 ] ; do
|
|
shift
|
|
if [ "F$INCLUDE" = "F" ] ; then
|
|
INCLUDE="$1"
|
|
else
|
|
INCLUDE="$INCLUDE $1"
|
|
fi
|
|
done
|
|
echo -n "Testing for lib$LIB: "
|
|
echo >> config.log
|
|
echo "Testing for lib$LIB: " >> config.log
|
|
check_cache "lib" "$LIB"
|
|
if [ $? -eq 0 ] ; then
|
|
check_cache "libpath" "$LIB"
|
|
if [ $? -eq 0 ] ; then
|
|
LIBS="$LIBS -L$CACHED"
|
|
fi
|
|
LIBS="$LIBS -l$LIB"
|
|
echo "-> OK (cached)"
|
|
echo "-> OK (cached)" >> config.log
|
|
return 0
|
|
fi
|
|
|
|
if [ "F$_SEARCH" = "F" ] ; then
|
|
check_single_lib "$LIB" "/lib"
|
|
|
|
if [ $? -eq 0 ] ; then
|
|
echo "found"
|
|
LIBS="$LIBS -l$LIB"
|
|
echo "-> OK" >> config.log
|
|
write_cache "lib" "$LIB" "yes" ""
|
|
cleanup
|
|
return 0
|
|
else
|
|
echo "not found"
|
|
echo "-> FAILED" >> config.log
|
|
echo "Failed program was:" >> config.log
|
|
cat autotest.c >> config.log
|
|
write_cache "lib" "$LIB" "no" ""
|
|
cleanup
|
|
return 1
|
|
fi
|
|
else
|
|
_saved_ifs=$IFS
|
|
IFS=":"
|
|
for _p in $_SEARCH ; do
|
|
IFS=$_saved_ifs
|
|
check_single_lib "$LIB" "$_p"
|
|
if [ $? -eq 0 ] ; then
|
|
echo "found"
|
|
LIBS="$LIBS -L$_p -l$LIB"
|
|
echo "-> OK" >> config.log
|
|
write_cache "lib" "$LIB" "yes" ""
|
|
write_cache "libpath" "$LIB" "yes" "$_p"
|
|
cleanup
|
|
IFS=$_saved_ifs
|
|
return 0
|
|
fi
|
|
IFS=":"
|
|
done
|
|
IFS=$_saved_ifs
|
|
fi
|
|
|
|
echo "not found"
|
|
echo "-> FAILED" >> config.log
|
|
echo "Failed program was:" >> config.log
|
|
cat autotest.c >> config.log
|
|
write_cache "lib" "$LIB" "no" ""
|
|
cleanup
|
|
return 1
|
|
}
|
|
|
|
check_os()
|
|
{
|
|
_OS=`uname -s`
|
|
_PROCESSOR=`uname -p`
|
|
case "$_OS" in
|
|
FreeBSD*)
|
|
OS="freebsd"
|
|
CFLAGS="${CFLAGS} -DFREEBSD"
|
|
INSTALL="/usr/bin/install -C -S -v"
|
|
MKDIR="/usr/bin/install -d -v"
|
|
MANPATH="${PREFIX}/man"
|
|
case `uname -r` in
|
|
4.*)
|
|
CFLAGS="$CFLAGS -DFREEBSD_LEGACY"
|
|
PTHREAD_CFLAGS="$PTHREAD_CFLAGS -pthread" PTHREAD_LDFLAGS="-pthread" ;;
|
|
5.*)
|
|
PTHREAD_CFLAGS="$PTHREAD_CFLAGS -pthread" PTHREAD_LDFLAGS="-lpthread" ;;
|
|
*)
|
|
PTHREAD_CFLAGS="$PTHREAD_CFLAGS -pthread" PTHREAD_LDFLAGS="-pthread" ;;
|
|
esac
|
|
;;
|
|
Linux*)
|
|
OS="linux"
|
|
CFLAGS="${CFLAGS} -I/usr/include/${_PROCESSOR}-linux-gnu/ -DLINUX -D_GNU_SOURCE" PTHREAD_CFLAGS="$PTHREAD_CFLAGS -pthread"
|
|
PTHREAD_LDFLAGS="-pthread"
|
|
;;
|
|
*) OS="unknown" PTHREAD_LDFLAGS="" PTHREAD_CFLAGS="$PTHREAD_CFLAGS -pthread" ;;
|
|
esac
|
|
}
|
|
|
|
check_user()
|
|
{
|
|
_user=$1
|
|
echo -n "Checking for user $_user: "
|
|
grep $_user /etc/passwd > /dev/null 2>&1
|
|
if [ $? -eq 0 ] ; then
|
|
echo "found"
|
|
return 0
|
|
else
|
|
echo "not found"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
check_group()
|
|
{
|
|
_group=$1
|
|
echo -n "Checking for group $_group: "
|
|
grep $_group /etc/group > /dev/null 2>&1
|
|
if [ $? -eq 0 ] ; then
|
|
echo "found"
|
|
return 0
|
|
else
|
|
echo "not found"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
write_result()
|
|
{
|
|
echo "Compiler: $GCC" >> config.log
|
|
echo "Make: $MAKE" >> config.log
|
|
echo "Sources: $SOURCES" >> config.log
|
|
echo "Cflags: $CFLAGS" >> config.log
|
|
echo "Ldflags: $LDFLAGS" >> config.log
|
|
echo "Libs: $LIBS" >> config.log
|
|
OBJECTS=`echo $SOURCES | sed -e 's/\.c/\.o/g'`
|
|
cat > $MAKEFILE << END
|
|
# This is ${EXEC} Makefile
|
|
# For options edit Makefile.in, this file is autogenerated by configure
|
|
|
|
CC?=$GCC
|
|
# Optimization flags
|
|
OPT_FLAGS+=$OPT_FLAGS
|
|
# Compile time flags
|
|
CFLAGS+=$CFLAGS
|
|
# Link time flags
|
|
LDFLAGS+=$LDFLAGS
|
|
# Libraries to link
|
|
LIBS=$LIBS
|
|
# ${EXEC} sources
|
|
SOURCES=$SOURCES
|
|
# ${EXEC} objects
|
|
OBJECTS=$OBJECTS
|
|
# Detected operation system
|
|
OS=$OS
|
|
# Version of dcc (if needed)
|
|
DCC_VER=$DCC_VER
|
|
# Lex and yacc executables
|
|
LEX=$LEX
|
|
YACC=$YACC
|
|
# Pthread specific flags
|
|
PTHREAD_CFLAGS=$PTHREAD_CFLAGS
|
|
PTHREAD_LDFLAGS=$PTHREAD_LDFLAGS
|
|
# Prefix to install
|
|
PREFIX=$PREFIX
|
|
# Where local libs and includes are located
|
|
LOCALBASE=$LOCALBASE
|
|
# Install commands
|
|
INSTALL=$INSTALL
|
|
MKDIR=$MKDIR
|
|
# Executable name
|
|
EXEC=$EXEC
|
|
# User and group
|
|
RMILTER_USER=$USER
|
|
RMILTER_GROUP=$GROUP
|
|
# All target dependenses
|
|
TARGETS=$TARGETS
|
|
# Common dependenses
|
|
DEPS=$DEPS
|
|
# Path to install manual page
|
|
MANPATH=$MANPATH
|
|
|
|
END
|
|
# Write build targets to makefile
|
|
|
|
cat $MAKEFILE_IN >> $MAKEFILE
|
|
cat >> $MAKEFILE << END
|
|
${EXEC}: \$(OBJECTS)
|
|
\$(CC) \$(PTHREAD_LDFLAGS) \$(LDFLAGS) \$(OBJECTS) \$(LIBS) -o \$(EXEC)
|
|
END
|
|
for o in $OBJECTS ; do
|
|
SO=`echo $o | sed -e 's/\.o/\.c/g'`
|
|
cat >> $MAKEFILE << END
|
|
${o}: \$(DEPS) ${SO}
|
|
\$(CC) \$(OPT_FLAGS) \$(CFLAGS) \$(PTHREAD_CFLAGS) -c ${SO}
|
|
|
|
END
|
|
done
|
|
cat >> $MAKEFILE << END
|
|
${LEX_OUTPUT}: cfg_file.h ${LEX_SRC} ${YACC_OUTPUT}
|
|
\$(LEX) -o${LEX_OUTPUT} ${LEX_SRC}
|
|
|
|
${YACC_OUTPUT}: cfg_file.h ${YACC_SRC}
|
|
\$(YACC) -d -o ${YACC_OUTPUT} ${YACC_SRC}
|
|
END
|
|
|
|
}
|
|
|
|
|
|
for option
|
|
do
|
|
case "$option" in
|
|
-*=*) value=`echo "$option" | sed -e 's/[-_a-zA-Z0-9]*=//'` ;;
|
|
*=*) var=`echo "$option" | cut -d'=' -f1`
|
|
value=`echo "$option" | cut -d'=' -f2`
|
|
eval "${var}=${value}" ;;
|
|
*) value="" ;;
|
|
esac
|
|
|
|
case "$option" in
|
|
--help) help=yes ;;
|
|
--prefix*) PREFIX=$value ;;
|
|
--user*) USER=$value ;;
|
|
--group*) GROUP=$value ;;
|
|
--enable-auth-strict) CFLAGS="$CFLAGS -DSTRICT_AUTH" ;;
|
|
--enable-dcc) dcc=yes ;;
|
|
--disable-spf) spf=no ;;
|
|
--enable-dkim) dkim=yes ;;
|
|
--enable-debug) CFLAGS="$CFLAGS -DWITH_DEBUG" OPT_FLAGS="" ;;
|
|
--enable-opt) OPT_FLAGS="-O3 -pipe" ;;
|
|
--enable-sendmail) SENDMAIL=yes ;;
|
|
--with-libmilter*) LIBMILTER=$value ;;
|
|
--with-libspf*) LIBSPF=$value ;;
|
|
--with-libopendkim*) LIBOPENDKIM=$value ;;
|
|
*=*) ;;
|
|
esac
|
|
done
|
|
|
|
if [ "F$help" = "Fyes" ] ; then
|
|
cat << END
|
|
|
|
--help this message
|
|
|
|
--prefix=PATH set the installation prefix
|
|
--enable-dcc enable dcc support
|
|
--enable-dkim enable dkim signing support
|
|
--enable-debug turn on extra debug messages
|
|
--enable-opt turn on extra optimization
|
|
--enable-auth-strict turn on strict check for authenticated users
|
|
--enable-sendmail build rmilter for using with sendmail MTA
|
|
--disable-spf disable spf support
|
|
--user=USER set user to use
|
|
--group=GROUP set group to use
|
|
--with-libmilter=PATH set path to libmilter
|
|
--with-libspf=PATH set path to libspf2
|
|
--with-libopendkim=PATH set path to libopendkim
|
|
END
|
|
exit 1
|
|
fi
|
|
|
|
if [ "F$SENDMAIL" = "Fyes" ] ; then
|
|
CFLAGS="$CFLAGS -DSENDMAIL"
|
|
if [ "F$USER" = "Fpostfix" ] ; then
|
|
USER="mailnull"
|
|
GROUP="mailnull"
|
|
fi
|
|
fi
|
|
|
|
|
|
CFLAGS="$CFLAGS -I$PREFIX/include"
|
|
LDFLAGS="$LDFLAGS -L$PREFIX/lib"
|
|
|
|
if [ "F$LIBMILTER" != "F" ] ; then
|
|
echo $LIBMILTER | fgrep '/lib/' > /dev/null
|
|
if [ $? -eq 0 ] ; then
|
|
LDFLAGS="$LDFLAGS -L$LIBMILTER"
|
|
else
|
|
echo $LIBMILTER | fgrep '/include/' > /dev/null
|
|
if [ $? -eq 0 ] ; then
|
|
CFLAGS="$CFLAGS -I$LIBMILTER"
|
|
else
|
|
LDFLAGS="$LDFLAGS -L$LIBMILTER/lib"
|
|
CFLAGS="$CFLAGS -I$LIBMILTER/include"
|
|
fi
|
|
fi
|
|
fi
|
|
if [ "F$LIBSPF" != "F" ] ; then
|
|
echo $LIBSPF | fgrep '/lib/' > /dev/null
|
|
if [ $? -eq 0 ] ; then
|
|
LDFLAGS="$LDFLAGS -L$LIBSPF"
|
|
else
|
|
echo $LIBSPF | fgrep '/include/' > /dev/null
|
|
if [ $? -eq 0 ] ; then
|
|
CFLAGS="$CFLAGS -I$LIBSPF"
|
|
else
|
|
LDFLAGS="$LDFLAGS -L$LIBSPF/lib"
|
|
CFLAGS="$CFLAGS -I$LIBSPF/include"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [ "F$LIBOPENDKIM" != "F" ] ; then
|
|
echo $LIBOPENDKIM | fgrep '/lib/' > /dev/null
|
|
if [ $? -eq 0 ] ; then
|
|
LDFLAGS="$LDFLAGS -L$LIBOPENDKIM"
|
|
else
|
|
echo $LIBOPENDKIM | fgrep '/include/' > /dev/null
|
|
if [ $? -eq 0 ] ; then
|
|
CFLAGS="$CFLAGS -I$LIBOPENDKIM"
|
|
else
|
|
LDFLAGS="$LDFLAGS -L$LIBOPENDKIM/lib"
|
|
CFLAGS="$CFLAGS -I$LIBOPENDKIM/include"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
echo "Starting configure for rmilter" >config.log
|
|
echo $0 $@ >> config.log
|
|
|
|
check_os
|
|
check_compiler
|
|
check_make
|
|
check_lex
|
|
check_yacc
|
|
|
|
check_lib "--search=/usr/lib/libmilter:${PREFIX}/lib:${PREFIX}/libmilter" "milter" "libmilter/mfapi.h"
|
|
if [ $? -eq 1 ] ; then
|
|
echo "Libmilter not found, check config.log for details"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "F$spf" = "Fno" ] ; then
|
|
CFLAGS="$CFLAGS -DDISABLE_SPF"
|
|
else
|
|
SOURCES="$SOURCES spf.c"
|
|
check_lib "--search=/usr/lib/libspf2:${PREFIX}/lib:${PREFIX}/libspf2" "spf2" "netinet/in.h" "spf2/spf.h"
|
|
if [ $? -eq 1 ] ; then
|
|
echo "Libspf2 not found, check config.log for details"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ "F$dkim" = "Fyes" ] ; then
|
|
CFLAGS="$CFLAGS -DENABLE_DKIM"
|
|
check_lib "--search=/usr/lib/libopendkim:${PREFIX}/lib:${PREFIX}/libopendkim" "opendkim" "netinet/in.h" "opendkim/dkim.h"
|
|
if [ $? -eq 1 ] ; then
|
|
echo "Libopendkim not found, check config.log for details"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
check_lib "m"
|
|
check_lib "pcre"
|
|
if [ $? -eq 1 ] ; then
|
|
# Try to use pcre-config
|
|
PCRE_CONFIG=`which pcre-config`
|
|
if [ F"$PCRE_CONFIG" = "F" ] ; then
|
|
echo "Libpcre is not found and pcre-config binary is not found as well. Please install libcpcre."
|
|
exit 1
|
|
fi
|
|
PCRE_CFLAGS=`$PCRE_CONFIG --cflags`
|
|
PCRE_LIBS=`$PCRE_CONFIG --libs`
|
|
CFLAGS="$CFLAGS $PCRE_CFLAGS"
|
|
LIBS="$LIBS $PCRE_LIBS"
|
|
fi
|
|
|
|
check_lib "md"
|
|
if [ $? -eq 1 ] ; then
|
|
cp $COMPAT_DIR/md5.c .
|
|
cp $COMPAT_DIR/md5.h .
|
|
SOURCES="$SOURCES md5.c"
|
|
CFLAGS="$CFLAGS -DHAVE_OWN_MD5"
|
|
DEPS="$DEPS md5.h"
|
|
fi
|
|
|
|
check_function "strlcpy" "string.h"
|
|
if [ $? -eq 1 ] ; then
|
|
cp $COMPAT_DIR/strlcpy.c .
|
|
cp $COMPAT_DIR/strlcpy.h .
|
|
SOURCES="$SOURCES strlcpy.c"
|
|
CFLAGS="$CFLAGS -DHAVE_STRLCPY_H"
|
|
DEPS="$DEPS strlcpy.h"
|
|
fi
|
|
check_function "bzero" "string.h"
|
|
check_function "srandomdev"
|
|
if [ $? -eq 0 ] ; then
|
|
CFLAGS="$CFLAGS -DHAVE_SRANDOMDEV"
|
|
fi
|
|
|
|
check_include "endian.h"
|
|
check_include "machine/endian.h"
|
|
check_include "sys/time.h"
|
|
check_include "time.h"
|
|
check_include "stdint.h"
|
|
if [ $? -eq 1 ] ; then
|
|
check_include "inttypes.h"
|
|
fi
|
|
check_include "stdbool.h"
|
|
check_include "strlcpy.h"
|
|
check_include "md5.h"
|
|
check_include "sys/queue.h"
|
|
if [ $? -eq 1 ] ; then
|
|
cp $COMPAT_DIR/queue.h .
|
|
DEPS="$DEPS queue.h"
|
|
fi
|
|
check_macro "SLIST_FOREACH_SAFE" "sys/queue.h"
|
|
if [ $? -eq 1 ] ; then
|
|
cp $COMPAT_DIR/queue.h .
|
|
CFLAGS="$CFLAGS -DOWN_QUEUE_H"
|
|
DEPS="$DEPS queue.h"
|
|
fi
|
|
|
|
check_macro "PATH_MAX" "limits.h"
|
|
if [ $? -eq 1 ] ; then
|
|
check_macro "MAXPATHLEN" "sys/param.h"
|
|
if [ $? -eq 1 ] ; then
|
|
CFLAGS="$CFLAGS -DHAVE_MAXPATHLEN -DMAXPATHLEN=4096"
|
|
else
|
|
CFLAGS="$CFLAGS -DHAVE_MAXPATHLEN"
|
|
fi
|
|
else
|
|
CFLAGS="$CFLAGS -DHAVE_PATH_MAX"
|
|
fi
|
|
|
|
if [ "F$dcc" = "Fyes" ] ; then
|
|
CFLAGS="$CFLAGS -I./dcc-dccd-${DCC_VER}/include -DHAVE_DCC"
|
|
LDFLAGS="$LDFLAGS -Ldcc-dccd-${DCC_VER}/dcclib"
|
|
LIBS="$LIBS -ldcc"
|
|
TARGETS="dcc $TARGETS"
|
|
fi
|
|
|
|
write_result
|