1 dnl @(#) $Header: /tcpdump/master/tcpdump/configure.in,v 1.159 2002-12-22 00:15:27 guy 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.159 $)
15 AC_LBL_C_INIT(V_CCOPT, V_INCLS)
19 AC_CHECK_HEADERS(fcntl.h rpc/rpcent.h netinet/if_ether.h netdnet/dnetdb.h netinet/ether.h)
25 AC_MSG_CHECKING(Linux kernel version)
26 if test "$cross_compiling" = yes; then
27 AC_CACHE_VAL(ac_cv_linux_vers,
28 ac_cv_linux_vers=unknown)
30 AC_CACHE_VAL(ac_cv_linux_vers,
31 ac_cv_linux_vers=`uname -r 2>&1 | \
32 sed -n -e '$s/.* //' -e '$s/\..*//p'`)
34 AC_MSG_RESULT($ac_cv_linux_vers)
35 if test $ac_cv_linux_vers = unknown ; then
36 AC_MSG_ERROR(cannot determine linux version when cross-compiling)
38 if test $ac_cv_linux_vers -lt 2 ; then
39 AC_MSG_ERROR(version 2 or higher required; see the INSTALL doc for more info)
48 AC_CHECK_HEADERS(smi.h)
49 AC_CHECK_LIB(smi, smiInit)
50 if test "$ac_cv_header_smi_h" = yes -a "$ac_cv_lib_smi_smiInit" = yes
52 AC_MSG_CHECKING([whether to enable libsmi])
53 AC_TRY_RUN([ /* libsmi available check */
57 int current, revision, age, n;
58 const int required = 2;
61 if (strcmp(SMI_LIBRARY_VERSION, smi_library_version))
63 n = sscanf(smi_library_version, "%d:%d:%d", ¤t, &revision, &age);
66 if (required < current - age || required > current)
74 dnl autoconf documentation says that $? contains the exit value.
75 dnl reality is that it does not. We leave this in just in case
76 dnl autoconf ever comes back to match the documentation.
78 1) AC_MSG_RESULT(no - smiInit failed) ;;
79 2) AC_MSG_RESULT(no - header/library version mismatch) ;;
80 3) AC_MSG_RESULT(no - can't determine library version) ;;
81 4) AC_MSG_RESULT(no - too old) ;;
82 *) AC_MSG_RESULT(no) ;;
85 [ AC_MSG_RESULT(not when cross-compiling)
90 AC_MSG_CHECKING([whether to enable the possibly-buggy SMB printer])
92 [ --enable-smb enable possibly-buggy SMB printer [default=yes]
93 --disable-smb disable possibly-buggy SMB printer],,
96 yes) AC_MSG_RESULT(yes)
97 AC_WARN([The SMB printer may have exploitable buffer overflows!!!])
98 AC_DEFINE(TCPDUMP_DO_SMB)
99 LOCALSRC="print-smb.c smbutil.c $LOCALSRC"
105 AC_MSG_CHECKING([whether to enable ipv6])
107 [ --enable-ipv6 enable ipv6 (with ipv4) support
108 --disable-ipv6 disable ipv6 support],
109 [ case "$enableval" in
110 yes) AC_MSG_RESULT(yes)
111 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"
121 AC_TRY_RUN([ /* AF_INET6 available check */
122 #include <sys/types.h>
123 #include <sys/socket.h>
126 if (socket(AF_INET6, SOCK_STREAM, 0) < 0)
133 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"
146 if test "$ipv6" = "yes"; then
147 AC_MSG_CHECKING([ipv6 stack type])
148 for i in inria kame linux-glibc linux-libinet6 toshiba v6d zeta; do
151 dnl http://www.kame.net/
152 AC_EGREP_CPP(yes, [dnl
153 #include <netinet/in.h>
154 #ifdef IPV6_INRIA_VERSION
158 CFLAGS="-DINET6 $CFLAGS"])
161 dnl http://www.kame.net/
162 AC_EGREP_CPP(yes, [dnl
163 #include <netinet/in.h>
169 ipv6libdir=/usr/local/v6/lib;
171 CFLAGS="-DINET6 $CFLAGS"])
174 dnl http://www.v6.linux.or.jp/
175 AC_EGREP_CPP(yes, [dnl
176 #include <features.h>
177 #if defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
181 CFLAGS="-DINET6 $CFLAGS"])
184 dnl http://www.v6.linux.or.jp/
186 dnl This also matches Solaris 8 and Tru64 UNIX 5.1,
187 dnl and possibly other versions of those OSes
189 if test -d /usr/inet6 -o -f /usr/include/netinet/ip6.h; then
192 ipv6libdir=/usr/inet6/lib
194 CFLAGS="-DINET6 -I/usr/inet6/include $CFLAGS"
198 AC_EGREP_CPP(yes, [dnl
199 #include <sys/param.h>
200 #ifdef _TOSHIBA_INET6
205 ipv6libdir=/usr/local/v6/lib;
206 CFLAGS="-DINET6 $CFLAGS"])
209 AC_EGREP_CPP(yes, [dnl
210 #include </usr/local/v6/include/sys/v6config.h>
216 ipv6libdir=/usr/local/v6/lib;
217 CFLAGS="-I/usr/local/v6/include $CFLAGS"])
220 AC_EGREP_CPP(yes, [dnl
221 #include <sys/param.h>
222 #ifdef _ZETA_MINAMI_INET6
227 ipv6libdir=/usr/local/v6/lib;
228 CFLAGS="-DINET6 $CFLAGS"])
231 if test "$ipv6type" != "unknown"; then
235 AC_MSG_RESULT($ipv6type)
238 if test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then
239 if test -d $ipv6libdir -a -f $ipv6libdir/lib$ipv6lib.a; then
240 LIBS="-L$ipv6libdir -l$ipv6lib $LIBS"
241 echo "You have $ipv6lib library, using it"
243 if test "$ipv6trylibc" = "yes"; then
244 echo "You do not have $ipv6lib library, using libc"
246 echo 'Fatal: no $ipv6lib library found. cannot continue.'
247 echo "You need to fetch lib$ipv6lib.a from appropriate"
248 echo 'ipv6 kit and compile beforehand.'
255 if test "$ipv6" = "yes"; then
257 # XXX - on Tru64 UNIX 5.1, there is no "getaddrinfo()"
258 # function in libc; there are "ngetaddrinfo()" and
259 # "ogetaddrinfo()" functions, and <netdb.h> #defines
260 # "getaddrinfo" to be either "ngetaddrinfo" or
261 # "ogetaddrinfo", depending on whether _SOCKADDR_LEN
262 # or _XOPEN_SOURCE_EXTENDED are defined or not.
264 # So this test doesn't work on Tru64 5.1, and possibly
265 # on other 5.x releases. This causes the configure
266 # script to become confused, and results in libpcap
269 AC_SEARCH_LIBS(getaddrinfo, socket, [dnl
270 AC_MSG_CHECKING(getaddrinfo bug)
271 AC_CACHE_VAL(td_cv_buggygetaddrinfo, [AC_TRY_RUN([
272 #include <sys/types.h>
275 #include <sys/socket.h>
276 #include <netinet/in.h>
280 int passive, gaierr, inet4 = 0, inet6 = 0;
281 struct addrinfo hints, *ai, *aitop;
282 char straddr[INET6_ADDRSTRLEN], strport[16];
284 for (passive = 0; passive <= 1; passive++) {
285 memset(&hints, 0, sizeof(hints));
286 hints.ai_family = AF_UNSPEC;
287 hints.ai_flags = passive ? AI_PASSIVE : 0;
288 hints.ai_socktype = SOCK_STREAM;
289 if ((gaierr = getaddrinfo(NULL, "54321", &hints, &aitop)) != 0) {
290 (void)gai_strerror(gaierr);
293 for (ai = aitop; ai; ai = ai->ai_next) {
294 if (ai->ai_addr == NULL ||
295 ai->ai_addrlen == 0 ||
296 getnameinfo(ai->ai_addr, ai->ai_addrlen,
297 straddr, sizeof(straddr), strport, sizeof(strport),
298 NI_NUMERICHOST|NI_NUMERICSERV) != 0) {
301 switch (ai->ai_family) {
303 if (strcmp(strport, "54321") != 0) {
307 if (strcmp(straddr, "0.0.0.0") != 0) {
311 if (strcmp(straddr, "127.0.0.1") != 0) {
318 if (strcmp(strport, "54321") != 0) {
322 if (strcmp(straddr, "::") != 0) {
326 if (strcmp(straddr, "::1") != 0) {
343 /* another family support? */
349 /* supported family should be 2, unsupported family should be 0 */
350 if (!(inet4 == 0 || inet4 == 2))
352 if (!(inet6 == 0 || inet6 == 2))
365 td_cv_buggygetaddrinfo=no,
366 td_cv_buggygetaddrinfo=yes,
367 td_cv_buggygetaddrinfo=yes)])
368 if test "$td_cv_buggygetaddrinfo" = no; then
374 if test "$td_cv_buggygetaddrinfo" = "yes"; then
376 # XXX - it doesn't appear that "ipv6type" can ever be
377 # set to "linux". Should this be testing for
378 # "linux-glibc", or for that *or* "linux-libinet6"?
379 # If the latter, note that "linux-libinet6" is also
380 # the type given to some non-Linux OSes.
382 if test "$ipv6type" != "linux"; then
383 echo 'Fatal: You must get working getaddrinfo() function.'
384 echo ' or you can specify "--disable-ipv6"'.
387 echo 'Warning: getaddrinfo() implementation on your system seems be buggy.'
388 echo ' Better upgrade your system library to newest version'
389 echo ' of GNU C library (aka glibc).'
393 AC_REPLACE_FUNCS(getaddrinfo getnameinfo)
395 dnl AC_TRY_COMPILE(inet_ntop inet_pton inet_aton)
396 AC_MSG_CHECKING(for inet_ntop)
397 AC_TRY_COMPILE([#include <sys/types.h>
398 #include <sys/socket.h>
399 #include <netinet/in.h>
400 #include <arpa/inet.h>], [char src[4], dst[128];
401 inet_ntop(AF_INET, src, dst, sizeof(dst));],
402 [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
403 AC_REPLACE_FUNCS(inet_ntop)])
404 AC_MSG_CHECKING(for inet_pton)
405 AC_TRY_COMPILE([#include <sys/types.h>
406 #include <sys/socket.h>
407 #include <netinet/in.h>
408 #include <arpa/inet.h>], [char src[128], dst[4];
409 inet_pton(AF_INET, src, dst);],
410 [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
411 AC_REPLACE_FUNCS(inet_pton)])
412 AC_MSG_CHECKING(for inet_aton)
413 AC_TRY_COMPILE([#include <sys/types.h>
414 #include <netinet/in.h>
415 #include <arpa/inet.h>], [char src[128];
417 inet_aton(src, &dst);],
418 [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
419 AC_REPLACE_FUNCS(inet_aton)])
421 dnl portability macros for getaddrinfo/getnameinfo
424 AC_CHECK_SA_LEN(ac_cv_sockaddr_has_sa_len)
425 if test "$ac_cv_sockaddr_has_sa_len" = no; then
429 AC_CACHE_CHECK([for dnet_htoa declaration in netdnet/dnetdb.h],
430 [td_cv_decl_netdnet_dnetdb_h_dnet_htoa],
431 [AC_EGREP_HEADER(dnet_htoa, netdnet/dnetdb.h,
432 td_cv_decl_netdnet_dnetdb_h_dnet_htoa=yes,
433 td_cv_decl_netdnet_dnetdb_h_dnet_htoa=no)])
434 if test "$td_cv_decl_netdnet_dnetdb_h_dnet_htoa" = yes; then
435 AC_DEFINE(HAVE_NETDNET_DNETDB_H_DNET_HTOA)
439 dnl check sizeof basic types.
440 dnl They're very likely to be wrong for cross-compiling.
441 AC_CHECK_SIZEOF(char, 1)
442 AC_CHECK_SIZEOF(short, 2)
443 AC_CHECK_SIZEOF(int, 4)
444 AC_CHECK_SIZEOF(long, 4)
447 dnl Checks for u_intXX_t
448 dnl AC_CHECK_BITTYPES(ac_cv_bittypes)
449 dnl if test "$ac_cv_bittypes" = no; then
450 dnl missing_includes=yes
454 dnl Checks for addrinfo structure
455 AC_STRUCT_ADDRINFO(ac_cv_addrinfo)
456 if test "$ac_cv_addrinfo" = no; then
461 dnl Checks for NI_MAXSERV
462 AC_NI_MAXSERV(ac_cv_maxserv)
463 if test "$ac_cv_maxserv" = no; then
468 dnl Checks for NI_NAMEREQD
469 AC_NI_NAMEREQD(ac_cv_namereqd)
470 if test "$ac_cv_namereqd" = no; then
475 dnl Checks for sockaddr_storage structure
476 AC_STRUCT_SA_STORAGE(ac_cv_sa_storage)
477 if test "$ac_cv_sa_storage" = no; then
482 dnl Checks for IN[6]ADDRSZ
483 AC_CHECK_ADDRSZ(ac_cv_addrsz)
484 if test "$ac_cv_addrsz" = no; then
489 dnl Checks for RES_USE_INET6
490 AC_CHECK_RES_USE_INET6(ac_cv_res_inet6)
491 if test "$ac_cv_res_inet6" = no; then
496 dnl Checks for res_state_ext structure
497 AC_STRUCT_RES_STATE_EXT(ac_cv_res_state_ext)
498 if test "$ac_cv_res_state_ext" = no; then
503 dnl Checks if res_state structure has nsort member.
504 AC_STRUCT_RES_STATE(ac_cv_res_state)
507 dnl set additional include path if necessary
508 if test "$missing_includes" = "yes"; then
509 CPPFLAGS="$CPPFLAGS -I\$(srcdir)/missing"
510 V_INCLS="$V_INCLS -I\$(srcdir)/missing"
514 AC_REPLACE_FUNCS(vfprintf strcasecmp strlcat strlcpy strdup)
515 AC_CHECK_FUNCS(ether_ntohost, [
516 AC_CACHE_CHECK(for buggy ether_ntohost, ac_cv_buggy_ether_ntohost, [
519 #include <sys/types.h>
520 #include <sys/param.h>
521 #include <sys/socket.h>
524 main(int argc, char **argv)
526 u_char ea[6] = { 0xff, 0xff, 0xff, 0xff, 0xff };
527 char name[MAXHOSTNAMELEN];
529 ether_ntohost(name, (struct ether_addr *)ea);
532 ], [ac_cv_buggy_ether_ntohost=no],
533 [ac_cv_buggy_ether_ntohost=yes],
534 [ac_cv_buggy_ether_ntohost="not while cross-compiling"])])
535 if test "$ac_cv_buggy_ether_ntohost" = "no"; then
536 AC_DEFINE(USE_ETHER_NTOHOST)
539 AC_CHECK_FUNCS(setlinebuf)
542 AC_CHECK_FUNCS(vsnprintf snprintf,,
544 if test $needsnprintf = yes; then
545 LIBOBJS="$LIBOBJS snprintf.o"
550 AC_SEARCH_LIBS(dnet_htoa, dnet, AC_DEFINE(HAVE_DNET_HTOA))
552 AC_CHECK_LIB(rpc, main) dnl It's unclear why we might need -lrpc
554 dnl HP/UX may need -lnsl for getrpcbynumber.
555 AC_SEARCH_LIBS(getrpcbynumber, nsl)
557 dnl AC_CHECK_LIB(z, uncompress)
558 dnl AC_CHECK_HEADERS(zlib.h)
560 AC_LBL_LIBPCAP(V_PCAPDEP, V_INCLS)
562 AC_CHECK_FUNCS(pcap_findalldevs pcap_dump_flush)
563 AC_MSG_CHECKING(whether pcap_version is defined by libpcap)
567 return_pcap_version(void)
569 extern char pcap_version[];
574 ac_lbl_cv_pcap_version_defined=yes,
575 ac_lbl_cv_pcap_version_defined=no)
576 if test "$ac_lbl_cv_pcap_version_defined" = yes ; then
578 AC_DEFINE(HAVE_PCAP_VERSION)
582 AC_MSG_CHECKING(whether pcap_debug is defined by libpcap)
586 return_pcap_debug(void)
588 extern int pcap_debug;
593 ac_lbl_cv_pcap_debug_defined=yes,
594 ac_lbl_cv_pcap_debug_defined=no)
595 if test "$ac_lbl_cv_pcap_debug_defined" = yes ; then
597 AC_DEFINE(HAVE_PCAP_DEBUG)
601 # OK, what about "yydebug"?
603 AC_MSG_CHECKING(whether yydebug is defined by libpcap)
614 ac_lbl_cv_yydebug_defined=yes,
615 ac_lbl_cv_yydebug_defined=no)
616 if test "$ac_lbl_cv_yydebug_defined" = yes ; then
618 AC_DEFINE(HAVE_YYDEBUG)
623 AC_REPLACE_FUNCS(bpf_dump) dnl moved to libpcap in 0.6
626 if test -f /etc/group -a ! -z "`grep '^wheel:' /etc/group`" ; then
632 dnl Workaround to enable certain features
649 if test -f /dev/bpf0 ; then
653 AC_LBL_CHECK_TYPE(int8_t, signed char)
654 AC_LBL_CHECK_TYPE(u_int8_t, u_char)
655 AC_LBL_CHECK_TYPE(int16_t, short)
656 AC_LBL_CHECK_TYPE(u_int16_t, u_short)
657 AC_LBL_CHECK_TYPE(int32_t, int)
658 AC_LBL_CHECK_TYPE(u_int32_t, u_int)
660 AC_LBL_DEVEL(V_CCOPT)
662 AC_LBL_SOCKADDR_SA_LEN
664 AC_LBL_UNALIGNED_ACCESS
668 AC_ARG_WITH(crypto, [ --without-crypto disable crypto support],
670 AC_MSG_CHECKING(for SSLeay)
673 for dir in /usr/${host_alias} /usr /usr/local /usr/local/ssl /usr/pkg; do
674 if test -d $dir/lib -a -f $dir/lib/libcrypto.a; then
675 ac_cv_ssleay_path=$dir
677 if test -d $dir/include/openssl -a -f $dir/include/openssl/des.h; then
678 incdir="-I$dir/include"
680 if test "$ac_cv_ssleay_path" != "no" -a "$incdir" != "no"; then
687 AC_MSG_RESULT($ac_cv_ssleay_path)
688 if test "$ac_cv_ssleay_path" != no; then
689 V_INCLS="$V_INCLS $incdir"
690 LDFLAGS="-L$dir/lib $LDFLAGS"
691 if test -f $ac_cv_ssleay_path/lib/libRSAglue.a; then
692 LIBS="$LIBS -lRSAglue"
694 if test -f $ac_cv_ssleay_path/lib/librsaref.a; then
695 LIBS="$LIBS -lrsaref"
697 AC_CHECK_LIB(crypto, des_cbc_encrypt)
699 bak_CPPFLAGS=$CPPFLAGS
700 CPPFLAGS="$CPPFLAGS $V_INCLS"
701 AC_CHECK_HEADERS(openssl/cast.h)
703 if test "$ac_cv_header_openssl_cast_h" = "yes"; then
704 AC_MSG_CHECKING(for buggy CAST128)
705 AC_CACHE_VAL(td_cv_buggy_cast128, [AC_TRY_RUN(dnl
707 #include <openssl/cast.h>
710 unsigned char key[] = {0x01,0x23,0x45,0x67,0x12};
711 unsigned char in[] = {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF};
712 unsigned char out[sizeof(in)];
713 unsigned char ok[] = {0x7A,0xC8,0x16,0xD1,0x6E,0x9B,0x30,0x2E};
715 CAST_set_key(&ks, sizeof(key), key);
716 CAST_ecb_encrypt(in, out, &ks, CAST_ENCRYPT);
717 if (memcmp(out, ok, sizeof(ok)) != 0)
722 [td_cv_buggy_cast128=yes],
723 [td_cv_buggy_cast128=no],
724 [td_cv_buggy_cast128="cross-compiling, assume yes"])])
725 AC_MSG_RESULT($td_cv_buggy_cast128)
726 if test "$td_cv_buggy_cast128" != no; then
727 echo "NOTE: SSLeay 0.9.0b has a bug in CAST128 en/decoding routine."
728 echo "disabling CAST128 support."
729 AC_DEFINE(HAVE_BUGGY_CAST128)
733 CPPFLAGS=$bak_CPPFLAGS
736 AC_CHECK_HEADERS(openssl/rc5.h)
746 AC_CONFIG_HEADER(config.h)
748 AC_OUTPUT_COMMANDS([if test -f .devel; then
749 echo timestamp > stamp-h
750 cat Makefile-devel-adds >> Makefile