xref: /aosp_15_r20/external/tcpdump/configure.ac (revision 05b00f6010a2396e3db2409989fc67270046269f)
1*05b00f60SXin Lidnl Copyright (c) 1994, 1995, 1996, 1997
2*05b00f60SXin Lidnl	The Regents of the University of California.  All rights reserved.
3*05b00f60SXin Lidnl
4*05b00f60SXin Lidnl Process this file with autoconf to produce a configure script.
5*05b00f60SXin Lidnl
6*05b00f60SXin Li
7*05b00f60SXin Li#
8*05b00f60SXin Li# See
9*05b00f60SXin Li#
10*05b00f60SXin Li#	https://ftp.gnu.org/gnu/config/README
11*05b00f60SXin Li#
12*05b00f60SXin Li# for the URLs to use to fetch new versions of config.guess and
13*05b00f60SXin Li# config.sub.
14*05b00f60SXin Li#
15*05b00f60SXin Li
16*05b00f60SXin LiAC_PREREQ(2.69)
17*05b00f60SXin LiAC_INIT(tcpdump, m4_esyscmd_s([cat VERSION]))
18*05b00f60SXin LiAC_CONFIG_SRCDIR(tcpdump.c)
19*05b00f60SXin Li
20*05b00f60SXin LiAC_CANONICAL_HOST
21*05b00f60SXin Li
22*05b00f60SXin LiAC_LBL_C_INIT_BEFORE_CC(V_INCLS)
23*05b00f60SXin Li#
24*05b00f60SXin Li# Try to enable as many C99 features as we can.
25*05b00f60SXin Li# At minimum, we want C++/C99-style // comments.
26*05b00f60SXin Li#
27*05b00f60SXin LiAC_PROG_CC_C99
28*05b00f60SXin Liif test "$ac_cv_prog_cc_c99" = "no"; then
29*05b00f60SXin Li	AC_MSG_WARN([The C compiler does not support C99; there may be compiler errors])
30*05b00f60SXin Lifi
31*05b00f60SXin LiAC_LBL_C_INIT(V_CCOPT, V_INCLS)
32*05b00f60SXin LiAC_LBL_C_INLINE
33*05b00f60SXin Li
34*05b00f60SXin LiAC_CHECK_HEADERS(fcntl.h rpc/rpc.h rpc/rpcent.h net/if.h)
35*05b00f60SXin Li
36*05b00f60SXin Licase "$host_os" in
37*05b00f60SXin Li
38*05b00f60SXin Lidarwin*)
39*05b00f60SXin Li	AC_ARG_ENABLE(universal,
40*05b00f60SXin Li	AS_HELP_STRING([--disable-universal],[don't build universal on macOS]))
41*05b00f60SXin Li	if test "$enable_universal" != "no"; then
42*05b00f60SXin Li		case "$host_os" in
43*05b00f60SXin Li
44*05b00f60SXin Li		darwin9.*)
45*05b00f60SXin Li			#
46*05b00f60SXin Li			# Leopard.  Build for x86 and 32-bit PowerPC, with
47*05b00f60SXin Li			# x86 first.  (That's what Apple does.)
48*05b00f60SXin Li			#
49*05b00f60SXin Li			V_CCOPT="$V_CCOPT -arch i386 -arch ppc"
50*05b00f60SXin Li			LDFLAGS="$LDFLAGS -arch i386 -arch ppc"
51*05b00f60SXin Li			;;
52*05b00f60SXin Li
53*05b00f60SXin Li		darwin10.*)
54*05b00f60SXin Li			#
55*05b00f60SXin Li			# Snow Leopard.  Build for x86-64 and x86, with
56*05b00f60SXin Li			# x86-64 first.  (That's what Apple does.)
57*05b00f60SXin Li			#
58*05b00f60SXin Li			V_CCOPT="$V_CCOPT -arch x86_64 -arch i386"
59*05b00f60SXin Li			LDFLAGS="$LDFLAGS -arch x86_64 -arch i386"
60*05b00f60SXin Li			;;
61*05b00f60SXin Li		esac
62*05b00f60SXin Li	fi
63*05b00f60SXin Li	;;
64*05b00f60SXin Liesac
65*05b00f60SXin Li
66*05b00f60SXin Li
67*05b00f60SXin LiAC_ARG_WITH([smi],
68*05b00f60SXin Li   [AS_HELP_STRING([--with-smi],
69*05b00f60SXin Li     [link with libsmi (allows to load MIBs on the fly to decode SNMP packets) [default=yes, if available]])],
70*05b00f60SXin Li   [],
71*05b00f60SXin Li   [with_smi=yes])
72*05b00f60SXin Li
73*05b00f60SXin Liif test "x$with_smi" != "xno" ; then
74*05b00f60SXin Li	AC_CHECK_HEADER(smi.h,
75*05b00f60SXin Li	[
76*05b00f60SXin Li		#
77*05b00f60SXin Li		# OK, we found smi.h.  Do we have libsmi with smiInit?
78*05b00f60SXin Li		#
79*05b00f60SXin Li		AC_CHECK_LIB(smi, smiInit,
80*05b00f60SXin Li		[
81*05b00f60SXin Li			#
82*05b00f60SXin Li			# OK, we have libsmi with smiInit.  Can we use it?
83*05b00f60SXin Li			#
84*05b00f60SXin Li			AC_MSG_CHECKING([whether to enable libsmi])
85*05b00f60SXin Li			savedlibs="$LIBS"
86*05b00f60SXin Li			LIBS="-lsmi $LIBS"
87*05b00f60SXin Li			AC_TRY_RUN(
88*05b00f60SXin Li				[
89*05b00f60SXin Li/* libsmi available check */
90*05b00f60SXin Li#include <stdio.h>
91*05b00f60SXin Li#include <stdlib.h>
92*05b00f60SXin Li#include <string.h>
93*05b00f60SXin Li#include <smi.h>
94*05b00f60SXin Liint main()
95*05b00f60SXin Li{
96*05b00f60SXin Li  int current, revision, age, n;
97*05b00f60SXin Li  const int required = 2;
98*05b00f60SXin Li  if (smiInit(""))
99*05b00f60SXin Li    exit(1);
100*05b00f60SXin Li  if (strcmp(SMI_LIBRARY_VERSION, smi_library_version))
101*05b00f60SXin Li    exit(2);
102*05b00f60SXin Li  n = sscanf(smi_library_version, "%d:%d:%d", &current, &revision, &age);
103*05b00f60SXin Li  if (n != 3)
104*05b00f60SXin Li    exit(3);
105*05b00f60SXin Li  if (required < current - age || required > current)
106*05b00f60SXin Li    exit(4);
107*05b00f60SXin Li  exit(0);
108*05b00f60SXin Li}
109*05b00f60SXin Li				],
110*05b00f60SXin Li				[
111*05b00f60SXin Li					AC_MSG_RESULT(yes)
112*05b00f60SXin Li					AC_DEFINE(USE_LIBSMI, 1,
113*05b00f60SXin Li					    [Define if you enable support for libsmi])
114*05b00f60SXin Li				],
115*05b00f60SXin Li				[
116*05b00f60SXin Li					dnl autoconf documentation says that
117*05b00f60SXin Li					dnl $? contains the exit value.
118*05b00f60SXin Li					dnl reality is that it does not.
119*05b00f60SXin Li					dnl We leave this in just in case
120*05b00f60SXin Li					dnl autoconf ever comes back to
121*05b00f60SXin Li					dnl match the documentation.
122*05b00f60SXin Li					case $? in
123*05b00f60SXin Li					  1) AC_MSG_RESULT(no - smiInit failed) ;;
124*05b00f60SXin Li					  2) AC_MSG_RESULT(no - header/library version mismatch) ;;
125*05b00f60SXin Li					  3) AC_MSG_RESULT(no - can't determine library version) ;;
126*05b00f60SXin Li					  4) AC_MSG_RESULT(no - too old) ;;
127*05b00f60SXin Li					  *) AC_MSG_RESULT(no) ;;
128*05b00f60SXin Li					esac
129*05b00f60SXin Li					LIBS="$savedlibs"
130*05b00f60SXin Li				],
131*05b00f60SXin Li				[
132*05b00f60SXin Li					AC_MSG_RESULT(not when cross-compiling)
133*05b00f60SXin Li					LIBS="$savedlibs"
134*05b00f60SXin Li				]
135*05b00f60SXin Li			)
136*05b00f60SXin Li		])
137*05b00f60SXin Li	])
138*05b00f60SXin Lifi
139*05b00f60SXin Li
140*05b00f60SXin LiAC_MSG_CHECKING([whether to enable the possibly-buggy SMB printer])
141*05b00f60SXin LiAC_ARG_ENABLE([smb],
142*05b00f60SXin Li   [AS_HELP_STRING([--enable-smb],
143*05b00f60SXin Li     [enable possibly-buggy SMB printer [default=no]])],
144*05b00f60SXin Li   [],
145*05b00f60SXin Li   [enableval=no])
146*05b00f60SXin Licase "$enableval" in
147*05b00f60SXin Liyes)	AC_MSG_RESULT(yes)
148*05b00f60SXin Li	AC_DEFINE(ENABLE_SMB, 1,
149*05b00f60SXin Li	    [define if you want to build the possibly-buggy SMB printer])
150*05b00f60SXin Li	LOCALSRC="print-smb.c smbutil.c $LOCALSRC"
151*05b00f60SXin Li	;;
152*05b00f60SXin Li*)	AC_MSG_RESULT(no)
153*05b00f60SXin Li	;;
154*05b00f60SXin Liesac
155*05b00f60SXin Li
156*05b00f60SXin LiAC_ARG_WITH(user, [  --with-user=USERNAME    drop privileges by default to USERNAME])
157*05b00f60SXin LiAC_MSG_CHECKING([whether to drop root privileges by default])
158*05b00f60SXin Liif test ! -z "$with_user" ; then
159*05b00f60SXin Li       AC_DEFINE_UNQUOTED(WITH_USER, "$withval",
160*05b00f60SXin Li           [define if should drop privileges by default])
161*05b00f60SXin Li       AC_MSG_RESULT(to \"$withval\")
162*05b00f60SXin Lielse
163*05b00f60SXin Li       AC_MSG_RESULT(no)
164*05b00f60SXin Lifi
165*05b00f60SXin Li
166*05b00f60SXin LiAC_ARG_WITH(chroot, [  --with-chroot=DIRECTORY when dropping privileges, chroot to DIRECTORY])
167*05b00f60SXin LiAC_MSG_CHECKING([whether to chroot])
168*05b00f60SXin Liif test ! -z "$with_chroot" && test "$with_chroot" != "no" ; then
169*05b00f60SXin Li       AC_DEFINE_UNQUOTED(WITH_CHROOT, "$withval",
170*05b00f60SXin Li           [define if should chroot when dropping privileges])
171*05b00f60SXin Li       AC_MSG_RESULT(to \"$withval\")
172*05b00f60SXin Lielse
173*05b00f60SXin Li       AC_MSG_RESULT(no)
174*05b00f60SXin Lifi
175*05b00f60SXin Li
176*05b00f60SXin LiAC_ARG_WITH(sandbox-capsicum,
177*05b00f60SXin Li	AS_HELP_STRING([--with-sandbox-capsicum],
178*05b00f60SXin Li		       [use Capsicum security functions @<:@default=yes, if available@:>@]))
179*05b00f60SXin Li#
180*05b00f60SXin Li# Check whether various functions are available.  If any are, set
181*05b00f60SXin Li# ac_lbl_capsicum_function_seen to yes; if any are not, set
182*05b00f60SXin Li# ac_lbl_capsicum_function_not_seen to yes.
183*05b00f60SXin Li#
184*05b00f60SXin Li# We don't check cap_rights_init(), as it's a macro, wrapping another
185*05b00f60SXin Li# function, in at least some versions of FreeBSD, and AC_CHECK_FUNCS()
186*05b00f60SXin Li# doesn't handle that.
187*05b00f60SXin Li#
188*05b00f60SXin Li# All of the ones we check for must be available in order to enable
189*05b00f60SXin Li# capsicum sandboxing.
190*05b00f60SXin Li#
191*05b00f60SXin Li# XXX - do we need to check for all of them, or are there some that, if
192*05b00f60SXin Li# present, imply others are present?
193*05b00f60SXin Li#
194*05b00f60SXin Liif test -z "$with_sandbox_capsicum" || test "$with_sandbox_capsicum" != "no" ; then
195*05b00f60SXin Li	#
196*05b00f60SXin Li	# First, make sure we have the required header.
197*05b00f60SXin Li	#
198*05b00f60SXin Li	AC_CHECK_HEADER(sys/capsicum.h,
199*05b00f60SXin Li	[
200*05b00f60SXin Li		#
201*05b00f60SXin Li		# We do; now make sure we have the required functions.
202*05b00f60SXin Li		#
203*05b00f60SXin Li		AC_CHECK_FUNCS(cap_enter cap_rights_limit cap_ioctls_limit openat,
204*05b00f60SXin Li		    ac_lbl_capsicum_function_seen=yes,
205*05b00f60SXin Li		    ac_lbl_capsicum_function_not_seen=yes)
206*05b00f60SXin Li	])
207*05b00f60SXin Li	AC_CHECK_LIB(casper, cap_init, LIBS="$LIBS -lcasper")
208*05b00f60SXin Li	AC_CHECK_LIB(cap_dns, cap_gethostbyaddr, LIBS="$LIBS -lcap_dns")
209*05b00f60SXin Lifi
210*05b00f60SXin LiAC_MSG_CHECKING([whether to sandbox using capsicum])
211*05b00f60SXin Liif test "x$ac_lbl_capsicum_function_seen" = "xyes" -a "x$ac_lbl_capsicum_function_not_seen" != "xyes"; then
212*05b00f60SXin Li	AC_DEFINE(HAVE_CAPSICUM, 1, [capsicum support available])
213*05b00f60SXin Li	AC_MSG_RESULT(yes)
214*05b00f60SXin Lielse
215*05b00f60SXin Li	AC_MSG_RESULT(no)
216*05b00f60SXin Lifi
217*05b00f60SXin LiAC_MSG_CHECKING([whether to sandbox using Casper library])
218*05b00f60SXin Liif test "x$ac_cv_lib_casper_cap_init" = "xyes" -a "x$ac_cv_lib_cap_dns_cap_gethostbyaddr" = "xyes"; then
219*05b00f60SXin Li	AC_DEFINE(HAVE_CASPER, 1, [Casper support available])
220*05b00f60SXin Li	AC_MSG_RESULT(yes)
221*05b00f60SXin Lielse
222*05b00f60SXin Li	AC_MSG_RESULT(no)
223*05b00f60SXin Lifi
224*05b00f60SXin Li
225*05b00f60SXin Li#
226*05b00f60SXin Li# We must check this before checking whether to check the OS's IPv6,
227*05b00f60SXin Li# support because, on some platforms (such as SunOS 5.x), the test
228*05b00f60SXin Li# program requires the extra networking libraries.
229*05b00f60SXin Li#
230*05b00f60SXin LiAC_LBL_LIBRARY_NET
231*05b00f60SXin Li
232*05b00f60SXin Li#
233*05b00f60SXin Li# Check whether AF_INET6 and struct in6_addr are defined.
234*05b00f60SXin Li# If they aren't both defined, we don't have sufficient OS
235*05b00f60SXin Li# support for IPv6, so we don't look for IPv6 support libraries,
236*05b00f60SXin Li# and we define AF_INET6 and struct in6_addr ourselves.
237*05b00f60SXin Li#
238*05b00f60SXin LiAC_MSG_CHECKING([whether the operating system supports IPv6])
239*05b00f60SXin LiAC_COMPILE_IFELSE(
240*05b00f60SXin Li    [
241*05b00f60SXin Li      AC_LANG_SOURCE(
242*05b00f60SXin Li	[[
243*05b00f60SXin Li#include <string.h>
244*05b00f60SXin Li/* AF_INET6 available check */
245*05b00f60SXin Li#include <sys/types.h>
246*05b00f60SXin Li#ifdef _WIN32
247*05b00f60SXin Li#include <ws2tcpip.h>
248*05b00f60SXin Li#else
249*05b00f60SXin Li#include <sys/socket.h>
250*05b00f60SXin Li#include <netinet/in.h>
251*05b00f60SXin Li#endif
252*05b00f60SXin Li#ifdef AF_INET6
253*05b00f60SXin Livoid
254*05b00f60SXin Lifoo(struct in6_addr *addr)
255*05b00f60SXin Li{
256*05b00f60SXin Li memset(addr, 0, sizeof (struct in6_addr));
257*05b00f60SXin Li}
258*05b00f60SXin Li#else
259*05b00f60SXin Li#error "AF_INET6 not defined"
260*05b00f60SXin Li#endif
261*05b00f60SXin Li	]])
262*05b00f60SXin Li    ],
263*05b00f60SXin Li    [
264*05b00f60SXin Li	AC_MSG_RESULT(yes)
265*05b00f60SXin Li	AC_DEFINE(HAVE_OS_IPV6_SUPPORT, 1,
266*05b00f60SXin Li	    [define if the OS provides AF_INET6 and struct in6_addr])
267*05b00f60SXin Li	ipv6=yes
268*05b00f60SXin Li    ],
269*05b00f60SXin Li    [
270*05b00f60SXin Li	AC_MSG_RESULT(no)
271*05b00f60SXin Li	ipv6=no
272*05b00f60SXin Li    ]
273*05b00f60SXin Li)
274*05b00f60SXin Li
275*05b00f60SXin Liipv6type=unknown
276*05b00f60SXin Liipv6lib=none
277*05b00f60SXin Liipv6trylibc=no
278*05b00f60SXin Li
279*05b00f60SXin Liif test "$ipv6" = "yes"; then
280*05b00f60SXin Li	AC_MSG_CHECKING([ipv6 stack type])
281*05b00f60SXin Li	for i in inria kame linux-glibc linux-libinet6 toshiba v6d zeta; do
282*05b00f60SXin Li		case $i in
283*05b00f60SXin Li		inria)
284*05b00f60SXin Li			dnl http://www.kame.net/
285*05b00f60SXin Li			AC_EGREP_CPP(yes,
286*05b00f60SXin Li[#include <netinet/in.h>
287*05b00f60SXin Li#ifdef IPV6_INRIA_VERSION
288*05b00f60SXin Liyes
289*05b00f60SXin Li#endif],
290*05b00f60SXin Li				[ipv6type=$i])
291*05b00f60SXin Li			;;
292*05b00f60SXin Li		kame)
293*05b00f60SXin Li			dnl http://www.kame.net/
294*05b00f60SXin Li			AC_EGREP_CPP(yes,
295*05b00f60SXin Li[#include <netinet/in.h>
296*05b00f60SXin Li#ifdef __KAME__
297*05b00f60SXin Liyes
298*05b00f60SXin Li#endif],
299*05b00f60SXin Li				[ipv6type=$i;
300*05b00f60SXin Li				ipv6lib=inet6;
301*05b00f60SXin Li				ipv6libdir=/usr/local/v6/lib;
302*05b00f60SXin Li				ipv6trylibc=yes])
303*05b00f60SXin Li			;;
304*05b00f60SXin Li		linux-glibc)
305*05b00f60SXin Li			dnl http://www.v6.linux.or.jp/
306*05b00f60SXin Li			AC_EGREP_CPP(yes,
307*05b00f60SXin Li[#include <features.h>
308*05b00f60SXin Li#if defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
309*05b00f60SXin Liyes
310*05b00f60SXin Li#endif],
311*05b00f60SXin Li				[ipv6type=$i])
312*05b00f60SXin Li			;;
313*05b00f60SXin Li		linux-libinet6)
314*05b00f60SXin Li			dnl http://www.v6.linux.or.jp/
315*05b00f60SXin Li			dnl
316*05b00f60SXin Li			dnl This also matches Solaris 8 and Tru64 UNIX 5.1,
317*05b00f60SXin Li			dnl and possibly other versions of those OSes
318*05b00f60SXin Li			dnl
319*05b00f60SXin Li			if test -d /usr/inet6 -o -f /usr/include/netinet/ip6.h; then
320*05b00f60SXin Li				ipv6type=$i
321*05b00f60SXin Li				ipv6lib=inet6
322*05b00f60SXin Li				ipv6libdir=/usr/inet6/lib
323*05b00f60SXin Li				ipv6trylibc=yes;
324*05b00f60SXin Li				CFLAGS="-I/usr/inet6/include $CFLAGS"
325*05b00f60SXin Li			fi
326*05b00f60SXin Li			;;
327*05b00f60SXin Li		toshiba)
328*05b00f60SXin Li			AC_EGREP_CPP(yes,
329*05b00f60SXin Li[#include <sys/param.h>
330*05b00f60SXin Li#ifdef _TOSHIBA_INET6
331*05b00f60SXin Liyes
332*05b00f60SXin Li#endif],
333*05b00f60SXin Li				[ipv6type=$i;
334*05b00f60SXin Li				ipv6lib=inet6;
335*05b00f60SXin Li				ipv6libdir=/usr/local/v6/lib])
336*05b00f60SXin Li			;;
337*05b00f60SXin Li		v6d)
338*05b00f60SXin Li			AC_EGREP_CPP(yes,
339*05b00f60SXin Li[#include </usr/local/v6/include/sys/v6config.h>
340*05b00f60SXin Li#ifdef __V6D__
341*05b00f60SXin Liyes
342*05b00f60SXin Li#endif],
343*05b00f60SXin Li				[ipv6type=$i;
344*05b00f60SXin Li				ipv6lib=v6;
345*05b00f60SXin Li				ipv6libdir=/usr/local/v6/lib;
346*05b00f60SXin Li				CFLAGS="-I/usr/local/v6/include $CFLAGS"])
347*05b00f60SXin Li			;;
348*05b00f60SXin Li		zeta)
349*05b00f60SXin Li			AC_EGREP_CPP(yes,
350*05b00f60SXin Li[#include <sys/param.h>
351*05b00f60SXin Li#ifdef _ZETA_MINAMI_INET6
352*05b00f60SXin Liyes
353*05b00f60SXin Li#endif],
354*05b00f60SXin Li				[ipv6type=$i;
355*05b00f60SXin Li				ipv6lib=inet6;
356*05b00f60SXin Li				ipv6libdir=/usr/local/v6/lib])
357*05b00f60SXin Li			;;
358*05b00f60SXin Li		esac
359*05b00f60SXin Li		if test "$ipv6type" != "unknown"; then
360*05b00f60SXin Li			break
361*05b00f60SXin Li		fi
362*05b00f60SXin Li	done
363*05b00f60SXin Li	AC_MSG_RESULT($ipv6type)
364*05b00f60SXin Lifi
365*05b00f60SXin Li
366*05b00f60SXin Liif test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then
367*05b00f60SXin Li	if test -d $ipv6libdir -a -f $ipv6libdir/lib$ipv6lib.a; then
368*05b00f60SXin Li		LIBS="-L$ipv6libdir -l$ipv6lib $LIBS"
369*05b00f60SXin Li		echo "You have $ipv6lib library, using it"
370*05b00f60SXin Li	else
371*05b00f60SXin Li		if test "$ipv6trylibc" = "yes"; then
372*05b00f60SXin Li			echo "You do not have $ipv6lib library, using libc"
373*05b00f60SXin Li		else
374*05b00f60SXin Li			echo 'Fatal: no $ipv6lib library found.  cannot continue.'
375*05b00f60SXin Li			echo "You need to fetch lib$ipv6lib.a from appropriate"
376*05b00f60SXin Li			echo 'ipv6 kit and compile beforehand.'
377*05b00f60SXin Li			exit 1
378*05b00f60SXin Li		fi
379*05b00f60SXin Li	fi
380*05b00f60SXin Lifi
381*05b00f60SXin Li
382*05b00f60SXin LiAC_REPLACE_FUNCS(strlcat strlcpy strdup strsep getservent getopt_long)
383*05b00f60SXin LiAC_CHECK_FUNCS(fork vfork)
384*05b00f60SXin LiAC_CHECK_FUNCS(setlinebuf)
385*05b00f60SXin Li
386*05b00f60SXin Li#
387*05b00f60SXin Li# Make sure we have vsnprintf() and snprintf(); we require them.
388*05b00f60SXin Li#
389*05b00f60SXin LiAC_CHECK_FUNC(vsnprintf,,
390*05b00f60SXin Li    AC_MSG_ERROR([vsnprintf() is required but wasn't found]))
391*05b00f60SXin LiAC_CHECK_FUNC(snprintf,,
392*05b00f60SXin Li    AC_MSG_ERROR([snprintf() is required but wasn't found]))
393*05b00f60SXin Li
394*05b00f60SXin Li#
395*05b00f60SXin Li# Define HAVE_NO_PRINTF_Z to make it possible to disable test cases that
396*05b00f60SXin Li# depend on %zu.
397*05b00f60SXin Li#
398*05b00f60SXin LiAC_MSG_CHECKING([whether printf(3) supports the z length modifier])
399*05b00f60SXin LiAC_RUN_IFELSE(
400*05b00f60SXin Li    [
401*05b00f60SXin Li        AC_LANG_SOURCE([[
402*05b00f60SXin Li#include <stdio.h>
403*05b00f60SXin Li#include <string.h>
404*05b00f60SXin Li
405*05b00f60SXin Liint main()
406*05b00f60SXin Li{
407*05b00f60SXin Li  char buf[100];
408*05b00f60SXin Li  snprintf(buf, sizeof(buf), "%zu", sizeof(buf));
409*05b00f60SXin Li  return strncmp(buf, "100", sizeof(buf)) ? 1 : 0;
410*05b00f60SXin Li}
411*05b00f60SXin Li        ]])
412*05b00f60SXin Li    ],
413*05b00f60SXin Li    [
414*05b00f60SXin Li        AC_MSG_RESULT(yes)
415*05b00f60SXin Li    ],
416*05b00f60SXin Li    [
417*05b00f60SXin Li        AC_MSG_RESULT(no)
418*05b00f60SXin Li        AC_DEFINE(HAVE_NO_PRINTF_Z, 1,
419*05b00f60SXin Li            [Define to 1 if printf(3) does not support the z length modifier.])
420*05b00f60SXin Li    ],
421*05b00f60SXin Li    [
422*05b00f60SXin Li        AC_MSG_RESULT(not while cross-compiling)
423*05b00f60SXin Li    ]
424*05b00f60SXin Li)
425*05b00f60SXin Li
426*05b00f60SXin LiAC_CHECK_LIB(rpc, main)		dnl It's unclear why we might need -lrpc
427*05b00f60SXin Li
428*05b00f60SXin Lidnl Some platforms may need -lnsl for getrpcbynumber.
429*05b00f60SXin LiAC_SEARCH_LIBS(getrpcbynumber, nsl,
430*05b00f60SXin Li    AC_DEFINE(HAVE_GETRPCBYNUMBER, 1, [define if you have getrpcbynumber()]))
431*05b00f60SXin Li
432*05b00f60SXin LiAC_LBL_LIBPCAP(V_PCAPDEP, V_INCLS)
433*05b00f60SXin Li
434*05b00f60SXin Li#
435*05b00f60SXin Li# Check for these after AC_LBL_LIBPCAP, so we link with the appropriate
436*05b00f60SXin Li# libraries (e.g., "-lsocket -lnsl" on Solaris).
437*05b00f60SXin Li#
438*05b00f60SXin Li# You are in a twisty little maze of UN*Xes, all different.
439*05b00f60SXin Li# Some might not have ether_ntohost().
440*05b00f60SXin Li# Some might have it and declare it in <net/ethernet.h>.
441*05b00f60SXin Li# Some might have it and declare it in <netinet/ether.h>
442*05b00f60SXin Li# Some might have it and declare it in <sys/ethernet.h>.
443*05b00f60SXin Li# Some might have it and declare it in <arpa/inet.h>.
444*05b00f60SXin Li# Some might have it and declare it in <netinet/if_ether.h>.
445*05b00f60SXin Li# Some might have it and not declare it in any header file.
446*05b00f60SXin Li#
447*05b00f60SXin Li# Before you is a C compiler.
448*05b00f60SXin Li#
449*05b00f60SXin LiAC_CHECK_FUNCS(ether_ntohost, [
450*05b00f60SXin Li    AC_CACHE_CHECK(for buggy ether_ntohost, ac_cv_buggy_ether_ntohost, [
451*05b00f60SXin Li	AC_TRY_RUN([
452*05b00f60SXin Li		#include <netdb.h>
453*05b00f60SXin Li		#include <netinet/ether.h>
454*05b00f60SXin Li		#include <stdlib.h>
455*05b00f60SXin Li		#include <sys/types.h>
456*05b00f60SXin Li		#include <sys/param.h>
457*05b00f60SXin Li		#include <sys/socket.h>
458*05b00f60SXin Li
459*05b00f60SXin Li		int
460*05b00f60SXin Li		main(int argc, char **argv)
461*05b00f60SXin Li		{
462*05b00f60SXin Li			u_char ea[6] = { 0xff, 0xff, 0xff, 0xff, 0xff };
463*05b00f60SXin Li			char name[MAXHOSTNAMELEN];
464*05b00f60SXin Li
465*05b00f60SXin Li			ether_ntohost(name, (struct ether_addr *)ea);
466*05b00f60SXin Li			exit(0);
467*05b00f60SXin Li		}
468*05b00f60SXin Li	], [ac_cv_buggy_ether_ntohost=no],
469*05b00f60SXin Li	   [ac_cv_buggy_ether_ntohost=yes],
470*05b00f60SXin Li	   [ac_cv_buggy_ether_ntohost="not while cross-compiling"])])
471*05b00f60SXin Li    if test "$ac_cv_buggy_ether_ntohost" = "no"; then
472*05b00f60SXin Li	AC_DEFINE(USE_ETHER_NTOHOST, 1,
473*05b00f60SXin Li	    [define if you have ether_ntohost() and it works])
474*05b00f60SXin Li    fi
475*05b00f60SXin Li])
476*05b00f60SXin Liif test "$ac_cv_func_ether_ntohost" = yes -a \
477*05b00f60SXin Li    "$ac_cv_buggy_ether_ntohost" = "no"; then
478*05b00f60SXin Li	#
479*05b00f60SXin Li	# OK, we have ether_ntohost().  Is it declared in <net/ethernet.h>?
480*05b00f60SXin Li	#
481*05b00f60SXin Li	# This test fails if we don't have <net/ethernet.h> or if we do
482*05b00f60SXin Li	# but it doesn't declare ether_ntohost().
483*05b00f60SXin Li	#
484*05b00f60SXin Li	AC_CHECK_DECL(ether_ntohost,
485*05b00f60SXin Li	    [
486*05b00f60SXin Li		AC_DEFINE(NET_ETHERNET_H_DECLARES_ETHER_NTOHOST,,
487*05b00f60SXin Li		    [Define to 1 if net/ethernet.h declares `ether_ntohost'])
488*05b00f60SXin Li	    ],,
489*05b00f60SXin Li	    [
490*05b00f60SXin Li#include <net/ethernet.h>
491*05b00f60SXin Li	    ])
492*05b00f60SXin Li	#
493*05b00f60SXin Li	# Did that succeed?
494*05b00f60SXin Li	#
495*05b00f60SXin Li	if test "$ac_cv_have_decl_ether_ntohost" != yes; then
496*05b00f60SXin Li		#
497*05b00f60SXin Li		# No, how about <netinet/ether.h>, as on Linux?
498*05b00f60SXin Li		#
499*05b00f60SXin Li		# This test fails if we don't have <netinet/ether.h>
500*05b00f60SXin Li		# or if we do but it doesn't declare ether_ntohost().
501*05b00f60SXin Li		#
502*05b00f60SXin Li		# Unset ac_cv_have_decl_ether_ntohost so we don't
503*05b00f60SXin Li		# treat the previous failure as a cached value and
504*05b00f60SXin Li		# suppress the next test.
505*05b00f60SXin Li		#
506*05b00f60SXin Li		unset ac_cv_have_decl_ether_ntohost
507*05b00f60SXin Li		AC_CHECK_DECL(ether_ntohost,
508*05b00f60SXin Li		    [
509*05b00f60SXin Li			AC_DEFINE(NETINET_ETHER_H_DECLARES_ETHER_NTOHOST,,
510*05b00f60SXin Li			    [Define to 1 if netinet/ether.h declares `ether_ntohost'])
511*05b00f60SXin Li		    ],,
512*05b00f60SXin Li		    [
513*05b00f60SXin Li#include <netinet/ether.h>
514*05b00f60SXin Li		    ])
515*05b00f60SXin Li	fi
516*05b00f60SXin Li	#
517*05b00f60SXin Li	# Did that succeed?
518*05b00f60SXin Li	#
519*05b00f60SXin Li	if test "$ac_cv_have_decl_ether_ntohost" != yes; then
520*05b00f60SXin Li		#
521*05b00f60SXin Li		# No, how about <sys/ethernet.h>, as on Solaris 10
522*05b00f60SXin Li		# and later?
523*05b00f60SXin Li		#
524*05b00f60SXin Li		# This test fails if we don't have <sys/ethernet.h>
525*05b00f60SXin Li		# or if we do but it doesn't declare ether_ntohost().
526*05b00f60SXin Li		#
527*05b00f60SXin Li		# Unset ac_cv_have_decl_ether_ntohost so we don't
528*05b00f60SXin Li		# treat the previous failure as a cached value and
529*05b00f60SXin Li		# suppress the next test.
530*05b00f60SXin Li		#
531*05b00f60SXin Li		unset ac_cv_have_decl_ether_ntohost
532*05b00f60SXin Li		AC_CHECK_DECL(ether_ntohost,
533*05b00f60SXin Li		    [
534*05b00f60SXin Li			AC_DEFINE(SYS_ETHERNET_H_DECLARES_ETHER_NTOHOST,,
535*05b00f60SXin Li			    [Define to 1 if sys/ethernet.h declares `ether_ntohost'])
536*05b00f60SXin Li		    ],,
537*05b00f60SXin Li		    [
538*05b00f60SXin Li#include <sys/ethernet.h>
539*05b00f60SXin Li		    ])
540*05b00f60SXin Li	fi
541*05b00f60SXin Li	#
542*05b00f60SXin Li	# Did that succeed?
543*05b00f60SXin Li	#
544*05b00f60SXin Li	if test "$ac_cv_have_decl_ether_ntohost" != yes; then
545*05b00f60SXin Li		#
546*05b00f60SXin Li		# No, how about <arpa/inet.h>, as in AIX?
547*05b00f60SXin Li		#
548*05b00f60SXin Li		# This test fails if we don't have <arpa/inet.h>
549*05b00f60SXin Li		# (if we have ether_ntohost(), we should have
550*05b00f60SXin Li		# networking, and if we have networking, we should
551*05b00f60SXin Li		# have <arpa/inet.h>) or if we do but it doesn't
552*05b00f60SXin Li		# declare ether_ntohost().
553*05b00f60SXin Li		#
554*05b00f60SXin Li		# Unset ac_cv_have_decl_ether_ntohost so we don't
555*05b00f60SXin Li		# treat the previous failure as a cached value and
556*05b00f60SXin Li		# suppress the next test.
557*05b00f60SXin Li		#
558*05b00f60SXin Li		unset ac_cv_have_decl_ether_ntohost
559*05b00f60SXin Li		AC_CHECK_DECL(ether_ntohost,
560*05b00f60SXin Li		    [
561*05b00f60SXin Li			AC_DEFINE(ARPA_INET_H_DECLARES_ETHER_NTOHOST,,
562*05b00f60SXin Li			    [Define to 1 if arpa/inet.h declares `ether_ntohost'])
563*05b00f60SXin Li		    ],,
564*05b00f60SXin Li		    [
565*05b00f60SXin Li#include <arpa/inet.h>
566*05b00f60SXin Li		    ])
567*05b00f60SXin Li	fi
568*05b00f60SXin Li	#
569*05b00f60SXin Li	# Did that succeed?
570*05b00f60SXin Li	#
571*05b00f60SXin Li	if test "$ac_cv_have_decl_ether_ntohost" != yes; then
572*05b00f60SXin Li		#
573*05b00f60SXin Li		# No, how about <netinet/if_ether.h>?
574*05b00f60SXin Li		# On some platforms, it requires <net/if.h> and
575*05b00f60SXin Li		# <netinet/in.h>, and we always include it with
576*05b00f60SXin Li		# both of them, so test it with both of them.
577*05b00f60SXin Li		#
578*05b00f60SXin Li		# This test fails if we don't have <netinet/if_ether.h>
579*05b00f60SXin Li		# and the headers we include before it, or if we do but
580*05b00f60SXin Li		# <netinet/if_ether.h> doesn't declare ether_hostton().
581*05b00f60SXin Li		#
582*05b00f60SXin Li		# Unset ac_cv_have_decl_ether_ntohost so we don't
583*05b00f60SXin Li		# treat the previous failure as a cached value and
584*05b00f60SXin Li		# suppress the next test.
585*05b00f60SXin Li		#
586*05b00f60SXin Li		unset ac_cv_have_decl_ether_ntohost
587*05b00f60SXin Li		AC_CHECK_DECL(ether_ntohost,
588*05b00f60SXin Li		    [
589*05b00f60SXin Li			AC_DEFINE(NETINET_IF_ETHER_H_DECLARES_ETHER_NTOHOST,,
590*05b00f60SXin Li			    [Define to 1 if netinet/if_ether.h declares `ether_ntohost'])
591*05b00f60SXin Li		    ],,
592*05b00f60SXin Li		    [
593*05b00f60SXin Li#include <sys/types.h>
594*05b00f60SXin Li#include <sys/socket.h>
595*05b00f60SXin Li#include <net/if.h>
596*05b00f60SXin Li#include <netinet/in.h>
597*05b00f60SXin Li#include <netinet/if_ether.h>
598*05b00f60SXin Li		    ])
599*05b00f60SXin Li	fi
600*05b00f60SXin Li	#
601*05b00f60SXin Li	# After all that, is ether_ntohost() declared?
602*05b00f60SXin Li	#
603*05b00f60SXin Li	if test "$ac_cv_have_decl_ether_ntohost" = yes; then
604*05b00f60SXin Li		#
605*05b00f60SXin Li		# Yes.
606*05b00f60SXin Li		#
607*05b00f60SXin Li		AC_DEFINE(HAVE_DECL_ETHER_NTOHOST, 1,
608*05b00f60SXin Li		    [Define to 1 if you have the declaration of `ether_ntohost'])
609*05b00f60SXin Li	else
610*05b00f60SXin Li		#
611*05b00f60SXin Li		# No, we'll have to declare it ourselves.
612*05b00f60SXin Li		# Do we have "struct ether_addr" if we include
613*05b00f60SXin Li		# <netinet/if_ether.h>?
614*05b00f60SXin Li		#
615*05b00f60SXin Li		AC_CHECK_TYPES(struct ether_addr,,,
616*05b00f60SXin Li		    [
617*05b00f60SXin Li			#include <sys/types.h>
618*05b00f60SXin Li			#include <sys/socket.h>
619*05b00f60SXin Li			#include <net/if.h>
620*05b00f60SXin Li			#include <netinet/in.h>
621*05b00f60SXin Li			#include <netinet/if_ether.h>
622*05b00f60SXin Li		    ])
623*05b00f60SXin Li	fi
624*05b00f60SXin Lifi
625*05b00f60SXin Li
626*05b00f60SXin Lidnl
627*05b00f60SXin Lidnl Check for "pcap_list_datalinks()" and use a substitute version if
628*05b00f60SXin Lidnl it's not present.  If it is present, check for "pcap_free_datalinks()";
629*05b00f60SXin Lidnl if it's not present, we don't replace it for now.  (We could do so
630*05b00f60SXin Lidnl on UN*X, but not on Windows, where hilarity ensues if a program
631*05b00f60SXin Lidnl built with one version of the MSVC support library tries to free
632*05b00f60SXin Lidnl something allocated by a library built with another version of
633*05b00f60SXin Lidnl the MSVC support library.)
634*05b00f60SXin Lidnl
635*05b00f60SXin LiAC_CHECK_FUNC(pcap_list_datalinks,
636*05b00f60SXin Li	[
637*05b00f60SXin Li	    AC_DEFINE(HAVE_PCAP_LIST_DATALINKS, 1,
638*05b00f60SXin Li		[define if libpcap has pcap_list_datalinks()])
639*05b00f60SXin Li	    AC_CHECK_FUNCS(pcap_free_datalinks)
640*05b00f60SXin Li	],
641*05b00f60SXin Li	[
642*05b00f60SXin Li	    AC_LIBOBJ(datalinks)
643*05b00f60SXin Li	])
644*05b00f60SXin Li
645*05b00f60SXin Lidnl
646*05b00f60SXin Lidnl Check for "pcap_datalink_name_to_val()", and use a substitute
647*05b00f60SXin Lidnl version if it's not present.  If it is present, check for
648*05b00f60SXin Lidnl "pcap_datalink_val_to_description()", and if we don't have it,
649*05b00f60SXin Lidnl use a substitute version.
650*05b00f60SXin Lidnl
651*05b00f60SXin LiAC_CHECK_FUNC(pcap_datalink_name_to_val,
652*05b00f60SXin Li	[
653*05b00f60SXin Li	    AC_DEFINE(HAVE_PCAP_DATALINK_NAME_TO_VAL, 1,
654*05b00f60SXin Li		[define if libpcap has pcap_datalink_name_to_val()])
655*05b00f60SXin Li	    AC_CHECK_FUNC(pcap_datalink_val_to_description,
656*05b00f60SXin Li		AC_DEFINE(HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION, 1,
657*05b00f60SXin Li		    [define if libpcap has pcap_datalink_val_to_description()]),
658*05b00f60SXin Li		[
659*05b00f60SXin Li		    AC_LIBOBJ(dlnames)
660*05b00f60SXin Li		])
661*05b00f60SXin Li	],
662*05b00f60SXin Li	[
663*05b00f60SXin Li	    AC_LIBOBJ(dlnames)
664*05b00f60SXin Li	])
665*05b00f60SXin Li
666*05b00f60SXin Lidnl
667*05b00f60SXin Lidnl Check for "pcap_set_datalink()"; you can't substitute for it if
668*05b00f60SXin Lidnl it's absent (it has hooks into libpcap), so just define the
669*05b00f60SXin Lidnl HAVE_ value if it's there.
670*05b00f60SXin Lidnl
671*05b00f60SXin LiAC_CHECK_FUNCS(pcap_set_datalink)
672*05b00f60SXin Li
673*05b00f60SXin Lidnl
674*05b00f60SXin Lidnl Check for "pcap_breakloop()"; you can't substitute for it if
675*05b00f60SXin Lidnl it's absent (it has hooks into the live capture routines),
676*05b00f60SXin Lidnl so just define the HAVE_ value if it's there.
677*05b00f60SXin Lidnl
678*05b00f60SXin LiAC_CHECK_FUNCS(pcap_breakloop)
679*05b00f60SXin Li
680*05b00f60SXin Li#
681*05b00f60SXin Li# Do we have the new open API?  Check for pcap_create, and assume that,
682*05b00f60SXin Li# if we do, we also have pcap_activate() and the other new routines
683*05b00f60SXin Li# introduced in libpcap 1.0.0.
684*05b00f60SXin Li#
685*05b00f60SXin LiAC_CHECK_FUNCS(pcap_create)
686*05b00f60SXin Liif test $ac_cv_func_pcap_create = "yes" ; then
687*05b00f60SXin Li	#
688*05b00f60SXin Li	# OK, do we have pcap_set_tstamp_type?  If so, assume we have
689*05b00f60SXin Li	# pcap_list_tstamp_types and pcap_free_tstamp_types as well.
690*05b00f60SXin Li	#
691*05b00f60SXin Li	AC_CHECK_FUNCS(pcap_set_tstamp_type)
692*05b00f60SXin Li	#
693*05b00f60SXin Li	# And do we have pcap_set_tstamp_precision?  If so, we assume
694*05b00f60SXin Li	# we also have pcap_open_offline_with_tstamp_precision.
695*05b00f60SXin Li	#
696*05b00f60SXin Li	AC_CHECK_FUNCS(pcap_set_tstamp_precision)
697*05b00f60SXin Lifi
698*05b00f60SXin Li
699*05b00f60SXin Li#
700*05b00f60SXin Li# Check for a miscellaneous collection of functions which we use
701*05b00f60SXin Li# if we have them.
702*05b00f60SXin Li#
703*05b00f60SXin LiAC_CHECK_FUNCS(pcap_findalldevs)
704*05b00f60SXin Liif test $ac_cv_func_pcap_findalldevs = "yes" ; then
705*05b00f60SXin Lidnl Check for libpcap having pcap_findalldevs() but the pcap.h header
706*05b00f60SXin Lidnl not having pcap_if_t; some versions of Mac OS X shipped with pcap.h
707*05b00f60SXin Lidnl from 0.6 and libpcap 0.8, so that libpcap had pcap_findalldevs but
708*05b00f60SXin Lidnl pcap.h didn't have pcap_if_t.
709*05b00f60SXin Li    savedcppflags="$CPPFLAGS"
710*05b00f60SXin Li    CPPFLAGS="$CPPFLAGS $V_INCLS"
711*05b00f60SXin Li    AC_CHECK_TYPES(pcap_if_t, , , [#include <pcap.h>])
712*05b00f60SXin Li    CPPFLAGS="$savedcppflags"
713*05b00f60SXin Lifi
714*05b00f60SXin LiAC_CHECK_FUNCS(pcap_dump_flush pcap_lib_version)
715*05b00f60SXin Liif test $ac_cv_func_pcap_lib_version = "no" ; then
716*05b00f60SXin Li    AC_MSG_CHECKING(whether pcap_version is defined by libpcap)
717*05b00f60SXin Li    AC_TRY_LINK([],
718*05b00f60SXin Li       [
719*05b00f60SXin Li	extern char pcap_version[];
720*05b00f60SXin Li
721*05b00f60SXin Li	return (int)pcap_version;
722*05b00f60SXin Li       ],
723*05b00f60SXin Li       ac_lbl_cv_pcap_version_defined=yes,
724*05b00f60SXin Li       ac_lbl_cv_pcap_version_defined=no)
725*05b00f60SXin Li    if test "$ac_lbl_cv_pcap_version_defined" = yes ; then
726*05b00f60SXin Li	AC_MSG_RESULT(yes)
727*05b00f60SXin Li	AC_DEFINE(HAVE_PCAP_VERSION, 1, [define if libpcap has pcap_version])
728*05b00f60SXin Li    else
729*05b00f60SXin Li	AC_MSG_RESULT(no)
730*05b00f60SXin Li    fi
731*05b00f60SXin Lifi
732*05b00f60SXin LiAC_CHECK_FUNCS(pcap_setdirection pcap_set_immediate_mode pcap_dump_ftell64)
733*05b00f60SXin LiAC_CHECK_FUNCS(pcap_open pcap_findalldevs_ex)
734*05b00f60SXin LiAC_REPLACE_FUNCS(pcap_dump_ftell)
735*05b00f60SXin Li
736*05b00f60SXin Li#
737*05b00f60SXin Li# Check for special debugging functions
738*05b00f60SXin Li#
739*05b00f60SXin LiAC_CHECK_FUNCS(pcap_set_parser_debug)
740*05b00f60SXin Liif test "$ac_cv_func_pcap_set_parser_debug" = "no" ; then
741*05b00f60SXin Li	#
742*05b00f60SXin Li	# OK, we don't have pcap_set_parser_debug() to set the libpcap
743*05b00f60SXin Li	# filter expression parser debug flag; can we directly set the
744*05b00f60SXin Li	# flag?
745*05b00f60SXin Li	AC_MSG_CHECKING(whether pcap_debug is defined by libpcap)
746*05b00f60SXin Li	AC_TRY_LINK([],
747*05b00f60SXin Li	   [
748*05b00f60SXin Li		extern int pcap_debug;
749*05b00f60SXin Li
750*05b00f60SXin Li		return pcap_debug;
751*05b00f60SXin Li	   ],
752*05b00f60SXin Li	   ac_lbl_cv_pcap_debug_defined=yes,
753*05b00f60SXin Li	   ac_lbl_cv_pcap_debug_defined=no)
754*05b00f60SXin Li	if test "$ac_lbl_cv_pcap_debug_defined" = yes ; then
755*05b00f60SXin Li		AC_MSG_RESULT(yes)
756*05b00f60SXin Li		AC_DEFINE(HAVE_PCAP_DEBUG, 1, [define if libpcap has pcap_debug])
757*05b00f60SXin Li	else
758*05b00f60SXin Li		AC_MSG_RESULT(no)
759*05b00f60SXin Li		#
760*05b00f60SXin Li		# OK, what about "yydebug"?
761*05b00f60SXin Li		#
762*05b00f60SXin Li		AC_MSG_CHECKING(whether yydebug is defined by libpcap)
763*05b00f60SXin Li		AC_TRY_LINK([],
764*05b00f60SXin Li		   [
765*05b00f60SXin Li			extern int yydebug;
766*05b00f60SXin Li
767*05b00f60SXin Li			return yydebug;
768*05b00f60SXin Li		   ],
769*05b00f60SXin Li		   ac_lbl_cv_yydebug_defined=yes,
770*05b00f60SXin Li		   ac_lbl_cv_yydebug_defined=no)
771*05b00f60SXin Li		if test "$ac_lbl_cv_yydebug_defined" = yes ; then
772*05b00f60SXin Li			AC_MSG_RESULT(yes)
773*05b00f60SXin Li			AC_DEFINE(HAVE_YYDEBUG, 1, [define if libpcap has yydebug])
774*05b00f60SXin Li		else
775*05b00f60SXin Li			AC_MSG_RESULT(no)
776*05b00f60SXin Li		fi
777*05b00f60SXin Li	fi
778*05b00f60SXin Lifi
779*05b00f60SXin LiAC_CHECK_FUNCS(pcap_set_optimizer_debug)
780*05b00f60SXin LiAC_REPLACE_FUNCS(bpf_dump)	dnl moved to libpcap in 0.6
781*05b00f60SXin Li
782*05b00f60SXin LiV_GROUP=0
783*05b00f60SXin Liif test -f /etc/group -a ! -z "`grep '^wheel:' /etc/group`" ; then
784*05b00f60SXin Li	V_GROUP=wheel
785*05b00f60SXin Lifi
786*05b00f60SXin Li#
787*05b00f60SXin Li# Assume V7/BSD convention for man pages (file formats in section 5,
788*05b00f60SXin Li# miscellaneous info in section 7).
789*05b00f60SXin Li#
790*05b00f60SXin LiMAN_FILE_FORMATS=5
791*05b00f60SXin LiMAN_MISC_INFO=7
792*05b00f60SXin Licase "$host_os" in
793*05b00f60SXin Li
794*05b00f60SXin Liaix*)
795*05b00f60SXin Li	dnl Workaround to enable certain features
796*05b00f60SXin Li	AC_DEFINE(_SUN,1,[define on AIX to get certain functions])
797*05b00f60SXin Li	;;
798*05b00f60SXin Li
799*05b00f60SXin Lihpux*)
800*05b00f60SXin Li	#
801*05b00f60SXin Li	# Use System V conventions for man pages.
802*05b00f60SXin Li	#
803*05b00f60SXin Li	MAN_FILE_FORMATS=4
804*05b00f60SXin Li	MAN_MISC_INFO=5
805*05b00f60SXin Li	;;
806*05b00f60SXin Li
807*05b00f60SXin Liirix*)
808*05b00f60SXin Li	V_GROUP=sys
809*05b00f60SXin Li
810*05b00f60SXin Li	#
811*05b00f60SXin Li	# Use System V conventions for man pages.
812*05b00f60SXin Li	#
813*05b00f60SXin Li	MAN_FILE_FORMATS=4
814*05b00f60SXin Li	MAN_MISC_INFO=5
815*05b00f60SXin Li	;;
816*05b00f60SXin Li
817*05b00f60SXin Liosf*)
818*05b00f60SXin Li	V_GROUP=system
819*05b00f60SXin Li
820*05b00f60SXin Li	#
821*05b00f60SXin Li	# Use System V conventions for man pages.
822*05b00f60SXin Li	#
823*05b00f60SXin Li	MAN_FILE_FORMATS=4
824*05b00f60SXin Li	MAN_MISC_INFO=5
825*05b00f60SXin Li	;;
826*05b00f60SXin Li
827*05b00f60SXin Lisolaris*)
828*05b00f60SXin Li	V_GROUP=sys
829*05b00f60SXin Li
830*05b00f60SXin Li	#
831*05b00f60SXin Li	# Use System V conventions for man pages.
832*05b00f60SXin Li	#
833*05b00f60SXin Li	MAN_FILE_FORMATS=4
834*05b00f60SXin Li	MAN_MISC_INFO=5
835*05b00f60SXin Li	;;
836*05b00f60SXin Liesac
837*05b00f60SXin Li
838*05b00f60SXin Liif test -f /dev/bpf0 ; then
839*05b00f60SXin Li	V_GROUP=bpf
840*05b00f60SXin Lifi
841*05b00f60SXin Li
842*05b00f60SXin Li#
843*05b00f60SXin Li# Make sure we have a definition for C99's uintptr_t (regardless of
844*05b00f60SXin Li# whether the environment is a C99 environment or not).
845*05b00f60SXin Li#
846*05b00f60SXin LiAC_TYPE_UINTPTR_T
847*05b00f60SXin Li
848*05b00f60SXin Li#
849*05b00f60SXin Li# Check whether we have pcap/pcap-inttypes.h.
850*05b00f60SXin Li# If we do, we use that to get the C99 types defined.
851*05b00f60SXin Li#
852*05b00f60SXin Lisavedcppflags="$CPPFLAGS"
853*05b00f60SXin LiCPPFLAGS="$CPPFLAGS $V_INCLS"
854*05b00f60SXin LiAC_CHECK_HEADERS(pcap/pcap-inttypes.h)
855*05b00f60SXin LiCPPFLAGS="$savedcppflags"
856*05b00f60SXin Li
857*05b00f60SXin Li#
858*05b00f60SXin Li# Define the old BSD specified-width types in terms of the C99 types;
859*05b00f60SXin Li# we may need them with libpcap include files.
860*05b00f60SXin Li#
861*05b00f60SXin LiAC_CHECK_TYPE([u_int8_t], ,
862*05b00f60SXin Li	[AC_DEFINE([u_int8_t], [uint8_t],
863*05b00f60SXin Li	[Define to `uint8_t' if u_int8_t not defined.])],
864*05b00f60SXin Li	[AC_INCLUDES_DEFAULT
865*05b00f60SXin Li#include <sys/types.h>
866*05b00f60SXin Li])
867*05b00f60SXin LiAC_CHECK_TYPE([u_int16_t], ,
868*05b00f60SXin Li	[AC_DEFINE([u_int16_t], [uint16_t],
869*05b00f60SXin Li	[Define to `uint16_t' if u_int16_t not defined.])],
870*05b00f60SXin Li	[AC_INCLUDES_DEFAULT
871*05b00f60SXin Li#include <sys/types.h>
872*05b00f60SXin Li])
873*05b00f60SXin LiAC_CHECK_TYPE([u_int32_t], ,
874*05b00f60SXin Li	[AC_DEFINE([u_int32_t], [uint32_t],
875*05b00f60SXin Li	[Define to `uint32_t' if u_int32_t not defined.])],
876*05b00f60SXin Li	[AC_INCLUDES_DEFAULT
877*05b00f60SXin Li#include <sys/types.h>
878*05b00f60SXin Li])
879*05b00f60SXin LiAC_CHECK_TYPE([u_int64_t], ,
880*05b00f60SXin Li	[AC_DEFINE([u_int64_t], [uint64_t],
881*05b00f60SXin Li	[Define to `uint64_t' if u_int64_t not defined.])],
882*05b00f60SXin Li	[AC_INCLUDES_DEFAULT
883*05b00f60SXin Li#include <sys/types.h>
884*05b00f60SXin Li])
885*05b00f60SXin Li
886*05b00f60SXin LiAC_PROG_RANLIB
887*05b00f60SXin LiAC_CHECK_TOOL([AR], [ar])
888*05b00f60SXin Li
889*05b00f60SXin LiAC_LBL_DEVEL(V_CCOPT)
890*05b00f60SXin Li
891*05b00f60SXin Li# Check for OpenSSL/libressl libcrypto
892*05b00f60SXin LiAC_MSG_CHECKING(whether to use OpenSSL/libressl libcrypto)
893*05b00f60SXin Li# Specify location for both includes and libraries.
894*05b00f60SXin Liwant_libcrypto=ifavailable
895*05b00f60SXin LiAC_ARG_WITH(crypto,
896*05b00f60SXin Li    AS_HELP_STRING([--with-crypto]@<:@=DIR@:>@,
897*05b00f60SXin Li		   [use OpenSSL/libressl libcrypto (located in directory DIR, if specified) @<:@default=yes, if available@:>@]),
898*05b00f60SXin Li[
899*05b00f60SXin Li	if test $withval = no
900*05b00f60SXin Li	then
901*05b00f60SXin Li		# User doesn't want to link with libcrypto.
902*05b00f60SXin Li		want_libcrypto=no
903*05b00f60SXin Li		AC_MSG_RESULT(no)
904*05b00f60SXin Li	elif test $withval = yes
905*05b00f60SXin Li	then
906*05b00f60SXin Li		# User wants to link with libcrypto but hasn't specified
907*05b00f60SXin Li		# a directory.
908*05b00f60SXin Li		want_libcrypto=yes
909*05b00f60SXin Li		AC_MSG_RESULT(yes)
910*05b00f60SXin Li	else
911*05b00f60SXin Li		# User wants to link with libcrypto and has specified
912*05b00f60SXin Li		# a directory, so use the provided value.
913*05b00f60SXin Li		want_libcrypto=yes
914*05b00f60SXin Li		libcrypto_root=$withval
915*05b00f60SXin Li		AC_MSG_RESULT([yes, using the version installed in $withval])
916*05b00f60SXin Li
917*05b00f60SXin Li		#
918*05b00f60SXin Li		# Put the subdirectories of the libcrypto root directory
919*05b00f60SXin Li		# at the front of the header and library search path.
920*05b00f60SXin Li		#
921*05b00f60SXin Li		CFLAGS="-I$withval/include $CFLAGS"
922*05b00f60SXin Li		LIBS="-L$withval/lib $LIBS"
923*05b00f60SXin Li	fi
924*05b00f60SXin Li],[
925*05b00f60SXin Li	#
926*05b00f60SXin Li	# Use libcrypto if it's present, otherwise don't; no directory
927*05b00f60SXin Li	# was specified.
928*05b00f60SXin Li	#
929*05b00f60SXin Li	want_libcrypto=ifavailable
930*05b00f60SXin Li	AC_MSG_RESULT([yes, if available])
931*05b00f60SXin Li])
932*05b00f60SXin Liif test "$want_libcrypto" != "no"; then
933*05b00f60SXin Li	#
934*05b00f60SXin Li	# Don't check for libcrypto unless we have its headers;
935*05b00f60SXin Li	# Apple, bless their pointy little heads, apparently ship
936*05b00f60SXin Li	# libcrypto as a library, but not the header files, in
937*05b00f60SXin Li	# El Capitan, probably because they don't want you writing
938*05b00f60SXin Li	# nasty portable code that could run on other UN*Xes, they
939*05b00f60SXin Li	# want you writing code that uses their Shiny New Crypto
940*05b00f60SXin Li	# Library and that only runs on macOS.
941*05b00f60SXin Li	#
942*05b00f60SXin Li	AC_CHECK_HEADER(openssl/crypto.h,
943*05b00f60SXin Li	[
944*05b00f60SXin Li		AC_CHECK_LIB(crypto, DES_cbc_encrypt)
945*05b00f60SXin Li		if test "$ac_cv_lib_crypto_DES_cbc_encrypt" = "yes"; then
946*05b00f60SXin Li			AC_CHECK_HEADERS(openssl/evp.h)
947*05b00f60SXin Li			#
948*05b00f60SXin Li			# OK, then:
949*05b00f60SXin Li			#
950*05b00f60SXin Li			# 1) do we have EVP_CIPHER_CTX_new?
951*05b00f60SXin Li			# If so, we use it to allocate an
952*05b00f60SXin Li			# EVP_CIPHER_CTX, as EVP_CIPHER_CTX may be
953*05b00f60SXin Li			# opaque; otherwise, we allocate it ourselves.
954*05b00f60SXin Li			#
955*05b00f60SXin Li			# 2) do we have EVP_DecryptInit_ex()?
956*05b00f60SXin Li			# If so, we use it, because we need to be
957*05b00f60SXin Li			# able to make two "initialize the cipher"
958*05b00f60SXin Li			# calls, one with the cipher and key, and
959*05b00f60SXin Li			# one with the IV, and, as of OpenSSL 1.1,
960*05b00f60SXin Li			# You Can't Do That with EVP_DecryptInit(),
961*05b00f60SXin Li			# because a call to EVP_DecryptInit() will
962*05b00f60SXin Li			# unconditionally clear the context, and
963*05b00f60SXin Li			# if you don't supply a cipher, it'll
964*05b00f60SXin Li			# clear the cipher, rendering the context
965*05b00f60SXin Li			# unusable and causing a crash.
966*05b00f60SXin Li			#
967*05b00f60SXin Li			AC_CHECK_FUNCS(EVP_CIPHER_CTX_new EVP_DecryptInit_ex)
968*05b00f60SXin Li		fi
969*05b00f60SXin Li	])
970*05b00f60SXin Lifi
971*05b00f60SXin Li
972*05b00f60SXin Li# Check for libcap-ng
973*05b00f60SXin LiAC_MSG_CHECKING(whether to use libcap-ng)
974*05b00f60SXin Li# Specify location for both includes and libraries.
975*05b00f60SXin Liwant_libcap_ng=ifavailable
976*05b00f60SXin LiAC_ARG_WITH(cap_ng,
977*05b00f60SXin Li    AS_HELP_STRING([--with-cap-ng],
978*05b00f60SXin Li		   [use libcap-ng @<:@default=yes, if available@:>@]),
979*05b00f60SXin Li[
980*05b00f60SXin Li	if test $withval = no
981*05b00f60SXin Li	then
982*05b00f60SXin Li		want_libcap_ng=no
983*05b00f60SXin Li		AC_MSG_RESULT(no)
984*05b00f60SXin Li	elif test $withval = yes
985*05b00f60SXin Li	then
986*05b00f60SXin Li		want_libcap_ng=yes
987*05b00f60SXin Li		AC_MSG_RESULT(yes)
988*05b00f60SXin Li	fi
989*05b00f60SXin Li],[
990*05b00f60SXin Li	#
991*05b00f60SXin Li	# Use libcap-ng if it's present, otherwise don't.
992*05b00f60SXin Li	#
993*05b00f60SXin Li	want_libcap_ng=ifavailable
994*05b00f60SXin Li	AC_MSG_RESULT([yes, if available])
995*05b00f60SXin Li])
996*05b00f60SXin Liif test "$want_libcap_ng" != "no"; then
997*05b00f60SXin Li	AC_CHECK_LIB(cap-ng, capng_change_id)
998*05b00f60SXin Li	AC_CHECK_HEADERS(cap-ng.h)
999*05b00f60SXin Lifi
1000*05b00f60SXin Li
1001*05b00f60SXin Lidnl
1002*05b00f60SXin Lidnl set additional include path if necessary
1003*05b00f60SXin Liif test "$missing_includes" = "yes"; then
1004*05b00f60SXin Li	CPPFLAGS="$CPPFLAGS -I$srcdir/missing"
1005*05b00f60SXin Li	V_INCLS="$V_INCLS -I$srcdir/missing"
1006*05b00f60SXin Lifi
1007*05b00f60SXin Li
1008*05b00f60SXin LiAC_SUBST(V_CCOPT)
1009*05b00f60SXin LiAC_SUBST(V_DEFS)
1010*05b00f60SXin LiAC_SUBST(V_GROUP)
1011*05b00f60SXin LiAC_SUBST(V_INCLS)
1012*05b00f60SXin LiAC_SUBST(V_PCAPDEP)
1013*05b00f60SXin LiAC_SUBST(LOCALSRC)
1014*05b00f60SXin LiAC_SUBST(MAN_FILE_FORMATS)
1015*05b00f60SXin LiAC_SUBST(MAN_MISC_INFO)
1016*05b00f60SXin Li
1017*05b00f60SXin LiAC_PROG_INSTALL
1018*05b00f60SXin Li
1019*05b00f60SXin LiAC_CONFIG_HEADER(config.h)
1020*05b00f60SXin Li
1021*05b00f60SXin LiAC_OUTPUT_COMMANDS([if test -f .devel; then
1022*05b00f60SXin Li	echo timestamp > stamp-h
1023*05b00f60SXin Li	cat $srcdir/Makefile-devel-adds >> Makefile
1024*05b00f60SXin Li	make depend || exit 1
1025*05b00f60SXin Lifi])
1026*05b00f60SXin LiAC_OUTPUT(Makefile tcpdump.1)
1027*05b00f60SXin Liexit 0
1028