mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
980 lines
30 KiB
Text
980 lines
30 KiB
Text
dnl @(#) $Id: configure.in 6960 2009-12-19 06:22:16Z vern $ (LBL)
|
|
dnl
|
|
dnl Copyright (c) 1997, 1998, 2001, 2002
|
|
dnl The Regents of the University of California. All rights reserved.
|
|
dnl
|
|
dnl Process this file with autoconf to produce a configure script.
|
|
dnl
|
|
|
|
## broken versioning stuff
|
|
##m4_include([version.m4])
|
|
##AC_INIT([bro], VERSION_NUMBER)
|
|
|
|
## NOTICE: this sets the version at the autoconf time, not
|
|
## at configure time, so it may be out of date!
|
|
|
|
## start of changes for different versions of automake/conf
|
|
|
|
# this will work with automake 1.8.5
|
|
dnl AC_INIT(bro, esyscmd([tr -d '\n' < VERSION]))
|
|
dnl AC_CONFIG_SRCDIR(src/Active.cc)
|
|
dnl AC_CANONICAL_SYSTEM
|
|
dnl AM_INIT_AUTOMAKE
|
|
dnl AC_CONFIG_HEADER(config.h)
|
|
dnl AC_LBL_C_INIT(V_CCOPT, V_INCLS)
|
|
dnl AC_PROG_LEX
|
|
|
|
## This should work with automake 1.6
|
|
AC_INIT(src/Active.cc)
|
|
AC_CANONICAL_SYSTEM
|
|
#AM_INIT_AUTOMAKE(bro, 0.1.0)
|
|
AM_INIT_AUTOMAKE(bro, esyscmd([tr -d '\n' < VERSION]))
|
|
AM_CONFIG_HEADER(config.h)
|
|
AC_LBL_C_INIT_BEFORE_CC(V_CCOPT, V_INCLS)
|
|
AC_PROG_CC
|
|
AC_LBL_C_INIT(V_CCOPT, V_INCLS)
|
|
AM_PROG_LEX
|
|
|
|
## end of changes for versions of automake/conf
|
|
|
|
dnl Commands for funkier shell output:
|
|
BLD_ON=`./shtool echo -n -e %B`
|
|
BLD_OFF=`./shtool echo -n -e %b`
|
|
|
|
# We should install everything in /usr/local/bro{bin,lib,policy,etc}
|
|
AC_PREFIX_DEFAULT(/usr/local/bro)
|
|
|
|
dnl ################################################
|
|
dnl # Checks for programs
|
|
dnl ################################################
|
|
AC_PROG_YACC
|
|
AC_PROG_CXX
|
|
AC_PROG_INSTALL
|
|
AC_PROG_MAKE_SET
|
|
AC_PROG_RANLIB
|
|
AC_CHECK_PROGS(COMPRESS, gzip, compress)
|
|
|
|
AM_CONDITIONAL(USEV6, false)
|
|
|
|
AC_ARG_ENABLE(brov6,
|
|
[ --enable-brov6 enable IPV6 processing],
|
|
AC_DEFINE(BROv6,,[enable IPV6 processing])
|
|
AM_CONDITIONAL(USEV6,true))
|
|
AC_ARG_ENABLE(int64,
|
|
[ --enable-int64 enable use of int64 (long long) for integers],
|
|
AC_DEFINE(USE_INT64,1,[enable use of 64-bit integers]))
|
|
AC_ARG_ENABLE(activemapping,
|
|
[ --enable-activemapping enable active mapping processing],
|
|
AC_DEFINE(ACTIVE_MAPPING,,[Enable active mapping processing]))
|
|
AC_ARG_ENABLE(expire-dfa-states,
|
|
[ --enable-expire-dfa-states enable DFA state expiration],
|
|
AC_DEFINE(EXPIRE_DFA_STATES,,[Enable DFA state expiration]))
|
|
|
|
AC_ARG_ENABLE(debug,
|
|
[ --enable-debug no compiler optimizations],
|
|
debug="yes"
|
|
V_CCOPT="-g -DDEBUG"
|
|
CFLAGS="-DDEBUG `echo $CFLAGS | sed -e 's/-O2//'`"
|
|
CPPFLAGS="-DDEBUG `echo $CPPFLAGS | sed -e 's/-O2//'`"
|
|
CXXFLAGS="-DDEBUG `echo $CXXFLAGS | sed -e 's/-O2//'`",
|
|
debug="no")
|
|
|
|
AC_ARG_ENABLE(select-loop,
|
|
[ --disable-select-loop disable select-based main loop],
|
|
check_select_loop=no,
|
|
check_select_loop=yes)
|
|
|
|
AC_ARG_ENABLE(perftools,
|
|
[ --enable-perftools use Google's perftools],
|
|
use_perftools=yes,
|
|
use_perftools=no)
|
|
|
|
AC_ARG_WITH(openssl,
|
|
[ --with-openssl=PATH path to OpenSSL (needed for SSL analyzer and secure communication)],
|
|
if test "$withval" != "no" -a "$withval" != "NO"; then
|
|
use_openssl=yes
|
|
OPENSSL="$withval"
|
|
LDFLAGS="${LDFLAGS} -L${OPENSSL}/lib "
|
|
V_INCLS="${V_INCLS} -I${OPENSSL}/include"
|
|
CXXFLAGS="${CXXFLAGS} -I${OPENSSL}/include"
|
|
else
|
|
use_openssl=no
|
|
fi
|
|
)
|
|
|
|
AC_ARG_ENABLE(shippedpcap,
|
|
[ --enable-shippedpcap use the shipped version of libpcap ],
|
|
[ if test "$enableval" = yes; then
|
|
use_shippedpcap=yes
|
|
else
|
|
use_shippedpcap=no
|
|
fi ],
|
|
[ use_shippedpcap=no ])
|
|
|
|
AC_ARG_WITH(perl, [ --with-perl=PATH path/name of the Perl interpreter],
|
|
PERL=$withval, PERL=${PERL:-})
|
|
|
|
AC_ARG_WITH(dag,
|
|
[ --with-dag=PATH path to the DAG library (for native support for Endace Tech.'s DAG monitoring cards)],
|
|
if test "$withval" != "no" -a "$withval" != "NO"; then
|
|
use_dag=yes
|
|
DAGPATH="$withval"
|
|
LDFLAGS="${LDFLAGS} -L${DAGPATH}/lib "
|
|
V_INCLS="${V_INCLS} -I${DAGPATH}/include"
|
|
else
|
|
use_dag=no
|
|
fi
|
|
)
|
|
|
|
AC_ARG_WITH(binpac,
|
|
[ --with-binpac=PATH path to a binpac executable for compiling analyzer code],
|
|
BINPAC="$withval")
|
|
|
|
AC_ARG_ENABLE(nbdns,
|
|
AC_HELP_STRING([--disable-nbdns], [Disable non-blocking DNS support]),
|
|
nbdns="no", nbdns="yes")
|
|
|
|
AC_LBL_ENABLE_CHECK([activemapping binpac broccoli brov6 debug \
|
|
expire-dfa-states gtk-doc int64 openssl perftools perl \
|
|
select-loop shippedpcap broctl cluster nbdns])
|
|
|
|
dnl ################################################
|
|
dnl # Writing around broken autoconf
|
|
dnl ################################################
|
|
dnl It seems that AC_CHECK_HEADER defines a bash function called
|
|
dnl ac_fn_c_check_header_compile in the output when it is first
|
|
dnl encountered. While in general a neat idea, this fails, if the
|
|
dnl first use of AC_CHECK_HEADER is in an if/else clause. In this
|
|
dnl case the function's scope is limited to the enclosing if/els
|
|
dnl block and later calls to the function fail (more or less silently)
|
|
dnl Solution: we just place a phony AC_CHECK_HEADER call here.
|
|
AC_CHECK_HEADER([stdio.h])
|
|
AC_CHECK_HEADERS([stdio.h stdio.h])
|
|
|
|
|
|
dnl ################################################
|
|
dnl # OpenSSL
|
|
dnl ################################################
|
|
|
|
if test "$use_openssl" != "no" -a "$use_openssl" != "NO"; then
|
|
saved_libs="${LIBS}"
|
|
AC_CHECK_LIB(crypto, OPENSSL_add_all_algorithms_conf,
|
|
LIBS="${LDFLAGS} -lcrypto"
|
|
AC_CHECK_LIB(ssl, SSL_new,, AC_MSG_ERROR([Can't find SSL library]))
|
|
LIBS="${LDFLAGS} -lssl"
|
|
use_openssl=yes,
|
|
use_openssl=no
|
|
)
|
|
LIBS="${saved_libs}"
|
|
else
|
|
use_openssl=no
|
|
fi
|
|
|
|
if test "$use_openssl" != "no"; then
|
|
saved_cflags="${CFLAGS}"
|
|
CFLAGS="${CFLAGS} -I${OPENSSL}/include"
|
|
AC_CHECK_DECL(OPENSSL_add_all_algorithms_conf,,
|
|
use_openssl=no,
|
|
[#include <openssl/evp.h>])
|
|
CFLAGS="${saved_cflags}"
|
|
fi
|
|
|
|
if test "$use_openssl" = "yes"; then
|
|
# On Red Hat we may need to include Kerberos header.
|
|
# (CHECK_HEADER doesn't work here)
|
|
saved_cflags="${CFLAGS}"
|
|
CFLAGS="${CFLAGS} -I${OPENSSL}/include"
|
|
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <openssl/ssl.h>]])],,
|
|
CFLAGS="${CFLAGS} -I/usr/kerberos/include"
|
|
AC_CHECK_HEADER([krb5.h],
|
|
V_INCLS="${V_INCLS} -I/usr/kerberos/include"
|
|
AC_DEFINE(NEED_KRB5_H,,[Include krb5.h]),
|
|
use_openssl=no
|
|
AC_MSG_WARN([Can't compile OpenSSL test; disabling OpenSSL.]);
|
|
,
|
|
[#include <krb5.h>
|
|
#include <openssl/ssl.h>]
|
|
)
|
|
CFLAGS="${saved_cflags}"
|
|
)
|
|
fi
|
|
|
|
# Check for version >= 0.9.7
|
|
if test "$use_openssl" = "yes"; then
|
|
saved_libs="${LIBS}"
|
|
LIBS="${LIBS} -lssl -lcrypto"
|
|
AC_MSG_CHECKING([for OpenSSL >= 0.9.7])
|
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <openssl/evp.h>]], [[OPENSSL_add_all_algorithms_conf();]])],
|
|
AC_MSG_RESULT(yes)
|
|
use_openssl=yes,
|
|
AC_MSG_RESULT(no)
|
|
use_openssl=no)
|
|
LIBS="${saved_libs}"
|
|
fi
|
|
|
|
AM_CONDITIONAL(USE_OPENSSL, false)
|
|
if test "$use_openssl" = "yes"; then
|
|
AM_CONDITIONAL(USE_OPENSSL, true)
|
|
AC_DEFINE(USE_OPENSSL,,[Use OpenSSL])
|
|
LIBS="${LIBS} -lssl -lcrypto"
|
|
fi
|
|
|
|
# A test to see whether d2i_X509() uses const for the u_char**
|
|
# argument. Since one cannot just cast a u_char** to a const one
|
|
# (http://parashift.com/c++-faq-lite/const-correctness.html#faq-18.17)
|
|
# we test and then force a u_char** cast only when needed.
|
|
#
|
|
if test "$use_openssl" = "yes"; then
|
|
AC_MSG_CHECKING([whether d2i_X509() uses a const unsigned char**])
|
|
AC_LANG_PUSH([C++])
|
|
AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM([[#include <openssl/x509.h>]],
|
|
[[const unsigned char** cpp = 0;
|
|
X509** x = 0; d2i_X509(x, cpp, 0);]])],
|
|
AC_DEFINE(OPENSSL_D2I_X509_USES_CONST_CHAR,,[d2i_x509 uses const char**])
|
|
AC_MSG_RESULT(yes),
|
|
AC_MSG_RESULT(no))
|
|
AC_LANG_POP([C++])
|
|
fi
|
|
|
|
# do we use ssl?
|
|
AM_CONDITIONAL(USE_SSL, test "$use_openssl" = "yes")
|
|
|
|
|
|
dnl ################################################
|
|
dnl # Check for Perl executable
|
|
dnl ################################################
|
|
if test -n "$PERL"; then
|
|
if echo "$PERL" | grep '^/' >/dev/null; then
|
|
AC_MSG_CHECKING(for $PERL)
|
|
if test -s "$PERL"; then
|
|
AC_MSG_RESULT(yes)
|
|
else
|
|
AC_MSG_RESULT(no)
|
|
PERL='none'
|
|
fi
|
|
else
|
|
find_perl="$PERL"
|
|
PERL=''
|
|
fi
|
|
fi
|
|
|
|
dnl if there is no perl, go find one!
|
|
if test -z "$PERL"; then
|
|
AC_PATH_PROGS(PERL,perl5 perl,,/usr/local/bin:/opt/local/bin:/usr/bin::.)
|
|
fi
|
|
|
|
dnl if we still can't find it, warn them
|
|
if test -z "$PERL"; then
|
|
AC_MSG_WARN([Cannot find perl; please use --with-perl=/path/to/perl option.])
|
|
else
|
|
dnl this seems backwards to me .....? but works
|
|
if ${PERL} -e 'exit ($] >= 5.006001)' > /dev/null 2>&1; then
|
|
AC_MSG_WARN([Bad perl version, need perl 5.6.1 or higher.; please use --with-perl=/path/to/perl option.])
|
|
fi
|
|
fi
|
|
|
|
AC_SUBST(PERL)
|
|
|
|
dnl ################################################
|
|
dnl # Check for chown binary
|
|
dnl ################################################
|
|
AC_PATH_PROG(CHOWN, chown, ,
|
|
[/usr/sbin:/bin:/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin])
|
|
AC_SUBST(CHOWN)
|
|
|
|
dnl ################################################
|
|
dnl # OS-specific hacks and tweaks
|
|
dnl ################################################
|
|
|
|
AC_LBL_DEVEL(V_CCOPT)
|
|
AM_CONDITIONAL(USE_NMALLOC, false)
|
|
|
|
dnl Our resolver tests below include an absolute libray location.
|
|
dnl This is its default, it may be changed for some OSs.
|
|
bro_absolute_libresolv="/usr/lib/libresolv.a"
|
|
|
|
case "$target_os" in
|
|
|
|
freebsd*)
|
|
# alternate malloc is faster for FreeBSD, but needs more testing
|
|
# need to add way to set this from the command line
|
|
AM_CONDITIONAL(USE_NMALLOC, true)
|
|
;;
|
|
|
|
darwin*)
|
|
AC_MSG_CHECKING([if we need to include arpa/nameser_compat.h])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <arpa/nameser.h>]], [[HEADER *hdr; int d = NS_IN6ADDRSZ;]])], bro_ns_header_defined=yes, bro_ns_header_defined=no)
|
|
# if the header is found, we don't need compatibility
|
|
if test "x$bro_ns_header_defined" = xyes; then
|
|
AC_MSG_RESULT(no)
|
|
else
|
|
AC_DEFINE(NEED_NAMESER_COMPAT_H,,[Compatibility for Darwin])
|
|
AC_MSG_RESULT(yes)
|
|
fi
|
|
# Support for MacPorts and Fink package-management.
|
|
test -d /opt/local/lib && LDFLAGS="${LDFLAGS} -L/opt/local/lib"
|
|
test -d /sw/lib && LDFLAGS="${LDFLAGS} -L/sw/lib"
|
|
V_INCLS="${V_INCLS} -I/opt/local/include -I/sw/include"
|
|
CXXFLAGS="${CXXFLAGS} -I/opt/local/include -I/sw/include"
|
|
;;
|
|
|
|
openbsd*)
|
|
AM_CONDITIONAL(USE_NMALLOC, true)
|
|
AC_DEFINE(HAVE_OPENBSD,,[We are on a OpenBSD system])
|
|
LDFLAGS="${LDFLAGS} -L/usr/local/lib"
|
|
V_INCLS="${V_INCLS} -I/usr/local/include"
|
|
CXXFLAGS="${CXXFLAGS} -I/usr/local/include"
|
|
;;
|
|
|
|
linux*)
|
|
V_INCLS="$V_INCLS -I\${top_srcdir}/linux-include"
|
|
AC_DEFINE(HAVE_LINUX,,[We are on a Linux system])
|
|
AC_MSG_CHECKING(Linux kernel version)
|
|
AC_CACHE_VAL(ac_cv_linux_vers,
|
|
ac_cv_linux_vers=`uname -r 2>&1 | \
|
|
sed -n -e '$s/.* //' -e '$s/\..*//p'`)
|
|
AC_MSG_RESULT($ac_cv_linux_vers)
|
|
if test $ac_cv_linux_vers -lt 2 ; then
|
|
AC_MSG_ERROR(version 2 or higher required; see the INSTALL doc for more info)
|
|
fi
|
|
if test "a$build_cpu" = "ax86_64"; then
|
|
bro_absolute_libresolv="/usr/lib64/libresolv.a"
|
|
fi
|
|
;;
|
|
|
|
solaris*)
|
|
LIBS="${LIBS} -lnsl -lsocket"
|
|
;;
|
|
|
|
osf*)
|
|
dnl Workaround around ip_hl vs. ip_vhl problem in netinet/ip.h
|
|
V_CCOPT="$V_CCOPT -D__STDC__=2"
|
|
esac
|
|
|
|
dnl ################################################
|
|
dnl # Enable large file support for all platforms.
|
|
dnl # Can be disabled with --disable-largefile
|
|
dnl ################################################
|
|
AC_SYS_LARGEFILE
|
|
|
|
dnl ################################################
|
|
dnl # Checks for types and header files.
|
|
dnl ################################################
|
|
AC_HEADER_STDC
|
|
AC_LBL_TYPE_SIGNAL
|
|
AC_LBL_CHECK_TYPE(int32_t, int)
|
|
AC_LBL_CHECK_TYPE(u_int32_t, u_int)
|
|
AC_LBL_CHECK_TYPE(u_int16_t, u_short)
|
|
AC_LBL_CHECK_TYPE(u_int8_t, u_char)
|
|
AC_HEADER_TIME
|
|
|
|
AC_CHECK_HEADERS([memory.h netinet/in.h socket.h getopt.h])
|
|
AC_CHECK_HEADERS([net/ethernet.h netinet/ether.h netinet/if_ether.h sys/ethernet.h],,,
|
|
[#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#include <net/if.h>])
|
|
|
|
AC_CHECK_HEADERS([netinet/ip6.h],,,
|
|
[#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#include <net/if.h>])
|
|
|
|
AC_DEFUN([AC_C_SOCKLEN_T],
|
|
[AC_CACHE_CHECK(for socklen_t, ac_cv_c_socklen_t,
|
|
[
|
|
AC_TRY_COMPILE([
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
],[
|
|
socklen_t foo;
|
|
],[
|
|
ac_cv_c_socklen_t=yes
|
|
],[
|
|
ac_cv_c_socklen_t=no
|
|
])
|
|
])
|
|
if test $ac_cv_c_socklen_t = no; then
|
|
AC_DEFINE(socklen_t, int, [define to int if socklen_t not available])
|
|
fi
|
|
])
|
|
|
|
AC_C_SOCKLEN_T
|
|
|
|
AC_BRO_SYSLOG_INT
|
|
AC_BRO_SOCK_DECL
|
|
|
|
dnl ################################################
|
|
dnl # PCAP stuff.
|
|
dnl ################################################
|
|
|
|
# ensure we are either YES or NO
|
|
if test "$use_shippedpcap" = "no" ; then
|
|
pcap_local="NO"
|
|
pcapmsg="system-provided"
|
|
AM_CONDITIONAL(USE_LOCALPCAP, false)
|
|
else
|
|
pcap_local="YES"
|
|
pcapmsg="shipped with Bro"
|
|
AM_CONDITIONAL(USE_LOCALPCAP, true)
|
|
fi
|
|
|
|
# if not using local version, find one on the system
|
|
if test "$pcap_local" = "NO"; then
|
|
AC_LBL_LIBPCAP(V_PCAPDEP, V_INCLS)
|
|
CPPFLAGS="$CPPFLAGS $V_INCLS"
|
|
AC_CHECK_HEADERS(pcap-int.h)
|
|
AC_CHECK_FUNCS(bpf_set_bufsize)
|
|
dnl ################################################
|
|
dnl # Check whether pcap provides pcap_version
|
|
dnl ################################################
|
|
AC_MSG_CHECKING([for pcap_version in libpcap])
|
|
AC_LINK_IFELSE(
|
|
[AC_LANG_PROGRAM([extern char pcap_version[];], [puts(pcap_version);])],
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE(PCAP_VERSION_STRING,,[Have a version string in libpcap]),
|
|
AC_MSG_RESULT(no))
|
|
dnl ################################################
|
|
dnl # Check whether linking to pcap works
|
|
dnl ################################################
|
|
AC_CHECK_LIB(pcap, main, , AC_MSG_ERROR([Bro requires pcap - install from aux/ if necessary.]))
|
|
else
|
|
# we have to define the abilites of the local pcap
|
|
# as it hasn't been unpacked/configured/installed
|
|
# yet and we can't query it.
|
|
AC_DEFINE(HAVE_PCAP_INT_H, 1, [Define to 1 if you have the <pcap-int.h> header file.])
|
|
AC_DEFINE(HAVE_BPF_SET_BUFSIZE, 0, [Define to 1 if you have the bpf_set_bufsize function.])
|
|
AC_DEFINE(PCAP_VERSION_STRING, 1, [Have a version string in libpcap])
|
|
AC_DEFINE(HAVE_LIBPCAP, 1, [Define to 1 if you have the pcap library (-lpcap).])
|
|
fi
|
|
|
|
dnl AC_CHECK_HEADERS(pcap-int.h)
|
|
dnl AC_CHECK_FUNCS(bpf_set_bufsize)
|
|
|
|
dnl ################################################
|
|
dnl # STL compatibility tests.
|
|
dnl ################################################
|
|
|
|
dnl # Whether basic_string<> requires additional
|
|
dnl # definitions for char_traits. In that case, we
|
|
dnl # fall back to vector.
|
|
dnl #
|
|
AC_MSG_CHECKING([if char_traits defines all methods])
|
|
AC_LANG_PUSH([C++])
|
|
AC_LINK_IFELSE(
|
|
[AC_LANG_PROGRAM([[
|
|
#include <string>
|
|
using namespace std;
|
|
class Foo { };
|
|
]], [[
|
|
char_traits<Foo*> foo;
|
|
Foo f;
|
|
Foo *fp;
|
|
foo.assign(&fp, 10, &f);]])],
|
|
AC_MSG_RESULT([yes])
|
|
basic_string_works=yes,
|
|
AC_MSG_RESULT([no])
|
|
basic_string_works=no
|
|
AC_DEFINE(BASIC_STRING_BROKEN,,[basic_string not usable with non-char template arg]))
|
|
AC_LANG_POP([C++])
|
|
|
|
dnl ################################################
|
|
dnl # Include the Broccoli tree in aux/broccoli in
|
|
dnl # the setup, unless specifically disabled.
|
|
dnl ################################################
|
|
AC_ARG_ENABLE(broccoli,
|
|
AC_HELP_STRING([--disable-broccoli], [Do not build/package Broccoli]),
|
|
broccoli="no", broccoli="yes")
|
|
|
|
AM_CONDITIONAL(USE_BROCCOLI, test "x$broccoli" = xyes)
|
|
if test "x$broccoli" = xyes; then
|
|
AC_CONFIG_SUBDIRS(aux/broccoli)
|
|
fi
|
|
|
|
dnl ################################################
|
|
dnl # Include the broctl tree in aux/broctl into
|
|
dnl # the setup, unless specifically disabled.
|
|
dnl # Per default, we configure it in standalone mode;
|
|
dnl # if --enable-cluster is given, we switch to
|
|
dnl # cluster mode.
|
|
dnl ################################################
|
|
AC_ARG_ENABLE(broctl,
|
|
AC_HELP_STRING([--disable-broctl], [Do not build/package broctl framework]),
|
|
broctl=$enableval, broctl="yes")
|
|
|
|
AC_ARG_ENABLE(cluster,
|
|
AC_HELP_STRING([--enable-cluster], [Configure broctl for cluster usage]),
|
|
cluster=$enableval, cluster="no")
|
|
|
|
dnl ################################################
|
|
dnl # Include the Binpac tree in aux/binpac in the
|
|
dnl # build, unless the user selected another binpac
|
|
dnl # via --with-binpac=.
|
|
dnl ################################################
|
|
if test "$BINPAC" = ""; then
|
|
AC_CONFIG_SUBDIRS(aux/binpac)
|
|
BINPAC="\${top_builddir}/aux/binpac/src/binpac"
|
|
binpacmsg="shipped with Bro"
|
|
else # Check (somewhat) whether the binpac given is valid
|
|
AC_MSG_CHECKING([whether given binpac is executable])
|
|
if test -x "$BINPAC"; then
|
|
AC_MSG_RESULT(yes)
|
|
else
|
|
AC_MSG_RESULT(no)
|
|
echo "Please check whether $BINPAC is correct."
|
|
exit 1
|
|
fi
|
|
binpacmsg="$BINPAC"
|
|
fi
|
|
|
|
AC_SUBST(BINPAC)
|
|
|
|
dnl ################################################
|
|
dnl # DNS resolver checks.
|
|
dnl ################################################
|
|
dnl
|
|
dnl Check whether our arpa/nameser.h provides type ns_msg.
|
|
dnl If not, we disable nonblocking DNS lookups.
|
|
dnl We assume worst case first and improve on it below.
|
|
AM_CONDITIONAL(USE_NBDNS, false)
|
|
|
|
dnl Add potential header locations to path
|
|
if test -d /usr/local/include/bind; then
|
|
CFLAGS="$CFLAGS -I/usr/local/include/bind"
|
|
fi
|
|
|
|
AC_CHECK_TYPE(ns_msg, bro_check_nb_dns=yes, bro_check_nb_dns=no, [#include <arpa/nameser.h>])
|
|
|
|
if test $bro_check_nb_dns = no; then
|
|
AC_MSG_NOTICE([Nonblocking DNS disabled.])
|
|
use_nb_dns=no
|
|
else
|
|
dnl We will check for ns_initparse and res_mkquery using a number
|
|
dnl of resolver library variations, a list of which we build up now.
|
|
bro_resolver_options="none -lresolv ${bro_absolute_libresolv} -lbind"
|
|
|
|
save_cflags="$CFLAGS"
|
|
save_ldflags="$LDFLAGS"
|
|
save_libs="$LIBS"
|
|
|
|
dnl Okay now try to link both symbols with each of the resolver
|
|
dnl location variants. As soon as one works, we're happy.
|
|
for res in $bro_resolver_options; do
|
|
|
|
AC_MSG_CHECKING([for ns_inittab/res_mkquery with resolver '$res'])
|
|
|
|
dnl "none" just means "try without any additional flags".
|
|
if test "$res" = "none"; then
|
|
res=""
|
|
fi
|
|
|
|
CFLAGS="${save_cflags}"
|
|
LDFLAGS="${save_ldflags}"
|
|
LIBS="${save_libs} $res"
|
|
|
|
dnl In the generic -lbind case, we check for the existence
|
|
dnl of a number of directories and add them to the relevant
|
|
dnl paths.
|
|
dnl
|
|
if test "$res" = "-lbind"; then
|
|
if test -d /usr/local/bind/lib; then
|
|
LDFLAGS="$LDFLAGS -L/usr/local/bind/lib"
|
|
fi
|
|
|
|
if test -d /usr/local/lib; then
|
|
LDFLAGS="$LDFLAGS -L/usr/local/lib"
|
|
fi
|
|
fi
|
|
|
|
bro_ns_initparse_works=no
|
|
bro_res_mkquery_works=no
|
|
|
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <arpa/nameser.h>]],
|
|
[[ns_initparse(0,0,0);]])],
|
|
bro_ns_initparse_works=yes)
|
|
|
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#include <arpa/nameser.h>
|
|
#include <resolv.h>]],
|
|
[[int (*p)() = res_mkquery]])], bro_res_mkquery_works=yes)
|
|
|
|
if test $bro_ns_initparse_works = yes && test $bro_res_mkquery_works = yes && test $nbdns = yes; then
|
|
AC_MSG_RESULT(yes)
|
|
AC_MSG_NOTICE([Nonblocking DNS enabled.])
|
|
|
|
dnl Make sure that nb_dns.o is linked in.
|
|
NBDNS="nb_dns.o"
|
|
AC_SUBST(NBDNS)
|
|
|
|
AM_CONDITIONAL(USE_NBDNS, true)
|
|
AC_DEFINE(HAVE_NB_DNS,,[async dns support])
|
|
use_nb_dns=yes
|
|
break
|
|
else
|
|
AC_MSG_RESULT(no)
|
|
fi
|
|
done
|
|
|
|
if test "x$NBDNS" != "xnb_dns.o"; then
|
|
AC_MSG_NOTICE([Nonblocking DNS disabled.])
|
|
use_nb_dns=no
|
|
CFLAGS="${save_cflags}"
|
|
LDFLAGS="${save_ldflags}"
|
|
LIBS="${save_libs}"
|
|
fi
|
|
fi
|
|
|
|
dnl ################################################
|
|
dnl # Checks for library functions.
|
|
dnl ################################################
|
|
|
|
AC_FUNC_MEMCMP
|
|
AC_FUNC_STRFTIME
|
|
AC_CHECK_FUNCS(strerror strsep strcasestr mallinfo getopt_long)
|
|
AC_SEARCH_LIBS(inet_aton, resolv)
|
|
|
|
# We use deflatePrime() to make sure that zlib is recent enough.
|
|
AC_CHECK_LIB(z, deflatePrime)
|
|
|
|
# Libmagic
|
|
have_libmagic=yes
|
|
AC_CHECK_HEADERS([magic.h],,have_libmagic=no)
|
|
AC_CHECK_LIB(magic,magic_open,,have_libmagic=no)
|
|
|
|
# Libclamav
|
|
# have_libclamav=yes
|
|
# AC_CHECK_HEADERS([clamav.h],,have_libclamav=no)
|
|
# AC_CHECK_LIB(clamav,cl_retdbdir,,have_libclamav=no)
|
|
|
|
# Libclamav is broken because of changed API.
|
|
have_libclamav=no
|
|
|
|
if test "$have_libclamav" = "yes"; then
|
|
AC_DEFINE(USE_LIBCLAMAV,,[Use libclamav])
|
|
fi
|
|
|
|
# LibGeoIP
|
|
have_libgeoip=yes
|
|
AC_CHECK_HEADERS([GeoIPCity.h],,have_libgeoip=no)
|
|
if test "$have_libgeoip" = "yes"; then
|
|
AC_CHECK_LIB(GeoIP,GeoIP_open_type,,have_libgeoip=no)
|
|
fi
|
|
if test "$have_libgeoip" = "yes"; then
|
|
AC_DEFINE(USE_GEOIP,,[GeoIP geographic lookup functionality])
|
|
fi
|
|
|
|
dnl ################################################
|
|
dnl # Terminal library support
|
|
dnl ################################################
|
|
|
|
bro_have_termlibrary=no
|
|
|
|
dnl 1) Check if termcap is available
|
|
AC_CHECK_LIB(termcap, tgetnum,
|
|
[AC_CHECK_HEADERS([termcap.h term.h],
|
|
LIBS="${LIBS} -ltermcap"
|
|
bro_have_termlibrary=yes)])
|
|
|
|
dnl 2) Check if curses is available instaed
|
|
if test "$bro_have_termlibrary" = no; then
|
|
AC_CHECK_LIB(curses, tgetnum,
|
|
[AC_CHECK_HEADERS([curses.h term.h],
|
|
LIBS="${LIBS} -lcurses"
|
|
bro_have_termlibrary=yes)])
|
|
fi
|
|
|
|
dnl 3) Check for ncurses as a final resort
|
|
if test "$bro_have_termlibrary" = no; then
|
|
AC_CHECK_LIB(ncurses, tgetnum,
|
|
[AC_CHECK_HEADERS([ncurses.h curses.h term.h],
|
|
LIBS="${LIBS} -lncurses"
|
|
bro_have_termlibrary=yes)])
|
|
fi
|
|
|
|
if test "$bro_have_termlibrary" != yes; then
|
|
AC_MSG_RESULT(no)
|
|
AC_MSG_ERROR([No terminal emulation library found! Consider installing termcap, curses, or ncurses.])
|
|
else
|
|
AC_MSG_RESULT(yes)
|
|
fi
|
|
|
|
dnl Check whether we have readline and history libraries
|
|
AC_CHECK_HEADER([readline/readline.h], bro_readline=yes)
|
|
AC_CHECK_HEADER([readline/history.h], bro_history=yes)
|
|
AC_CHECK_LIB(readline, using_history,, bro_libreadline=no)
|
|
|
|
if test "$bro_history" = yes; then
|
|
AC_CHECK_MEMBER([HISTORY_STATE.entries],
|
|
[bro_history_entries=yes], [],
|
|
[#include <stdio.h>
|
|
#include <readline/history.h>])
|
|
fi
|
|
|
|
if test "$bro_readline" = yes -a \
|
|
"$bro_history" = yes -a \
|
|
"$bro_libreadline" != no -a \
|
|
"$bro_history_entries" = yes; then
|
|
AC_DEFINE(HAVE_READLINE,1,[line editing & history powers])
|
|
fi
|
|
|
|
AC_C_BIGENDIAN(
|
|
AC_DEFINE(WORDS_BIGENDIAN,1,[whether words are stored with the most significant byte first])
|
|
dnl This is intentionally named differently so as to not collide with WORDS_BIGENDIAN
|
|
HOST_BIGENDIAN="#define HOST_BIGENDIAN 1"
|
|
AC_SUBST(HOST_BIGENDIAN))
|
|
|
|
AC_CHECK_TYPES([union semun, struct sembuf],[],[],
|
|
[#include <sys/types.h>
|
|
#include <sys/sem.h>
|
|
])
|
|
|
|
# see if we have sin_len
|
|
AC_CHECK_MEMBER(struct sockaddr_in.sin_len,
|
|
[AC_DEFINE(SIN_LEN,,[have sin_len field in sockaddr_in])],,
|
|
[
|
|
#if HAVE_SYS_TYPES_H
|
|
# include <sys/types.h>
|
|
#endif
|
|
#if HAVE_SYS_SOCKET_H
|
|
# include <sys/socket.h>
|
|
#endif
|
|
#if HAVE_NETINET_IN_H
|
|
# include <netinet/in.h>
|
|
#endif
|
|
])
|
|
|
|
AC_CHECK_SIZEOF(long long)
|
|
AC_CHECK_SIZEOF(long int)
|
|
AC_CHECK_SIZEOF(void *)
|
|
|
|
# Per default we do not use the select-based main loop. We activate it only if
|
|
# (i) the user requests it
|
|
# (ii) we know the OS to support selectable pcap fds
|
|
use_select_loop=no
|
|
|
|
if test $check_select_loop = yes; then
|
|
case "$target_os" in
|
|
|
|
linux*)
|
|
# Linux should support selectable at least since 2.2 (not sure
|
|
# about earlier versions)
|
|
AC_MSG_CHECKING(Linux kernel version support selectable fds)
|
|
AC_CACHE_VAL(ac_cv_linux_major_vers,
|
|
ac_cv_linux_major_vers=`uname -r 2>&1 | \
|
|
sed 's/-.*$//g' | awk -v FS='.' '{print $1}'`)
|
|
AC_CACHE_VAL(ac_cv_linux_minor_vers,
|
|
ac_cv_linux_minor_vers=`uname -r 2>&1 | \
|
|
sed 's/-.*$//g' | awk -v FS='.' '{print $2}'`)
|
|
|
|
linux_version=`expr $ac_cv_linux_major_vers '*' 10 '+' $ac_cv_linux_minor_vers`
|
|
if test $linux_version -gt 21; then
|
|
use_select_loop=yes
|
|
AC_MSG_RESULT($ac_cv_linux_major_vers.$ac_cv_linux_minor_vers is ok)
|
|
else
|
|
AC_MSG_RESULT($ac_cv_linux_major_vers.$ac_cv_linux_minor_vers is too old)
|
|
fi
|
|
;;
|
|
|
|
freebsd*)
|
|
# FreeBSD supports selectable fds correctly since 4.6.
|
|
AC_MSG_CHECKING(FreeBSD kernel version support selectable fds)
|
|
AC_CACHE_VAL(ac_cv_freebsd_major_vers,
|
|
ac_cv_freebsd_major_vers=`uname -r 2>&1 | \
|
|
sed 's/-.*$//g' | awk -v FS='.' '{print $1}'`)
|
|
AC_CACHE_VAL(ac_cv_freebsd_minor_vers,
|
|
ac_cv_freebsd_minor_vers=`uname -r 2>&1 | \
|
|
sed 's/-.*$//g' | awk -v FS='.' '{print $2}'`)
|
|
|
|
freebsd_version=`expr $ac_cv_freebsd_major_vers '*' 10 '+' $ac_cv_freebsd_minor_vers`
|
|
if test $freebsd_version -gt 45; then
|
|
use_select_loop=yes
|
|
AC_MSG_RESULT($ac_cv_freebsd_major_vers.$ac_cv_freebsd_minor_vers is ok)
|
|
else
|
|
AC_MSG_RESULT($ac_cv_freebsd_major_vers X $ac_cv_freebsd_minor_vers is too old)
|
|
fi
|
|
;;
|
|
|
|
esac
|
|
fi
|
|
|
|
if test "$use_select_loop" = "yes"; then
|
|
AC_DEFINE(USE_SELECT_LOOP,,[Use select-based main loop])
|
|
fi
|
|
|
|
dnl ################################################
|
|
dnl # Endace DAG support
|
|
dnl ################################################
|
|
|
|
if test "$use_dag" != "no" -a "$use_dag" != "NO"; then
|
|
AC_CHECK_LIB(dag, dag_open, use_dag=yes, use_dag=no)
|
|
AC_CHECK_HEADER(pcap.h,,use_dag=no)
|
|
|
|
if test "$use_dag" = "yes"; then
|
|
AC_DEFINE(USE_DAG,,[Include Endace DAG support])
|
|
LIBS="${LIBS} -ldag"
|
|
AC_SUBST(WANT_DAG_OBJ, "\$(DAG_OBJ)")
|
|
else
|
|
AC_SUBST(WANT_DAG_OBJ, "")
|
|
fi
|
|
else
|
|
use_dag=no
|
|
fi
|
|
|
|
dnl ################################################
|
|
dnl # If configured with --enable-perftools, look for
|
|
dnl # Google's perftools to do heap checking.
|
|
dnl ################################################
|
|
|
|
if test "$use_perftools" != "no" -a "$use_perftools" != "NO"; then
|
|
AC_LANG_PUSH(C++)
|
|
saved_libs="${LIBS}"
|
|
LIBS="${LIBS} -ltcmalloc -lpthread"
|
|
AC_TRY_LINK([#include <google/heap-checker.h>],
|
|
[HeapLeakChecker heap_checker("test");],
|
|
[use_perftools="yes"],[use_perftools="no"])
|
|
LIBS="${saved_libs}"
|
|
AC_LANG_POP([C++])
|
|
|
|
if test "$use_perftools" = "yes"; then
|
|
AC_DEFINE(USE_PERFTOOLS,,[Use Google's perftools])
|
|
LIBS="${LIBS} -ltcmalloc -lpthread"
|
|
fi
|
|
fi
|
|
|
|
###############################
|
|
# Configure broctl.
|
|
###############################
|
|
|
|
# Need Python >= 2.4.
|
|
have_python=no
|
|
AC_PATH_TOOL(pybin, python, "")
|
|
if test "x$pybin" != x -a "x$broctl" = xyes; then
|
|
AC_MSG_CHECKING([for Python >= 2.4])
|
|
AC_CACHE_VAL(ac_cv_python_major_vers,
|
|
ac_cv_python_major_vers=`python -V 2>&1 | \
|
|
sed 's/^Python //g' | awk -v FS='.' '{print $1}'`)
|
|
AC_CACHE_VAL(ac_cv_python_minor_vers,
|
|
ac_cv_python_minor_vers=`python -V 2>&1 | \
|
|
sed 's/^Python //g' | awk -v FS='.' '{print $2}'`)
|
|
|
|
pyversion=`expr $ac_cv_python_major_vers '*' 10 '+' $ac_cv_python_minor_vers`
|
|
if test $pyversion -ge 24; then
|
|
AC_MSG_RESULT([yes])
|
|
have_python=yes
|
|
fi
|
|
|
|
AC_CHECK_PROG(have_python, python-config, $have_python, no)
|
|
|
|
if test "x$have_python" != xyes; then
|
|
AC_MSG_RESULT([no, disabling broctl])
|
|
fi
|
|
fi
|
|
|
|
if test "x$have_python" != xyes; then
|
|
broctl=no
|
|
fi
|
|
|
|
AM_CONDITIONAL(USE_BROCTL, test "x$broctl" = xyes)
|
|
|
|
if test "x$broctl" = xyes; then
|
|
if test "x$cluster" = xno; then
|
|
standalone="--standalone"
|
|
fi
|
|
echo "=== configuring in aux/broctl"
|
|
|
|
test -d aux || mkdir aux
|
|
test -d aux/broctl || mkdir aux/broctl
|
|
|
|
${srcdir}/aux/broctl/configure --prefix=${prefix} --builddir=`pwd`/aux/broctl --brodist=${srcdir} ${standalone}
|
|
|
|
AC_CONFIG_SUBDIRS([aux/broctl/aux/capstats])
|
|
fi
|
|
|
|
if test "$use_xqilla" = "yes"; then
|
|
LIBS="${LIBS} -lxqilla"
|
|
fi
|
|
|
|
# grab the hostname
|
|
BROHOST=`hostname 2>/dev/null` || `uname -n 2>/dev/null`
|
|
AC_SUBST(BROHOST)
|
|
|
|
dnl Setup pcap path just before creating files, this way tests won't fail
|
|
dnl with 'can't find libpcap' when we use the local pcap which hasn't
|
|
dnl been unpacked yet
|
|
|
|
if test "$pcap_local" = "YES"; then
|
|
LIBS="-L\${top_srcdir}/aux/libpcap-0.9.8 -lpcap $LIBS"
|
|
V_INCLS="$V_INCLS -I\${top_builddir}/aux/libpcap-0.9.8"
|
|
fi
|
|
|
|
AC_SUBST(V_CCOPT)
|
|
AC_SUBST(V_INCLS)
|
|
AC_SUBST(LDFLAGS)
|
|
|
|
|
|
dnl AC_SUBST(V_PCAPDEP) dnl (libpcap dependancies -- not used)
|
|
AC_OUTPUT([Makefile
|
|
src/Makefile
|
|
doc/Makefile
|
|
doc/ref-manual/Makefile
|
|
doc/quick-start/Makefile
|
|
doc/user-manual/Makefile
|
|
aux/adtrace/Makefile
|
|
aux/cf/Makefile
|
|
aux/hf/Makefile
|
|
aux/nftools/Makefile
|
|
aux/scripts/Makefile
|
|
aux/bdcat/Makefile
|
|
aux/rst/Makefile
|
|
aux/Makefile
|
|
policy/Makefile
|
|
policy/sigs/Makefile
|
|
policy/time-machine/Makefile
|
|
scripts/Makefile
|
|
scripts/bro_config
|
|
scripts/bro.rc
|
|
scripts/localnetMAC.pl
|
|
scripts/s2b/Makefile
|
|
scripts/s2b/bro-include/Makefile
|
|
scripts/s2b/example_bro_files/Makefile
|
|
scripts/s2b/etc/Makefile
|
|
scripts/s2b/bin/Makefile
|
|
scripts/s2b/pm/Makefile
|
|
scripts/s2b/snort_rules2.2/Makefile
|
|
],
|
|
[chmod +x scripts/bro_config
|
|
chmod +x scripts/localnetMAC.pl]
|
|
)
|
|
|
|
if test "$use_openssl" != "yes"; then
|
|
OPENSSL=""
|
|
#else
|
|
# AC_OUTPUT(aux/bdcat/Makefile)
|
|
fi
|
|
|
|
echo
|
|
echo " "${BLD_ON}"Bro Configuration Summary"${BLD_OFF}
|
|
echo "=========================================================="
|
|
echo
|
|
echo " - Debugging enabled: "${BLD_ON}$debug${BLD_OFF}
|
|
echo " - OpenSSL support: "${BLD_ON}$use_openssl $OPENSSL${BLD_OFF}
|
|
echo " - Non-blocking main loop: "${BLD_ON}$use_select_loop${BLD_OFF}
|
|
echo " - Non-blocking resolver: "${BLD_ON}$use_nb_dns${BLD_OFF}
|
|
echo " - Installation prefix: "${BLD_ON}$prefix${BLD_OFF}
|
|
echo " - Perl interpreter: "${BLD_ON}$PERL${BLD_OFF}
|
|
echo " - Using basic_string: "${BLD_ON}$basic_string_works${BLD_OFF}
|
|
echo " - Using libmagic: "${BLD_ON}$have_libmagic${BLD_OFF}
|
|
# echo " - Using libclamav: "${BLD_ON}$have_libclamav${BLD_OFF}
|
|
echo " - Using perftools: "${BLD_ON}$use_perftools${BLD_OFF}
|
|
echo " - Binpac used: "${BLD_ON}$binpacmsg${BLD_OFF}
|
|
echo " - Using libGeoIP: "${BLD_ON}$have_libgeoip${BLD_OFF}
|
|
echo " - Enabled broctl: "${BLD_ON}$broctl${BLD_OFF}
|
|
echo " - Enabled cluster: "${BLD_ON}$cluster${BLD_OFF}
|
|
echo " - Pcap used: "${BLD_ON}$pcapmsg${BLD_OFF}
|
|
echo
|
|
exit 0
|