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