diff options
Diffstat (limited to 'contrib/libpcap/configure.in')
-rwxr-xr-x | contrib/libpcap/configure.in | 195 |
1 files changed, 188 insertions, 7 deletions
diff --git a/contrib/libpcap/configure.in b/contrib/libpcap/configure.in index 08c42f0..4846499 100755 --- a/contrib/libpcap/configure.in +++ b/contrib/libpcap/configure.in @@ -1,4 +1,4 @@ -dnl @(#) $Header: /tcpdump/master/libpcap/configure.in,v 1.94 2001/12/10 08:33:42 guy Exp $ (LBL) +dnl @(#) $Header: /tcpdump/master/libpcap/configure.in,v 1.100.2.4 2004/03/28 21:43:34 fenner Exp $ (LBL) dnl dnl Copyright (c) 1994, 1995, 1996, 1997 dnl The Regents of the University of California. All rights reserved. @@ -6,13 +6,14 @@ dnl dnl Process this file with autoconf to produce a configure script. dnl -AC_REVISION($Revision: 1.94 $) +AC_REVISION($Revision: 1.100.2.4 $) +AC_PREREQ(2.50) AC_INIT(pcap.c) AC_CANONICAL_SYSTEM -AC_LBL_C_INIT(V_CCOPT, V_INCLS) -AC_C_INLINE +AC_LBL_C_INIT(V_CCOPT, V_INCLS, V_LIBS) +AC_LBL_C_INLINE AC_C___ATTRIBUTE__ AC_LBL_CHECK_TYPE(u_int8_t, u_char) @@ -25,12 +26,21 @@ dnl in "AC_LBL_FIXINCLUDES" in "aclocal.m4" uses it, so we have to dnl test for it and set "HAVE_SYS_IOCCOM_H" if we have it, otherwise dnl "AC_LBL_FIXINCLUDES" won't work on some platforms such as Solaris. dnl -AC_CHECK_HEADERS(sys/ioccom.h sys/sockio.h ifaddrs.h limits.h netinet/if_ether.h) +AC_CHECK_HEADERS(sys/ioccom.h sys/sockio.h ifaddrs.h limits.h) +AC_CHECK_HEADERS(netinet/if_ether.h, , , [#include <sys/types.h> +#include <sys/socket.h>]) AC_LBL_FIXINCLUDES AC_CHECK_FUNCS(ether_hostton strerror strlcpy) +needsnprintf=no +AC_CHECK_FUNCS(vsnprintf snprintf,, + [needsnprintf=yes]) +if test $needsnprintf = yes; then + AC_LIBOBJ(snprintf) +fi + dnl to pacify those who hate protochain insn AC_MSG_CHECKING(if --disable-protochain option is specified) AC_ARG_ENABLE(protochain, [ --disable-protochain disable \"protochain\" insn]) @@ -70,12 +80,19 @@ elif test -r /dev/nit ; then V_PCAP=snit elif test -r /usr/include/sys/net/nit.h ; then V_PCAP=nit +elif test -r /usr/include/linux/socket.h ; then + V_PCAP=linux elif test -r /usr/include/net/raw.h ; then V_PCAP=snoop +elif test -r /usr/include/odmi.h ; then + # + # On AIX, the BPF devices might not yet be present - they're + # created the first time libpcap runs after booting. + # We check for odmi.h instead. + # + V_PCAP=bpf elif test -r /usr/include/sys/dlpi.h ; then V_PCAP=dlpi -elif test -r /usr/include/linux/socket.h ; then - V_PCAP=linux elif test -c /dev/bpf0 ; then # check again in case not readable V_PCAP=bpf elif test -c /dev/enet ; then # check again in case not readable @@ -87,6 +104,67 @@ else fi AC_MSG_RESULT($V_PCAP) +dnl +dnl Now figure out how we get a list of interfaces and addresses. +dnl +AC_CHECK_FUNC(getifaddrs,[ + # + # We have "getifaddrs()", so we use that to get the list + # + V_FINDALLDEVS=getad +],[ + # + # Well, we don't have "getifaddrs()", so we have to use some + # other mechanism; determine what that mechanism is. + # + # The first thing we use is the type of capture mechanism, + # which is somewhat of a proxy for the OS we're using. + # + case "$V_PCAP" in + + dlpi) + # + # This might be Solaris 8 or later, with SIOCGLIFCONF, + # or it might be some other OS, with just SIOCGIFCONF. + # + AC_MSG_CHECKING(whether we have SIOCGLIFCONF) + AC_CACHE_VAL(ac_cv_lbl_have_siocglifconf, + AC_TRY_COMPILE( + [#include <sys/param.h> + #include <sys/file.h> + #include <sys/ioctl.h> + #include <sys/socket.h> + #include <sys/sockio.h>], + [ioctl(0, SIOCGLIFCONF, (char *)0);], + ac_cv_lbl_have_siocglifconf=yes, + ac_cv_lbl_have_siocglifconf=no)) + AC_MSG_RESULT($ac_cv_lbl_have_siocglifconf) + if test $ac_cv_lbl_have_siocglifconf = yes ; then + V_FINDALLDEVS=glifc + else + V_FINDALLDEVS=gifc + fi + ;; + + null) + # + # We can't capture, so we can't open any capture + # devices, so we won't return any interfaces. + # + V_FINDALLDEVS=null + ;; + + *) + # + # Assume we just have SIOCGIFCONF. + # (XXX - on at least later Linux kernels, there's + # another mechanism, and we should be using that + # instead.) + # + V_FINDALLDEVS=gifc + ;; + esac]) + AC_MSG_CHECKING(if --enable-ipv6 option is specified) AC_ARG_ENABLE(ipv6, [ --enable-ipv6 build IPv6-capable version]) if test "$enable_ipv6" = "yes"; then @@ -149,6 +227,10 @@ linux) AC_LBL_TPACKET_STATS ;; +dag) + V_DEFS="$V_DEFS -DDAG_ONLY" + ;; + null) AC_MSG_WARN(cannot determine packet capture interface) AC_MSG_WARN((see the INSTALL doc for more info)) @@ -167,6 +249,99 @@ if test $ac_cv_lbl_proc_net_dev = yes; then fi AC_MSG_RESULT($ac_cv_lbl_proc_net_dev) +AC_ARG_WITH(dag, [ --with-dag[=DIR] include DAG support (located in directory DIR, if supplied). [default=yes, on BSD and Linux, if present]], +[ + if test "$withval" = no + then + want_dag=no + elif test "$withval" = yes + then + want_dag=yes + dag_root= + else + want_dag=yes + dag_root=$withval + fi +],[ + # + # Use DAG API if present, otherwise don't + # + want_dag=ifpresent + dag_root=/root/dag +]) +ac_cv_lbl_dag_api=no +case "$V_PCAP" in +linux|bpf|dag) + # + # We support the DAG API on Linux or BSD, or if we're building a + # DAG-only libpcap. + # + ;; +*) + # + # If the user explicitly requested DAG, tell them it's not + # supported. + # + # If they expressed no preference, don't include it. + # + if test $want_dag = yes; then + AC_MSG_ERROR(DAG support only available with 'linux' 'bpf' and 'dag' packet capture types) + elif test $want_dag = yes; then + want_dag=no + fi + ;; +esac + +if test "$with_dag" != no; then + AC_MSG_CHECKING(whether we have DAG API) + + if test -z "$dag_root"; then + dag_root=$srcdir/../dag + fi + + if test -r "$dag_root/tools" -a -r "$dag_root/include"; then + dag_tools_dir="$dag_root/tools" + dag_include_dir="$dag_root/include" + else + dag_tools_dir="$dag_root" + dag_include_dir="$dag_root" + fi + + ac_cv_lbl_dag_api=no + if test -r "$dag_include_dir/dagapi.h" -a -r "$dag_tools_dir/dagapi.o" -a -r "$dag_tools_dir/dagopts.o"; then + V_INCLS="$V_INCLS -I $dag_include_dir" + V_LIBS="$V_LIBS $dag_tools_dir/dagapi.o $dag_tools_dir/dagopts.o" + if test "$V_PCAP" != dag ; then + SSRC="pcap-dag.c" + fi + ac_cv_lbl_dag_api=yes + fi + if test -r "$dag_root/lib/dagreg.c"; then # DAG 2.5.x + if test -r "$dag_tools_dir/dagreg.o"; then + V_LIBS="$V_LIBS $dag_tools_dir/dagreg.o" + else + ac_cv_lbl_dag_api=no + fi + fi + dag_version= + if test $ac_cv_lbl_dag_api = yes -a -r "$dag_root/VERSION"; then + dag_version=" (`cat $dag_root/VERSION`)" + fi + AC_MSG_RESULT($ac_cv_lbl_dag_api$dag_version) + if test $ac_cv_lbl_dag_api = no; then + if test "$want_dag" = yes; then + AC_MSG_ERROR(DAG API not found under directory $dag_root; use --without-dag) + fi + else + AC_DEFINE(HAVE_DAG_API, 1, [define if you have a DAG API]) + fi +fi + +if test "$V_PCAP" = dag -a "$ac_cv_lbl_dag_api" = no; then + AC_MSG_ERROR(Specifying the capture type as 'dag' requires the DAG API to be present; use --with-dag=DIR) +fi + + AC_LBL_LEX_AND_YACC(V_LEX, V_YACC, pcap_) if test "$V_LEX" = lex ; then # Some versions of lex can't handle the definitions section of scanner.l . @@ -232,6 +407,8 @@ AC_LBL_DEVEL(V_CCOPT) AC_LBL_SOCKADDR_SA_LEN +AC_LBL_SOCKADDR_STORAGE + AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1 AC_LBL_UNALIGNED_ACCESS @@ -240,11 +417,15 @@ rm -f net ln -s ${srcdir}/bpf/net net AC_SUBST(V_CCOPT) +AC_SUBST(V_DEFS) AC_SUBST(V_INCLS) +AC_SUBST(V_LIBS) AC_SUBST(V_LEX) AC_SUBST(V_PCAP) +AC_SUBST(V_FINDALLDEVS) AC_SUBST(V_RANLIB) AC_SUBST(V_YACC) +AC_SUBST(SSRC) AC_PROG_INSTALL |