1 dnl @(#) $Header: /tcpdump/master/tcpdump/configure.in,v 1.150 2002-06-11 17:15:32 itojun 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.150 $)
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)
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-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-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/
185 if test -d /usr/inet6 -o -f /usr/include/netinet/ip6.h; then
188 ipv6libdir=/usr/inet6/lib
190 CFLAGS="-DINET6 -I/usr/inet6/include $CFLAGS"
194 AC_EGREP_CPP(yes, [dnl
195 #include <sys/param.h>
196 #ifdef _TOSHIBA_INET6
201 ipv6libdir=/usr/local/v6/lib;
202 CFLAGS="-DINET6 $CFLAGS"])
205 AC_EGREP_CPP(yes, [dnl
206 #include </usr/local/v6/include/sys/v6config.h>
212 ipv6libdir=/usr/local/v6/lib;
213 CFLAGS="-I/usr/local/v6/include $CFLAGS"])
216 AC_EGREP_CPP(yes, [dnl
217 #include <sys/param.h>
218 #ifdef _ZETA_MINAMI_INET6
223 ipv6libdir=/usr/local/v6/lib;
224 CFLAGS="-DINET6 $CFLAGS"])
227 if test "$ipv6type" != "unknown"; then
231 AC_MSG_RESULT($ipv6type)
234 if test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then
235 if test -d $ipv6libdir -a -f $ipv6libdir/lib$ipv6lib.a; then
236 LIBS="-L$ipv6libdir -l$ipv6lib $LIBS"
237 echo "You have $ipv6lib library, using it"
239 if test "$ipv6trylibc" = "yes"; then
240 echo "You do not have $ipv6lib library, using libc"
242 echo 'Fatal: no $ipv6lib library found. cannot continue.'
243 echo "You need to fetch lib$ipv6lib.a from appropriate"
244 echo 'ipv6 kit and compile beforehand.'
251 if test "$ipv6" = "yes"; then
252 AC_SEARCH_LIBS(getaddrinfo, socket, [dnl
253 AC_MSG_CHECKING(getaddrinfo bug)
254 AC_CACHE_VAL(td_cv_buggygetaddrinfo, [AC_TRY_RUN([
255 #include <sys/types.h>
258 #include <sys/socket.h>
259 #include <netinet/in.h>
263 int passive, gaierr, inet4 = 0, inet6 = 0;
264 struct addrinfo hints, *ai, *aitop;
265 char straddr[INET6_ADDRSTRLEN], strport[16];
267 for (passive = 0; passive <= 1; passive++) {
268 memset(&hints, 0, sizeof(hints));
269 hints.ai_family = AF_UNSPEC;
270 hints.ai_flags = passive ? AI_PASSIVE : 0;
271 hints.ai_socktype = SOCK_STREAM;
272 if ((gaierr = getaddrinfo(NULL, "54321", &hints, &aitop)) != 0) {
273 (void)gai_strerror(gaierr);
276 for (ai = aitop; ai; ai = ai->ai_next) {
277 if (ai->ai_addr == NULL ||
278 ai->ai_addrlen == 0 ||
279 getnameinfo(ai->ai_addr, ai->ai_addrlen,
280 straddr, sizeof(straddr), strport, sizeof(strport),
281 NI_NUMERICHOST|NI_NUMERICSERV) != 0) {
284 switch (ai->ai_family) {
286 if (strcmp(strport, "54321") != 0) {
290 if (strcmp(straddr, "0.0.0.0") != 0) {
294 if (strcmp(straddr, "127.0.0.1") != 0) {
301 if (strcmp(strport, "54321") != 0) {
305 if (strcmp(straddr, "::") != 0) {
309 if (strcmp(straddr, "::1") != 0) {
326 /* another family support? */
332 /* supported family should be 2, unsupported family should be 0 */
333 if (!(inet4 == 0 || inet4 == 2))
335 if (!(inet6 == 0 || inet6 == 2))
348 td_cv_buggygetaddrinfo=no,
349 td_cv_buggygetaddrinfo=yes,
350 td_cv_buggygetaddrinfo=yes)])
351 if test "$td_cv_buggygetaddrinfo" = no; then
357 if test "$td_cv_buggygetaddrinfo" = "yes"; then
358 if test "$ipv6type" != "linux"; then
359 echo 'Fatal: You must get working getaddrinfo() function.'
360 echo ' or you can specify "--disable-ipv6"'.
363 echo 'Warning: getaddrinfo() implementation on your system seems be buggy.'
364 echo ' Better upgreade your system library to newest version'
365 echo ' of GNU C library (aka glibc).'
369 AC_REPLACE_FUNCS(getaddrinfo getnameinfo)
371 dnl AC_TRY_COMPILE(inet_ntop inet_pton inet_aton)
372 AC_MSG_CHECKING(for inet_ntop)
373 AC_TRY_COMPILE([#include <sys/types.h>
374 #include <sys/socket.h>
375 #include <netinet/in.h>
376 #include <arpa/inet.h>], [char src[4], dst[128];
377 inet_ntop(AF_INET, src, dst, sizeof(dst));],
378 [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
379 AC_REPLACE_FUNCS(inet_ntop)])
380 AC_MSG_CHECKING(for inet_pton)
381 AC_TRY_COMPILE([#include <sys/types.h>
382 #include <sys/socket.h>
383 #include <netinet/in.h>
384 #include <arpa/inet.h>], [char src[128], dst[4];
385 inet_pton(AF_INET, src, dst);],
386 [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
387 AC_REPLACE_FUNCS(inet_pton)])
388 AC_MSG_CHECKING(for inet_aton)
389 AC_TRY_COMPILE([#include <sys/types.h>
390 #include <netinet/in.h>
391 #include <arpa/inet.h>], [char src[128];
393 inet_aton(src, &dst);],
394 [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
395 AC_REPLACE_FUNCS(inet_aton)])
397 dnl portability macros for getaddrinfo/getnameinfo
400 AC_CHECK_SA_LEN(ac_cv_sockaddr_has_sa_len)
401 if test "$ac_cv_sockaddr_has_sa_len" = no; then
405 AC_CACHE_CHECK([for dnet_htoa declaration in netdnet/dnetdb.h],
406 [td_cv_decl_netdnet_dnetdb_h_dnet_htoa],
407 [AC_EGREP_HEADER(dnet_htoa, netdnet/dnetdb.h,
408 td_cv_decl_netdnet_dnetdb_h_dnet_htoa=yes,
409 td_cv_decl_netdnet_dnetdb_h_dnet_htoa=no)])
410 if test "$td_cv_decl_netdnet_dnetdb_h_dnet_htoa" = yes; then
411 AC_DEFINE(HAVE_NETDNET_DNETDB_H_DNET_HTOA)
415 dnl check sizeof basic types.
416 dnl They're very likely to be wrong for cross-compiling.
417 AC_CHECK_SIZEOF(char, 1)
418 AC_CHECK_SIZEOF(short, 2)
419 AC_CHECK_SIZEOF(int, 4)
420 AC_CHECK_SIZEOF(long, 4)
423 dnl Checks for u_intXX_t
424 dnl AC_CHECK_BITTYPES(ac_cv_bittypes)
425 dnl if test "$ac_cv_bittypes" = no; then
426 dnl missing_includes=yes
430 dnl Checks for addrinfo structure
431 AC_STRUCT_ADDRINFO(ac_cv_addrinfo)
432 if test "$ac_cv_addrinfo" = no; then
437 dnl Checks for NI_MAXSERV
438 AC_NI_MAXSERV(ac_cv_maxserv)
439 if test "$ac_cv_maxserv" = no; then
444 dnl Checks for NI_NAMEREQD
445 AC_NI_NAMEREQD(ac_cv_namereqd)
446 if test "$ac_cv_namereqd" = no; then
451 dnl Checks for sockaddr_storage structure
452 AC_STRUCT_SA_STORAGE(ac_cv_sa_storage)
453 if test "$ac_cv_sa_storage" = no; then
458 dnl Checks for IN[6]ADDRSZ
459 AC_CHECK_ADDRSZ(ac_cv_addrsz)
460 if test "$ac_cv_addrsz" = no; then
465 dnl Checks for RES_USE_INET6
466 AC_CHECK_RES_USE_INET6(ac_cv_res_inet6)
467 if test "$ac_cv_res_inet6" = no; then
472 dnl Checks for res_state_ext structure
473 AC_STRUCT_RES_STATE_EXT(ac_cv_res_state_ext)
474 if test "$ac_cv_res_state_ext" = no; then
479 dnl Checks if res_state structure has nsort member.
480 AC_STRUCT_RES_STATE(ac_cv_res_state)
483 dnl set additional include path if necessary
484 if test "$missing_includes" = "yes"; then
485 CPPFLAGS="$CPPFLAGS -I\$(srcdir)/missing"
486 V_INCLS="$V_INCLS -I\$(srcdir)/missing"
490 AC_REPLACE_FUNCS(vfprintf strcasecmp strlcat strlcpy strdup)
491 AC_CHECK_FUNCS(ether_ntohost, [
492 AC_CACHE_CHECK(for buggy ether_ntohost, ac_cv_buggy_ether_ntohost, [
495 #include <sys/types.h>
496 #include <sys/param.h>
497 #include <sys/socket.h>
500 main(int argc, char **argv)
502 u_char ea[6] = { 0xff, 0xff, 0xff, 0xff, 0xff };
503 char name[MAXHOSTNAMELEN];
505 ether_ntohost(name, (struct ether_addr *)ea);
508 ], [ac_cv_buggy_ether_ntohost=no],
509 [ac_cv_buggy_ether_ntohost=yes],
510 [ac_cv_buggy_ether_ntohost="not while cross-compiling"])])
511 if test "$ac_cv_buggy_ether_ntohost" = "no"; then
512 AC_DEFINE(USE_ETHER_NTOHOST)
515 AC_CHECK_FUNCS(setlinebuf)
518 AC_CHECK_FUNCS(vsnprintf snprintf,,
520 if test $needsnprintf = yes; then
521 LIBOBJS="$LIBOBJS snprintf.o"
526 AC_SEARCH_LIBS(dnet_htoa, dnet, AC_DEFINE(HAVE_DNET_HTOA))
528 AC_CHECK_LIB(rpc, main) dnl It's unclear why we might need -lrpc
530 dnl HP/UX may need -lnsl for getrpcbynumber.
531 AC_SEARCH_LIBS(getrpcbynumber, nsl)
533 dnl AC_CHECK_LIB(z, uncompress)
534 dnl AC_CHECK_HEADERS(zlib.h)
536 AC_LBL_LIBPCAP(V_PCAPDEP, V_INCLS)
538 AC_REPLACE_FUNCS(bpf_dump) dnl moved to libpcap in 0.6
541 if test -f /etc/group -a ! -z "`grep '^wheel:' /etc/group`" ; then
547 dnl Workaround to enable certain features
564 if test -f /dev/bpf0 ; then
568 AC_LBL_CHECK_TYPE(u_int8_t, u_char)
569 AC_LBL_CHECK_TYPE(int16_t, short)
570 AC_LBL_CHECK_TYPE(u_int16_t, u_short)
571 AC_LBL_CHECK_TYPE(int32_t, int)
572 AC_LBL_CHECK_TYPE(u_int32_t, u_int)
574 AC_LBL_DEVEL(V_CCOPT)
576 AC_LBL_SOCKADDR_SA_LEN
578 AC_LBL_UNALIGNED_ACCESS
582 AC_ARG_WITH(crypto, [ --without-crypto disable crypto support],
584 AC_MSG_CHECKING(for SSLeay)
587 for dir in /usr/${host_alias} /usr /usr/local /usr/local/ssl /usr/pkg; do
588 if test -d $dir/lib -a -f $dir/lib/libcrypto.a; then
589 ac_cv_ssleay_path=$dir
591 if test -d $dir/include/openssl -a -f $dir/include/openssl/des.h; then
592 incdir="-I$dir/include"
594 if test "$ac_cv_ssleay_path" != "no" -a "$incdir" != "no"; then
601 AC_MSG_RESULT($ac_cv_ssleay_path)
602 if test "$ac_cv_ssleay_path" != no; then
603 V_INCLS="$V_INCLS $incdir"
604 LDFLAGS="-L$dir/lib $LDFLAGS"
605 if test -f $ac_cv_ssleay_path/lib/libRSAglue.a; then
606 LIBS="$LIBS -lRSAglue"
608 if test -f $ac_cv_ssleay_path/lib/librsaref.a; then
609 LIBS="$LIBS -lrsaref"
611 AC_CHECK_LIB(crypto, des_cbc_encrypt)
613 bak_CPPFLAGS=$CPPFLAGS
614 CPPFLAGS="$CPPFLAGS $V_INCLS"
615 AC_CHECK_HEADERS(openssl/cast.h)
617 if test "$ac_cv_header_openssl_cast_h" = "yes"; then
618 AC_MSG_CHECKING(for buggy CAST128)
619 AC_CACHE_VAL(td_cv_buggy_cast128, [AC_TRY_RUN(dnl
621 #include <openssl/cast.h>
624 unsigned char key[] = {0x01,0x23,0x45,0x67,0x12};
625 unsigned char in[] = {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF};
626 unsigned char out[sizeof(in)];
627 unsigned char ok[] = {0x7A,0xC8,0x16,0xD1,0x6E,0x9B,0x30,0x2E};
629 CAST_set_key(&ks, sizeof(key), key);
630 CAST_ecb_encrypt(in, out, &ks, CAST_ENCRYPT);
631 if (memcmp(out, ok, sizeof(ok)) != 0)
636 [td_cv_buggy_cast128=yes],
637 [td_cv_buggy_cast128=no],
638 [td_cv_buggy_cast128="cross-compiling, assume yes"])])
639 AC_MSG_RESULT($td_cv_buggy_cast128)
640 if test "$td_cv_buggy_cast128" != no; then
641 echo "NOTE: SSLeay 0.9.0b has a bug in CAST128 en/decoding routine."
642 echo "disabling CAST128 support."
643 AC_DEFINE(HAVE_BUGGY_CAST128)
647 CPPFLAGS=$bak_CPPFLAGS
650 AC_CHECK_HEADERS(openssl/rc5.h)
660 AC_CONFIG_HEADER(config.h)
662 AC_OUTPUT_COMMANDS([if test -f .devel; then
663 echo timestamp > stamp-h
664 cat Makefile-devel-adds >> Makefile