dnl Process this file with autoconf to produce a configure script. AC_INIT(ulogd.c) dnl Checks for programs. AC_PROG_MAKE_SET AC_PROG_CC AC_CHECK_TOOL(LD, ld) AC_PROG_INSTALL dnl Checks for libraries. AC_CHECK_LIB(dl, dlopen) AC_CHECK_HEADER(pcap.h,HAVE_PCAP_H=true) dnl Checks for header files. AC_HEADER_DIRENT AC_HEADER_STDC AC_CHECK_HEADERS(fcntl.h unistd.h) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_SIZE_T AC_STRUCT_TM dnl Checks for library functions. AC_FUNC_VPRINTF AC_CHECK_FUNCS(socket strerror) dnl Checks for kernel source directory. AC_MSG_CHECKING([kernel source directory]) KSRC="/lib/modules/`uname -r`/build" AC_ARG_WITH(kernel, --with-kernel=DIR kernel source directory, [ KSRC="$withval" ], ) # Check if kernel source directory has been configured if test -f "$KSRC/include/linux/version.h" ; then # Get kernel version number eval KVER=$(echo "#include " | cpp -I "$KSRC/include" -dM - | awk '/UTS_RELEASE/ { print $3 }') AC_MSG_RESULT([$KVER]) else AC_MSG_RESULT([$KSRC/include/linux/version.h not found]) AC_MSG_ERROR(kernel source directory not specified or not configured) fi AC_SUBST(KSRC) AC_SUBST(KVER) dnl NetFlow prerequisites. AC_ARG_WITH(proper, --with-proper= proper installed in , [ CPPFLAGS="$CPPFLAGS -I$withval/include" ; LDFLAGS="$LDFLAGS -L$withval/.libs" ], ) AC_CHECK_HEADER(prop.h, HAVE_PROP_H=true) AC_CHECK_LIB(proper, prop_create_socket) AC_CHECK_HEADER(pthread.h, HAVE_PTHREAD_H=true, AC_MSG_ERROR(NetFlow requires pthread)) AC_CHECK_LIB(pthread, pthread_create, [], AC_MSG_ERROR(NetFlow requires pthread)) DATABASE_DIR="" DATABASE_LIB="" DATABASE_LIB_DIR="" DATABASE_DRIVERS="" dnl dnl test for MySQL dnl AC_ARG_WITH(mysql, --with-mysql= mysql installed in ,[ if test $withval != yes then dir=$withval else dir="/usr/local" fi mysqldir="" AC_MSG_CHECKING(for MySQL files) for d in $dir/bin /usr/bin /usr/local/bin /usr/local/mysql/bin /opt/mysql/bin /opt/packages/mysql/bin do if test -f $d/mysql_config then AC_MSG_RESULT(found mysql_config in $d) mysqldir=$d break fi done if test x$mysqldir = x then AC_MSG_WARN(MySQL backend not used) else AC_DEFINE(HAVE_MYSQL) MYSQLINCLUDES=`$d/mysql_config --include` MYSQLLIBS=`$d/mysql_config --libs` DATABASE_DIR="${DATABASE_DIR} mysql" MYSQL_LIB="${DATABASE_LIB} ${MYSQLLIBS} " # no change to DATABASE_LIB_DIR, since --libs already includes -L DATABASE_DRIVERS="${DATABASE_DRIVERS} ../mysql/mysql_driver.o " DB_DEF="${DB_DEF} -DHAVE_MYSQL " AC_SUBST(MYSQLINCLUDES) AC_SUBST(MYSQL_LIB) dnl Here we check whether we have an old MySQL client library dnl installed, which does not support the mysql_real_escape_string(), dnl but the real_escape_string() function. dnl Having a look in the libary itself should be more reliable than dnl parsing the output of mysql --version. AC_MSG_CHECKING(for mysql_real_escape_string support) MYSQL_FUNCTION_TEST=`strings ${MYSQLLIBS}/libmysqlclient.so | grep mysql_real_escape_string` if test "x$MYSQL_FUNCTION_TEST" = x then EXTRA_MYSQL_DEF="-DOLD_MYSQL=1 " AC_MSG_RESULT(found old MySQL) else AC_MSG_RESULT(found new MySQL) fi fi ]) dnl dnl Check whether the user wants log IP-addresses as strings rather dnl than as unsigned long-integers to his MySQL-database. Since this dnl feature is only used in ulogd_MYSQL.c, there are no checks in any dnl way. dnl AC_ARG_WITH(mysql-log-ip-as-string, --with-mysql-log-ip-as-string log IPs as string rather than as unsigned long-integer. ,[ EXTRA_MYSQL_DEF="${EXTRA_MYSQL_DEF} -DIP_AS_STRING=1" AC_MSG_WARN(the use of --with-mysql-log-ip-as-string is discouraged) ]) dnl dnl test for libxml2 dnl AC_ARG_WITH(libxml2, --with-libxml= libxml2 installed in ,[ if test $withval != yes then dir=$withval else dir="/usr/local" fi]) libxmldir="" AC_MSG_CHECKING(for LIBXML2 files) for d in $dir/bin /usr/bin /usr/local/bin /usr/local/libxml2/bin /opt/libxml2/bin /opt/packages/libxml2/bin do if test -x $d/xml2-config then AC_MSG_RESULT(found xml2-config in $d) libxmldir=$d break fi done if test x$libxmldir = x then AC_MSG_ERROR(xml2-config not found) else XMLINCLUDES=`$libxmldir/xml2-config --cflags` AC_SUBST(XMLINCLUDES) XMLLIBS=`$libxmldir/xml2-config --libs` AC_SUBST(XMLLIBS) fi dnl dnl check for zookeeper library dnl zkdir="/usr/local/lib" AC_ARG_WITH(zookeeper, --with-zookeeperlib= zookeeper shared object located in ,[ if test $withval = no then zkdir=no AC_MSG_WARN(Building without zookeeper support.) else zkdir=$withval fi]) zklib="" if test $zkdir != no then AC_MSG_CHECKING(for zookeeper libraries) for d in $zkdir /usr/local/lib /lib /usr/lib do if test -f $d/libzookeeper_mt.so then AC_MSG_RESULT(found libzookeeper_mt.so in $d) zklib=$d/libzookeeper_mt.so break fi done if test x$zklib = x then dnl no zklib AC_MSG_WARN(Zookeeper libraries not found.) ZKLIBS="" AC_SUBST(ZKLIBS) ZKFLAGS="" AC_SUBST(ZKFLAGS) else dnl found it ZKLIBS=$zklib AC_SUBST(ZKLIBS) ZKFLAGS="-DTHREADED -DBUILD_ZOOKEEPER" AC_SUBST(ZKFLAGS) fi fi dnl dnl test for PostgreSQL dnl AC_ARG_WITH(pgsql, --with-pgsql= pgsql installed in ,[ if test $withval != yes then dir=$withval else dir="/usr/local" fi pgsqldir="" AC_MSG_CHECKING(for PGSQL files) for d in $dir/bin /usr/bin /usr/local/bin /usr/local/pgsql/bin /opt/pgsql/bin /opt/packages/pgsql/bin do if test -x $d/pg_config then AC_MSG_RESULT(found pg_config in $d) pgsqldir=$d break fi done if test x$pgsqldir = x then AC_MSG_WARN(PGSQL backend not used) else AC_DEFINE(HAVE_PGSQL) PGSQLINCLUDES=`$pgsqldir/pg_config --includedir` PGSQLLIBS=`$pgsqldir/pg_config --libdir` DATABASE_DIR="${DATABASE_DIR} pgsql" PGSQL_LIB="${DATABASE_LIB} -lpq " DATABASE_LIB_DIR="${DATABASE_LIB_DIR} -L${PGSQLLIBS} " DB_DEF="${DB_DEF} -DHAVE_PGSQL " AC_SUBST(PGSQLINCLUDES) AC_SUBST(PGSQL_LIB) fi ]) dnl dnl Check whether the user wants to log IP-addresses as strings rather dnl than integers to his pgsql-database. dnl AC_ARG_WITH(pgsql-log-ip-as-string, --with-pgsql-log-ip-as-string log IPs as string rather than as interger ,[ EXTRA_PGSQL_DEF="-DIP_AS_STRING=1" ]) dnl dnl test for sqlite3 dnl AC_ARG_WITH(sqlite3, --with-sqlite3= sqlite3 installed in ,[ if test $withval != yes then dir=$withval else dir="/usr/local" fi mysqldir="" AC_MSG_CHECKING(for sqlite3 files) for d in $dir /usr /usr/local /usr/local/sqlite3 do if test -f $d/lib/sqlite3/libsqlite3.so then AC_MSG_RESULT(found sqlite3 in $d) sqlite3dir=$d sqlite3dir_suffix=/sqlite3 break elif test -f $d/lib64/sqlite3/libsqlite3.so then AC_MSG_RESULT(found sqlite3 in $d) sqlite3dir=$d sqlite3dir_suffix=/sqlite3 break elif test -f $d/lib/libsqlite3.so then AC_MSG_RESULT(found sqlite in $d) sqlite3dir=$d sqlite3dir_suffix= break elif test -f $d/lib64/libsqlite3.so then AC_MSG_RESULT(found sqlite in $d) sqlite3dir=$d sqlite3dir_suffix= break fi done if test x$sqlite3dir = x then AC_MSG_WARN(sqlite3 backend not used) else AC_DEFINE(HAVE_SQLITE3) SQLITE3INCLUDES=${sqlite3dir}/include${sqlite3dir_suffix} SQLITE3LIBS=${sqlite3dir}/lib${sqlite3dir_suffix} DATABASE_DIR="${DATABASE_DIR} sqlite3" SQLITE3_LIB="${DATABASE_LIB} -lsqlite3 " DATABASE_LIB_DIR="${DATABASE_LIB_DIR} -L${SQLITE3LIBS} " dnl DATABASE_DRIVERS="${DATABASE_DRIVERS} ../sqlite3/mysql_driver.o " DB_DEF="${DB_DEF} -DHAVE_SQLITE3 " AC_SUBST(SQLITE3INCLUDES) AC_SUBST(SQLITE3_LIB) fi ]) dnl dnl Check whether the user wants log IP-addresses as strings rather dnl than as unsigned long-integers to his sqlite3-database. Since this dnl feature is only used in ulogd_SQLITE3.c, there are no checks in any dnl way. dnl AC_ARG_WITH(sqlite3-log-ip-as-string, --with-sqlite3-log-ip-as-string log IPs as string rather than as unsigned long-integer. ,[ EXTRA_SQLITE3_DEF="${EXTRA_SQLITE3_DEF} -DIP_AS_STRING=1" AC_MSG_WARN(the use of --with-sqlite3-log-ip-as-string is discouraged) ]) AC_SUBST(DATABASE_DIR) AC_SUBST(DATABASE_LIB) AC_SUBST(DATABASE_LIB_DIR) AC_SUBST(DB_DEF) AC_SUBST(EXTRA_MYSQL_DEF) AC_SUBST(EXTRA_PGSQL_DEF) AC_SUBST(EXTRA_SQLITE3_DEF) AC_SUBST(DATABASE_DRIVERS) AC_SUBST(HAVE_PCAP_H) AM_CONDITIONAL(HAVE_MYSQL, test x$mysqldir != x) AM_CONDITIONAL(HAVE_PGSQL, test x$pgsqldir != x) AM_CONDITIONAL(HAVE_SQLITE3, test x$sqlite3dir != x) AC_OUTPUT(extensions/Makefile doc/Makefile conffile/Makefile libipulog/Makefile mysql/Makefile pgsql/Makefile sqlite3/Makefile pcap/Makefile drl/Makefile Makefile Rules.make)