1 dnl @(#) $Header: /tcpdump/master/tcpdump/configure.in,v 1.136 2001-04-27 02:33:43 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.136 $)
15 AC_LBL_C_INIT(V_CCOPT, V_INCLS)
19 AC_CHECK_HEADERS(fcntl.h rpc/rpcent.h netinet/if_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 CFLAGS="$CFLAGS -Dss_family=__ss_family -Dss_len=__ss_len"
91 AC_MSG_CHECKING([whether to enable ipv6])
93 [ --enable-ipv6 enable ipv6 (with ipv4) support
94 --disable-ipv6 disable ipv6 support],
95 [ case "$enableval" in
96 yes) AC_MSG_RESULT(yes)
97 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"
107 AC_TRY_RUN([ /* AF_INET6 available check */
108 #include <sys/types.h>
109 #include <sys/socket.h>
112 if (socket(AF_INET6, SOCK_STREAM, 0) < 0)
119 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"
132 if test "$ipv6" = "yes"; then
133 AC_MSG_CHECKING([ipv6 stack type])
134 for i in inria kame linux-glibc linux-libinet6 toshiba v6d zeta; do
137 dnl http://www.kame.net/
138 AC_EGREP_CPP(yes, [dnl
139 #include <netinet/in.h>
140 #ifdef IPV6_INRIA_VERSION
144 CFLAGS="-DINET6 $CFLAGS"])
147 dnl http://www.kame.net/
148 AC_EGREP_CPP(yes, [dnl
149 #include <netinet/in.h>
155 ipv6libdir=/usr/local/v6/lib;
157 CFLAGS="-DINET6 $CFLAGS"])
160 dnl http://www.v6.linux.or.jp/
161 AC_EGREP_CPP(yes, [dnl
162 #include <features.h>
163 #if defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
167 CFLAGS="-DINET6 $CFLAGS"])
170 dnl http://www.v6.linux.or.jp/
171 if test -d /usr/inet6 -o -f /usr/include/netinet/ip6.h; then
174 ipv6libdir=/usr/inet6/lib
176 CFLAGS="-DINET6 -I/usr/inet6/include $CFLAGS"
180 AC_EGREP_CPP(yes, [dnl
181 #include <sys/param.h>
182 #ifdef _TOSHIBA_INET6
187 ipv6libdir=/usr/local/v6/lib;
188 CFLAGS="-DINET6 $CFLAGS"])
191 AC_EGREP_CPP(yes, [dnl
192 #include </usr/local/v6/include/sys/v6config.h>
198 ipv6libdir=/usr/local/v6/lib;
199 CFLAGS="-I/usr/local/v6/include $CFLAGS"])
202 AC_EGREP_CPP(yes, [dnl
203 #include <sys/param.h>
204 #ifdef _ZETA_MINAMI_INET6
209 ipv6libdir=/usr/local/v6/lib;
210 CFLAGS="-DINET6 $CFLAGS"])
213 if test "$ipv6type" != "unknown"; then
217 AC_MSG_RESULT($ipv6type)
220 if test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then
221 if test -d $ipv6libdir -a -f $ipv6libdir/lib$ipv6lib.a; then
222 LIBS="-L$ipv6libdir -l$ipv6lib $LIBS"
223 echo "You have $ipv6lib library, using it"
225 if test "$ipv6trylibc" = "yes"; then
226 echo "You do not have $ipv6lib library, using libc"
228 echo 'Fatal: no $ipv6lib library found. cannot continue.'
229 echo "You need to fetch lib$ipv6lib.a from appropriate"
230 echo 'ipv6 kit and compile beforehand.'
237 if test "$ipv6" = "yes"; then
238 AC_SEARCH_LIBS(getaddrinfo, socket, [dnl
239 AC_MSG_CHECKING(getaddrinfo bug)
241 #include <sys/types.h>
244 #include <sys/socket.h>
245 #include <netinet/in.h>
249 int passive, gaierr, inet4 = 0, inet6 = 0;
250 struct addrinfo hints, *ai, *aitop;
251 char straddr[INET6_ADDRSTRLEN], strport[16];
253 for (passive = 0; passive <= 1; passive++) {
254 memset(&hints, 0, sizeof(hints));
255 hints.ai_family = AF_UNSPEC;
256 hints.ai_flags = passive ? AI_PASSIVE : 0;
257 hints.ai_socktype = SOCK_STREAM;
258 if ((gaierr = getaddrinfo(NULL, "54321", &hints, &aitop)) != 0) {
259 (void)gai_strerror(gaierr);
262 for (ai = aitop; ai; ai = ai->ai_next) {
263 if (ai->ai_addr == NULL ||
264 ai->ai_addrlen == 0 ||
265 getnameinfo(ai->ai_addr, ai->ai_addrlen,
266 straddr, sizeof(straddr), strport, sizeof(strport),
267 NI_NUMERICHOST|NI_NUMERICSERV) != 0) {
270 switch (ai->ai_family) {
272 if (strcmp(strport, "54321") != 0) {
276 if (strcmp(straddr, "0.0.0.0") != 0) {
280 if (strcmp(straddr, "127.0.0.1") != 0) {
287 if (strcmp(strport, "54321") != 0) {
291 if (strcmp(straddr, "::") != 0) {
295 if (strcmp(straddr, "::1") != 0) {
312 /* another family support? */
318 /* supported family should be 2, unsupported family should be 0 */
319 if (!(inet4 == 0 || inet4 == 2))
321 if (!(inet6 == 0 || inet6 == 2))
337 buggygetaddrinfo=yes,
339 buggygetaddrinfo=yes)], [buggygetaddrinfo=yes])
341 if test "$buggygetaddrinfo" = "yes"; then
342 if test "$ipv6type" != "linux"; then
343 echo 'Fatal: You must get working getaddrinfo() function.'
344 echo ' or you can specify "--disable-ipv6"'.
347 echo 'Warning: getaddrinfo() implementation on your system seems be buggy.'
348 echo ' Better upgreade your system library to newest version'
349 echo ' of GNU C library (aka glibc).'
352 AC_REPLACE_FUNCS(getaddrinfo getnameinfo)
354 dnl AC_TRY_COMPILE(inet_ntop inet_pton inet_aton)
355 AC_MSG_CHECKING(for inet_ntop)
356 AC_TRY_COMPILE([#include <sys/types.h>
357 #include <sys/socket.h>
358 #include <netinet/in.h>
359 #include <arpa/inet.h>], [char src[4], dst[128];
360 inet_ntop(AF_INET, src, dst, sizeof(dst));],
361 [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
362 AC_REPLACE_FUNCS(inet_ntop)])
363 AC_MSG_CHECKING(for inet_pton)
364 AC_TRY_COMPILE([#include <sys/types.h>
365 #include <sys/socket.h>
366 #include <netinet/in.h>
367 #include <arpa/inet.h>], [char src[128], dst[4];
368 inet_pton(AF_INET, src, dst);],
369 [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
370 AC_REPLACE_FUNCS(inet_pton)])
371 AC_MSG_CHECKING(for inet_aton)
372 AC_TRY_COMPILE([#include <sys/types.h>
373 #include <netinet/in.h>
374 #include <arpa/inet.h>], [char src[128];
376 inet_aton(src, &dst);],
377 [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
378 AC_REPLACE_FUNCS(inet_aton)])
380 dnl portability macros for getaddrinfo/getnameinfo
383 AC_CHECK_SA_LEN(ac_cv_sockaddr_has_sa_len)
384 if test "$ac_cv_sockaddr_has_sa_len" = no; then
389 dnl check sizeof basic types.
390 dnl They're very likely to be wrong for cross-compiling.
391 AC_CHECK_SIZEOF(char, 1)
392 AC_CHECK_SIZEOF(short, 2)
393 AC_CHECK_SIZEOF(int, 4)
394 AC_CHECK_SIZEOF(long, 4)
397 dnl Checks for u_intXX_t
398 dnl AC_CHECK_BITTYPES(ac_cv_bittypes)
399 dnl if test "$ac_cv_bittypes" = no; then
400 dnl missing_includes=yes
404 dnl Checks for addrinfo structure
405 AC_STRUCT_ADDRINFO(ac_cv_addrinfo)
406 if test "$ac_cv_addrinfo" = no; then
411 dnl Checks for NI_MAXSERV
412 AC_NI_MAXSERV(ac_cv_maxserv)
413 if test "$ac_cv_maxserv" = no; then
418 dnl Checks for NI_NAMEREQD
419 AC_NI_NAMEREQD(ac_cv_namereqd)
420 if test "$ac_cv_namereqd" = no; then
425 dnl Checks for sockaddr_storage structure
426 AC_STRUCT_SA_STORAGE(ac_cv_sa_storage)
427 if test "$ac_cv_sa_storage" = no; then
432 dnl Checks for IN[6]ADDRSZ
433 AC_CHECK_ADDRSZ(ac_cv_addrsz)
434 if test "$ac_cv_addrsz" = no; then
439 dnl Checks for RES_USE_INET6
440 AC_CHECK_RES_USE_INET6(ac_cv_res_inet6)
441 if test "$ac_cv_res_inet6" = no; then
446 dnl Checks for res_state_ext structure
447 AC_STRUCT_RES_STATE_EXT(ac_cv_res_state_ext)
448 if test "$ac_cv_res_state_ext" = no; then
453 dnl Checks if res_state structure has nsort member.
454 AC_STRUCT_RES_STATE(ac_cv_res_state)
457 dnl set additional include path if necessary
458 if test "$missing_includes" = "yes"; then
459 CPPFLAGS="$CPPFLAGS -I\$(srcdir)/missing"
460 V_INCLS="$V_INCLS -I\$(srcdir)/missing"
464 AC_REPLACE_FUNCS(vfprintf strcasecmp strlcat strlcpy strdup)
465 AC_CHECK_FUNCS(ether_ntohost, [
466 AC_CACHE_CHECK(for buggy ether_ntohost, ac_cv_buggy_ether_ntohost, [
469 #include <sys/types.h>
470 #include <sys/param.h>
471 #include <sys/socket.h>
472 #include <net/ethernet.h>
475 main(int argc, char **argv)
477 u_char ea[6] = { 0xff, 0xff, 0xff, 0xff, 0xff };
478 char name[MAXHOSTNAMELEN];
480 ether_ntohost(name, (struct ether_addr *)ea);
483 ], [ac_cv_buggy_ether_ntohost=no],
484 [ac_cv_buggy_ether_ntohost=yes],
485 [ac_cv_buggy_ether_ntohost=not while cross-compiling])])
486 if test "$ac_cv_buggy_ether_ntohost" = "no"; then
487 AC_DEFINE(USE_ETHER_NTOHOST)
490 AC_CHECK_FUNCS(setlinebuf)
493 AC_CHECK_FUNCS(getipnodebyname getipnodebyaddr freeaddrinfo,
494 [], [usegetipnodeby=no])
495 if test $usegetipnodeby = yes; then
496 AC_DEFINE(USE_GETIPNODEBY)
500 AC_CHECK_FUNCS(vsnprintf snprintf,,
502 if test $needsnprintf = yes; then
503 LIBOBJS="$LIBOBJS snprintf.o"
506 dnl The following generates a warning from autoconf...
507 errprint(__file__:__line__: please ignore the next warning:
511 AC_CHECK_LIB(dnet, main)
512 AC_CHECK_LIB(rpc, main)
513 AC_CHECK_LIB(nsl, getrpcbynumber)
514 dnl AC_CHECK_LIB(z, uncompress)
515 dnl AC_CHECK_HEADERS(zlib.h)
519 AC_LBL_LIBPCAP(V_PCAPDEP, V_INCLS)
521 AC_REPLACE_FUNCS(bpf_dump) dnl moved to libpcap in 0.6
524 if test -f /etc/group -a ! -z "`grep '^wheel:' /etc/group`" ; then
530 dnl Workaround to enable certain features
547 if test -f /dev/bpf0 ; then
551 AC_LBL_CHECK_TYPE(u_int8_t, u_char)
552 AC_LBL_CHECK_TYPE(int16_t, short)
553 AC_LBL_CHECK_TYPE(u_int16_t, u_short)
554 AC_LBL_CHECK_TYPE(int32_t, int)
555 AC_LBL_CHECK_TYPE(u_int32_t, u_int)
557 AC_LBL_DEVEL(V_CCOPT)
559 AC_LBL_SOCKADDR_SA_LEN
561 AC_LBL_UNALIGNED_ACCESS
565 AC_ARG_WITH(crypto, [ --without-crypto disable crypto support],
567 AC_MSG_CHECKING(for SSLeay)
570 for dir in /usr /usr/local /usr/local/ssl /usr/pkg; do
571 if test -d $dir/lib -a -f $dir/lib/libcrypto.a; then
572 ac_cv_ssleay_path=$dir
574 if test -d $dir/include/openssl -a -f $dir/include/openssl/des.h; then
575 incdir="-I$dir/include"
577 if test "$ac_cv_ssleay_path" != "no" -a "$incdir" != "no"; then
584 AC_MSG_RESULT($ac_cv_ssleay_path)
585 if test "$ac_cv_ssleay_path" != no; then
586 V_INCLS="$V_INCLS $incdir"
587 LDFLAGS="-L$dir/lib $LDFLAGS"
588 if test -f $ac_cv_ssleay_path/lib/libRSAglue.a; then
589 LIBS="$LIBS -lRSAglue"
591 if test -f $ac_cv_ssleay_path/lib/librsaref.a; then
592 LIBS="$LIBS -lrsaref"
594 AC_CHECK_LIB(crypto, des_cbc_encrypt)
596 bak_CPPFLAGS=$CPPFLAGS
597 CPPFLAGS="$CPPFLAGS $V_INCLS"
598 AC_CHECK_HEADERS(cast.h)
600 if test "$ac_cv_header_cast_h" = "yes"; then
601 AC_MSG_CHECKING(for buggy CAST128)
607 unsigned char key[] = {0x01,0x23,0x45,0x67,0x12};
608 unsigned char in[] = {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF};
609 unsigned char out[sizeof(in)];
610 unsigned char ok[] = {0x7A,0xC8,0x16,0xD1,0x6E,0x9B,0x30,0x2E};
612 CAST_set_key(&ks, sizeof(key), key);
613 CAST_ecb_encrypt(in, out, &ks, CAST_ENCRYPT);
614 if (memcmp(out, ok, sizeof(ok)) != 0)
621 [buggy_cast128="cross-compiling, assume yes"])
622 AC_MSG_RESULT($buggy_cast128)
623 if test "$buggy_cast128" != no; then
624 echo "NOTE: SSLeay 0.9.0b has a bug in CAST128 en/decoding routine."
625 echo "disabling CAST128 support."
626 AC_DEFINE(HAVE_BUGGY_CAST128)
630 CPPFLAGS=$bak_CPPFLAGS
633 AC_CHECK_HEADERS(rc5.h)
643 AC_CONFIG_HEADER(config.h)
645 AC_OUTPUT_COMMANDS([if test -f .devel; then
646 echo timestamp > stamp-h
647 cat Makefile-devel-adds >> Makefile