Blame configure.ac

Packit 209cc3
dnl
Packit 209cc3
dnl Copyright (c) 1994, 1995, 1996, 1997
Packit 209cc3
dnl	The Regents of the University of California.  All rights reserved.
Packit 209cc3
dnl
Packit 209cc3
dnl Process this file with autoconf to produce a configure script.
Packit 209cc3
dnl
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# See
Packit 209cc3
#
Packit 209cc3
#	http://ftp.gnu.org/gnu/config/README
Packit 209cc3
#
Packit 209cc3
# for the URLs to use to fetch new versions of config.guess and
Packit 209cc3
# config.sub.
Packit 209cc3
#
Packit 209cc3
Packit 209cc3
AC_PREREQ(2.64)
Packit 209cc3
Packit 209cc3
AC_INIT(pcap, m4_esyscmd_s([cat VERSION]))
Packit 209cc3
AC_CONFIG_SRCDIR(pcap.c)
Packit 209cc3
AC_SUBST(PACKAGE_NAME)
Packit 209cc3
Packit 209cc3
AC_CANONICAL_SYSTEM
Packit 209cc3
Packit 209cc3
AC_LBL_C_INIT_BEFORE_CC(V_CCOPT, V_INCLS)
Packit 209cc3
#
Packit 209cc3
# Try to enable as many C99 features as we can.
Packit 209cc3
# At minimum, we want C++/C99-style // comments.
Packit 209cc3
#
Packit 209cc3
AC_PROG_CC_C99
Packit 209cc3
if test "$ac_cv_prog_cc_c99" = "no"; then
Packit 209cc3
	AC_MSG_WARN([The C compiler does not support C99; there may be compiler errors])
Packit 209cc3
fi
Packit 209cc3
AC_LBL_C_INIT(V_CCOPT, V_INCLS)
Packit 209cc3
AC_LBL_SHLIBS_INIT
Packit 209cc3
AC_LBL_C_INLINE
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# Try to arrange for large file support.
Packit 209cc3
#
Packit 209cc3
AC_SYS_LARGEFILE
Packit 209cc3
AC_FUNC_FSEEKO
Packit 209cc3
Packit 209cc3
dnl
Packit 209cc3
dnl Even if <net/bpf.h> were, on all OSes that support BPF, fixed to
Packit 209cc3
dnl include <sys/ioccom.h>, and we were to drop support for older
Packit 209cc3
dnl releases without that fix, so that pcap-bpf.c doesn't need to
Packit 209cc3
dnl include <sys/ioccom.h>, the test program in "AC_LBL_FIXINCLUDES"
Packit 209cc3
dnl in "aclocal.m4" uses it, so we would still have to test for it
Packit 209cc3
dnl and set "HAVE_SYS_IOCCOM_H" if we have it, otherwise
Packit 209cc3
dnl "AC_LBL_FIXINCLUDES" wouldn't work on some platforms such as Solaris.
Packit 209cc3
dnl
Packit 209cc3
AC_CHECK_HEADERS(sys/ioccom.h sys/sockio.h limits.h)
Packit 209cc3
AC_CHECK_HEADERS(netpacket/packet.h)
Packit 209cc3
AC_CHECK_HEADERS(net/pfvar.h, , , [#include <sys/types.h>
Packit 209cc3
#include <sys/socket.h>
Packit 209cc3
#include <net/if.h>])
Packit 209cc3
if test "$ac_cv_header_net_pfvar_h" = yes; then
Packit 209cc3
	#
Packit 209cc3
	# Check for various PF actions.
Packit 209cc3
	#
Packit 209cc3
	AC_MSG_CHECKING(whether net/pfvar.h defines PF_NAT through PF_NORDR)
Packit 209cc3
	AC_TRY_COMPILE(
Packit 209cc3
	    [#include <sys/types.h>
Packit 209cc3
	    #include <sys/socket.h>
Packit 209cc3
	    #include <net/if.h>
Packit 209cc3
	    #include <net/pfvar.h>],
Packit 209cc3
	    [return PF_NAT+PF_NONAT+PF_BINAT+PF_NOBINAT+PF_RDR+PF_NORDR;],
Packit 209cc3
	    [
Packit 209cc3
		AC_MSG_RESULT(yes)
Packit 209cc3
		AC_DEFINE(HAVE_PF_NAT_THROUGH_PF_NORDR, 1,
Packit 209cc3
		    [define if net/pfvar.h defines PF_NAT through PF_NORDR])
Packit 209cc3
	    ],
Packit 209cc3
	    AC_MSG_RESULT(no))
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
case "$host_os" in
Packit 209cc3
linux*|uclinux*)
Packit 209cc3
	AC_CHECK_HEADERS(linux/sockios.h linux/if_bonding.h,,,
Packit 209cc3
	[
Packit 209cc3
#include <sys/socket.h>
Packit 209cc3
#include <linux/if.h>
Packit 209cc3
	])
Packit 209cc3
	;;
Packit 209cc3
esac
Packit 209cc3
Packit 209cc3
AC_LBL_FIXINCLUDES
Packit 209cc3
Packit 209cc3
AC_CHECK_FUNCS(strerror)
Packit 209cc3
AC_CHECK_FUNC(strerror_r,
Packit 209cc3
    [
Packit 209cc3
	#
Packit 209cc3
	# We have strerror_r; if we define _GNU_SOURCE, is it a
Packit 209cc3
	# POSIX-compliant strerror_r() or a GNU strerror_r()?
Packit 209cc3
	#
Packit 209cc3
	AC_MSG_CHECKING(whether strerror_r is GNU-style)
Packit 209cc3
	AC_COMPILE_IFELSE(
Packit 209cc3
	    [
Packit 209cc3
		AC_LANG_SOURCE(
Packit 209cc3
#define _GNU_SOURCE
Packit 209cc3
#include <string.h>
Packit 209cc3
Packit 209cc3
/* Define it GNU-style; that will cause an error if it's not GNU-style */
Packit 209cc3
extern char *strerror_r(int, char *, size_t);
Packit 209cc3
Packit 209cc3
int
Packit 209cc3
main(void)
Packit 209cc3
{
Packit 209cc3
	return 0;
Packit 209cc3
}
Packit 209cc3
)
Packit 209cc3
	    ],
Packit 209cc3
	    [
Packit 209cc3
	        # GNU-style
Packit 209cc3
		AC_MSG_RESULT(yes)
Packit 209cc3
		AC_DEFINE(HAVE_GNU_STRERROR_R,,
Packit 209cc3
		    [Define to 1 if you have a GNU-style `strerror_r' function.])
Packit 209cc3
	    ],
Packit 209cc3
	    [
Packit 209cc3
		AC_MSG_RESULT(no)
Packit 209cc3
		AC_DEFINE(HAVE_POSIX_STRERROR_R,,
Packit 209cc3
		    [Define to 1 if you have a POSIX-style `strerror_r' function.])
Packit 209cc3
	    ])
Packit 209cc3
    ],
Packit 209cc3
    [
Packit 209cc3
	#
Packit 209cc3
	# We don't have strerror_r; do we have strerror_s?
Packit 209cc3
	#
Packit 209cc3
	AC_CHECK_FUNCS(strerror_s)
Packit 209cc3
    ])
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# Thanks, IBM, for not providing vsyslog() in AIX!
Packit 209cc3
#
Packit 209cc3
AC_CHECK_FUNCS(vsyslog)
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# Either:
Packit 209cc3
#
Packit 209cc3
#	we have snprintf() and vsnprintf(), and have asprintf() and
Packit 209cc3
#	vasprintf();
Packit 209cc3
#
Packit 209cc3
#	we have snprintf() and vsnprintf(), but don't have asprintf()
Packit 209cc3
#	or vasprintf();
Packit 209cc3
#
Packit 209cc3
#	we have neither snprintf() nor vsnprintf(), and don't have
Packit 209cc3
#	asprintf() or vasprintf(), either.
Packit 209cc3
#
Packit 209cc3
# We assume that if we have asprintf() we have vasprintf(), as well
Packit 209cc3
# as snprintf() and vsnprintf(), and that if we have snprintf() we
Packit 209cc3
# have vsnprintf().
Packit 209cc3
#
Packit 209cc3
# For the first case, we don't need any replacement routines.
Packit 209cc3
# For the second case, we need replacement asprintf()/vasprintf()
Packit 209cc3
# routines.
Packit 209cc3
# For the third case, we need replacement snprintf()/vsnprintf() and
Packit 209cc3
# asprintf()/vasprintf() routines.
Packit 209cc3
#
Packit 209cc3
needsnprintf=no
Packit 209cc3
AC_CHECK_FUNCS(vsnprintf snprintf,,
Packit 209cc3
	[needsnprintf=yes])
Packit 209cc3
needasprintf=no
Packit 209cc3
AC_CHECK_FUNCS(vasprintf asprintf,,
Packit 209cc3
	[needasprintf=yes])
Packit 209cc3
if test $needsnprintf = yes; then
Packit 209cc3
	#
Packit 209cc3
	# We assume we have none of them; missing/snprintf.c supplies
Packit 209cc3
	# all of them.
Packit 209cc3
	#
Packit 209cc3
	AC_LIBOBJ([snprintf])
Packit 209cc3
elif test $needasprintf = yes; then
Packit 209cc3
	#
Packit 209cc3
	# We assume we have snprintf()/vsnprintf() but lack
Packit 209cc3
	# asprintf()/vasprintf(); missing/asprintf.c supplies
Packit 209cc3
	# the latter (using vsnprintf()).
Packit 209cc3
	#
Packit 209cc3
	AC_LIBOBJ([asprintf])
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
needstrlcat=no
Packit 209cc3
AC_CHECK_FUNCS(strlcat,,
Packit 209cc3
	[needstrlcat=yes])
Packit 209cc3
if test $needstrlcat = yes; then
Packit 209cc3
	AC_LIBOBJ([strlcat])
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
needstrlcpy=no
Packit 209cc3
AC_CHECK_FUNCS(strlcpy,,
Packit 209cc3
	[needstrlcpy=yes])
Packit 209cc3
if test $needstrlcpy = yes; then
Packit 209cc3
	AC_LIBOBJ([strlcpy])
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
needstrtok_r=no
Packit 209cc3
AC_CHECK_FUNCS(strtok_r,,
Packit 209cc3
	[needstrtok_r=yes])
Packit 209cc3
if test $needstrtok_r = yes; then
Packit 209cc3
	AC_LIBOBJ([strtok_r])
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# Do we have ffs(), and is it declared in <strings.h>?
Packit 209cc3
#
Packit 209cc3
AC_CHECK_FUNCS(ffs)
Packit 209cc3
if test "$ac_cv_func_ffs" = yes; then
Packit 209cc3
	#
Packit 209cc3
	# We have ffs(); is it declared in <strings.h>?
Packit 209cc3
	#
Packit 209cc3
	# This test fails if we don't have <strings.h> or if we do
Packit 209cc3
	# but it doesn't declare ffs().
Packit 209cc3
	#
Packit 209cc3
	AC_CHECK_DECL(ffs,
Packit 209cc3
	    [
Packit 209cc3
		AC_DEFINE(STRINGS_H_DECLARES_FFS,,
Packit 209cc3
		    [Define to 1 if strings.h declares `ffs'])
Packit 209cc3
	    ],,
Packit 209cc3
	    [
Packit 209cc3
#include <strings.h>
Packit 209cc3
	    ])
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# Do this before checking for ether_hostton(), as it's a
Packit 209cc3
# "getaddrinfo()-ish function".
Packit 209cc3
#
Packit 209cc3
AC_LBL_LIBRARY_NET
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# Check for reentrant versions of getnetbyname_r(), as provided by
Packit 209cc3
# Linux (glibc), Solaris/IRIX, and AIX (with three different APIs!).
Packit 209cc3
# If we don't find one, we just use getnetbyname(), which uses
Packit 209cc3
# thread-specific data on many platforms, but doesn't use it on
Packit 209cc3
# NetBSD or OpenBSD, and may not use it on older versions of other
Packit 209cc3
# platforms.
Packit 209cc3
#
Packit 209cc3
# Only do the check if we have a declaration of getnetbyname_r();
Packit 209cc3
# without it, we can't check which API it has.  (We assume that
Packit 209cc3
# if there's a declaration, it has a prototype, so that the API
Packit 209cc3
# can be checked.)
Packit 209cc3
#
Packit 209cc3
AC_CHECK_DECL(getnetbyname_r,
Packit 209cc3
    [
Packit 209cc3
	AC_MSG_CHECKING([for the Linux getnetbyname_r()])
Packit 209cc3
	AC_TRY_LINK(
Packit 209cc3
	    [#include <netdb.h>],
Packit 209cc3
	    [
Packit 209cc3
		struct netent netent_buf;
Packit 209cc3
		char buf[1024];
Packit 209cc3
		struct netent *resultp;
Packit 209cc3
		int h_errnoval;
Packit 209cc3
Packit 209cc3
		return getnetbyname_r((const char *)0, &netent_buf, buf, sizeof buf, &resultp, &h_errnoval);
Packit 209cc3
	    ],
Packit 209cc3
	    [
Packit 209cc3
		AC_MSG_RESULT(yes)
Packit 209cc3
		AC_DEFINE(HAVE_LINUX_GETNETBYNAME_R, 1,
Packit 209cc3
		    [define if we have the Linux getnetbyname_r()])
Packit 209cc3
	    ],
Packit 209cc3
	    [
Packit 209cc3
		AC_MSG_RESULT(no)
Packit 209cc3
Packit 209cc3
		AC_MSG_CHECKING([for Solaris/IRIX getnetbyname_r()])
Packit 209cc3
		AC_TRY_LINK(
Packit 209cc3
		    [#include <netdb.h>],
Packit 209cc3
		    [
Packit 209cc3
			struct netent netent_buf;
Packit 209cc3
			char buf[1024];
Packit 209cc3
Packit 209cc3
			return getnetbyname_r((const char *)0, &netent_buf, buf, (int)sizeof buf) != NULL;
Packit 209cc3
		    ],
Packit 209cc3
		    [
Packit 209cc3
			AC_MSG_RESULT(yes)
Packit 209cc3
			AC_DEFINE(HAVE_SOLARIS_IRIX_GETNETBYNAME_R, 1,
Packit 209cc3
			    [define if we have the Solaris/IRIX getnetbyname_r()])
Packit 209cc3
		    ],
Packit 209cc3
		    [
Packit 209cc3
			AC_MSG_RESULT(no)
Packit 209cc3
Packit 209cc3
			AC_MSG_CHECKING([for AIX getnetbyname_r()])
Packit 209cc3
			AC_TRY_LINK(
Packit 209cc3
			    [#include <netdb.h>],
Packit 209cc3
			    [
Packit 209cc3
				struct netent netent_buf;
Packit 209cc3
				struct netent_data net_data;
Packit 209cc3
Packit 209cc3
				return getnetbyname_r((const char *)0, &netent_buf, &net_data);
Packit 209cc3
			    ],
Packit 209cc3
			    [
Packit 209cc3
				AC_MSG_RESULT(yes)
Packit 209cc3
				AC_DEFINE(HAVE_AIX_GETNETBYNAME_R, 1,
Packit 209cc3
				    [define if we have the AIX getnetbyname_r()])
Packit 209cc3
			    ],
Packit 209cc3
			    [
Packit 209cc3
				AC_MSG_RESULT(no)
Packit 209cc3
			    ])
Packit 209cc3
		    ])
Packit 209cc3
	    ])
Packit 209cc3
    ],,[#include <netdb.h>])
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# Check for reentrant versions of getprotobyname_r(), as provided by
Packit 209cc3
# Linux (glibc), Solaris/IRIX, and AIX (with three different APIs!).
Packit 209cc3
# If we don't find one, we just use getprotobyname(), which uses
Packit 209cc3
# thread-specific data on many platforms, but doesn't use it on
Packit 209cc3
# NetBSD or OpenBSD, and may not use it on older versions of other
Packit 209cc3
# platforms.
Packit 209cc3
#
Packit 209cc3
# Only do the check if we have a declaration of getprotobyname_r();
Packit 209cc3
# without it, we can't check which API it has.  (We assume that
Packit 209cc3
# if there's a declaration, it has a prototype, so that the API
Packit 209cc3
# can be checked.)
Packit 209cc3
#
Packit 209cc3
AC_CHECK_DECL(getprotobyname_r,
Packit 209cc3
    [
Packit 209cc3
	AC_MSG_CHECKING([for the Linux getprotobyname_r()])
Packit 209cc3
	AC_TRY_LINK(
Packit 209cc3
	    [#include <netdb.h>],
Packit 209cc3
	    [
Packit 209cc3
		struct protoent protoent_buf;
Packit 209cc3
		char buf[1024];
Packit 209cc3
		struct protoent *resultp;
Packit 209cc3
Packit 209cc3
		return getprotobyname_r((const char *)0, &protoent_buf, buf, sizeof buf, &resultp);
Packit 209cc3
	    ],
Packit 209cc3
	    [
Packit 209cc3
		AC_MSG_RESULT(yes)
Packit 209cc3
		AC_DEFINE(HAVE_LINUX_GETPROTOBYNAME_R, 1,
Packit 209cc3
		    [define if we have the Linux getprotobyname_r()])
Packit 209cc3
	    ],
Packit 209cc3
	    [
Packit 209cc3
		AC_MSG_RESULT(no)
Packit 209cc3
Packit 209cc3
		AC_MSG_CHECKING([for Solaris/IRIX getprotobyname_r()])
Packit 209cc3
		AC_TRY_LINK(
Packit 209cc3
		    [#include <netdb.h>],
Packit 209cc3
		    [
Packit 209cc3
			struct protoent protoent_buf;
Packit 209cc3
			char buf[1024];
Packit 209cc3
Packit 209cc3
			return getprotobyname_r((const char *)0, &protoent_buf, buf, (int)sizeof buf) != NULL;
Packit 209cc3
		    ],
Packit 209cc3
		    [
Packit 209cc3
			AC_MSG_RESULT(yes)
Packit 209cc3
			AC_DEFINE(HAVE_SOLARIS_IRIX_GETPROTOBYNAME_R, 1,
Packit 209cc3
			    [define if we have the Solaris/IRIX getprotobyname_r()])
Packit 209cc3
		    ],
Packit 209cc3
		    [
Packit 209cc3
			AC_MSG_RESULT(no)
Packit 209cc3
Packit 209cc3
			AC_MSG_CHECKING([for AIX getprotobyname_r()])
Packit 209cc3
			AC_TRY_LINK(
Packit 209cc3
			    [#include <netdb.h>],
Packit 209cc3
			    [
Packit 209cc3
				struct protoent protoent_buf;
Packit 209cc3
				struct protoent_data proto_data;
Packit 209cc3
Packit 209cc3
				return getprotobyname_r((const char *)0, &protoent_buf, &proto_data);
Packit 209cc3
			    ],
Packit 209cc3
			    [
Packit 209cc3
				AC_MSG_RESULT(yes)
Packit 209cc3
				AC_DEFINE(HAVE_AIX_GETPROTOBYNAME_R, 1,
Packit 209cc3
				    [define if we have the AIX getprotobyname_r()])
Packit 209cc3
			    ],
Packit 209cc3
			    [
Packit 209cc3
				AC_MSG_RESULT(no)
Packit 209cc3
			    ])
Packit 209cc3
		    ])
Packit 209cc3
	    ])
Packit 209cc3
    ],,[#include <netdb.h>])
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# You are in a twisty little maze of UN*Xes, all different.
Packit 209cc3
# Some might not have ether_hostton().
Packit 209cc3
# Some might have it and declare it in <net/ethernet.h>.
Packit 209cc3
# Some might have it and declare it in <netinet/ether.h>
Packit 209cc3
# Some might have it and declare it in <sys/ethernet.h>.
Packit 209cc3
# Some might have it and declare it in <arpa/inet.h>.
Packit 209cc3
# Some might have it and declare it in <netinet/if_ether.h>.
Packit 209cc3
# Some might have it and not declare it in any header file.
Packit 209cc3
#
Packit 209cc3
# Before you is a C compiler.
Packit 209cc3
#
Packit 209cc3
AC_CHECK_FUNCS(ether_hostton)
Packit 209cc3
if test "$ac_cv_func_ether_hostton" = yes; then
Packit 209cc3
	#
Packit 209cc3
	# OK, we have ether_hostton().  Is it declared in <net/ethernet.h>?
Packit 209cc3
	#
Packit 209cc3
	# This test fails if we don't have <net/ethernet.h> or if we do
Packit 209cc3
	# but it doesn't declare ether_hostton().
Packit 209cc3
	#
Packit 209cc3
	AC_CHECK_DECL(ether_hostton,
Packit 209cc3
	    [
Packit 209cc3
		AC_DEFINE(NET_ETHERNET_H_DECLARES_ETHER_HOSTTON,,
Packit 209cc3
		    [Define to 1 if net/ethernet.h declares `ether_hostton'])
Packit 209cc3
	    ],,
Packit 209cc3
	    [
Packit 209cc3
#include <net/ethernet.h>
Packit 209cc3
	    ])
Packit 209cc3
	#
Packit 209cc3
	# Did that succeed?
Packit 209cc3
	#
Packit 209cc3
	if test "$ac_cv_have_decl_ether_hostton" != yes; then
Packit 209cc3
		#
Packit 209cc3
		# No, how about <netinet/ether.h>, as on Linux?
Packit 209cc3
		#
Packit 209cc3
		# This test fails if we don't have <netinet/ether.h>
Packit 209cc3
		# or if we do but it doesn't declare ether_hostton().
Packit 209cc3
		#
Packit 209cc3
		# Unset ac_cv_have_decl_ether_hostton so we don't
Packit 209cc3
		# treat the previous failure as a cached value and
Packit 209cc3
		# suppress the next test.
Packit 209cc3
		#
Packit 209cc3
		unset ac_cv_have_decl_ether_hostton
Packit 209cc3
		AC_CHECK_DECL(ether_hostton,
Packit 209cc3
		    [
Packit 209cc3
			AC_DEFINE(NETINET_ETHER_H_DECLARES_ETHER_HOSTTON,,
Packit 209cc3
			    [Define to 1 if netinet/ether.h declares `ether_hostton'])
Packit 209cc3
		    ],,
Packit 209cc3
		    [
Packit 209cc3
#include <netinet/ether.h>
Packit 209cc3
		    ])
Packit 209cc3
	fi
Packit 209cc3
	#
Packit 209cc3
	# Did that succeed?
Packit 209cc3
	#
Packit 209cc3
	if test "$ac_cv_have_decl_ether_hostton" != yes; then
Packit 209cc3
		#
Packit 209cc3
		# No, how about <sys/ethernet.h>, as on Solaris 10
Packit 209cc3
		# and later?
Packit 209cc3
		#
Packit 209cc3
		# This test fails if we don't have <sys/ethernet.h>
Packit 209cc3
		# or if we do but it doesn't declare ether_hostton().
Packit 209cc3
		#
Packit 209cc3
		# Unset ac_cv_have_decl_ether_hostton so we don't
Packit 209cc3
		# treat the previous failure as a cached value and
Packit 209cc3
		# suppress the next test.
Packit 209cc3
		#
Packit 209cc3
		unset ac_cv_have_decl_ether_hostton
Packit 209cc3
		AC_CHECK_DECL(ether_hostton,
Packit 209cc3
		    [
Packit 209cc3
			AC_DEFINE(SYS_ETHERNET_H_DECLARES_ETHER_HOSTTON,,
Packit 209cc3
			    [Define to 1 if sys/ethernet.h declares `ether_hostton'])
Packit 209cc3
		    ],,
Packit 209cc3
		    [
Packit 209cc3
#include <sys/ethernet.h>
Packit 209cc3
		    ])
Packit 209cc3
	fi
Packit 209cc3
	#
Packit 209cc3
	# Did that succeed?
Packit 209cc3
	#
Packit 209cc3
	if test "$ac_cv_have_decl_ether_hostton" != yes; then
Packit 209cc3
		#
Packit 209cc3
		# No, how about <arpa/inet.h>, as in AIX?
Packit 209cc3
		#
Packit 209cc3
		# This test fails if we don't have <arpa/inet.h>
Packit 209cc3
		# (if we have ether_hostton(), we should have
Packit 209cc3
		# networking, and if we have networking, we should
Packit 209cc3
		# have <arapa/inet.h>) or if we do but it doesn't
Packit 209cc3
		# declare ether_hostton().
Packit 209cc3
		#
Packit 209cc3
		# Unset ac_cv_have_decl_ether_hostton so we don't
Packit 209cc3
		# treat the previous failure as a cached value and
Packit 209cc3
		# suppress the next test.
Packit 209cc3
		#
Packit 209cc3
		unset ac_cv_have_decl_ether_hostton
Packit 209cc3
		AC_CHECK_DECL(ether_hostton,
Packit 209cc3
		    [
Packit 209cc3
			AC_DEFINE(ARPA_INET_H_DECLARES_ETHER_HOSTTON,,
Packit 209cc3
			    [Define to 1 if arpa/inet.h declares `ether_hostton'])
Packit 209cc3
		    ],,
Packit 209cc3
		    [
Packit 209cc3
#include <arpa/inet.h>
Packit 209cc3
		    ])
Packit 209cc3
	fi
Packit 209cc3
	#
Packit 209cc3
	# Did that succeed?
Packit 209cc3
	#
Packit 209cc3
	if test "$ac_cv_have_decl_ether_hostton" != yes; then
Packit 209cc3
		#
Packit 209cc3
		# No, how about <netinet/if_ether.h>?
Packit 209cc3
		# On some platforms, it requires <net/if.h> and
Packit 209cc3
		# <netinet/in.h>, and we always include it with
Packit 209cc3
		# both of them, so test it with both of them.
Packit 209cc3
		#
Packit 209cc3
		# This test fails if we don't have <netinet/if_ether.h>
Packit 209cc3
		# and the headers we include before it, or if we do but
Packit 209cc3
		# <netinet/if_ether.h> doesn't declare ether_hostton().
Packit 209cc3
		#
Packit 209cc3
		# Unset ac_cv_have_decl_ether_hostton so we don't
Packit 209cc3
		# treat the previous failure as a cached value and
Packit 209cc3
		# suppress the next test.
Packit 209cc3
		#
Packit 209cc3
		unset ac_cv_have_decl_ether_hostton
Packit 209cc3
		AC_CHECK_DECL(ether_hostton,
Packit 209cc3
		    [
Packit 209cc3
			AC_DEFINE(NETINET_IF_ETHER_H_DECLARES_ETHER_HOSTTON,,
Packit 209cc3
			    [Define to 1 if netinet/if_ether.h declares `ether_hostton'])
Packit 209cc3
		    ],,
Packit 209cc3
		    [
Packit 209cc3
#include <sys/types.h>
Packit 209cc3
#include <sys/socket.h>
Packit 209cc3
#include <net/if.h>
Packit 209cc3
#include <netinet/in.h>
Packit 209cc3
#include <netinet/if_ether.h>
Packit 209cc3
		    ])
Packit 209cc3
	fi
Packit 209cc3
	#
Packit 209cc3
	# After all that, is ether_hostton() declared?
Packit 209cc3
	#
Packit 209cc3
	if test "$ac_cv_have_decl_ether_hostton" = yes; then
Packit 209cc3
		#
Packit 209cc3
		# Yes.
Packit 209cc3
		#
Packit 209cc3
		AC_DEFINE(HAVE_DECL_ETHER_HOSTTON, 1,
Packit 209cc3
		    [Define to 1 if you have the declaration of `ether_hostton'])
Packit 209cc3
        else
Packit 209cc3
		#
Packit 209cc3
		# No, we'll have to declare it ourselves.
Packit 209cc3
		# Do we have "struct ether_addr" if we include
Packit 209cc3
		# <netinet/if_ether.h>?
Packit 209cc3
		#
Packit 209cc3
		AC_CHECK_TYPES(struct ether_addr,,,
Packit 209cc3
		    [
Packit 209cc3
			#include <sys/types.h>
Packit 209cc3
			#include <sys/socket.h>
Packit 209cc3
			#include <net/if.h>
Packit 209cc3
			#include <netinet/in.h>
Packit 209cc3
			#include <netinet/if_ether.h>
Packit 209cc3
		    ])
Packit 209cc3
	fi
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# For various things that might use pthreads.
Packit 209cc3
#
Packit 209cc3
AC_CHECK_HEADER(pthread.h,
Packit 209cc3
    [
Packit 209cc3
	#
Packit 209cc3
	# OK, we have pthread.h.  Do we have pthread_create in the
Packit 209cc3
	# system libraries?
Packit 209cc3
	#
Packit 209cc3
	AC_CHECK_FUNC(pthread_create,
Packit 209cc3
	    [
Packit 209cc3
		#
Packit 209cc3
		# Yes.
Packit 209cc3
		#
Packit 209cc3
		ac_lbl_have_pthreads="found"
Packit 209cc3
	    ],
Packit 209cc3
	    [
Packit 209cc3
		#
Packit 209cc3
		# No - do we have it in -lpthreads?
Packit 209cc3
		#
Packit 209cc3
		AC_CHECK_LIB(pthreads, pthread_create,
Packit 209cc3
		    [
Packit 209cc3
			#
Packit 209cc3
			# Yes - add -lpthreads.
Packit 209cc3
			#
Packit 209cc3
			ac_lbl_have_pthreads="found"
Packit 209cc3
			PTHREAD_LIBS="$PTHREAD_LIBS -lpthreads"
Packit 209cc3
		    ],
Packit 209cc3
		    [
Packit 209cc3
			#
Packit 209cc3
			# No - do we have it in -lpthread?
Packit 209cc3
			#
Packit 209cc3
			AC_CHECK_LIB(pthread, pthread_create,
Packit 209cc3
			    [
Packit 209cc3
				#
Packit 209cc3
				# Yes - add -lpthread.
Packit 209cc3
				#
Packit 209cc3
                                ac_lbl_have_pthreads="found"
Packit 209cc3
				PTHREAD_LIBS="$PTHREAD_LIBS -lpthread"
Packit 209cc3
			    ],
Packit 209cc3
			    [
Packit 209cc3
				#
Packit 209cc3
				# No.
Packit 209cc3
				#
Packit 209cc3
				ac_lbl_have_pthreads="not found"
Packit 209cc3
			    ])
Packit 209cc3
		    ])
Packit 209cc3
	    ])
Packit 209cc3
    ],
Packit 209cc3
    [
Packit 209cc3
	#
Packit 209cc3
	# We didn't find pthread.h.
Packit 209cc3
	#
Packit 209cc3
	ac_lbl_have_pthreads="not found"
Packit 209cc3
    ]
Packit 209cc3
)
Packit 209cc3
Packit 209cc3
dnl to pacify those who hate protochain insn
Packit 209cc3
AC_MSG_CHECKING(if --disable-protochain option is specified)
Packit 209cc3
AC_ARG_ENABLE(protochain,
Packit 209cc3
AC_HELP_STRING([--disable-protochain],[disable \"protochain\" insn]))
Packit 209cc3
case "x$enable_protochain" in
Packit 209cc3
xyes)	enable_protochain=enabled	;;
Packit 209cc3
xno)	enable_protochain=disabled	;;
Packit 209cc3
x)	enable_protochain=enabled	;;
Packit 209cc3
esac
Packit 209cc3
Packit 209cc3
if test "$enable_protochain" = "disabled"; then
Packit 209cc3
	AC_DEFINE(NO_PROTOCHAIN,1,[do not use protochain])
Packit 209cc3
fi
Packit 209cc3
AC_MSG_RESULT(${enable_protochain})
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# valgrindtest directly uses the native capture mechanism, but
Packit 209cc3
# only tests with BPF and PF_PACKET sockets; only enable it if
Packit 209cc3
# we have BPF or PF_PACKET sockets.
Packit 209cc3
#
Packit 209cc3
VALGRINDTEST_SRC=
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# SITA support is mutually exclusive with native capture support;
Packit 209cc3
# "--with-sita" selects SITA support.
Packit 209cc3
#
Packit 209cc3
AC_ARG_WITH(sita,
Packit 209cc3
AC_HELP_STRING([--with-sita],[include SITA support]),
Packit 209cc3
[
Packit 209cc3
	if test ! "x$withval" = "xno" ; then
Packit 209cc3
		AC_DEFINE(SITA,1,[include ACN support])
Packit 209cc3
		AC_MSG_NOTICE(Enabling SITA ACN support)
Packit 209cc3
		V_PCAP=sita
Packit 209cc3
	fi
Packit 209cc3
],
Packit 209cc3
[
Packit 209cc3
AC_ARG_WITH(pcap,
Packit 209cc3
AC_HELP_STRING([--with-pcap=TYPE],[use packet capture TYPE]))
Packit 209cc3
if test ! -z "$with_pcap" ; then
Packit 209cc3
	V_PCAP="$withval"
Packit 209cc3
else
Packit 209cc3
	#
Packit 209cc3
	# Check for a bunch of headers for various packet
Packit 209cc3
	# capture mechanisms.
Packit 209cc3
	#
Packit 209cc3
	AC_CHECK_HEADERS(net/bpf.h)
Packit 209cc3
	if test "$ac_cv_header_net_bpf_h" = yes; then
Packit 209cc3
		#
Packit 209cc3
		# Does it define BIOCSETIF?
Packit 209cc3
		# I.e., is it a header for an LBL/BSD-style capture
Packit 209cc3
		# mechanism, or is it just a header for a BPF filter
Packit 209cc3
		# engine?  Some versions of Arch Linux, for example,
Packit 209cc3
		# have a net/bpf.h that doesn't define BIOCSETIF;
Packit 209cc3
		# as it's a Linux, it should use packet sockets,
Packit 209cc3
		# instead.
Packit 209cc3
		#
Packit 209cc3
		# We need:
Packit 209cc3
		#
Packit 209cc3
		#  sys/types.h, because FreeBSD 10's net/bpf.h
Packit 209cc3
		#  requires that various BSD-style integer types
Packit 209cc3
		#  be defined;
Packit 209cc3
		#
Packit 209cc3
		#  sys/time.h, because AIX 5.2 and 5.3's net/bpf.h
Packit 209cc3
		#  doesn't include it but does use struct timeval
Packit 209cc3
		#  in ioctl definitions;
Packit 209cc3
		#
Packit 209cc3
		#  sys/ioctl.h and, if we have it, sys/ioccom.h,
Packit 209cc3
		#  because net/bpf.h defines ioctls;
Packit 209cc3
		#
Packit 209cc3
		#  net/if.h, because it defines some structures
Packit 209cc3
		#  used in ioctls defined by net/bpf.h;
Packit 209cc3
		#
Packit 209cc3
		#  sys/socket.h, because OpenBSD 5.9's net/bpf.h
Packit 209cc3
		#  defines some structure fields as being
Packit 209cc3
		#  struct sockaddrs;
Packit 209cc3
		#
Packit 209cc3
		# and net/bpf.h doesn't necessarily include all
Packit 209cc3
		# of those headers itself.
Packit 209cc3
		#
Packit 209cc3
		AC_MSG_CHECKING(if net/bpf.h defines BIOCSETIF)
Packit 209cc3
		AC_CACHE_VAL(ac_cv_lbl_bpf_h_defines_biocsetif,
Packit 209cc3
			AC_TRY_COMPILE(
Packit 209cc3
[
Packit 209cc3
#include <sys/types.h>
Packit 209cc3
#include <sys/time.h>
Packit 209cc3
#include <sys/ioctl.h>
Packit 209cc3
#include <sys/socket.h>
Packit 209cc3
#ifdef HAVE_SYS_IOCCOM_H
Packit 209cc3
#include <sys/ioccom.h>
Packit 209cc3
#endif
Packit 209cc3
#include <net/bpf.h>
Packit 209cc3
#include <net/if.h>
Packit 209cc3
],
Packit 209cc3
			[u_int i = BIOCSETIF;],
Packit 209cc3
			ac_cv_lbl_bpf_h_defines_biocsetif=yes,
Packit 209cc3
			ac_cv_lbl_bpf_h_defines_biocsetif=no))
Packit 209cc3
		AC_MSG_RESULT($ac_cv_lbl_bpf_h_defines_biocsetif)
Packit 209cc3
	fi
Packit 209cc3
	AC_CHECK_HEADERS(net/pfilt.h net/enet.h)
Packit 209cc3
	AC_CHECK_HEADERS(net/nit.h sys/net/nit.h)
Packit 209cc3
	AC_CHECK_HEADERS(linux/socket.h net/raw.h sys/dlpi.h)
Packit 209cc3
Packit 209cc3
	if test "$ac_cv_lbl_bpf_h_defines_biocsetif" = yes; then
Packit 209cc3
		#
Packit 209cc3
		# BPF.
Packit 209cc3
		# Check this before DLPI, so that we pick BPF on
Packit 209cc3
		# Solaris 11 and later.
Packit 209cc3
		#
Packit 209cc3
		V_PCAP=bpf
Packit 209cc3
Packit 209cc3
		#
Packit 209cc3
		# We have BPF, so build valgrindtest with "make test"
Packit 209cc3
		# on macOS and FreeBSD (add your OS once there's a
Packit 209cc3
		# valgrind for it).
Packit 209cc3
		#
Packit 209cc3
		case "$host_os" in
Packit 209cc3
Packit 209cc3
		freebsd*|darwin*|linux*)
Packit 209cc3
			VALGRINDTEST_SRC=valgrindtest.c
Packit 209cc3
			;;
Packit 209cc3
		esac
Packit 209cc3
	elif test "$ac_cv_header_linux_socket_h" = yes; then
Packit 209cc3
		#
Packit 209cc3
		# No prizes for guessing this one.
Packit 209cc3
		#
Packit 209cc3
		V_PCAP=linux
Packit 209cc3
Packit 209cc3
		#
Packit 209cc3
		# XXX - this won't work with older kernels that have
Packit 209cc3
		# SOCK_PACKET sockets but not PF_PACKET sockets.
Packit 209cc3
		#
Packit 209cc3
		VALGRINDTEST_SRC=valgrindtest.c
Packit 209cc3
	elif test "$ac_cv_header_net_pfilt_h" = yes; then
Packit 209cc3
	        #
Packit 209cc3
	        # DEC OSF/1, Digital UNIX, Tru64 UNIX
Packit 209cc3
        	#
Packit 209cc3
		V_PCAP=pf
Packit 209cc3
	elif test "$ac_cv_header_net_enet_h" = yes; then
Packit 209cc3
		#
Packit 209cc3
		# Stanford Enetfilter.
Packit 209cc3
		#
Packit 209cc3
		V_PCAP=enet
Packit 209cc3
	elif test "$ac_cv_header_net_nit_h" = yes; then
Packit 209cc3
		#
Packit 209cc3
		# SunOS 4.x STREAMS NIT.
Packit 209cc3
		#
Packit 209cc3
		V_PCAP=snit
Packit 209cc3
	elif test "$ac_cv_header_sys_net_nit_h" = yes; then
Packit 209cc3
		#
Packit 209cc3
		# Pre-SunOS 4.x non-STREAMS NIT.
Packit 209cc3
		#
Packit 209cc3
		V_PCAP=nit
Packit 209cc3
	elif test "$ac_cv_header_net_raw_h" = yes; then
Packit 209cc3
		#
Packit 209cc3
		# IRIX snoop.
Packit 209cc3
		#
Packit 209cc3
		V_PCAP=snoop
Packit 209cc3
	elif test "$ac_cv_header_sys_dlpi_h" = yes; then
Packit 209cc3
		#
Packit 209cc3
		# DLPI on pre-Solaris 11 SunOS 5, HP-UX, possibly others.
Packit 209cc3
		#
Packit 209cc3
		V_PCAP=dlpi
Packit 209cc3
	else
Packit 209cc3
		#
Packit 209cc3
		# Nothing we support.
Packit 209cc3
		#
Packit 209cc3
		V_PCAP=null
Packit 209cc3
		AC_MSG_WARN(cannot determine packet capture interface)
Packit 209cc3
		AC_MSG_WARN((see the INSTALL doc for more info))
Packit 209cc3
	fi
Packit 209cc3
fi
Packit 209cc3
AC_MSG_CHECKING(packet capture type)
Packit 209cc3
AC_MSG_RESULT($V_PCAP)
Packit 209cc3
AC_SUBST(VALGRINDTEST_SRC)
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# Do capture-mechanism-dependent tests.
Packit 209cc3
#
Packit 209cc3
case "$V_PCAP" in
Packit 209cc3
dlpi)
Packit 209cc3
	#
Packit 209cc3
	# Needed for common functions used by pcap-[dlpi,libdlpi].c
Packit 209cc3
	#
Packit 209cc3
 	SSRC="dlpisubs.c"
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# Checks for some header files.
Packit 209cc3
	#
Packit 209cc3
	AC_CHECK_HEADERS(sys/bufmod.h sys/dlpi_ext.h)
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# Checks to see if Solaris has the public libdlpi(3LIB) library.
Packit 209cc3
	# Note: The existence of /usr/include/libdlpi.h does not mean it is the
Packit 209cc3
	# public libdlpi(3LIB) version. Before libdlpi was made public, a
Packit 209cc3
	# private version also existed, which did not have the same APIs.
Packit 209cc3
	# Due to a gcc bug, the default search path for 32-bit libraries does
Packit 209cc3
	# not include /lib, we add it explicitly here.
Packit 209cc3
	# [http://bugs.opensolaris.org/view_bug.do?bug_id=6619485].
Packit 209cc3
	# Also, due to the bug above applications that link to libpcap with
Packit 209cc3
	# libdlpi will have to add "-L/lib" option to "configure".
Packit 209cc3
	#
Packit 209cc3
	saved_ldflags=$LDFLAGS
Packit 209cc3
	LDFLAGS="$LIBS -L/lib"
Packit 209cc3
	AC_CHECK_LIB(dlpi, dlpi_walk,
Packit 209cc3
		[
Packit 209cc3
			LIBS="-ldlpi $LIBS"
Packit 209cc3
			V_PCAP=libdlpi
Packit 209cc3
			AC_DEFINE(HAVE_LIBDLPI,1,[if libdlpi exists])
Packit 209cc3
		],
Packit 209cc3
		V_PCAP=dlpi)
Packit 209cc3
	LDFLAGS=$saved_ldflags
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# Checks whether <sys/dlpi.h> is usable, to catch weird SCO
Packit 209cc3
	# versions of DLPI.
Packit 209cc3
	#
Packit 209cc3
	AC_MSG_CHECKING(whether <sys/dlpi.h> is usable)
Packit 209cc3
	AC_CACHE_VAL(ac_cv_sys_dlpi_usable,
Packit 209cc3
		AC_TRY_COMPILE(
Packit 209cc3
		    [
Packit 209cc3
			#include <sys/types.h>
Packit 209cc3
			#include <sys/time.h>
Packit 209cc3
			#include <sys/dlpi.h>
Packit 209cc3
		    ],
Packit 209cc3
		    [int i = DL_PROMISC_PHYS;],
Packit 209cc3
		    ac_cv_sys_dlpi_usable=yes,
Packit 209cc3
		    ac_cv_sys_dlpi_usable=no))
Packit 209cc3
	AC_MSG_RESULT($ac_cv_sys_dlpi_usable)
Packit 209cc3
	if test $ac_cv_sys_dlpi_usable = no ; then
Packit 209cc3
		AC_MSG_ERROR(<sys/dlpi.h> is not usable on this system; it probably has a non-standard DLPI)
Packit 209cc3
	fi
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# Check to see if Solaris has the dl_passive_req_t struct defined
Packit 209cc3
	# in <sys/dlpi.h>.
Packit 209cc3
	# This check is for DLPI support for passive modes.
Packit 209cc3
	# See dlpi(7P) for more details.
Packit 209cc3
	#
Packit 209cc3
	AC_CHECK_TYPES(dl_passive_req_t,,,
Packit 209cc3
	    [
Packit 209cc3
		#include <sys/types.h>
Packit 209cc3
		#include <sys/dlpi.h>
Packit 209cc3
	    ])
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
linux)
Packit 209cc3
	#
Packit 209cc3
	# Do we have the wireless extensions?
Packit 209cc3
	#
Packit 209cc3
	AC_CHECK_HEADERS(linux/wireless.h, [], [],
Packit 209cc3
	[
Packit 209cc3
#include <sys/socket.h>
Packit 209cc3
#include <linux/if.h>
Packit 209cc3
#include <linux/types.h>
Packit 209cc3
	])
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# Do we have libnl?
Packit 209cc3
	#
Packit 209cc3
	AC_ARG_WITH(libnl,
Packit 209cc3
	AC_HELP_STRING([--without-libnl],[disable libnl support @<:@default=yes, on Linux, if present@:>@]),
Packit 209cc3
		with_libnl=$withval,with_libnl=if_available)
Packit 209cc3
Packit 209cc3
	if test x$with_libnl != xno ; then
Packit 209cc3
		have_any_nl="no"
Packit 209cc3
Packit 209cc3
                incdir=-I/usr/include/libnl3
Packit 209cc3
                libnldir=
Packit 209cc3
                case "$with_libnl" in
Packit 209cc3
Packit 209cc3
                yes|if_available)
Packit 209cc3
                  ;;
Packit 209cc3
Packit 209cc3
                *)
Packit 209cc3
                  if test -d $withval; then
Packit 209cc3
                    libnldir=-L${withval}/lib/.libs
Packit 209cc3
                    incdir=-I${withval}/include
Packit 209cc3
                  fi
Packit 209cc3
                  ;;
Packit 209cc3
                esac
Packit 209cc3
Packit 209cc3
		#
Packit 209cc3
		# Try libnl 3.x first.
Packit 209cc3
		#
Packit 209cc3
		AC_CHECK_LIB(nl-3, nl_socket_alloc,
Packit 209cc3
		[
Packit 209cc3
			#
Packit 209cc3
			# Yes, we have libnl 3.x.
Packit 209cc3
			#
Packit 209cc3
			LIBS="${libnldir} -lnl-genl-3 -lnl-3 $LIBS"
Packit 209cc3
			AC_DEFINE(HAVE_LIBNL,1,[if libnl exists])
Packit 209cc3
			AC_DEFINE(HAVE_LIBNL_3_x,1,[if libnl exists and is version 3.x])
Packit 209cc3
			AC_DEFINE(HAVE_LIBNL_NLE,1,[libnl has NLE_FAILURE])
Packit 209cc3
			AC_DEFINE(HAVE_LIBNL_SOCKETS,1,[libnl has new-style socket api])
Packit 209cc3
			V_INCLS="$V_INCLS ${incdir}"
Packit 209cc3
			have_any_nl="yes"
Packit 209cc3
		],[], ${incdir} ${libnldir} -lnl-genl-3 -lnl-3 )
Packit 209cc3
Packit 209cc3
		if test x$have_any_nl = xno ; then
Packit 209cc3
			#
Packit 209cc3
			# Try libnl 2.x
Packit 209cc3
			#
Packit 209cc3
			AC_CHECK_LIB(nl, nl_socket_alloc,
Packit 209cc3
			[
Packit 209cc3
				#
Packit 209cc3
				# Yes, we have libnl 2.x.
Packit 209cc3
				#
Packit 209cc3
				LIBS="${libnldir} -lnl-genl -lnl $LIBS"
Packit 209cc3
				AC_DEFINE(HAVE_LIBNL,1,[if libnl exists])
Packit 209cc3
				AC_DEFINE(HAVE_LIBNL_2_x,1,[if libnl exists and is version 2.x])
Packit 209cc3
				AC_DEFINE(HAVE_LIBNL_NLE,1,[libnl has NLE_FAILURE])
Packit 209cc3
				AC_DEFINE(HAVE_LIBNL_SOCKETS,1,[libnl has new-style socket api])
Packit 209cc3
				have_any_nl="yes"
Packit 209cc3
			])
Packit 209cc3
		fi
Packit 209cc3
Packit 209cc3
		if test x$have_any_nl = xno ; then
Packit 209cc3
			#
Packit 209cc3
			# No, we don't; do we have libnl 1.x?
Packit 209cc3
			#
Packit 209cc3
			AC_CHECK_LIB(nl, nl_handle_alloc,
Packit 209cc3
			[
Packit 209cc3
				#
Packit 209cc3
				# Yes.
Packit 209cc3
				#
Packit 209cc3
				LIBS="${libnldir} -lnl $LIBS"
Packit 209cc3
				AC_DEFINE(HAVE_LIBNL,1,[if libnl exists])
Packit 209cc3
				have_any_nl="yes"
Packit 209cc3
			])
Packit 209cc3
		fi
Packit 209cc3
Packit 209cc3
		if test x$have_any_nl = xno ; then
Packit 209cc3
			#
Packit 209cc3
			# No, we don't have libnl at all.
Packit 209cc3
			#
Packit 209cc3
			if test x$with_libnl = xyes ; then
Packit 209cc3
				AC_MSG_ERROR([libnl support requested but libnl not found])
Packit 209cc3
			fi
Packit 209cc3
		fi
Packit 209cc3
	fi
Packit 209cc3
Packit 209cc3
	AC_CHECK_HEADERS(linux/ethtool.h,,,
Packit 209cc3
	    [
Packit 209cc3
AC_INCLUDES_DEFAULT
Packit 209cc3
#include <linux/types.h>
Packit 209cc3
	    ])
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# Check to see if struct tpacket_stats is defined in
Packit 209cc3
	# <linux/if_packet.h>.  If so, then pcap-linux.c can use this
Packit 209cc3
	# to report proper statistics.
Packit 209cc3
	#
Packit 209cc3
	# -Scott Barron
Packit 209cc3
	#
Packit 209cc3
	AC_CHECK_TYPES(struct tpacket_stats,,,
Packit 209cc3
	    [
Packit 209cc3
		#include <linux/if_packet.h>
Packit 209cc3
	    ])
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# Check to see if the tpacket_auxdata struct has a tp_vlan_tci member.
Packit 209cc3
	#
Packit 209cc3
	# NOTE: any failure means we conclude that it doesn't have that
Packit 209cc3
	# member, so if we don't have tpacket_auxdata, we conclude it
Packit 209cc3
	# doesn't have that member (which is OK, as either we won't be
Packit 209cc3
	# using code that would use that member, or we wouldn't compile
Packit 209cc3
	# in any case).
Packit 209cc3
	AC_CHECK_MEMBERS([struct tpacket_auxdata.tp_vlan_tci],,,
Packit 209cc3
	    [
Packit 209cc3
		#include <sys/types.h>
Packit 209cc3
		#include <linux/if_packet.h>
Packit 209cc3
	    ])
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
bpf)
Packit 209cc3
	#
Packit 209cc3
	# Check whether we have the *BSD-style ioctls.
Packit 209cc3
	#
Packit 209cc3
	AC_CHECK_HEADERS(net/if_media.h)
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# Check whether we have struct BPF_TIMEVAL.
Packit 209cc3
	#
Packit 209cc3
	AC_CHECK_TYPES(struct BPF_TIMEVAL,,,
Packit 209cc3
	    [
Packit 209cc3
		#include <sys/types.h>
Packit 209cc3
		#include <sys/ioctl.h>
Packit 209cc3
		#ifdef HAVE_SYS_IOCCOM_H
Packit 209cc3
		#include <sys/ioccom.h>
Packit 209cc3
		#endif
Packit 209cc3
		#include <net/bpf.h>
Packit 209cc3
	    ])
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
dag)
Packit 209cc3
	#
Packit 209cc3
	# --with-pcap=dag is the only way to get here, and it means
Packit 209cc3
	# "DAG support but nothing else"
Packit 209cc3
	#
Packit 209cc3
	V_DEFS="$V_DEFS -DDAG_ONLY"
Packit 209cc3
	xxx_only=yes
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
septel)
Packit 209cc3
	#
Packit 209cc3
	# --with-pcap=septel is the only way to get here, and it means
Packit 209cc3
	# "Septel support but nothing else"
Packit 209cc3
	#
Packit 209cc3
	V_DEFS="$V_DEFS -DSEPTEL_ONLY"
Packit 209cc3
	xxx_only=yes
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
snf)
Packit 209cc3
	#
Packit 209cc3
	# --with-pcap=snf is the only way to get here, and it means
Packit 209cc3
	# "SNF support but nothing else"
Packit 209cc3
	#
Packit 209cc3
	V_DEFS="$V_DEFS -DSNF_ONLY"
Packit 209cc3
	xxx_only=yes
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
null)
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
*)
Packit 209cc3
	AC_MSG_ERROR($V_PCAP is not a valid pcap type)
Packit 209cc3
	;;
Packit 209cc3
esac
Packit 209cc3
Packit 209cc3
dnl
Packit 209cc3
dnl Now figure out how we get a list of interfaces and addresses,
Packit 209cc3
dnl if we support capturing.  Don't bother if we don't support
Packit 209cc3
dnl capturing.
Packit 209cc3
dnl
Packit 209cc3
if test "$V_PCAP" != null
Packit 209cc3
then
Packit 209cc3
	AC_CHECK_FUNC(getifaddrs,[
Packit 209cc3
		#
Packit 209cc3
		# We have "getifaddrs()"; make sure we have <ifaddrs.h>
Packit 209cc3
		# as well, just in case some platform is really weird.
Packit 209cc3
		#
Packit 209cc3
		AC_CHECK_HEADER(ifaddrs.h,[
Packit 209cc3
		    #
Packit 209cc3
		    # We have the header, so we use "getifaddrs()" to
Packit 209cc3
		    # get the list of interfaces.
Packit 209cc3
		    #
Packit 209cc3
		    V_FINDALLDEVS=fad-getad.c
Packit 209cc3
		],[
Packit 209cc3
		    #
Packit 209cc3
		    # We don't have the header - give up.
Packit 209cc3
		    # XXX - we could also fall back on some other
Packit 209cc3
		    # mechanism, but, for now, this'll catch this
Packit 209cc3
		    # problem so that we can at least try to figure
Packit 209cc3
		    # out something to do on systems with "getifaddrs()"
Packit 209cc3
		    # but without "ifaddrs.h", if there is something
Packit 209cc3
		    # we can do on those systems.
Packit 209cc3
		    #
Packit 209cc3
		    AC_MSG_ERROR([Your system has getifaddrs() but doesn't have a usable <ifaddrs.h>.])
Packit 209cc3
		])
Packit 209cc3
	],[
Packit 209cc3
		#
Packit 209cc3
		# Well, we don't have "getifaddrs()", at least not with the
Packit 209cc3
		# libraries with which we've decided we need to link
Packit 209cc3
		# libpcap with, so we have to use some other mechanism.
Packit 209cc3
		#
Packit 209cc3
		# Note that this may happen on Solaris, which has
Packit 209cc3
		# getifaddrs(), but in -lsocket, not in -lxnet, so we
Packit 209cc3
		# won't find it if we link with -lxnet, which we want
Packit 209cc3
		# to do for other reasons.
Packit 209cc3
		#
Packit 209cc3
		# For now, we use either the SIOCGIFCONF ioctl or the
Packit 209cc3
		# SIOCGLIFCONF ioctl, preferring the latter if we have
Packit 209cc3
		# it; the latter is a Solarisism that first appeared
Packit 209cc3
		# in Solaris 8.  (Solaris's getifaddrs() appears to
Packit 209cc3
		# be built atop SIOCGLIFCONF; using it directly
Packit 209cc3
		# avoids a not-all-that-useful middleman.)
Packit 209cc3
		#
Packit 209cc3
		AC_MSG_CHECKING(whether we have SIOCGLIFCONF)
Packit 209cc3
		AC_CACHE_VAL(ac_cv_lbl_have_siocglifconf,
Packit 209cc3
		    AC_TRY_COMPILE(
Packit 209cc3
			[#include <sys/param.h>
Packit 209cc3
			#include <sys/file.h>
Packit 209cc3
			#include <sys/ioctl.h>
Packit 209cc3
			#include <sys/socket.h>
Packit 209cc3
			#include <sys/sockio.h>],
Packit 209cc3
			[ioctl(0, SIOCGLIFCONF, (char *)0);],
Packit 209cc3
			ac_cv_lbl_have_siocglifconf=yes,
Packit 209cc3
			ac_cv_lbl_have_siocglifconf=no))
Packit 209cc3
		AC_MSG_RESULT($ac_cv_lbl_have_siocglifconf)
Packit 209cc3
		if test $ac_cv_lbl_have_siocglifconf = yes ; then
Packit 209cc3
			V_FINDALLDEVS=fad-glifc.c
Packit 209cc3
		else
Packit 209cc3
			V_FINDALLDEVS=fad-gifc.c
Packit 209cc3
		fi
Packit 209cc3
	])
Packit 209cc3
fi
Packit 209cc3
])
Packit 209cc3
Packit 209cc3
dnl check for hardware timestamp support
Packit 209cc3
case "$host_os" in
Packit 209cc3
linux*)
Packit 209cc3
	AC_CHECK_HEADERS([linux/net_tstamp.h])
Packit 209cc3
	;;
Packit 209cc3
*)
Packit 209cc3
	AC_MSG_NOTICE(no hardware timestamp support implemented for $host_os)
Packit 209cc3
	;;
Packit 209cc3
esac
Packit 209cc3
Packit 209cc3
AC_ARG_ENABLE([packet-ring],
Packit 209cc3
[AC_HELP_STRING([--enable-packet-ring],[enable packet ring support on Linux @<:@default=yes@:>@])],
Packit 209cc3
,enable_packet_ring=yes)
Packit 209cc3
Packit 209cc3
if test "x$enable_packet_ring" != "xno" ; then
Packit 209cc3
	AC_DEFINE(PCAP_SUPPORT_PACKET_RING, 1, [use packet ring capture support on Linux if available])
Packit 209cc3
	AC_SUBST(PCAP_SUPPORT_PACKET_RING)
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# Check for socklen_t.
Packit 209cc3
#
Packit 209cc3
AC_CHECK_TYPES(socklen_t,,,
Packit 209cc3
    [
Packit 209cc3
	#include <sys/types.h>
Packit 209cc3
	#include <sys/socket.h>
Packit 209cc3
    ])
Packit 209cc3
Packit 209cc3
AC_ARG_ENABLE(ipv6,
Packit 209cc3
AC_HELP_STRING([--enable-ipv6],[build IPv6-capable version @<:@default=yes@:>@]),
Packit 209cc3
    [],
Packit 209cc3
    [enable_ipv6=yes])
Packit 209cc3
if test "$enable_ipv6" != "no"; then
Packit 209cc3
	#
Packit 209cc3
	# We've already made sure we have getaddrinfo above in
Packit 209cc3
	# AC_LBL_LIBRARY_NET.
Packit 209cc3
	#
Packit 209cc3
	AC_DEFINE(INET6,1,[IPv6])
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
# Check for Endace DAG card support.
Packit 209cc3
AC_ARG_WITH([dag],
Packit 209cc3
AC_HELP_STRING([--with-dag@<:@=DIR@:>@],[include Endace DAG support (located in directory DIR, if supplied).  @<:@default=yes, if present@:>@]),
Packit 209cc3
[
Packit 209cc3
	if test "$withval" = no
Packit 209cc3
	then
Packit 209cc3
		# User doesn't want DAG support.
Packit 209cc3
		want_dag=no
Packit 209cc3
	elif test "$withval" = yes
Packit 209cc3
	then
Packit 209cc3
		# User wants DAG support but hasn't specified a directory.
Packit 209cc3
		want_dag=yes
Packit 209cc3
	else
Packit 209cc3
		# User wants DAG support and has specified a directory, so use the provided value.
Packit 209cc3
		want_dag=yes
Packit 209cc3
		dag_root=$withval
Packit 209cc3
	fi
Packit 209cc3
],[
Packit 209cc3
	if test "$V_PCAP" = dag; then
Packit 209cc3
		# User requested DAG-only libpcap, so we'd better have
Packit 209cc3
		# the DAG API.
Packit 209cc3
		want_dag=yes
Packit 209cc3
	elif test "xxx_only" = yes; then
Packit 209cc3
		# User requested something-else-only pcap, so they don't
Packit 209cc3
		# want DAG support.
Packit 209cc3
		want_dag=no
Packit 209cc3
	else
Packit 209cc3
		#
Packit 209cc3
		# Use DAG API if present, otherwise don't
Packit 209cc3
		#
Packit 209cc3
		want_dag=ifpresent
Packit 209cc3
	fi
Packit 209cc3
])
Packit 209cc3
Packit 209cc3
AC_ARG_WITH([dag-includes],
Packit 209cc3
AC_HELP_STRING([--with-dag-includes=IDIR],[Endace DAG include directory, if not DIR/include]),
Packit 209cc3
[
Packit 209cc3
	# User wants DAG support and has specified a header directory, so use the provided value.
Packit 209cc3
	want_dag=yes
Packit 209cc3
	dag_include_dir=$withval
Packit 209cc3
],[])
Packit 209cc3
Packit 209cc3
AC_ARG_WITH([dag-libraries],
Packit 209cc3
AC_HELP_STRING([--with-dag-libraries=LDIR],[Endace DAG library directory, if not DIR/lib]),
Packit 209cc3
[
Packit 209cc3
	# User wants DAG support and has specified a library directory, so use the provided value.
Packit 209cc3
	want_dag=yes
Packit 209cc3
	dag_lib_dir=$withval
Packit 209cc3
],[])
Packit 209cc3
Packit 209cc3
if test "$want_dag" != no; then
Packit 209cc3
Packit 209cc3
	# If necessary, set default paths for DAG API headers and libraries.
Packit 209cc3
	if test -z "$dag_root"; then
Packit 209cc3
		dag_root=/usr/local
Packit 209cc3
	fi
Packit 209cc3
Packit 209cc3
	if test -z "$dag_include_dir"; then
Packit 209cc3
		dag_include_dir="$dag_root/include"
Packit 209cc3
	fi
Packit 209cc3
Packit 209cc3
	if test -z "$dag_lib_dir"; then
Packit 209cc3
		dag_lib_dir="$dag_root/lib"
Packit 209cc3
	fi
Packit 209cc3
Packit 209cc3
	V_INCLS="$V_INCLS -I$dag_include_dir"
Packit 209cc3
Packit 209cc3
	AC_CHECK_HEADERS([dagapi.h])
Packit 209cc3
Packit 209cc3
	if test "$ac_cv_header_dagapi_h" = yes; then
Packit 209cc3
Packit 209cc3
		if test $V_PCAP != dag ; then
Packit 209cc3
			 SSRC="$SSRC pcap-dag.c"
Packit 209cc3
		fi
Packit 209cc3
Packit 209cc3
		# Check for various DAG API functions.
Packit 209cc3
		# Don't need to save and restore LIBS to prevent -ldag being
Packit 209cc3
		# included if there's a found-action (arg 3).
Packit 209cc3
		saved_ldflags=$LDFLAGS
Packit 209cc3
		LDFLAGS="-L$dag_lib_dir"
Packit 209cc3
		AC_CHECK_LIB([dag], [dag_attach_stream],
Packit 209cc3
		    [],
Packit 209cc3
		    [AC_MSG_ERROR(DAG library lacks streams support)])
Packit 209cc3
		AC_CHECK_LIB([dag], [dag_attach_stream64], [dag_large_streams="1"], [dag_large_streams="0"])
Packit 209cc3
		AC_CHECK_LIB([dag],[dag_get_erf_types], [
Packit 209cc3
			AC_DEFINE(HAVE_DAG_GET_ERF_TYPES, 1, [define if you have dag_get_erf_types()])])
Packit 209cc3
		AC_CHECK_LIB([dag],[dag_get_stream_erf_types], [
Packit 209cc3
			AC_DEFINE(HAVE_DAG_GET_STREAM_ERF_TYPES, 1, [define if you have dag_get_stream_erf_types()])])
Packit 209cc3
Packit 209cc3
		LDFLAGS=$saved_ldflags
Packit 209cc3
Packit 209cc3
		#
Packit 209cc3
		# We assume that if we have libdag we have libdagconf,
Packit 209cc3
		# as they're installed at the same time from the same
Packit 209cc3
		# package.
Packit 209cc3
		#
Packit 209cc3
		LIBS="$LIBS -ldag -ldagconf"
Packit 209cc3
		LDFLAGS="$LDFLAGS -L$dag_lib_dir"
Packit 209cc3
Packit 209cc3
		if test "$dag_large_streams" = 1; then
Packit 209cc3
			AC_DEFINE(HAVE_DAG_LARGE_STREAMS_API, 1, [define if you have large streams capable DAG API])
Packit 209cc3
			AC_CHECK_LIB([vdag],[vdag_set_device_info], [ac_dag_have_vdag="1"], [ac_dag_have_vdag="0"])
Packit 209cc3
			if test "$ac_dag_have_vdag" = 1; then
Packit 209cc3
				AC_DEFINE(HAVE_DAG_VDAG, 1, [define if you have vdag_set_device_info()])
Packit 209cc3
				if test "$ac_lbl_have_pthreads" != "found"; then
Packit 209cc3
					AC_MSG_ERROR([DAG requires pthreads, but we didn't find them])
Packit 209cc3
				fi
Packit 209cc3
				LIBS="$LIBS $PTHREAD_LIBS"
Packit 209cc3
			fi
Packit 209cc3
		fi
Packit 209cc3
Packit 209cc3
		AC_DEFINE(HAVE_DAG_API, 1, [define if you have the DAG API])
Packit 209cc3
	else
Packit 209cc3
Packit 209cc3
		if test "$V_PCAP" = dag; then
Packit 209cc3
			# User requested "dag" capture type but we couldn't
Packit 209cc3
			# find the DAG API support.
Packit 209cc3
			AC_MSG_ERROR([DAG support requested with --with-pcap=dag, but the DAG headers weren't found at $dag_include_dir: make sure the DAG support is installed, specify a different path or paths if necessary, or don't request DAG support])
Packit 209cc3
		fi
Packit 209cc3
Packit 209cc3
		if test "$want_dag" = yes; then
Packit 209cc3
	        	# User wanted DAG support but we couldn't find it.
Packit 209cc3
			AC_MSG_ERROR([DAG support requested with --with-dag, but the DAG headers weren't found at $dag_include_dir: make sure the DAG support is installed, specify a different path or paths if necessary, or don't request DAG support])
Packit 209cc3
		fi
Packit 209cc3
	fi
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
AC_ARG_WITH(septel,
Packit 209cc3
AC_HELP_STRING([--with-septel@<:@=DIR@:>@],[include Septel support (located in directory DIR, if supplied).  @<:@default=yes, if present@:>@]),
Packit 209cc3
[
Packit 209cc3
	if test "$withval" = no
Packit 209cc3
	then
Packit 209cc3
		want_septel=no
Packit 209cc3
	elif test "$withval" = yes
Packit 209cc3
	then
Packit 209cc3
		want_septel=yes
Packit 209cc3
		septel_root=
Packit 209cc3
	else
Packit 209cc3
		want_septel=yes
Packit 209cc3
		septel_root=$withval
Packit 209cc3
	fi
Packit 209cc3
],[
Packit 209cc3
	if test "$V_PCAP" = septel; then
Packit 209cc3
		# User requested Septel-only libpcap, so we'd better have
Packit 209cc3
		# the Septel API.
Packit 209cc3
		want_septel=yes
Packit 209cc3
	elif test "xxx_only" = yes; then
Packit 209cc3
		# User requested something-else-only pcap, so they don't
Packit 209cc3
		# want Septel support.
Packit 209cc3
		want_septel=no
Packit 209cc3
	else
Packit 209cc3
		#
Packit 209cc3
		# Use Septel API if present, otherwise don't
Packit 209cc3
		#
Packit 209cc3
		want_septel=ifpresent
Packit 209cc3
	fi
Packit 209cc3
])
Packit 209cc3
Packit 209cc3
ac_cv_lbl_septel_api=no
Packit 209cc3
if test "$with_septel" != no; then
Packit 209cc3
Packit 209cc3
	AC_MSG_CHECKING([whether we have Septel API headers])
Packit 209cc3
Packit 209cc3
	# If necessary, set default paths for Septel API headers and libraries.
Packit 209cc3
	if test -z "$septel_root"; then
Packit 209cc3
		septel_root=$srcdir/../septel
Packit 209cc3
	fi
Packit 209cc3
Packit 209cc3
	septel_tools_dir="$septel_root"
Packit 209cc3
	septel_include_dir="$septel_root/INC"
Packit 209cc3
Packit 209cc3
	if test -r "$septel_include_dir/msg.h"; then
Packit 209cc3
		ac_cv_lbl_septel_api=yes
Packit 209cc3
	fi
Packit 209cc3
Packit 209cc3
	if test "$ac_cv_lbl_septel_api" = yes; then
Packit 209cc3
		AC_MSG_RESULT([yes ($septel_include_dir)])
Packit 209cc3
Packit 209cc3
		V_INCLS="$V_INCLS -I$septel_include_dir"
Packit 209cc3
		ADDLOBJS="$ADDLOBJS $septel_tools_dir/asciibin.o $septel_tools_dir/bit2byte.o $septel_tools_dir/confirm.o $septel_tools_dir/fmtmsg.o $septel_tools_dir/gct_unix.o $septel_tools_dir/hqueue.o $septel_tools_dir/ident.o $septel_tools_dir/mem.o $septel_tools_dir/pack.o $septel_tools_dir/parse.o $septel_tools_dir/pool.o $septel_tools_dir/sdlsig.o $septel_tools_dir/strtonum.o $septel_tools_dir/timer.o $septel_tools_dir/trace.o"
Packit 209cc3
		ADDLARCHIVEOBJS="$ADDLARCHIVEOBJS $septel_tools_dir/asciibin.o $septel_tools_dir/bit2byte.o $septel_tools_dir/confirm.o $septel_tools_dir/fmtmsg.o $septel_tools_dir/gct_unix.o $septel_tools_dir/hqueue.o $septel_tools_dir/ident.o $septel_tools_dir/mem.o $septel_tools_dir/pack.o $septel_tools_dir/parse.o $septel_tools_dir/pool.o $septel_tools_dir/sdlsig.o $septel_tools_dir/strtonum.o $septel_tools_dir/timer.o $septel_tools_dir/trace.o"
Packit 209cc3
Packit 209cc3
		if test "$V_PCAP" != septel ; then
Packit 209cc3
			 SSRC="$SSRC pcap-septel.c"
Packit 209cc3
		fi
Packit 209cc3
Packit 209cc3
		AC_DEFINE(HAVE_SEPTEL_API, 1, [define if you have the Septel API])
Packit 209cc3
	else
Packit 209cc3
		AC_MSG_RESULT(no)
Packit 209cc3
Packit 209cc3
		if test "$V_PCAP" = septel; then
Packit 209cc3
			# User requested "septel" capture type but
Packit 209cc3
			# we couldn't find the Septel API support.
Packit 209cc3
			AC_MSG_ERROR([Septel support requested with --with-pcap=septel, but the Septel headers weren't found at $septel_include_dir: make sure the Septel support is installed, specify a different path or paths if necessary, or don't request Septel support])
Packit 209cc3
		fi
Packit 209cc3
Packit 209cc3
		if test "$want_septel" = yes; then
Packit 209cc3
	        	# User wanted Septel support but we couldn't find it.
Packit 209cc3
			AC_MSG_ERROR([Septel support requested with --with-septel, but the Septel headers weren't found at $septel_include_dir: make sure the Septel support is installed, specify a different path or paths if necessary, or don't request Septel support])
Packit 209cc3
		fi
Packit 209cc3
	fi
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
# Check for Myricom SNF support.
Packit 209cc3
AC_ARG_WITH([snf],
Packit 209cc3
AC_HELP_STRING([--with-snf@<:@=DIR@:>@],[include Myricom SNF support (located in directory DIR, if supplied).  @<:@default=yes, if present@:>@]),
Packit 209cc3
[
Packit 209cc3
	if test "$withval" = no
Packit 209cc3
	then
Packit 209cc3
		# User explicitly doesn't want SNF
Packit 209cc3
		want_snf=no
Packit 209cc3
	elif test "$withval" = yes
Packit 209cc3
	then
Packit 209cc3
		# User wants SNF support but hasn't specified a directory.
Packit 209cc3
		want_snf=yes
Packit 209cc3
	else
Packit 209cc3
		# User wants SNF support with a specified directory.
Packit 209cc3
		want_snf=yes
Packit 209cc3
		snf_root=$withval
Packit 209cc3
	fi
Packit 209cc3
],[
Packit 209cc3
	if test "$V_PCAP" = snf; then
Packit 209cc3
		# User requested Sniffer-only libpcap, so we'd better have
Packit 209cc3
		# the Sniffer API.
Packit 209cc3
		want_snf=yes
Packit 209cc3
	elif test "xxx_only" = yes; then
Packit 209cc3
		# User requested something-else-only pcap, so they don't
Packit 209cc3
		# want SNF support.
Packit 209cc3
		want_snf=no
Packit 209cc3
	else
Packit 209cc3
		#
Packit 209cc3
		# Use Sniffer API if present, otherwise don't
Packit 209cc3
		#
Packit 209cc3
		want_snf=ifpresent
Packit 209cc3
	fi
Packit 209cc3
])
Packit 209cc3
Packit 209cc3
AC_ARG_WITH([snf-includes],
Packit 209cc3
AC_HELP_STRING([--with-snf-includes=IDIR],[Myricom SNF include directory, if not DIR/include]),
Packit 209cc3
[
Packit 209cc3
	# User wants SNF with specific header directory
Packit 209cc3
	want_snf=yes
Packit 209cc3
	snf_include_dir=$withval
Packit 209cc3
],[])
Packit 209cc3
Packit 209cc3
AC_ARG_WITH([snf-libraries],
Packit 209cc3
AC_HELP_STRING([--with-snf-libraries=LDIR],[Myricom SNF library directory, if not DIR/lib]),
Packit 209cc3
[
Packit 209cc3
	# User wants SNF with specific lib directory
Packit 209cc3
	want_snf=yes
Packit 209cc3
	snf_lib_dir=$withval
Packit 209cc3
],[])
Packit 209cc3
Packit 209cc3
ac_cv_lbl_snf_api=no
Packit 209cc3
if test "$with_snf" != no; then
Packit 209cc3
Packit 209cc3
	AC_MSG_CHECKING(whether we have Myricom Sniffer API)
Packit 209cc3
Packit 209cc3
	# If necessary, set default paths for Sniffer headers and libraries.
Packit 209cc3
	if test -z "$snf_root"; then
Packit 209cc3
		snf_root=/opt/snf
Packit 209cc3
	fi
Packit 209cc3
Packit 209cc3
	if test -z "$snf_include_dir"; then
Packit 209cc3
		snf_include_dir="$snf_root/include"
Packit 209cc3
	fi
Packit 209cc3
Packit 209cc3
	if test -z "$snf_lib_dir"; then
Packit 209cc3
		snf_lib_dir="$snf_root/lib"
Packit 209cc3
	fi
Packit 209cc3
Packit 209cc3
	if test -f "$snf_include_dir/snf.h"; then
Packit 209cc3
		# We found a header; make sure we can link with the library
Packit 209cc3
		saved_ldflags=$LDFLAGS
Packit 209cc3
		LDFLAGS="$LDFLAGS -L$snf_lib_dir"
Packit 209cc3
		AC_CHECK_LIB([snf], [snf_init], [ac_cv_lbl_snf_api="yes"])
Packit 209cc3
		LDFLAGS="$saved_ldflags"
Packit 209cc3
		if test "$ac_cv_lbl_snf_api" = no; then
Packit 209cc3
			AC_MSG_ERROR(SNF API cannot correctly be linked; check config.log)
Packit 209cc3
		fi
Packit 209cc3
	fi
Packit 209cc3
Packit 209cc3
	if test "$ac_cv_lbl_snf_api" = yes; then
Packit 209cc3
		AC_MSG_RESULT([yes ($snf_root)])
Packit 209cc3
Packit 209cc3
		V_INCLS="$V_INCLS -I$snf_include_dir"
Packit 209cc3
		LIBS="$LIBS -lsnf"
Packit 209cc3
		LDFLAGS="$LDFLAGS -L$snf_lib_dir"
Packit 209cc3
Packit 209cc3
		if test "$V_PCAP" != snf ; then
Packit 209cc3
			SSRC="$SSRC pcap-snf.c"
Packit 209cc3
		fi
Packit 209cc3
Packit 209cc3
		AC_DEFINE(HAVE_SNF_API, 1, [define if you have the Myricom SNF API])
Packit 209cc3
	else
Packit 209cc3
		AC_MSG_RESULT(no)
Packit 209cc3
Packit 209cc3
		if test "$want_snf" = yes; then
Packit 209cc3
			# User requested "snf" capture type but
Packit 209cc3
			# we couldn't find the Sniffer API support.
Packit 209cc3
			AC_MSG_ERROR([Myricom Sniffer support requested with --with-pcap=snf, but the Sniffer headers weren't found at $snf_include_dir: make sure the Sniffer support is installed, specify a different path or paths if necessary, or don't request Sniffer support])
Packit 209cc3
		fi
Packit 209cc3
Packit 209cc3
		if test "$want_snf" = yes; then
Packit 209cc3
			AC_MSG_ERROR([Myricom Sniffer support requested with --with-snf, but the Sniffer headers weren't found at $snf_include_dir: make sure the Sniffer support is installed, specify a different path or paths if necessary, or don't request Sniffer support])
Packit 209cc3
		fi
Packit 209cc3
	fi
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
# Check for Riverbed TurboCap support.
Packit 209cc3
AC_ARG_WITH([turbocap],
Packit 209cc3
AC_HELP_STRING([--with-turbocap@<:@=DIR@:>@],[include Riverbed TurboCap support (located in directory DIR, if supplied).  @<:@default=yes, if present@:>@]),
Packit 209cc3
[
Packit 209cc3
	if test "$withval" = no
Packit 209cc3
	then
Packit 209cc3
		# User explicitly doesn't want TurboCap
Packit 209cc3
		want_turbocap=no
Packit 209cc3
	elif test "$withval" = yes
Packit 209cc3
	then
Packit 209cc3
		# User wants TurboCap support but hasn't specified a directory.
Packit 209cc3
		want_turbocap=yes
Packit 209cc3
	else
Packit 209cc3
		# User wants TurboCap support with a specified directory.
Packit 209cc3
		want_turbocap=yes
Packit 209cc3
		turbocap_root=$withval
Packit 209cc3
	fi
Packit 209cc3
],[
Packit 209cc3
	if test "xxx_only" = yes; then
Packit 209cc3
		# User requested something-else-only pcap, so they don't
Packit 209cc3
		# want TurboCap support.
Packit 209cc3
		want_turbocap=no
Packit 209cc3
	else
Packit 209cc3
		#
Packit 209cc3
		# Use TurboCap API if present, otherwise don't
Packit 209cc3
		#
Packit 209cc3
		want_turbocap=ifpresent
Packit 209cc3
	fi
Packit 209cc3
])
Packit 209cc3
Packit 209cc3
ac_cv_lbl_turbocap_api=no
Packit 209cc3
if test "$want_turbocap" != no; then
Packit 209cc3
Packit 209cc3
	AC_MSG_CHECKING(whether TurboCap is supported)
Packit 209cc3
Packit 209cc3
	save_CFLAGS="$CFLAGS"
Packit 209cc3
	save_LIBS="$LIBS"
Packit 209cc3
	if test ! -z "$turbocap_root"; then
Packit 209cc3
		TURBOCAP_CFLAGS="-I$turbocap_root/include"
Packit 209cc3
		TURBOCAP_LIBS="-L$turbocap_root/lib"
Packit 209cc3
		CFLAGS="$CFLAGS $TURBOCAP_CFLAGS"
Packit 209cc3
	fi
Packit 209cc3
Packit 209cc3
	AC_TRY_COMPILE(
Packit 209cc3
	[
Packit 209cc3
	    #include <TcApi.h>
Packit 209cc3
	],
Packit 209cc3
	[
Packit 209cc3
	    TC_INSTANCE a; TC_PORT b; TC_BOARD c;
Packit 209cc3
	    TC_INSTANCE i;
Packit 209cc3
	    (void)TcInstanceCreateByName("foo", &i);
Packit 209cc3
	],
Packit 209cc3
	ac_cv_lbl_turbocap_api=yes)
Packit 209cc3
Packit 209cc3
	CFLAGS="$save_CFLAGS"
Packit 209cc3
	if test $ac_cv_lbl_turbocap_api = yes; then
Packit 209cc3
		AC_MSG_RESULT(yes)
Packit 209cc3
Packit 209cc3
		SSRC="$SSRC pcap-tc.c"
Packit 209cc3
		V_INCLS="$V_INCLS $TURBOCAP_CFLAGS"
Packit 209cc3
		LIBS="$LIBS $TURBOCAP_LIBS -lTcApi -lpthread -lstdc++"
Packit 209cc3
Packit 209cc3
		AC_DEFINE(HAVE_TC_API, 1, [define if you have the TurboCap API])
Packit 209cc3
	else
Packit 209cc3
		AC_MSG_RESULT(no)
Packit 209cc3
Packit 209cc3
		if test "$want_turbocap" = yes; then
Packit 209cc3
	        	# User wanted Turbo support but we couldn't find it.
Packit 209cc3
			AC_MSG_ERROR([TurboCap support requested with --with-turbocap, but the TurboCap headers weren't found: make sure the TurboCap support is installed or don't request TurboCap support])
Packit 209cc3
		fi
Packit 209cc3
	fi
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
dnl
Packit 209cc3
dnl Allow the user to enable remote capture.
Packit 209cc3
dnl It's off by default, as that increases the attack surface of
Packit 209cc3
dnl libpcap, exposing it to malicious servers.
Packit 209cc3
dnl
Packit 209cc3
AC_MSG_CHECKING([whether to enable remote packet capture])
Packit 209cc3
AC_ARG_ENABLE(remote,
Packit 209cc3
[  --enable-remote         enable remote packet capture @<:@default=no@:>@
Packit 209cc3
  --disable-remote        disable remote packet capture],,
Packit 209cc3
   enableval=no)
Packit 209cc3
case "$enableval" in
Packit 209cc3
yes)	AC_MSG_RESULT(yes)
Packit 209cc3
	AC_WARN([Remote packet capture may expose libpcap-based applications])
Packit 209cc3
	AC_WARN([to attacks by malicious remote capture servers!])
Packit 209cc3
	#
Packit 209cc3
	# rpcapd requires pthreads on UN*X.
Packit 209cc3
	#
Packit 209cc3
	if test "$ac_lbl_have_pthreads" != "found"; then
Packit 209cc3
		AC_MSG_ERROR([rpcapd requires pthreads, but we didn't find them])
Packit 209cc3
	fi
Packit 209cc3
	#
Packit 209cc3
	# It also requires crypt().
Packit 209cc3
	# Do we have it in the system libraries?
Packit 209cc3
	#
Packit 209cc3
	AC_CHECK_FUNC(crypt,,
Packit 209cc3
	    [
Packit 209cc3
		#
Packit 209cc3
		# No.  Do we have it in -lcrypt?
Packit 209cc3
		#
Packit 209cc3
		AC_CHECK_LIB(crypt, crypt,
Packit 209cc3
		    [
Packit 209cc3
			#
Packit 209cc3
			# Yes; add -lcrypt to the libraries for rpcapd.
Packit 209cc3
			#
Packit 209cc3
			RPCAPD_LIBS="$RPCAPD_LIBS -lcrypt"
Packit 209cc3
		    ],
Packit 209cc3
		    [
Packit 209cc3
			AC_MSG_ERROR([rpcapd requires crypt(), but we didn't find it])
Packit 209cc3
		    ])
Packit 209cc3
	    ])
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# OK, we have crypt().  Do we have getspnam()?
Packit 209cc3
	#
Packit 209cc3
	AC_CHECK_FUNCS(getspnam)
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# Check for various members of struct msghdr.
Packit 209cc3
	#
Packit 209cc3
	AC_CHECK_MEMBERS([struct msghdr.msg_control],,,
Packit 209cc3
	    [
Packit 209cc3
		#include "ftmacros.h"
Packit 209cc3
		#include <sys/socket.h>
Packit 209cc3
	    ])
Packit 209cc3
	AC_CHECK_MEMBERS([struct msghdr.msg_flags],,,
Packit 209cc3
	    [
Packit 209cc3
		#include "ftmacros.h"
Packit 209cc3
		#include <sys/socket.h>
Packit 209cc3
	    ])
Packit 209cc3
Packit 209cc3
	AC_DEFINE(ENABLE_REMOTE,,
Packit 209cc3
	    [Define to 1 if remote packet capture is to be supported])
Packit 209cc3
	SSRC="$SSRC pcap-new.c pcap-rpcap.c rpcap-protocol.c sockutils.c"
Packit 209cc3
	BUILD_RPCAPD=build-rpcapd
Packit 209cc3
	INSTALL_RPCAPD=install-rpcapd
Packit 209cc3
	;;
Packit 209cc3
*)	AC_MSG_RESULT(no)
Packit 209cc3
	;;
Packit 209cc3
esac
Packit 209cc3
Packit 209cc3
AC_MSG_CHECKING(whether to build optimizer debugging code)
Packit 209cc3
AC_ARG_ENABLE(optimizer-dbg,
Packit 209cc3
AC_HELP_STRING([--enable-optimizer-dbg],[build optimizer debugging code]))
Packit 209cc3
if test "$enable_optimizer_dbg" = "yes"; then
Packit 209cc3
	AC_DEFINE(BDEBUG,1,[Enable optimizer debugging])
Packit 209cc3
fi
Packit 209cc3
AC_MSG_RESULT(${enable_optimizer_dbg-no})
Packit 209cc3
Packit 209cc3
AC_MSG_CHECKING(whether to build parser debugging code)
Packit 209cc3
AC_ARG_ENABLE(yydebug,
Packit 209cc3
AC_HELP_STRING([--enable-yydebug],[build parser debugging code]))
Packit 209cc3
if test "$enable_yydebug" = "yes"; then
Packit 209cc3
	AC_DEFINE(YYDEBUG,1,[Enable parser debugging])
Packit 209cc3
fi
Packit 209cc3
AC_MSG_RESULT(${enable_yydebug-no})
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# Look for {f}lex.
Packit 209cc3
#
Packit 209cc3
AC_PROG_LEX
Packit 209cc3
if test "$LEX" = ":"; then
Packit 209cc3
	AC_MSG_ERROR([Neither flex nor lex was found.])
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# Make sure {f}lex supports the -P, --header-file, and --nounput flags
Packit 209cc3
# and supports processing our scanner.l.
Packit 209cc3
#
Packit 209cc3
AC_CACHE_CHECK([for capable lex], tcpdump_cv_capable_lex,
Packit 209cc3
	if $LEX -P pcap_ --header-file=/dev/null --nounput -t $srcdir/scanner.l > /dev/null 2>&1; then
Packit 209cc3
	    tcpdump_cv_capable_lex=yes
Packit 209cc3
	else
Packit 209cc3
	    tcpdump_cv_capable_lex=insufficient
Packit 209cc3
	fi)
Packit 209cc3
if test $tcpdump_cv_capable_lex = insufficient ; then
Packit 209cc3
	AC_MSG_ERROR([$LEX is insufficient to compile libpcap.
Packit 209cc3
 libpcap requires Flex 2.5.31 or later, or a compatible version of lex.])
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# Look for yacc/bison/byacc.
Packit 209cc3
#
Packit 209cc3
AC_PROG_YACC
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# Make sure it supports the -p flag and supports processing our
Packit 209cc3
# grammar.y.
Packit 209cc3
#
Packit 209cc3
AC_CACHE_CHECK([for capable yacc/bison], tcpdump_cv_capable_yacc,
Packit 209cc3
	if $YACC -p pcap_ -o /dev/null $srcdir/grammar.y >/dev/null 2>&1; then
Packit 209cc3
	    tcpdump_cv_capable_yacc=yes
Packit 209cc3
	else
Packit 209cc3
	    tcpdump_cv_capable_yacc=insufficient
Packit 209cc3
	fi)
Packit 209cc3
if test $tcpdump_cv_capable_yacc = insufficient ; then
Packit 209cc3
	AC_MSG_ERROR([$YACC is insufficient to compile libpcap.
Packit 209cc3
 libpcap requires Bison, a newer version of Berkeley YACC with support
Packit 209cc3
 for reentrant parsers, or another YACC compatible with them.])
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# Do various checks for various OSes and versions of those OSes.
Packit 209cc3
#
Packit 209cc3
# Assume, by default, no support for shared libraries and V7/BSD
Packit 209cc3
# convention for man pages (devices in section 4, file formats in
Packit 209cc3
# section 5, miscellaneous info in section 7, administrative commands
Packit 209cc3
# and daemons in section 8).  Individual cases can override this.
Packit 209cc3
#
Packit 209cc3
DYEXT="none"
Packit 209cc3
MAN_DEVICES=4
Packit 209cc3
MAN_FILE_FORMATS=5
Packit 209cc3
MAN_MISC_INFO=7
Packit 209cc3
MAN_ADMIN_COMMANDS=8
Packit 209cc3
case "$host_os" in
Packit 209cc3
Packit 209cc3
aix*)
Packit 209cc3
	dnl Workaround to enable certain features
Packit 209cc3
	AC_DEFINE(_SUN,1,[define on AIX to get certain functions])
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# AIX makes it fun to build shared and static libraries,
Packit 209cc3
	# because they're *both* ".a" archive libraries.  We
Packit 209cc3
	# build the static library for the benefit of the traditional
Packit 209cc3
	# scheme of building libpcap and tcpdump in subdirectories of
Packit 209cc3
	# the same directory, with tcpdump statically linked with the
Packit 209cc3
	# libpcap in question, but we also build a shared library as
Packit 209cc3
	# "libpcap.shareda" and install *it*, rather than the static
Packit 209cc3
	# library, as "libpcap.a".
Packit 209cc3
	#
Packit 209cc3
	DYEXT="shareda"
Packit 209cc3
Packit 209cc3
	case "$V_PCAP" in
Packit 209cc3
Packit 209cc3
	dlpi)
Packit 209cc3
		#
Packit 209cc3
		# If we're using DLPI, applications will need to
Packit 209cc3
		# use /lib/pse.exp if present, as we use the
Packit 209cc3
		# STREAMS routines.
Packit 209cc3
		#
Packit 209cc3
		pseexe="/lib/pse.exp"
Packit 209cc3
		AC_MSG_CHECKING(for $pseexe)
Packit 209cc3
		if test -f $pseexe ; then
Packit 209cc3
			AC_MSG_RESULT(yes)
Packit 209cc3
			LIBS="-I:$pseexe"
Packit 209cc3
		fi
Packit 209cc3
		;;
Packit 209cc3
Packit 209cc3
	bpf)
Packit 209cc3
		#
Packit 209cc3
		# If we're using BPF, we need "-lodm" and "-lcfg", as
Packit 209cc3
		# we use them to load the BPF module.
Packit 209cc3
		#
Packit 209cc3
		LIBS="-lodm -lcfg"
Packit 209cc3
		;;
Packit 209cc3
	esac
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
darwin*)
Packit 209cc3
	DYEXT="dylib"
Packit 209cc3
	V_CCOPT="$V_CCOPT -fno-common"
Packit 209cc3
	AC_ARG_ENABLE(universal,
Packit 209cc3
	AC_HELP_STRING([--disable-universal],[don't build universal on macOS]))
Packit 209cc3
	if test "$enable_universal" != "no"; then
Packit 209cc3
		case "$host_os" in
Packit 209cc3
Packit 209cc3
		darwin[[0-7]].*)
Packit 209cc3
			#
Packit 209cc3
			# Pre-Tiger.  Build only for 32-bit PowerPC; no
Packit 209cc3
			# need for any special compiler or linker flags.
Packit 209cc3
			#
Packit 209cc3
			;;
Packit 209cc3
Packit 209cc3
		darwin8.[[0123]]|darwin8.[[0123]].*)
Packit 209cc3
			#
Packit 209cc3
			# Tiger, prior to Intel support.  Build
Packit 209cc3
			# libraries and executables for 32-bit PowerPC
Packit 209cc3
			# and 64-bit PowerPC, with 32-bit PowerPC first.
Packit 209cc3
			# (I'm guessing that's what Apple does.)
Packit 209cc3
			#
Packit 209cc3
			# (The double brackets are needed because
Packit 209cc3
			# autotools/m4 use brackets as a quoting
Packit 209cc3
			# character; the double brackets turn into
Packit 209cc3
			# single brackets in the generated configure
Packit 209cc3
			# file.)
Packit 209cc3
			#
Packit 209cc3
			V_LIB_CCOPT_FAT="-arch ppc -arch ppc64"
Packit 209cc3
			V_LIB_LDFLAGS_FAT="-arch ppc -arch ppc64"
Packit 209cc3
			V_PROG_CCOPT_FAT="-arch ppc -arch ppc64"
Packit 209cc3
			V_PROG_LDFLAGS_FAT="-arch ppc -arch ppc64"
Packit 209cc3
			;;
Packit 209cc3
Packit 209cc3
		darwin8.[[456]]|darwin.[[456]].*)
Packit 209cc3
			#
Packit 209cc3
			# Tiger, subsequent to Intel support but prior
Packit 209cc3
			# to x86-64 support.  Build libraries and
Packit 209cc3
			# executables for 32-bit PowerPC, 64-bit
Packit 209cc3
			# PowerPC, and 32-bit x86, with 32-bit PowerPC
Packit 209cc3
			# first.  (I'm guessing that's what Apple does.)
Packit 209cc3
			#
Packit 209cc3
			# (The double brackets are needed because
Packit 209cc3
			# autotools/m4 use brackets as a quoting
Packit 209cc3
			# character; the double brackets turn into
Packit 209cc3
			# single brackets in the generated configure
Packit 209cc3
			# file.)
Packit 209cc3
			#
Packit 209cc3
			V_LIB_CCOPT_FAT="-arch ppc -arch ppc64 -arch i386"
Packit 209cc3
			V_LIB_LDFLAGS_FAT="-arch ppc -arch ppc64 -arch i386"
Packit 209cc3
			V_PROG_CCOPT_FAT="-arch ppc -arch ppc64 -arch i386"
Packit 209cc3
			V_PROG_LDFLAGS_FAT="-arch ppc -arch ppc64 -arch i386"
Packit 209cc3
			;;
Packit 209cc3
Packit 209cc3
		darwin8.*)
Packit 209cc3
			#
Packit 209cc3
			# All other Tiger, so subsequent to x86-64
Packit 209cc3
			# support.  Build libraries and executables for
Packit 209cc3
			# 32-bit PowerPC, 64-bit PowerPC, 32-bit x86,
Packit 209cc3
			# and x86-64, with 32-bit PowerPC first.  (I'm
Packit 209cc3
			# guessing that's what Apple does.)
Packit 209cc3
			#
Packit 209cc3
			V_LIB_CCOPT_FAT="-arch ppc -arch ppc64 -arch i386 -arch x86_64"
Packit 209cc3
			V_LIB_LDFLAGS_FAT="-arch ppc -arch ppc64 -arch i386 -arch x86_64"
Packit 209cc3
			V_PROG_CCOPT_FAT="-arch ppc -arch ppc64 -arch i386 -arch x86_64"
Packit 209cc3
			V_PROG_LDFLAGS_FAT="-arch ppc -arch ppc64 -arch i386 -arch x86_64"
Packit 209cc3
			;;
Packit 209cc3
Packit 209cc3
		darwin9.*)
Packit 209cc3
			#
Packit 209cc3
			# Leopard.  Build libraries for 32-bit PowerPC,
Packit 209cc3
			# 64-bit PowerPC, 32-bit x86, and x86-64, with
Packit 209cc3
			# 32-bit PowerPC first, and build executables
Packit 209cc3
			# for 32-bit x86 and 32-bit PowerPC, with 32-bit
Packit 209cc3
			# x86 first.  (That's what Apple does.)
Packit 209cc3
			#
Packit 209cc3
			V_LIB_CCOPT_FAT="-arch ppc -arch ppc64 -arch i386 -arch x86_64"
Packit 209cc3
			V_LIB_LDFLAGS_FAT="-arch ppc -arch ppc64 -arch i386 -arch x86_64"
Packit 209cc3
			V_PROG_CCOPT_FAT="-arch i386 -arch ppc"
Packit 209cc3
			V_PROG_LDFLAGS_FAT="-arch i386 -arch ppc"
Packit 209cc3
			;;
Packit 209cc3
Packit 209cc3
		darwin10.*)
Packit 209cc3
			#
Packit 209cc3
			# Snow Leopard.  Build libraries for x86-64,
Packit 209cc3
			# 32-bit x86, and 32-bit PowerPC, with x86-64
Packit 209cc3
			# first, and build executables for x86-64 and
Packit 209cc3
			# 32-bit x86, with x86-64 first.  (That's what
Packit 209cc3
			# Apple does, even though Snow Leopard doesn't
Packit 209cc3
			# run on PPC, so PPC libpcap runs under Rosetta,
Packit 209cc3
			# and Rosetta doesn't support BPF ioctls, so PPC
Packit 209cc3
			# programs can't do live captures.)
Packit 209cc3
			#
Packit 209cc3
			V_LIB_CCOPT_FAT="-arch x86_64 -arch i386 -arch ppc"
Packit 209cc3
			V_LIB_LDFLAGS_FAT="-arch x86_64 -arch i386 -arch ppc"
Packit 209cc3
			V_PROG_CCOPT_FAT="-arch x86_64 -arch i386"
Packit 209cc3
			V_PROG_LDFLAGS_FAT="-arch x86_64 -arch i386"
Packit 209cc3
			;;
Packit 209cc3
Packit 209cc3
		darwin*)
Packit 209cc3
			#
Packit 209cc3
			# Post-Snow Leopard.  Build libraries for x86-64
Packit 209cc3
			# and 32-bit x86, with x86-64 first, and build
Packit 209cc3
			# executables only for x86-64.  (That's what
Packit 209cc3
			# Apple does.)  This requires no special flags
Packit 209cc3
			# for programs.
Packit 209cc3
			# XXX - update if and when Apple drops support
Packit 209cc3
			# for 32-bit x86 code and if and when Apple adds
Packit 209cc3
			# ARM-based Macs.  (You're on your own for iOS
Packit 209cc3
			# etc.)
Packit 209cc3
			#
Packit 209cc3
			# XXX - check whether we *can* build for
Packit 209cc3
			# i386 and, if not, suggest that the user
Packit 209cc3
			# install the /usr/include headers if they
Packit 209cc3
			# want to build fat.
Packit 209cc3
			#
Packit 209cc3
			AC_MSG_CHECKING(whether building for 32-bit x86 is supported)
Packit 209cc3
			save_CFLAGS="$CFLAGS"
Packit 209cc3
			CFLAGS="$CFLAGS -arch i386"
Packit 209cc3
			AC_TRY_COMPILE(
Packit 209cc3
			    [],
Packit 209cc3
			    [return 0;],
Packit 209cc3
			    [
Packit 209cc3
				AC_MSG_RESULT(yes)
Packit 209cc3
				V_LIB_CCOPT_FAT="-arch x86_64 -arch i386"
Packit 209cc3
				V_LIB_LDFLAGS_FAT="-arch x86_64 -arch i386"
Packit 209cc3
			    ],
Packit 209cc3
			    [
Packit 209cc3
				AC_MSG_RESULT(no)
Packit 209cc3
				V_LIB_CCOPT_FAT="-arch x86_64"
Packit 209cc3
				V_LIB_LDFLAGS_FAT="-arch x86_64"
Packit 209cc3
				case "$host_os" in
Packit 209cc3
Packit 209cc3
				darwin18.*)
Packit 209cc3
					#
Packit 209cc3
					# Mojave; you need to install the
Packit 209cc3
					# /usr/include headers to get
Packit 209cc3
					# 32-bit x86 builds to work.
Packit 209cc3
					#
Packit 209cc3
					AC_MSG_WARN([Compiling for 32-bit x86 gives an error; try installing the command-line tools and, after that, installing the /usr/include headers from the /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg package])
Packit 209cc3
					;;
Packit 209cc3
Packit 209cc3
				*)
Packit 209cc3
					#
Packit 209cc3
					# Pre-Mojave; the command-line
Packit 209cc3
					# tools should be sufficient to
Packit 209cc3
					# enable 32-bit x86 builds.
Packit 209cc3
					#
Packit 209cc3
					AC_MSG_WARN([Compiling for 32-bit x86 gives an error; try installing the command-line tools])
Packit 209cc3
					;;
Packit 209cc3
				esac
Packit 209cc3
			    ])
Packit 209cc3
			CFLAGS="$save_CFLAGS"
Packit 209cc3
			;;
Packit 209cc3
		esac
Packit 209cc3
	fi
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
hpux9*)
Packit 209cc3
	AC_DEFINE(HAVE_HPUX9,1,[on HP-UX 9.x])
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# Use System V conventions for man pages.
Packit 209cc3
	#
Packit 209cc3
	MAN_ADMIN_COMMANDS=1m
Packit 209cc3
	MAN_FILE_FORMATS=4
Packit 209cc3
	MAN_MISC_INFO=5
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
hpux10.0*)
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# Use System V conventions for man pages.
Packit 209cc3
	#
Packit 209cc3
	MAN_ADMIN_COMMANDS=1m
Packit 209cc3
	MAN_FILE_FORMATS=4
Packit 209cc3
	MAN_MISC_INFO=5
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
hpux10.1*)
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# Use System V conventions for man pages.
Packit 209cc3
	#
Packit 209cc3
	MAN_ADMIN_COMMANDS=1m
Packit 209cc3
	MAN_FILE_FORMATS=4
Packit 209cc3
	MAN_MISC_INFO=5
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
hpux*)
Packit 209cc3
	dnl HPUX 10.20 and above is similar to HPUX 9, but
Packit 209cc3
	dnl not the same....
Packit 209cc3
	dnl
Packit 209cc3
	dnl XXX - DYEXT should be set to "sl" if this is building
Packit 209cc3
	dnl for 32-bit PA-RISC, but should be left as "so" for
Packit 209cc3
	dnl 64-bit PA-RISC or, I suspect, IA-64.
Packit 209cc3
	AC_DEFINE(HAVE_HPUX10_20_OR_LATER,1,[on HP-UX 10.20 or later])
Packit 209cc3
	if test "`uname -m`" = "ia64"; then
Packit 209cc3
		DYEXT="so"
Packit 209cc3
	else
Packit 209cc3
		DYEXT="sl"
Packit 209cc3
	fi
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# "-b" builds a shared library; "+h" sets the soname.
Packit 209cc3
	#
Packit 209cc3
	SHLIB_OPT="-b"
Packit 209cc3
	SONAME_OPT="+h"
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# Use System V conventions for man pages.
Packit 209cc3
	#
Packit 209cc3
	MAN_FILE_FORMATS=4
Packit 209cc3
	MAN_MISC_INFO=5
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
irix*)
Packit 209cc3
	#
Packit 209cc3
	# Use IRIX conventions for man pages; they're the same as the
Packit 209cc3
	# System V conventions, except that they use section 8 for
Packit 209cc3
	# administrative commands and daemons.
Packit 209cc3
	#
Packit 209cc3
	MAN_FILE_FORMATS=4
Packit 209cc3
	MAN_MISC_INFO=5
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
linux*|freebsd*|netbsd*|openbsd*|dragonfly*|kfreebsd*|gnu*|midipix*)
Packit 209cc3
	DYEXT="so"
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# Compiler assumed to be GCC; run-time linker may require a -R
Packit 209cc3
	# flag.
Packit 209cc3
	#
Packit 209cc3
	if test "$libdir" != "/usr/lib"; then
Packit 209cc3
		V_RFLAGS=-Wl,-R$libdir
Packit 209cc3
	fi
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
osf*)
Packit 209cc3
	DYEXT="so"
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# DEC OSF/1, a/k/a Digial UNIX, a/k/a Tru64 UNIX.
Packit 209cc3
	# Use Tru64 UNIX conventions for man pages; they're the same as
Packit 209cc3
	# the System V conventions except that they use section 8 for
Packit 209cc3
	# administrative commands and daemons.
Packit 209cc3
	#
Packit 209cc3
	MAN_FILE_FORMATS=4
Packit 209cc3
	MAN_MISC_INFO=5
Packit 209cc3
	MAN_DEVICES=7
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
sinix*)
Packit 209cc3
	AC_MSG_CHECKING(if SINIX compiler defines sinix)
Packit 209cc3
	AC_CACHE_VAL(ac_cv_cc_sinix_defined,
Packit 209cc3
		AC_TRY_COMPILE(
Packit 209cc3
		    [],
Packit 209cc3
		    [int i = sinix;],
Packit 209cc3
		    ac_cv_cc_sinix_defined=yes,
Packit 209cc3
		    ac_cv_cc_sinix_defined=no))
Packit 209cc3
	    AC_MSG_RESULT($ac_cv_cc_sinix_defined)
Packit 209cc3
	    if test $ac_cv_cc_sinix_defined = no ; then
Packit 209cc3
		    AC_DEFINE(sinix,1,[on sinix])
Packit 209cc3
	    fi
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
solaris*)
Packit 209cc3
	AC_DEFINE(HAVE_SOLARIS,1,[On solaris])
Packit 209cc3
Packit 209cc3
	DYEXT="so"
Packit 209cc3
Packit 209cc3
	#
Packit 209cc3
	# Make sure errno is thread-safe, in case we're called in
Packit 209cc3
	# a multithreaded program.  We don't guarantee that two
Packit 209cc3
	# threads can use the *same* pcap_t safely, but the
Packit 209cc3
	# current version does guarantee that you can use different
Packit 209cc3
	# pcap_t's in different threads, and even that pcap_compile()
Packit 209cc3
	# is thread-safe (it wasn't thread-safe in some older versions).
Packit 209cc3
	#
Packit 209cc3
	V_CCOPT="$V_CCOPT -D_TS_ERRNO"
Packit 209cc3
Packit 209cc3
	case "`uname -r`" in
Packit 209cc3
Packit 209cc3
	5.12)
Packit 209cc3
		;;
Packit 209cc3
Packit 209cc3
	*)
Packit 209cc3
		#
Packit 209cc3
		# Use System V conventions for man pages.
Packit 209cc3
		#
Packit 209cc3
		MAN_ADMIN_COMMANDS=1m
Packit 209cc3
		MAN_FILE_FORMATS=4
Packit 209cc3
		MAN_MISC_INFO=5
Packit 209cc3
		MAN_DEVICES=7D
Packit 209cc3
	esac
Packit 209cc3
	;;
Packit 209cc3
esac
Packit 209cc3
Packit 209cc3
AC_ARG_ENABLE(shared,
Packit 209cc3
AC_HELP_STRING([--enable-shared],[build shared libraries @<:@default=yes, if support available@:>@]))
Packit 209cc3
test "x$enable_shared" = "xno" && DYEXT="none"
Packit 209cc3
Packit 209cc3
AC_PROG_RANLIB
Packit 209cc3
AC_CHECK_TOOL([AR], [ar])
Packit 209cc3
Packit 209cc3
AC_PROG_LN_S
Packit 209cc3
AC_SUBST(LN_S)
Packit 209cc3
Packit 209cc3
AC_LBL_DEVEL(V_CCOPT)
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# Check to see if the sockaddr struct has the 4.4 BSD sa_len member.
Packit 209cc3
#
Packit 209cc3
AC_CHECK_MEMBERS([struct sockaddr.sa_len],,,
Packit 209cc3
    [
Packit 209cc3
	#include <sys/types.h>
Packit 209cc3
	#include <sys/socket.h>
Packit 209cc3
    ])
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# Check to see if there's a sockaddr_storage structure.
Packit 209cc3
#
Packit 209cc3
AC_CHECK_TYPES(struct sockaddr_storage,,,
Packit 209cc3
    [
Packit 209cc3
	#include <sys/types.h>
Packit 209cc3
	#include <sys/socket.h>
Packit 209cc3
    ])
Packit 209cc3
Packit 209cc3
#
Packit 209cc3
# Check to see if the dl_hp_ppa_info_t struct has the HP-UX 11.00
Packit 209cc3
# dl_module_id_1 member.
Packit 209cc3
#
Packit 209cc3
# NOTE: any failure means we conclude that it doesn't have that member,
Packit 209cc3
# so if we don't have DLPI, don't have a <sys/dlpi_ext.h> header, or
Packit 209cc3
# have one that doesn't declare a dl_hp_ppa_info_t type, we conclude
Packit 209cc3
# it doesn't have that member (which is OK, as either we won't be
Packit 209cc3
# using code that would use that member, or we wouldn't compile in
Packit 209cc3
# any case).
Packit 209cc3
#
Packit 209cc3
AC_CHECK_MEMBERS([dl_hp_ppa_info_t.dl_module_id_1],,,
Packit 209cc3
    [
Packit 209cc3
	#include <sys/types.h>
Packit 209cc3
	#include <sys/dlpi.h>
Packit 209cc3
	#include <sys/dlpi_ext.h>
Packit 209cc3
    ])
Packit 209cc3
Packit 209cc3
AC_LBL_UNALIGNED_ACCESS
Packit 209cc3
Packit 209cc3
AC_SUBST(V_CCOPT)
Packit 209cc3
AC_SUBST(V_LIB_CCOPT_FAT)
Packit 209cc3
AC_SUBST(V_LIB_LDFLAGS_FAT)
Packit 209cc3
AC_SUBST(V_PROG_CCOPT_FAT)
Packit 209cc3
AC_SUBST(V_PROG_LDFLAGS_FAT)
Packit 209cc3
AC_SUBST(V_DEFS)
Packit 209cc3
AC_SUBST(V_FINDALLDEVS)
Packit 209cc3
AC_SUBST(V_INCLS)
Packit 209cc3
AC_SUBST(V_LEX)
Packit 209cc3
AC_SUBST(V_PCAP)
Packit 209cc3
AC_SUBST(V_SHLIB_CCOPT)
Packit 209cc3
AC_SUBST(V_SHLIB_CMD)
Packit 209cc3
AC_SUBST(V_SHLIB_OPT)
Packit 209cc3
AC_SUBST(V_SONAME_OPT)
Packit 209cc3
AC_SUBST(V_RPATH_OPT)
Packit 209cc3
AC_SUBST(V_YACC)
Packit 209cc3
AC_SUBST(ADDLOBJS)
Packit 209cc3
AC_SUBST(ADDLARCHIVEOBJS)
Packit 209cc3
AC_SUBST(SSRC)
Packit 209cc3
AC_SUBST(DYEXT)
Packit 209cc3
AC_SUBST(MAN_DEVICES)
Packit 209cc3
AC_SUBST(MAN_FILE_FORMATS)
Packit 209cc3
AC_SUBST(MAN_MISC_INFO)
Packit 209cc3
AC_SUBST(MAN_ADMIN_COMMANDS)
Packit 209cc3
AC_SUBST(PTHREAD_LIBS)
Packit 209cc3
AC_SUBST(BUILD_RPCAPD)
Packit 209cc3
AC_SUBST(INSTALL_RPCAPD)
Packit 209cc3
AC_SUBST(RPCAPD_LIBS)
Packit 209cc3
AC_SUBST(EXTRA_NETWORK_LIBS)
Packit 209cc3
Packit 209cc3
AC_ARG_ENABLE([usb],
Packit 209cc3
[AC_HELP_STRING([--enable-usb],[enable USB capture support @<:@default=yes, if support available@:>@])],
Packit 209cc3
    [],
Packit 209cc3
    [enable_usb=yes])
Packit 209cc3
Packit 209cc3
if test "xxx_only" = yes; then
Packit 209cc3
	# User requested something-else-only pcap, so they don't
Packit 209cc3
	# want USB support.
Packit 209cc3
	enable_usb=no
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
if test "x$enable_usb" != "xno" ; then
Packit 209cc3
   dnl check for USB sniffing support
Packit 209cc3
   AC_MSG_CHECKING(for USB sniffing support)
Packit 209cc3
   case "$host_os" in
Packit 209cc3
   linux*)
Packit 209cc3
	AC_DEFINE(PCAP_SUPPORT_USB, 1, [target host supports USB sniffing])
Packit 209cc3
	USB_SRC=pcap-usb-linux.c
Packit 209cc3
	AC_MSG_RESULT(yes)
Packit 209cc3
	ac_usb_dev_name=`udevinfo -q name -p /sys/class/usb_device/usbmon 2>/dev/null`
Packit 209cc3
	if test $? -ne 0 ; then
Packit 209cc3
	  ac_usb_dev_name="usbmon"
Packit 209cc3
	fi
Packit 209cc3
	AC_DEFINE_UNQUOTED(LINUX_USB_MON_DEV, "/dev/$ac_usb_dev_name", [path for device for USB sniffing])
Packit 209cc3
	AC_MSG_NOTICE(Device for USB sniffing is /dev/$ac_usb_dev_name)
Packit 209cc3
	#
Packit 209cc3
	# Do we have a version of <linux/compiler.h> available?
Packit 209cc3
	# If so, we might need it for <linux/usbdevice_fs.h>.
Packit 209cc3
	#
Packit 209cc3
	AC_CHECK_HEADERS(linux/compiler.h)
Packit 209cc3
	if test "$ac_cv_header_linux_compiler_h" = yes; then
Packit 209cc3
	  #
Packit 209cc3
	  # Yes - include it when testing for <linux/usbdevice_fs.h>.
Packit 209cc3
	  #
Packit 209cc3
	  AC_CHECK_HEADERS(linux/usbdevice_fs.h,,,[#include <linux/compiler.h>])
Packit 209cc3
	else
Packit 209cc3
	  AC_CHECK_HEADERS(linux/usbdevice_fs.h)
Packit 209cc3
	fi
Packit 209cc3
	if test "$ac_cv_header_linux_usbdevice_fs_h" = yes; then
Packit 209cc3
	  #
Packit 209cc3
	  # OK, does it define bRequestType?  Older versions of the kernel
Packit 209cc3
	  # define fields with names like "requesttype, "request", and
Packit 209cc3
	  # "value", rather than "bRequestType", "bRequest", and
Packit 209cc3
	  # "wValue".
Packit 209cc3
	  #
Packit 209cc3
	  AC_CHECK_MEMBERS([struct usbdevfs_ctrltransfer.bRequestType],,,
Packit 209cc3
	      [
Packit 209cc3
		  AC_INCLUDES_DEFAULT
Packit 209cc3
		  #ifdef HAVE_LINUX_COMPILER_H
Packit 209cc3
		  #include <linux/compiler.h>
Packit 209cc3
		  #endif
Packit 209cc3
		  #include <linux/usbdevice_fs.h>
Packit 209cc3
	      ])
Packit 209cc3
	fi
Packit 209cc3
	;;
Packit 209cc3
    freebsd*)
Packit 209cc3
	#
Packit 209cc3
	# This just uses BPF in FreeBSD 8.4 and later; we don't need
Packit 209cc3
	# to check for anything special for capturing.
Packit 209cc3
	#
Packit 209cc3
	AC_MSG_RESULT([yes, in FreeBSD 8.4 and later])
Packit 209cc3
	;;
Packit 209cc3
Packit 209cc3
    *)
Packit 209cc3
	AC_MSG_RESULT(no)
Packit 209cc3
	;;
Packit 209cc3
esac
Packit 209cc3
fi
Packit 209cc3
AC_SUBST(PCAP_SUPPORT_USB)
Packit 209cc3
AC_SUBST(USB_SRC)
Packit 209cc3
Packit 209cc3
dnl check for netfilter sniffing support
Packit 209cc3
if test "xxx_only" != yes; then
Packit 209cc3
	AC_MSG_CHECKING(whether the platform could support netfilter sniffing)
Packit 209cc3
	case "$host_os" in
Packit 209cc3
	linux*)
Packit 209cc3
		AC_MSG_RESULT(yes)
Packit 209cc3
		#
Packit 209cc3
		# Life's too short to deal with trying to get this to compile
Packit 209cc3
		# if you don't get the right types defined with
Packit 209cc3
		# __KERNEL_STRICT_NAMES getting defined by some other include.
Packit 209cc3
		#
Packit 209cc3
		# Check whether the includes Just Work.  If not, don't turn on
Packit 209cc3
		# netfilter support.
Packit 209cc3
		#
Packit 209cc3
		AC_MSG_CHECKING(whether we can compile the netfilter support)
Packit 209cc3
		AC_CACHE_VAL(ac_cv_netfilter_can_compile,
Packit 209cc3
		  AC_TRY_COMPILE([
Packit 209cc3
AC_INCLUDES_DEFAULT
Packit 209cc3
#include <sys/socket.h>
Packit 209cc3
#include <netinet/in.h>
Packit 209cc3
#include <linux/types.h>
Packit 209cc3
Packit 209cc3
#include <linux/netlink.h>
Packit 209cc3
#include <linux/netfilter.h>
Packit 209cc3
#include <linux/netfilter/nfnetlink.h>
Packit 209cc3
#include <linux/netfilter/nfnetlink_log.h>
Packit 209cc3
#include <linux/netfilter/nfnetlink_queue.h>],
Packit 209cc3
		    [],
Packit 209cc3
		    ac_cv_netfilter_can_compile=yes,
Packit 209cc3
		    ac_cv_netfilter_can_compile=no))
Packit 209cc3
		AC_MSG_RESULT($ac_cv_netfilter_can_compile)
Packit 209cc3
		if test $ac_cv_netfilter_can_compile = yes ; then
Packit 209cc3
		  AC_DEFINE(PCAP_SUPPORT_NETFILTER, 1,
Packit 209cc3
		    [target host supports netfilter sniffing])
Packit 209cc3
		  NETFILTER_SRC=pcap-netfilter-linux.c
Packit 209cc3
		fi
Packit 209cc3
		;;
Packit 209cc3
	*)
Packit 209cc3
		AC_MSG_RESULT(no)
Packit 209cc3
		;;
Packit 209cc3
	esac
Packit 209cc3
fi
Packit 209cc3
AC_SUBST(PCAP_SUPPORT_NETFILTER)
Packit 209cc3
AC_SUBST(NETFILTER_SRC)
Packit 209cc3
Packit 209cc3
AC_ARG_ENABLE([netmap],
Packit 209cc3
[AC_HELP_STRING([--enable-netmap],[enable netmap support @<:@default=yes, if support available@:>@])],
Packit 209cc3
    [],
Packit 209cc3
    [enable_netmap=yes])
Packit 209cc3
Packit 209cc3
if test "x$enable_netmap" != "xno" ; then
Packit 209cc3
	#
Packit 209cc3
	# Check whether net/netmap_user.h is usable if NETMAP_WITH_LIBS is
Packit 209cc3
	# defined; it's not usable on DragonFly BSD 4.6 if NETMAP_WITH_LIBS
Packit 209cc3
	# is defined, for example, as it includes a non-existent malloc.h
Packit 209cc3
	# header.
Packit 209cc3
	#
Packit 209cc3
	AC_MSG_CHECKING(whether we can compile the netmap support)
Packit 209cc3
	AC_CACHE_VAL(ac_cv_net_netmap_user_can_compile,
Packit 209cc3
	  AC_TRY_COMPILE([
Packit 209cc3
AC_INCLUDES_DEFAULT
Packit 209cc3
#define NETMAP_WITH_LIBS
Packit 209cc3
#include <net/netmap_user.h>],
Packit 209cc3
	    [],
Packit 209cc3
	    ac_cv_net_netmap_user_can_compile=yes,
Packit 209cc3
	    ac_cv_net_netmap_user_can_compile=no))
Packit 209cc3
	AC_MSG_RESULT($ac_cv_net_netmap_user_can_compile)
Packit 209cc3
	if test $ac_cv_net_netmap_user_can_compile = yes ; then
Packit 209cc3
	  AC_DEFINE(PCAP_SUPPORT_NETMAP, 1,
Packit 209cc3
	    [target host supports netmap])
Packit 209cc3
	    NETMAP_SRC=pcap-netmap.c
Packit 209cc3
	fi
Packit 209cc3
	AC_SUBST(PCAP_SUPPORT_NETMAP)
Packit 209cc3
	AC_SUBST(NETMAP_SRC)
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
Packit 209cc3
AC_ARG_ENABLE([bluetooth],
Packit 209cc3
[AC_HELP_STRING([--enable-bluetooth],[enable Bluetooth support @<:@default=yes, if support available@:>@])],
Packit 209cc3
    [],
Packit 209cc3
    [enable_bluetooth=ifsupportavailable])
Packit 209cc3
Packit 209cc3
if test "xxx_only" = yes; then
Packit 209cc3
	# User requested something-else-only pcap, so they don't
Packit 209cc3
	# want Bluetooth support.
Packit 209cc3
	enable_bluetooth=no
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
if test "x$enable_bluetooth" != "xno" ; then
Packit 209cc3
	dnl check for Bluetooth sniffing support
Packit 209cc3
	case "$host_os" in
Packit 209cc3
	linux*)
Packit 209cc3
		AC_CHECK_HEADER(bluetooth/bluetooth.h,
Packit 209cc3
		    [
Packit 209cc3
			#
Packit 209cc3
			# We have bluetooth.h, so we support Bluetooth
Packit 209cc3
			# sniffing.
Packit 209cc3
			#
Packit 209cc3
			AC_DEFINE(PCAP_SUPPORT_BT, 1, [target host supports Bluetooth sniffing])
Packit 209cc3
			BT_SRC=pcap-bt-linux.c
Packit 209cc3
			AC_MSG_NOTICE(Bluetooth sniffing is supported)
Packit 209cc3
			ac_lbl_bluetooth_available=yes
Packit 209cc3
Packit 209cc3
			#
Packit 209cc3
			# OK, does struct sockaddr_hci have an hci_channel
Packit 209cc3
			# member?
Packit 209cc3
			#
Packit 209cc3
			AC_CHECK_MEMBERS([struct sockaddr_hci.hci_channel],
Packit 209cc3
			    [
Packit 209cc3
				#
Packit 209cc3
				# Yes; is HCI_CHANNEL_MONITOR defined?
Packit 209cc3
				#
Packit 209cc3
				AC_MSG_CHECKING(if HCI_CHANNEL_MONITOR is defined)
Packit 209cc3
				AC_CACHE_VAL(ac_cv_lbl_hci_channel_monitor_is_defined,
Packit 209cc3
				    AC_TRY_COMPILE(
Packit 209cc3
					[
Packit 209cc3
					    #include <bluetooth/bluetooth.h>
Packit 209cc3
					    #include <bluetooth/hci.h>
Packit 209cc3
					],
Packit 209cc3
					[
Packit 209cc3
					    u_int i = HCI_CHANNEL_MONITOR;
Packit 209cc3
					],
Packit 209cc3
					[
Packit 209cc3
					    AC_MSG_RESULT(yes)
Packit 209cc3
					    AC_DEFINE(PCAP_SUPPORT_BT_MONITOR,,
Packit 209cc3
					      [target host supports Bluetooth Monitor])
Packit 209cc3
					    BT_MONITOR_SRC=pcap-bt-monitor-linux.c
Packit 209cc3
					],
Packit 209cc3
					[
Packit 209cc3
					    AC_MSG_RESULT(no)
Packit 209cc3
					]))
Packit 209cc3
			    ],,
Packit 209cc3
			    [
Packit 209cc3
				#include <bluetooth/bluetooth.h>
Packit 209cc3
				#include <bluetooth/hci.h>
Packit 209cc3
			    ])
Packit 209cc3
		    ],
Packit 209cc3
		    [
Packit 209cc3
			#
Packit 209cc3
			# We don't have bluetooth.h, so we don't support
Packit 209cc3
			# Bluetooth sniffing.
Packit 209cc3
			#
Packit 209cc3
			if test "x$enable_bluetooth" = "xyes" ; then
Packit 209cc3
				AC_MSG_ERROR(Bluetooth sniffing is not supported; install bluez-lib devel to enable it)
Packit 209cc3
			else
Packit 209cc3
				AC_MSG_NOTICE(Bluetooth sniffing is not supported; install bluez-lib devel to enable it)
Packit 209cc3
			fi
Packit 209cc3
		    ])
Packit 209cc3
		;;
Packit 209cc3
	*)
Packit 209cc3
		if test "x$enable_bluetooth" = "xyes" ; then
Packit 209cc3
			AC_MSG_ERROR(no Bluetooth sniffing support implemented for $host_os)
Packit 209cc3
		else
Packit 209cc3
			AC_MSG_NOTICE(no Bluetooth sniffing support implemented for $host_os)
Packit 209cc3
		fi
Packit 209cc3
		;;
Packit 209cc3
	esac
Packit 209cc3
	AC_SUBST(PCAP_SUPPORT_BT)
Packit 209cc3
	AC_SUBST(BT_SRC)
Packit 209cc3
	AC_SUBST(BT_MONITOR_SRC)
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
AC_ARG_ENABLE([dbus],
Packit 209cc3
[AC_HELP_STRING([--enable-dbus],[enable D-Bus capture support @<:@default=yes, if support available@:>@])],
Packit 209cc3
    [],
Packit 209cc3
    [enable_dbus=ifavailable])
Packit 209cc3
Packit 209cc3
if test "xxx_only" = yes; then
Packit 209cc3
	# User requested something-else-only pcap, so they don't
Packit 209cc3
	# want D-Bus support.
Packit 209cc3
	enable_dbus=no
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
if test "x$enable_dbus" != "xno"; then
Packit 209cc3
	if test "x$enable_dbus" = "xyes"; then
Packit 209cc3
		case "$host_os" in
Packit 209cc3
Packit 209cc3
		darwin*)
Packit 209cc3
			#
Packit 209cc3
			# We don't support D-Bus sniffing on macOS; see
Packit 209cc3
			#
Packit 209cc3
			# https://bugs.freedesktop.org/show_bug.cgi?id=74029
Packit 209cc3
			#
Packit 209cc3
			# The user requested it, so fail.
Packit 209cc3
			#
Packit 209cc3
			AC_MSG_ERROR([Due to freedesktop.org bug 74029, D-Bus capture support is not available on macOS])
Packit 209cc3
		esac
Packit 209cc3
	else
Packit 209cc3
		case "$host_os" in
Packit 209cc3
Packit 209cc3
		darwin*)
Packit 209cc3
			#
Packit 209cc3
			# We don't support D-Bus sniffing on macOS; see
Packit 209cc3
			#
Packit 209cc3
			# https://bugs.freedesktop.org/show_bug.cgi?id=74029
Packit 209cc3
			#
Packit 209cc3
			# The user dind't explicitly request it, so just
Packit 209cc3
			# silently refuse to enable it.
Packit 209cc3
			#
Packit 209cc3
			enable_dbus="no"
Packit 209cc3
			;;
Packit 209cc3
		esac
Packit 209cc3
	fi
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
if test "x$enable_dbus" != "xno"; then
Packit 209cc3
	AC_CHECK_PROG([PKGCONFIG], [pkg-config], [pkg-config], [no])
Packit 209cc3
	if test "x$PKGCONFIG" != "xno"; then
Packit 209cc3
		AC_MSG_CHECKING([for D-Bus])
Packit 209cc3
		if "$PKGCONFIG" dbus-1; then
Packit 209cc3
			AC_MSG_RESULT([yes])
Packit 209cc3
			DBUS_CFLAGS=`"$PKGCONFIG" --cflags dbus-1`
Packit 209cc3
			DBUS_LIBS=`"$PKGCONFIG" --libs dbus-1`
Packit 209cc3
			save_CFLAGS="$CFLAGS"
Packit 209cc3
			save_LIBS="$LIBS"
Packit 209cc3
			CFLAGS="$CFLAGS $DBUS_CFLAGS"
Packit 209cc3
			LIBS="$LIBS $DBUS_LIBS"
Packit 209cc3
			AC_MSG_CHECKING(whether the D-Bus library defines dbus_connection_read_write)
Packit 209cc3
			AC_TRY_LINK(
Packit 209cc3
			    [#include <string.h>
Packit 209cc3
Packit 209cc3
			     #include <time.h>
Packit 209cc3
			     #include <sys/time.h>
Packit 209cc3
Packit 209cc3
			     #include <dbus/dbus.h>],
Packit 209cc3
			    [return dbus_connection_read_write(NULL, 0);],
Packit 209cc3
			    [
Packit 209cc3
				AC_MSG_RESULT([yes])
Packit 209cc3
				AC_DEFINE(PCAP_SUPPORT_DBUS, 1, [support D-Bus sniffing])
Packit 209cc3
				DBUS_SRC=pcap-dbus.c
Packit 209cc3
				V_INCLS="$V_INCLS $DBUS_CFLAGS"
Packit 209cc3
			    ],
Packit 209cc3
			    [
Packit 209cc3
				AC_MSG_RESULT([no])
Packit 209cc3
				if test "x$enable_dbus" = "xyes"; then
Packit 209cc3
				    AC_MSG_ERROR([--enable-dbus was given, but the D-Bus library doesn't define dbus_connection_read_write()])
Packit 209cc3
				fi
Packit 209cc3
				LIBS="$save_LIBS"
Packit 209cc3
			     ])
Packit 209cc3
			CFLAGS="$save_CFLAGS"
Packit 209cc3
		else
Packit 209cc3
			AC_MSG_RESULT([no])
Packit 209cc3
			if test "x$enable_dbus" = "xyes"; then
Packit 209cc3
				AC_MSG_ERROR([--enable-dbus was given, but the dbus-1 package is not installed])
Packit 209cc3
			fi
Packit 209cc3
		fi
Packit 209cc3
	fi
Packit 209cc3
	AC_SUBST(PCAP_SUPPORT_DBUS)
Packit 209cc3
	AC_SUBST(DBUS_SRC)
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
AC_ARG_ENABLE([rdma],
Packit 209cc3
[AC_HELP_STRING([--enable-rdma],[enable RDMA capture support @<:@default=yes, if support available@:>@])],
Packit 209cc3
    [],
Packit 209cc3
    [enable_rdma=ifavailable])
Packit 209cc3
Packit 209cc3
if test "xxx_only" = yes; then
Packit 209cc3
	# User requested something-else-only pcap, so they don't
Packit 209cc3
	# want RDMA support.
Packit 209cc3
	enable_rdma=no
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
if test "x$enable_rdma" != "xno"; then
Packit 209cc3
	AC_CHECK_LIB(ibverbs, ibv_get_device_list, [
Packit 209cc3
		AC_CHECK_HEADER(infiniband/verbs.h, [
Packit 209cc3
			#
Packit 209cc3
			# ibv_create_flow may be defined as a static inline
Packit 209cc3
			# function in infiniband/verbs.h, so we can't
Packit 209cc3
			# use AC_CHECK_LIB.
Packit 209cc3
			#
Packit 209cc3
			# Too bad autoconf has no AC_SYMBOL_EXISTS()
Packit 209cc3
			# macro that works like CMake's check_symbol_exists()
Packit 209cc3
			# function, to check do a compile check like
Packit 209cc3
			# this (they do a clever trick to avoid having
Packit 209cc3
			# to know the function's signature).
Packit 209cc3
			#
Packit 209cc3
			AC_MSG_CHECKING(whether libibverbs defines ibv_create_flow)
Packit 209cc3
			AC_TRY_LINK(
Packit 209cc3
				[
Packit 209cc3
					#include <infiniband/verbs.h>
Packit 209cc3
				],
Packit 209cc3
				[
Packit 209cc3
					(void) ibv_create_flow((struct ibv_qp *) NULL,
Packit 209cc3
							       (struct ibv_flow_attr *) NULL);
Packit 209cc3
				],
Packit 209cc3
				[
Packit 209cc3
					AC_MSG_RESULT([yes])
Packit 209cc3
					AC_DEFINE(PCAP_SUPPORT_RDMASNIFF, , [target host supports RDMA sniffing])
Packit 209cc3
					RDMA_SRC=pcap-rdmasniff.c
Packit 209cc3
					LIBS="-libverbs $LIBS"
Packit 209cc3
				],
Packit 209cc3
				[
Packit 209cc3
					AC_MSG_RESULT([no])
Packit 209cc3
				]
Packit 209cc3
			)
Packit 209cc3
		])
Packit 209cc3
	])
Packit 209cc3
	AC_SUBST(PCAP_SUPPORT_RDMASNIFF)
Packit 209cc3
	AC_SUBST(RDMA_SRC)
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
AC_PROG_INSTALL
Packit 209cc3
Packit 209cc3
AC_CONFIG_HEADER(config.h)
Packit 209cc3
Packit 209cc3
AC_OUTPUT_COMMANDS([if test -f .devel; then
Packit 209cc3
	echo timestamp > stamp-h
Packit 209cc3
	cat $srcdir/Makefile-devel-adds >> Makefile
Packit 209cc3
	make depend
Packit 209cc3
fi])
Packit 209cc3
AC_OUTPUT(Makefile pcap-filter.manmisc pcap-linktype.manmisc
Packit 209cc3
	pcap-tstamp.manmisc pcap-savefile.manfile pcap.3pcap
Packit 209cc3
	pcap_compile.3pcap pcap_datalink.3pcap pcap_dump_open.3pcap
Packit 209cc3
	pcap_get_tstamp_precision.3pcap pcap_list_datalinks.3pcap
Packit 209cc3
	pcap_list_tstamp_types.3pcap pcap_open_dead.3pcap
Packit 209cc3
	pcap_open_offline.3pcap pcap_set_immediate_mode.3pcap
Packit 209cc3
	pcap_set_tstamp_precision.3pcap pcap_set_tstamp_type.3pcap
Packit 209cc3
	rpcapd/Makefile rpcapd/rpcapd.manadmin rpcapd/rpcapd-config.manfile
Packit 209cc3
	testprogs/Makefile)
Packit 209cc3
exit 0