#
# See
#
-# http://ftp.gnu.org/gnu/config/README
+# https://ftp.gnu.org/gnu/config/README
#
# for the URLs to use to fetch new versions of config.guess and
# config.sub.
#
-AC_PREREQ(2.64)
-AC_INIT(tcpdump, m4_esyscmd_s([cat VERSION]))
+AC_PREREQ([2.69])
+AC_INIT([tcpdump],[m4_esyscmd_s(cat VERSION)])
AC_CONFIG_SRCDIR(tcpdump.c)
AC_CANONICAL_HOST
AC_LBL_C_INLINE
AC_CHECK_HEADERS(fcntl.h rpc/rpc.h rpc/rpcent.h net/if.h)
-AC_CHECK_HEADERS(net/pfvar.h, , , [#include <sys/types.h>
-#include <sys/socket.h>
-#include <net/if.h>])
-if test "$ac_cv_header_net_pfvar_h" = yes; then
- AC_CHECK_HEADERS(net/if_pflog.h, , , [#include <sys/types.h>
- #include <sys/socket.h>
- #include <net/if.h>
- #include <net/pfvar.h>])
- if test "$ac_cv_header_net_if_pflog_h" = yes; then
- LOCALSRC="print-pflog.c $LOCALSRC"
- fi
-fi
case "$host_os" in
darwin*)
AC_ARG_ENABLE(universal,
- AC_HELP_STRING([--disable-universal],[don't build universal on macOS]))
+ AS_HELP_STRING([--disable-universal],[don't build universal on macOS]))
if test "$enable_universal" != "no"; then
case "$host_os" in
esac
-AC_ARG_WITH(smi,
-[ --with-smi link with libsmi (allows to load MIBs on the fly to decode SNMP packets. [default=yes]
- --without-smi don't link with libsmi],,
- with_smi=yes)
+AC_ARG_WITH([smi],
+ [AS_HELP_STRING([--with-smi],
+ [link with libsmi (allows to load MIBs on the fly to decode SNMP packets) [default=yes, if available]])],
+ [],
+ [with_smi=yes])
if test "x$with_smi" != "xno" ; then
AC_CHECK_HEADER(smi.h,
AC_MSG_CHECKING([whether to enable libsmi])
savedlibs="$LIBS"
LIBS="-lsmi $LIBS"
- AC_TRY_RUN(
- [
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
/* libsmi available check */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#include <smi.h>
-main()
+int main()
{
int current, revision, age, n;
const int required = 2;
exit(4);
exit(0);
}
+ ]])
],
[
AC_MSG_RESULT(yes)
])
fi
+AC_MSG_CHECKING([whether to enable the instrument functions code])
+AC_ARG_ENABLE([instrument-functions],
+ [AS_HELP_STRING([--enable-instrument-functions],
+ [enable instrument functions code [default=no]])],
+ [],
+ [enableval=no])
+case "$enableval" in
+yes) AC_MSG_RESULT(yes)
+ AC_CHECK_LIB([bfd], [bfd_init],
+ [true],
+ [AC_MSG_ERROR(
+ [--enable-instrument-functions was given, but test for library libbfd failed. Please install the 'binutils-dev' package.])],
+ [])
+ AC_DEFINE(ENABLE_INSTRUMENT_FUNCTIONS, 1,
+ [define if you want to build the instrument functions code])
+ LOCALSRC="$LOCALSRC instrument-functions.c"
+ # Add '-finstrument-functions' instrumentation option to generate
+ # instrumentation calls for entry and exit to functions.
+ # Try to avoid Address Space Layout Randomization (ALSR).
+ CFLAGS="$CFLAGS -O0 -ggdb -finstrument-functions -fno-stack-protector -fno-pic"
+ LDFLAGS="$LDFLAGS -O0 -ggdb -fno-stack-protector -no-pie"
+ LIBS="$LIBS -lbfd"
+ ;;
+*) AC_MSG_RESULT(no)
+ ;;
+esac
+
AC_MSG_CHECKING([whether to enable the possibly-buggy SMB printer])
-AC_ARG_ENABLE(smb,
-[ --enable-smb enable possibly-buggy SMB printer [default=yes]
- --disable-smb disable possibly-buggy SMB printer],,
- enableval=yes)
+AC_ARG_ENABLE([smb],
+ [AS_HELP_STRING([--enable-smb],
+ [enable possibly-buggy SMB printer [default=no]])],
+ [],
+ [enableval=no])
case "$enableval" in
yes) AC_MSG_RESULT(yes)
AC_DEFINE(ENABLE_SMB, 1,
# XXX - do we need to check for all of them, or are there some that, if
# present, imply others are present?
#
-if test ! -z "$with_sandbox_capsicum" && test "$with_sandbox_capsicum" != "no" ; then
+if test -z "$with_sandbox_capsicum" || test "$with_sandbox_capsicum" != "no" ; then
#
# First, make sure we have the required header.
#
[
AC_LANG_SOURCE(
[[
+#include <string.h>
/* AF_INET6 available check */
#include <sys/types.h>
#ifdef _WIN32
fi
fi
-AC_SEARCH_LIBS(dnet_htoa, dnet,
-[
- AC_DEFINE(HAVE_DNET_HTOA, 1,
- [define if you have the dnet_htoa function])
- #
- # OK, we have dnet_htoa(). Do we have netdnet/dnetdb.h?
- #
- AC_CHECK_HEADERS(netdnet/dnetdb.h)
- if test "$ac_cv_header_netdnet_dnetdb_h" = "yes"; then
- #
- # Yes. Does it declare dnet_htoa()?
- #
- AC_CHECK_DECL(dnet_htoa,
- [
- # Yes.
- AC_DEFINE(NETDNET_DNETDB_H_DECLARES_DNET_HTOA,,
- [Define to 1 if netenet/dnetdb.h declares `dnet_htoa'])
- ],,
- [
-AC_INCLUDES_DEFAULT
-#include <netdnet/dnetdb.h>
- ])
- fi
-
- #
- # Do we have netdnet/dn.h?
- #
- AC_CHECK_HEADERS(netdnet/dn.h)
- if test "$ac_cv_header_netdnet_dn_h" = "yes"; then
- #
- # Yes. Does it declare struct dn_naddr?
- #
- AC_CHECK_TYPES(struct dn_naddr,,,
- [
-#include <netdnet/dn.h>
- ])
- fi
-])
-
AC_REPLACE_FUNCS(strlcat strlcpy strdup strsep getservent getopt_long)
-AC_CHECK_FUNCS(fork vfork strftime)
+AC_CHECK_FUNCS(fork vfork)
AC_CHECK_FUNCS(setlinebuf)
-needsnprintf=no
-AC_CHECK_FUNCS(vsnprintf snprintf,,
- [needsnprintf=yes])
-if test $needsnprintf = yes; then
- AC_LIBOBJ(snprintf)
-fi
+#
+# Make sure we have vsnprintf() and snprintf(); we require them.
+#
+AC_CHECK_FUNC(vsnprintf,,
+ AC_MSG_ERROR([vsnprintf() is required but wasn't found]))
+AC_CHECK_FUNC(snprintf,,
+ AC_MSG_ERROR([snprintf() is required but wasn't found]))
+
+#
+# Define HAVE_NO_PRINTF_Z to make it possible to disable test cases that
+# depend on %zu.
+#
+AC_MSG_CHECKING([whether printf(3) supports the z length modifier])
+AC_RUN_IFELSE(
+ [
+ AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+
+int main()
+{
+ char buf[100];
+ snprintf(buf, sizeof(buf), "%zu", sizeof(buf));
+ return strncmp(buf, "100", sizeof(buf)) ? 1 : 0;
+}
+ ]])
+ ],
+ [
+ AC_MSG_RESULT(yes)
+ ],
+ [
+ AC_MSG_RESULT(no)
+ AC_DEFINE(HAVE_NO_PRINTF_Z, 1,
+ [Define to 1 if printf(3) does not support the z length modifier.])
+ ],
+ [
+ AC_MSG_RESULT(not while cross-compiling)
+ ]
+)
AC_CHECK_LIB(rpc, main) dnl It's unclear why we might need -lrpc
#
AC_CHECK_FUNCS(ether_ntohost, [
AC_CACHE_CHECK(for buggy ether_ntohost, ac_cv_buggy_ether_ntohost, [
- AC_TRY_RUN([
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <netdb.h>
+ #include <netinet/ether.h>
+ #include <stdlib.h>
#include <sys/types.h>
#include <sys/param.h>
#include <sys/socket.h>
ether_ntohost(name, (struct ether_addr *)ea);
exit(0);
}
+ ]])
], [ac_cv_buggy_ether_ntohost=no],
[ac_cv_buggy_ether_ntohost=yes],
[ac_cv_buggy_ether_ntohost="not while cross-compiling"])])
AC_CHECK_FUNCS(pcap_dump_flush pcap_lib_version)
if test $ac_cv_func_pcap_lib_version = "no" ; then
AC_MSG_CHECKING(whether pcap_version is defined by libpcap)
- AC_TRY_LINK([],
- [
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
extern char pcap_version[];
return (int)pcap_version;
+ ]])
],
- ac_lbl_cv_pcap_version_defined=yes,
- ac_lbl_cv_pcap_version_defined=no)
+ [ac_lbl_cv_pcap_version_defined=yes],
+ [ac_lbl_cv_pcap_version_defined=no])
if test "$ac_lbl_cv_pcap_version_defined" = yes ; then
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_PCAP_VERSION, 1, [define if libpcap has pcap_version])
# filter expression parser debug flag; can we directly set the
# flag?
AC_MSG_CHECKING(whether pcap_debug is defined by libpcap)
- AC_TRY_LINK([],
- [
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
extern int pcap_debug;
return pcap_debug;
+ ]])
],
- ac_lbl_cv_pcap_debug_defined=yes,
- ac_lbl_cv_pcap_debug_defined=no)
+ [ac_lbl_cv_pcap_debug_defined=yes],
+ [ac_lbl_cv_pcap_debug_defined=no])
if test "$ac_lbl_cv_pcap_debug_defined" = yes ; then
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_PCAP_DEBUG, 1, [define if libpcap has pcap_debug])
# OK, what about "yydebug"?
#
AC_MSG_CHECKING(whether yydebug is defined by libpcap)
- AC_TRY_LINK([],
- [
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
extern int yydebug;
return yydebug;
+ ]])
],
- ac_lbl_cv_yydebug_defined=yes,
- ac_lbl_cv_yydebug_defined=no)
+ [ac_lbl_cv_yydebug_defined=yes],
+ [ac_lbl_cv_yydebug_defined=no])
if test "$ac_lbl_cv_yydebug_defined" = yes ; then
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_YYDEBUG, 1, [define if libpcap has yydebug])
# EVP_CIPHER_CTX, as EVP_CIPHER_CTX may be
# opaque; otherwise, we allocate it ourselves.
#
- # 2) do we have EVP_CipherInit_ex()?
+ # 2) do we have EVP_DecryptInit_ex()?
# If so, we use it, because we need to be
# able to make two "initialize the cipher"
# calls, one with the cipher and key, and
# one with the IV, and, as of OpenSSL 1.1,
- # You Can't Do That with EVP_CipherInit(),
- # because a call to EVP_CipherInit() will
+ # You Can't Do That with EVP_DecryptInit(),
+ # because a call to EVP_DecryptInit() will
# unconditionally clear the context, and
# if you don't supply a cipher, it'll
# clear the cipher, rendering the context
# unusable and causing a crash.
#
- AC_CHECK_FUNCS(EVP_CIPHER_CTX_new EVP_CipherInit_ex)
+ AC_CHECK_FUNCS(EVP_CIPHER_CTX_new EVP_DecryptInit_ex)
fi
])
fi
AC_PROG_INSTALL
-AC_CONFIG_HEADER(config.h)
+AC_CONFIG_HEADERS([config.h])
-AC_OUTPUT_COMMANDS([if test -f .devel; then
+AC_CONFIG_COMMANDS([.devel],[[if test -f .devel; then
echo timestamp > stamp-h
- cat Makefile-devel-adds >> Makefile
- make depend
-fi])
-AC_OUTPUT(Makefile tcpdump.1)
+ cat $srcdir/Makefile-devel-adds >> Makefile
+ make depend || exit 1
+fi]])
+AC_CONFIG_FILES([Makefile tcpdump.1])
+AC_OUTPUT
exit 0