1 dnl @(#) $Header: /tcpdump/master/tcpdump/configure.in,v 1.169.2.3 2004/03/28 21:04:48 fenner Exp $ (LBL)
3 dnl Copyright (c) 1994, 1995, 1996, 1997
4 dnl The Regents of the University of California. All rights reserved.
6 dnl Process this file with autoconf to produce a configure script.
9 AC_REVISION($Revision: 1.169.2.3 $)
15 AC_LBL_C_INIT(V_CCOPT, V_INCLS)
19 AC_CHECK_HEADERS(fcntl.h rpc/rpcent.h netdnet/dnetdb.h netinet/ether.h)
20 AC_CHECK_HEADERS(netinet/if_ether.h, , , [#include <sys/types.h>
21 #include <sys/socket.h>])
27 AC_MSG_CHECKING(Linux kernel version)
28 if test "$cross_compiling" = yes; then
29 AC_CACHE_VAL(ac_cv_linux_vers,
30 ac_cv_linux_vers=unknown)
32 AC_CACHE_VAL(ac_cv_linux_vers,
33 ac_cv_linux_vers=`uname -r 2>&1 | \
34 sed -n -e '$s/.* //' -e '$s/\..*//p'`)
36 AC_MSG_RESULT($ac_cv_linux_vers)
37 if test $ac_cv_linux_vers = unknown ; then
38 AC_MSG_ERROR(cannot determine linux version when cross-compiling)
40 if test $ac_cv_linux_vers -lt 2 ; then
41 AC_MSG_ERROR(version 2 or higher required; see the INSTALL doc for more info)
50 AC_CHECK_HEADERS(smi.h)
51 AC_CHECK_LIB(smi, smiInit)
52 if test "$ac_cv_header_smi_h" = yes -a "$ac_cv_lib_smi_smiInit" = yes
54 AC_MSG_CHECKING([whether to enable libsmi])
55 AC_TRY_RUN([ /* libsmi available check */
59 int current, revision, age, n;
60 const int required = 2;
63 if (strcmp(SMI_LIBRARY_VERSION, smi_library_version))
65 n = sscanf(smi_library_version, "%d:%d:%d", ¤t, &revision, &age);
68 if (required < current - age || required > current)
76 dnl autoconf documentation says that $? contains the exit value.
77 dnl reality is that it does not. We leave this in just in case
78 dnl autoconf ever comes back to match the documentation.
80 1) AC_MSG_RESULT(no - smiInit failed) ;;
81 2) AC_MSG_RESULT(no - header/library version mismatch) ;;
82 3) AC_MSG_RESULT(no - can't determine library version) ;;
83 4) AC_MSG_RESULT(no - too old) ;;
84 *) AC_MSG_RESULT(no) ;;
87 [ AC_MSG_RESULT(not when cross-compiling)
92 AC_MSG_CHECKING([whether to enable the possibly-buggy SMB printer])
94 [ --enable-smb enable possibly-buggy SMB printer [default=yes]
95 --disable-smb disable possibly-buggy SMB printer],,
98 yes) AC_MSG_RESULT(yes)
99 AC_WARN([The SMB printer may have exploitable buffer overflows!!!])
100 AC_DEFINE(TCPDUMP_DO_SMB)
101 LOCALSRC="print-smb.c smbutil.c $LOCALSRC"
107 AC_MSG_CHECKING([whether to enable ipv6])
109 [ --enable-ipv6 enable ipv6 (with ipv4) support
110 --disable-ipv6 disable ipv6 support],
111 [ case "$enableval" in
112 yes) AC_MSG_RESULT(yes)
113 LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c $LOCALSRC"
123 AC_TRY_RUN([ /* AF_INET6 available check */
124 #include <sys/types.h>
125 #include <sys/socket.h>
128 if (socket(AF_INET6, SOCK_STREAM, 0) < 0)
135 LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c $LOCALSRC"
148 if test "$ipv6" = "yes"; then
149 AC_MSG_CHECKING([ipv6 stack type])
150 for i in inria kame linux-glibc linux-libinet6 toshiba v6d zeta; do
153 dnl http://www.kame.net/
155 [#include <netinet/in.h>
156 #ifdef IPV6_INRIA_VERSION
160 CFLAGS="-DINET6 $CFLAGS"])
163 dnl http://www.kame.net/
165 [#include <netinet/in.h>
171 ipv6libdir=/usr/local/v6/lib;
173 CFLAGS="-DINET6 $CFLAGS"])
176 dnl http://www.v6.linux.or.jp/
178 [#include <features.h>
179 #if defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
183 CFLAGS="-DINET6 $CFLAGS"])
186 dnl http://www.v6.linux.or.jp/
188 dnl This also matches Solaris 8 and Tru64 UNIX 5.1,
189 dnl and possibly other versions of those OSes
191 if test -d /usr/inet6 -o -f /usr/include/netinet/ip6.h; then
194 ipv6libdir=/usr/inet6/lib
196 CFLAGS="-DINET6 -I/usr/inet6/include $CFLAGS"
201 [#include <sys/param.h>
202 #ifdef _TOSHIBA_INET6
207 ipv6libdir=/usr/local/v6/lib;
208 CFLAGS="-DINET6 $CFLAGS"])
212 [#include </usr/local/v6/include/sys/v6config.h>
218 ipv6libdir=/usr/local/v6/lib;
219 CFLAGS="-I/usr/local/v6/include $CFLAGS"])
223 [#include <sys/param.h>
224 #ifdef _ZETA_MINAMI_INET6
229 ipv6libdir=/usr/local/v6/lib;
230 CFLAGS="-DINET6 $CFLAGS"])
233 if test "$ipv6type" != "unknown"; then
237 AC_MSG_RESULT($ipv6type)
240 if test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then
241 if test -d $ipv6libdir -a -f $ipv6libdir/lib$ipv6lib.a; then
242 LIBS="-L$ipv6libdir -l$ipv6lib $LIBS"
243 echo "You have $ipv6lib library, using it"
245 if test "$ipv6trylibc" = "yes"; then
246 echo "You do not have $ipv6lib library, using libc"
248 echo 'Fatal: no $ipv6lib library found. cannot continue.'
249 echo "You need to fetch lib$ipv6lib.a from appropriate"
250 echo 'ipv6 kit and compile beforehand.'
257 if test "$ipv6" = "yes"; then
259 # XXX - on Tru64 UNIX 5.1, there is no "getaddrinfo()"
260 # function in libc; there are "ngetaddrinfo()" and
261 # "ogetaddrinfo()" functions, and <netdb.h> #defines
262 # "getaddrinfo" to be either "ngetaddrinfo" or
263 # "ogetaddrinfo", depending on whether _SOCKADDR_LEN
264 # or _XOPEN_SOURCE_EXTENDED are defined or not.
266 # So this test doesn't work on Tru64 5.1, and possibly
267 # on other 5.x releases. This causes the configure
268 # script to become confused, and results in libpcap
271 AC_SEARCH_LIBS(getaddrinfo, socket, [dnl
272 AC_MSG_CHECKING(getaddrinfo bug)
273 AC_CACHE_VAL(td_cv_buggygetaddrinfo, [AC_TRY_RUN([
274 #include <sys/types.h>
277 #include <sys/socket.h>
278 #include <netinet/in.h>
282 int passive, gaierr, inet4 = 0, inet6 = 0;
283 struct addrinfo hints, *ai, *aitop;
284 char straddr[INET6_ADDRSTRLEN], strport[16];
286 for (passive = 0; passive <= 1; passive++) {
287 memset(&hints, 0, sizeof(hints));
288 hints.ai_family = AF_UNSPEC;
289 hints.ai_flags = passive ? AI_PASSIVE : 0;
290 hints.ai_socktype = SOCK_STREAM;
291 hints.ai_protocol = IPPROTO_TCP;
292 if ((gaierr = getaddrinfo(NULL, "54321", &hints, &aitop)) != 0) {
293 (void)gai_strerror(gaierr);
296 for (ai = aitop; ai; ai = ai->ai_next) {
297 if (ai->ai_addr == NULL ||
298 ai->ai_addrlen == 0 ||
299 getnameinfo(ai->ai_addr, ai->ai_addrlen,
300 straddr, sizeof(straddr), strport, sizeof(strport),
301 NI_NUMERICHOST|NI_NUMERICSERV) != 0) {
304 switch (ai->ai_family) {
306 if (strcmp(strport, "54321") != 0) {
310 if (strcmp(straddr, "0.0.0.0") != 0) {
314 if (strcmp(straddr, "127.0.0.1") != 0) {
321 if (strcmp(strport, "54321") != 0) {
325 if (strcmp(straddr, "::") != 0) {
329 if (strcmp(straddr, "::1") != 0) {
346 /* another family support? */
352 /* supported family should be 2, unsupported family should be 0 */
353 if (!(inet4 == 0 || inet4 == 2))
355 if (!(inet6 == 0 || inet6 == 2))
368 td_cv_buggygetaddrinfo=no,
369 td_cv_buggygetaddrinfo=yes,
370 td_cv_buggygetaddrinfo=yes)])
371 if test "$td_cv_buggygetaddrinfo" = no; then
377 if test "$td_cv_buggygetaddrinfo" = "yes"; then
379 # XXX - it doesn't appear that "ipv6type" can ever be
380 # set to "linux". Should this be testing for
381 # "linux-glibc", or for that *or* "linux-libinet6"?
382 # If the latter, note that "linux-libinet6" is also
383 # the type given to some non-Linux OSes.
385 if test "$ipv6type" != "linux"; then
386 echo 'Fatal: You must get working getaddrinfo() function.'
387 echo ' or you can specify "--disable-ipv6"'.
390 echo 'Warning: getaddrinfo() implementation on your system seems be buggy.'
391 echo ' Better upgrade your system library to newest version'
392 echo ' of GNU C library (aka glibc).'
396 AC_REPLACE_FUNCS(getaddrinfo getnameinfo)
399 AC_CACHE_CHECK([for dnet_htoa declaration in netdnet/dnetdb.h],
400 [td_cv_decl_netdnet_dnetdb_h_dnet_htoa],
401 [AC_EGREP_HEADER(dnet_htoa, netdnet/dnetdb.h,
402 td_cv_decl_netdnet_dnetdb_h_dnet_htoa=yes,
403 td_cv_decl_netdnet_dnetdb_h_dnet_htoa=no)])
404 if test "$td_cv_decl_netdnet_dnetdb_h_dnet_htoa" = yes; then
405 AC_DEFINE(HAVE_NETDNET_DNETDB_H_DNET_HTOA)
409 dnl check sizeof basic types.
410 dnl They're very likely to be wrong for cross-compiling.
411 AC_CHECK_SIZEOF(char, 1)
412 AC_CHECK_SIZEOF(short, 2)
413 AC_CHECK_SIZEOF(int, 4)
414 AC_CHECK_SIZEOF(long, 4)
417 dnl Checks for u_intXX_t
418 dnl AC_CHECK_BITTYPES(ac_cv_bittypes)
419 dnl if test "$ac_cv_bittypes" = no; then
420 dnl missing_includes=yes
424 dnl Checks for addrinfo structure
425 AC_STRUCT_ADDRINFO(ac_cv_addrinfo)
426 if test "$ac_cv_addrinfo" = no; then
431 dnl Checks for NI_MAXSERV
432 AC_NI_MAXSERV(ac_cv_maxserv)
433 if test "$ac_cv_maxserv" = no; then
438 dnl Checks for NI_NAMEREQD
439 AC_NI_NAMEREQD(ac_cv_namereqd)
440 if test "$ac_cv_namereqd" = no; then
445 dnl Checks for sockaddr_storage structure
446 AC_STRUCT_SA_STORAGE(ac_cv_sa_storage)
447 if test "$ac_cv_sa_storage" = no; then
452 dnl Checks for IN[6]ADDRSZ
453 AC_CHECK_ADDRSZ(ac_cv_addrsz)
454 if test "$ac_cv_addrsz" = no; then
459 dnl Checks for RES_USE_INET6
460 AC_CHECK_RES_USE_INET6(ac_cv_res_inet6)
461 if test "$ac_cv_res_inet6" = no; then
466 dnl Checks for res_state_ext structure
467 AC_STRUCT_RES_STATE_EXT(ac_cv_res_state_ext)
468 if test "$ac_cv_res_state_ext" = no; then
473 dnl Checks if res_state structure has nsort member.
474 AC_STRUCT_RES_STATE(ac_cv_res_state)
477 dnl set additional include path if necessary
478 if test "$missing_includes" = "yes"; then
479 CPPFLAGS="$CPPFLAGS -I\$(srcdir)/missing"
480 V_INCLS="$V_INCLS -I\$(srcdir)/missing"
484 AC_REPLACE_FUNCS(vfprintf strcasecmp strlcat strlcpy strdup strsep)
485 AC_CHECK_FUNCS(strftime)
486 AC_CHECK_FUNCS(ether_ntohost, [
487 AC_CACHE_CHECK(for buggy ether_ntohost, ac_cv_buggy_ether_ntohost, [
490 #include <sys/types.h>
491 #include <sys/param.h>
492 #include <sys/socket.h>
495 main(int argc, char **argv)
497 u_char ea[6] = { 0xff, 0xff, 0xff, 0xff, 0xff };
498 char name[MAXHOSTNAMELEN];
500 ether_ntohost(name, (struct ether_addr *)ea);
503 ], [ac_cv_buggy_ether_ntohost=no],
504 [ac_cv_buggy_ether_ntohost=yes],
505 [ac_cv_buggy_ether_ntohost="not while cross-compiling"])])
506 if test "$ac_cv_buggy_ether_ntohost" = "no"; then
507 AC_DEFINE(USE_ETHER_NTOHOST)
510 AC_CHECK_FUNCS(setlinebuf)
513 AC_CHECK_FUNCS(vsnprintf snprintf,,
515 if test $needsnprintf = yes; then
516 AC_LIBOBJ(snprintf.o)
521 AC_SEARCH_LIBS(dnet_htoa, dnet, AC_DEFINE(HAVE_DNET_HTOA))
523 AC_CHECK_LIB(rpc, main) dnl It's unclear why we might need -lrpc
525 dnl HP/UX may need -lnsl for getrpcbynumber.
526 AC_SEARCH_LIBS(getrpcbynumber, nsl)
528 dnl AC_CHECK_LIB(z, uncompress)
529 dnl AC_CHECK_HEADERS(zlib.h)
531 AC_LBL_LIBPCAP(V_PCAPDEP, V_INCLS)
534 # Check for these after AC_LBL_LIBPCAP, so we link with the appropriate
535 # libraries (e.g., "-lsocket -lnsl" on Solaris).
537 # We don't use AC_REPLACE_FUNCS because that uses AC_CHECK_FUNCS which
538 # use AC_CHECK_FUNC which doesn't let us specify the right #includes
539 # to make this work on BSD/OS 4.x. BSD/OS 4.x ships with the BIND8
540 # resolver, and the way it defines inet_{ntop,pton} is rather strange;
541 # it does not ship with a libc symbol "inet_ntop()", it ships with
542 # "_inet_ntop()", and has a #define macro in one of the system headers
545 dnl AC_TRY_COMPILE(inet_ntop inet_pton inet_aton)
546 AC_MSG_CHECKING(for inet_ntop)
547 AC_TRY_LINK([#include <sys/types.h>
548 #include <sys/socket.h>
549 #include <netinet/in.h>
550 #include <arpa/inet.h>], [char src[4], dst[128];
551 inet_ntop(AF_INET, src, dst, sizeof(dst));],
552 [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
553 AC_LIBOBJ(inet_ntop.o)])
554 AC_MSG_CHECKING(for inet_pton)
555 AC_TRY_LINK([#include <sys/types.h>
556 #include <sys/socket.h>
557 #include <netinet/in.h>
558 #include <arpa/inet.h>], [char src[128], dst[4];
559 inet_pton(AF_INET, src, dst);],
560 [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
561 AC_LIBOBJ(inet_pton.o)])
562 AC_MSG_CHECKING(for inet_aton)
563 AC_TRY_LINK([#include <sys/types.h>
564 #include <netinet/in.h>
565 #include <arpa/inet.h>], [char src[128];
567 inet_aton(src, &dst);],
568 [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
569 AC_LIBOBJ(inet_aton.o)])
571 dnl portability macros for getaddrinfo/getnameinfo
574 AC_CHECK_SA_LEN(ac_cv_sockaddr_has_sa_len)
575 if test "$ac_cv_sockaddr_has_sa_len" = no; then
579 AC_CHECK_FUNCS(pcap_findalldevs pcap_dump_flush pcap_lib_version)
580 if test $ac_cv_func_pcap_findalldevs = "yes" ; then
581 dnl Check for MacOS X, which may ship pcap.h from 0.6 but libpcap may
582 dnl be 0.8; this means that lib has pcap_findalldevs but header doesn't
584 AC_CHECK_TYPES(pcap_if_t, , , [#include <pcap.h>])
586 if test $ac_cv_func_pcap_lib_version = "no" ; then
587 AC_MSG_CHECKING(whether pcap_version is defined by libpcap)
591 return_pcap_version(void)
593 extern char pcap_version[];
598 ac_lbl_cv_pcap_version_defined=yes,
599 ac_lbl_cv_pcap_version_defined=no)
600 if test "$ac_lbl_cv_pcap_version_defined" = yes ; then
602 AC_DEFINE(HAVE_PCAP_VERSION)
607 AC_MSG_CHECKING(whether pcap_debug is defined by libpcap)
611 return_pcap_debug(void)
613 extern int pcap_debug;
618 ac_lbl_cv_pcap_debug_defined=yes,
619 ac_lbl_cv_pcap_debug_defined=no)
620 if test "$ac_lbl_cv_pcap_debug_defined" = yes ; then
622 AC_DEFINE(HAVE_PCAP_DEBUG)
626 # OK, what about "yydebug"?
628 AC_MSG_CHECKING(whether yydebug is defined by libpcap)
639 ac_lbl_cv_yydebug_defined=yes,
640 ac_lbl_cv_yydebug_defined=no)
641 if test "$ac_lbl_cv_yydebug_defined" = yes ; then
643 AC_DEFINE(HAVE_YYDEBUG)
648 AC_REPLACE_FUNCS(bpf_dump) dnl moved to libpcap in 0.6
651 if test -f /etc/group -a ! -z "`grep '^wheel:' /etc/group`" ; then
657 dnl Workaround to enable certain features
674 if test -f /dev/bpf0 ; then
678 AC_LBL_CHECK_TYPE(int8_t, signed char)
679 AC_LBL_CHECK_TYPE(u_int8_t, u_char)
680 AC_LBL_CHECK_TYPE(int16_t, short)
681 AC_LBL_CHECK_TYPE(u_int16_t, u_short)
682 AC_LBL_CHECK_TYPE(int32_t, int)
683 AC_LBL_CHECK_TYPE(u_int32_t, u_int)
685 AC_LBL_DEVEL(V_CCOPT)
687 AC_LBL_SOCKADDR_SA_LEN
689 AC_LBL_UNALIGNED_ACCESS
693 AC_ARG_WITH(crypto, [ --without-crypto disable crypto support],
695 AC_MSG_CHECKING(for SSLeay)
698 for dir in /usr/${host_alias} /usr /usr/local /usr/local/ssl /usr/pkg; do
700 # XXX - is there a better way to check if a given library is
701 # in a given directory than checking each of the possible
702 # shared library suffixes?
704 # Are there any other suffixes we need to look for? Do we have to
705 # worry about ".so.{version}"?
707 # Or should we just look for "libcrypto.*"?
709 if test -d $dir/lib -a \( -f $dir/lib/libcrypto.a -o \
710 -f $dir/lib/libcrypto.so -o \
711 -f $dir/lib/libcrypto.sl -o \
712 -f $dir/lib/libcrypto.dylib \); then
713 ac_cv_ssleay_path=$dir
715 if test -d $dir/include/openssl -a -f $dir/include/openssl/des.h; then
716 incdir="-I$dir/include"
718 if test "$ac_cv_ssleay_path" != "no" -a "$incdir" != "no"; then
725 AC_MSG_RESULT($ac_cv_ssleay_path)
726 if test "$ac_cv_ssleay_path" != no; then
727 V_INCLS="$V_INCLS $incdir"
728 LDFLAGS="-L$dir/lib $LDFLAGS"
729 if test -f $ac_cv_ssleay_path/lib/libRSAglue.a; then
730 LIBS="$LIBS -lRSAglue"
732 if test -f $ac_cv_ssleay_path/lib/librsaref.a; then
733 LIBS="$LIBS -lrsaref"
735 AC_CHECK_LIB(crypto, des_cbc_encrypt)
737 CPPFLAGS="$CPPFLAGS $V_INCLS"
738 AC_CHECK_HEADERS(openssl/evp.h)
751 AC_CONFIG_HEADER(config.h)
753 AC_OUTPUT_COMMANDS([if test -f .devel; then
754 echo timestamp > stamp-h
755 cat Makefile-devel-adds >> Makefile