# # Keepalived OpenSource project. # # Configuration template file for keepalived. # autoconf will generate & check deps for proper compilation # # Copyright (C) 2001-2004 Alexandre Cassen, dnl ----[ Process this file with autoconf to produce a configure script ]---- AC_INIT(keepalived/core/main.c) VERSION=`cat VERSION` VERSION_DATE=`date +%m/%d,20%y` OUTPUT_TARGET="Makefile genhash/Makefile keepalived/core/Makefile keepalived/include/config.h keepalived.spec" dnl ----[ Checks for programs ]---- AC_PROG_CC AC_PROG_INSTALL AC_CHECK_TOOL(STRIP,strip) dnl ----[ Keepalived specific configure options ]---- AC_ARG_ENABLE(lvs-syncd, [ --disable-lvs-syncd do not use LVS synchronization daemon]) AC_ARG_ENABLE(lvs, [ --disable-lvs do not use the LVS framework]) AC_ARG_ENABLE(vrrp, [ --disable-vrrp do not use the VRRP framework]) AC_ARG_WITH(kernel-dir, [ --with-kernel-dir=DIR path to linux kernel source directory], [kernelinc="$withval/include" kernelpath="$withval"], [kernelinc="/usr/src/linux/include" kernelpath="/usr/src/linux"]) AC_ARG_ENABLE(debug, [ --enable-debug compile with debugging flags]) AC_ARG_ENABLE(profile, [ --enable-profile compile with profiling flags]) dnl ----[ Checks for header files ]---- AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_CHECK_HEADERS(fcntl.h syslog.h unistd.h sys/ioctl.h sys/time.h) dnl [do we really need this ?] AC_CHECK_HEADERS(linux/netlink.h linux/rtnetlink.h) AC_CHECK_HEADERS(openssl/ssl.h openssl/md5.h openssl/err.h,,AC_MSG_ERROR([ !!! OpenSSL is not properly installed on your system. !!! !!! Can not include OpenSSL headers files. !!!])) dnl ----[ Checks for libraries ]---- AC_CHECK_LIB(crypto, MD5_Init,,AC_MSG_ERROR([OpenSSL libraries are required])) AC_CHECK_LIB(ssl, SSL_CTX_new,,AC_MSG_ERROR([OpenSSL libraries are required])) AC_CHECK_LIB(popt, poptGetContext,,AC_MSG_ERROR([Popt libraries is required])) dnl ----[ Kernel version check ]---- CPPFLAGS="$CPPFLAGS -I$kernelinc" AC_MSG_CHECKING([for kernel version]) AC_TRY_RUN([ #include #include #include int main (void) { FILE *fp = fopen ("linuxinfo", "w"); if (!fp) return 1; fprintf (fp, "%s\n", UTS_RELEASE); fclose (fp); return 0; } ], [ LINUX_MAJOR=`cat linuxinfo | cut -d'.' -f1` LINUX_MINOR=`cat linuxinfo | cut -d'.' -f2` LINUX_PATCH=`cat linuxinfo | cut -d'.' -f3` ], [ LINUX_MAJOR="0" LINUX_MINOR="0" LINUX_PATCH="0" ], [ LINUX_MAJOR="0" LINUX_MINOR="0" LINUX_PATCH="0" ]) rm -f linuxinfo AC_MSG_RESULT([$LINUX_MAJOR.$LINUX_MINOR.$LINUX_PATCH]) if test "$LINUX_MINOR" = "6"; then KERN="_KRNL_2_6_" elif test "$LINUX_MINOR" = "4"; then KERN="_KRNL_2_4_" else OS_TYPE=`uname` if test "$OS_TYPE" = "FreeBSD" ; then KERN=_FreeBSD_ else KERN="_KRNL_2_2_" fi fi if test "$LINUX_MAJOR" = "0" -a "$LINUX_MINOR" = "0" -a "$LINUX_PATCH" = "0"; then AC_MSG_WARN([Cannot determine Linux Kernel version.]) fi AC_CHECK_FILE($kernelpath/net/core/link_watch.c, [ LINKWATCH_SUPPORT="_WITH_LINKWATCH_" ], [ LINKWATCH_SUPPORT="_WITHOUT_LINKWATCH_" ]) AC_SUBST(LINKWATCH_SUPPORT) AC_SUBST(KERN) dnl ----[ Checks for LVS and VRRP support ]---- IPVS_SUPPORT="_WITHOUT_LVS_" if test "$OS_TYPE" != "FreeBSD"; then IPVS_HEADER="net/ip_vs.h" else IPVS_HEADER="ipvs/ip_vs.h" fi if test "$enable_lvs" != "no"; then AC_CHECK_HEADER([$IPVS_HEADER], [IPVS_SUPPORT="_WITH_LVS_"], [ IPVS_SUPPORT="_WITHOUT_LVS_" IPVS_MAJOR="0" IPVS_MINOR="0" IPVS_PATCH="0" AC_MSG_WARN([keepalived will be built without LVS support.]) ]) fi if test "$IPVS_SUPPORT" = "_WITH_LVS_"; then AC_MSG_CHECKING([for IPVS version]) AC_TRY_RUN([ #include #include #include int main (void) { FILE *fp = fopen ("ipvsinfo", "w"); if (!fp) return 1; fprintf (fp, "%d\n%d\n%d\n", NVERSION(IP_VS_VERSION_CODE)); fclose (fp); return 0; } ], [ IPVS_MAJOR=`head -n 1 ipvsinfo | tail -n 1` IPVS_MINOR=`head -n 2 ipvsinfo | tail -n 1` IPVS_PATCH=`head -n 3 ipvsinfo | tail -n 1` ], [ IPVS_MAJOR="0" IPVS_MINOR="0" IPVS_PATCH="0" ], [ IPVS_MAJOR="0" IPVS_MINOR="0" IPVS_PATCH="0" ]) rm -f ipvsinfo AC_MSG_RESULT([$IPVS_MAJOR.$IPVS_MINOR.$IPVS_PATCH]) if test "$IPVS_MAJOR" = "0" -a "$IPVS_MINOR" = "0" -a "$IPVS_PATCH" = "0"; then AC_MSG_WARN([Cannot determine IPVS version.]) fi fi if test "$IPVS_SUPPORT" = "_WITHOUT_LVS_" -a "$enable_vrrp" = "no"; then AC_MSG_ERROR([keepalived MUST be compiled at least with LVS or VRRP framework]) fi dnl ----[ IPVS syncd support probe ]--- dnl Sync daemon is supported since IPVS 0.9.2 for kernel 2.4 IPVS_SYNCD="_WITHOUT_IPVS_SYNCD_" if test "$IPVS_SUPPORT" = "_WITH_LVS_"; then AC_MSG_CHECKING([for IPVS syncd support]) if test "$KERN" = "_KRNL_2_6_"; then IPVS_SYNCD="_HAVE_IPVS_SYNCD_" elif test "$IPVS_MAJOR" -ge 1 -a "$KERN" = "_KRNL_2_4_"; then IPVS_SYNCD="_HAVE_IPVS_SYNCD_" elif test "$IPVS_MINOR" -ge 9 -a "$IPVS_PATCH" -ge 2 -a "$KERN" = "_KRNL_2_4_"; then IPVS_SYNCD="_HAVE_IPVS_SYNCD_" else IPVS_SYNCD="_WITHOUT_IPVS_SYNCD_" fi if test "${IPVS_SUPPORT}" = "_WITHOUT_LVS_" -o "$enable_lvs_syncd" = "no"; then IPVS_SYNCD="_WITHOUT_IPVS_SYNCD_" fi if test "$IPVS_SYNCD" = "_HAVE_IPVS_SYNCD_"; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi fi AC_SUBST(IPVS_SYNCD) dnl ----[ Checks for kernel netlink support ]---- VRRP_SUPPORT="_WITHOUT_VRRP_" if test "$enable_vrrp" != "no"; then AC_MSG_CHECKING([for kernel netlink support]) AC_TRY_RUN([ #include #include #include int main (void) { int fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); if (fd < 0) exit(1); close(fd); exit(0); }], [ AC_MSG_RESULT(yes) VRRP_SUPPORT="_WITH_VRRP_" ], [ AC_MSG_RESULT(no) ], [ AC_MSG_RESULT(no) ]) fi if test "${enable_debug}" = "yes"; then DFLAGS="-D_DEBUG_" AC_SUBST(DFLAGS) fi if test "${enable_profile}" = "yes"; then CFLAGS="$CFLAGS -pg" fi AC_SUBST(VERSION) AC_SUBST(VERSION_DATE) AC_SUBST(IPVS_SUPPORT) AC_SUBST(VRRP_SUPPORT) dnl ----[ Checks for typedefs, structures, and compiler characteristics ]---- AC_C_CONST AC_TYPE_PID_T AC_HEADER_TIME dnl ----[ Checks for library functions ]---- AC_PROG_GCC_TRADITIONAL AC_FUNC_MEMCMP AC_TYPE_SIGNAL AC_CHECK_FUNCS(gettimeofday select socket strerror strtol uname) dnl ----[ Process output target ]---- OUTPUT_TARGET="$OUTPUT_TARGET keepalived/Makefile lib/Makefile" if test "${VRRP_SUPPORT}" = "_WITH_VRRP_"; then OUTPUT_TARGET="$OUTPUT_TARGET keepalived/vrrp/Makefile" fi if test "$IPVS_SUPPORT" = "_WITH_LVS_"; then OUTPUT_TARGET="$OUTPUT_TARGET keepalived/check/Makefile" if test "$KERN" = "_KRNL_2_6_"; then OUTPUT_TARGET="$OUTPUT_TARGET keepalived/libipvs-2.6/Makefile" elif test "$KERN" = "_KRNL_2_4_"; then OUTPUT_TARGET="$OUTPUT_TARGET keepalived/libipvs-2.4/Makefile" else OUTPUT_TARGET="$OUTPUT_TARGET keepalived/libipfwc/Makefile" fi fi AC_OUTPUT($OUTPUT_TARGET) dnl ----[ Display current configuration ]---- cat <