configure.in

来自「TCPDUMP的C语言源代码,是在数据链路层的应用」· IN 代码 · 共 1,039 行 · 第 1/2 页

IN
1,039
字号
dnl @(#) $Header: /tcpdump/master/tcpdump/configure.in,v 1.196.2.6 2008-09-25 21:50:04 guy Exp $ (LBL)dnldnl Copyright (c) 1994, 1995, 1996, 1997dnl	The Regents of the University of California.  All rights reserved.dnldnl Process this file with autoconf to produce a configure script.dnlAC_REVISION($Revision: 1.196.2.6 $)AC_PREREQ(2.50)AC_INIT(tcpdump.c)AC_CANONICAL_HOSTAC_LBL_C_INIT(V_CCOPT, V_INCLS)AC_LBL_C_INLINEAC_C___ATTRIBUTE__AC_CHECK_HEADERS(fcntl.h rpc/rpcent.h netdnet/dnetdb.h)AC_CHECK_HEADERS(net/pfvar.h, , , [#include <sys/types.h>#include <sys/socket.h>#include <net/if.h>])if test "$ac_cv_header_net_pfvar_h" = yes; then	LOCALSRC="print-pflog.c $LOCALSRC"fiAC_CHECK_HEADERS(netinet/if_ether.h, , , [#include <sys/types.h>#include <sys/socket.h>])if test "$ac_cv_header_netinet_if_ether_h" != yes; then	#	# The simple test didn't work.	# Do we need to include <net/if.h> first?	# Unset ac_cv_header_netinet_if_ether_h so we don't	# treat the previous failure as a cached value and	# suppress the next test.	#	AC_MSG_NOTICE([Rechecking with some additional includes])	unset ac_cv_header_netinet_if_ether_h	AC_CHECK_HEADERS(netinet/if_ether.h, , , [#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>struct mbuf;struct rtentry;#include <net/if.h>])fiAC_HEADER_TIMEcase "$host_os" inlinux*)	AC_MSG_CHECKING(Linux kernel version) 	if test "$cross_compiling" = yes; then 		AC_CACHE_VAL(ac_cv_linux_vers, 		    ac_cv_linux_vers=unknown) 	else 		AC_CACHE_VAL(ac_cv_linux_vers, 		    ac_cv_linux_vers=`uname -r 2>&1 | \ 			sed -n -e '$s/.* //' -e '$s/\..*//p'`) 	fi	AC_MSG_RESULT($ac_cv_linux_vers) 	if test $ac_cv_linux_vers = unknown ; then 		AC_MSG_ERROR(cannot determine linux version when cross-compiling) 	fi	if test $ac_cv_linux_vers -lt 2 ; then		AC_MSG_ERROR(version 2 or higher required; see the INSTALL doc for more info)	fi	;;*)	;;esacAC_CHECK_HEADERS(smi.h)AC_CHECK_LIB(smi, smiInit)if test "$ac_cv_header_smi_h" = yes -a "$ac_cv_lib_smi_smiInit" = yesthenAC_MSG_CHECKING([whether to enable libsmi])        AC_TRY_RUN([ /* libsmi available check */#include <smi.h>main(){  int current, revision, age, n;  const int required = 2;  if (smiInit(""))     exit(1);  if (strcmp(SMI_LIBRARY_VERSION, smi_library_version))    exit(2);  n = sscanf(smi_library_version, "%d:%d:%d", &current, &revision, &age);  if (n != 3)    exit(3);  if (required < current - age || required > current)    exit(4);  exit(0);}],[ AC_MSG_RESULT(yes)  AC_DEFINE(LIBSMI)  libsmi=yes],dnl autoconf documentation says that $? contains the exit value.dnl reality is that it does not.  We leave this in just in casednl autoconf ever comes back to match the documentation.[ case $? in  1) AC_MSG_RESULT(no - smiInit failed) ;;  2) AC_MSG_RESULT(no - header/library version mismatch) ;;  3) AC_MSG_RESULT(no - can't determine library version) ;;  4) AC_MSG_RESULT(no - too old) ;;  *) AC_MSG_RESULT(no) ;;  esac  libsmi=no],[ AC_MSG_RESULT(not when cross-compiling)  libsmi=no])fiAC_MSG_CHECKING([whether to enable the possibly-buggy SMB printer])AC_ARG_ENABLE(smb,[  --enable-smb            enable possibly-buggy SMB printer [default=yes]  --disable-smb           disable possibly-buggy SMB printer],,   enableval=yes)case "$enableval" inyes)	AC_MSG_RESULT(yes)	AC_WARN([The SMB printer may have exploitable buffer overflows!!!])	AC_DEFINE(TCPDUMP_DO_SMB)	LOCALSRC="print-smb.c smbutil.c $LOCALSRC"	;;*)	AC_MSG_RESULT(no)	;;esacAC_ARG_WITH(user, [  --with-user=USERNAME    drop privileges by default to USERNAME])AC_MSG_CHECKING([whether to drop root privileges by default])if test ! -z "$with_user" ; then        AC_DEFINE_UNQUOTED(WITH_USER, "$withval")       AC_MSG_RESULT(to \"$withval\")else       AC_MSG_RESULT(no)fiAC_ARG_WITH(chroot, [  --with-chroot=DIRECTORY when dropping privileges, chroot to DIRECTORY])AC_MSG_CHECKING([whether to chroot])if test ! -z "$with_chroot" ; then        AC_DEFINE_UNQUOTED(WITH_CHROOT, "$withval")       AC_MSG_RESULT(to \"$withval\")else       AC_MSG_RESULT(no)fiAC_MSG_CHECKING([whether to enable ipv6])AC_ARG_ENABLE(ipv6,[  --enable-ipv6           enable ipv6 (with ipv4) support  --disable-ipv6          disable ipv6 support],[ case "$enableval" inyes)   AC_MSG_RESULT(yes)       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"       AC_DEFINE(INET6)       ipv6=yes       ;;*)       AC_MSG_RESULT(no)       ipv6=no       ;;  esac ],  AC_TRY_RUN([ /* AF_INET6 available check */#include <sys/types.h>#include <sys/socket.h>main(){ if (socket(AF_INET6, SOCK_STREAM, 0) < 0)   exit(1); else   exit(0);}],[ AC_MSG_RESULT(yes)  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"  AC_DEFINE(INET6)  ipv6=yes],[ AC_MSG_RESULT(no)  ipv6=no],[ AC_MSG_RESULT(no)  ipv6=no]))ipv6type=unknownipv6lib=noneipv6trylibc=noif test "$ipv6" = "yes"; then	AC_MSG_CHECKING([ipv6 stack type])	for i in inria kame linux-glibc linux-libinet6 toshiba v6d zeta; do		case $i in		inria)			dnl http://www.kame.net/			AC_EGREP_CPP(yes,[#include <netinet/in.h>#ifdef IPV6_INRIA_VERSIONyes#endif],				[ipv6type=$i;				CFLAGS="-DINET6 $CFLAGS"])			;;		kame)			dnl http://www.kame.net/			AC_EGREP_CPP(yes,[#include <netinet/in.h>#ifdef __KAME__yes#endif],				[ipv6type=$i;				ipv6lib=inet6;				ipv6libdir=/usr/local/v6/lib;				ipv6trylibc=yes;				CFLAGS="-DINET6 $CFLAGS"])			;;		linux-glibc)			dnl http://www.v6.linux.or.jp/			AC_EGREP_CPP(yes,[#include <features.h>#if defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1yes#endif],				[ipv6type=$i;				CFLAGS="-DINET6 $CFLAGS"])			;;		linux-libinet6)			dnl http://www.v6.linux.or.jp/			dnl			dnl This also matches Solaris 8 and Tru64 UNIX 5.1,			dnl and possibly other versions of those OSes			dnl			if test -d /usr/inet6 -o -f /usr/include/netinet/ip6.h; then				ipv6type=$i				ipv6lib=inet6				ipv6libdir=/usr/inet6/lib				ipv6trylibc=yes;				CFLAGS="-DINET6 -I/usr/inet6/include $CFLAGS"			fi			;;		toshiba)			AC_EGREP_CPP(yes,[#include <sys/param.h>#ifdef _TOSHIBA_INET6yes#endif],				[ipv6type=$i;				ipv6lib=inet6;				ipv6libdir=/usr/local/v6/lib;				CFLAGS="-DINET6 $CFLAGS"])			;;		v6d)			AC_EGREP_CPP(yes,[#include </usr/local/v6/include/sys/v6config.h>#ifdef __V6D__yes#endif],				[ipv6type=$i;				ipv6lib=v6;				ipv6libdir=/usr/local/v6/lib;				CFLAGS="-I/usr/local/v6/include $CFLAGS"])			;;		zeta)			AC_EGREP_CPP(yes,[#include <sys/param.h>#ifdef _ZETA_MINAMI_INET6yes#endif],				[ipv6type=$i;				ipv6lib=inet6;				ipv6libdir=/usr/local/v6/lib;				CFLAGS="-DINET6 $CFLAGS"])			;;		esac		if test "$ipv6type" != "unknown"; then			break		fi	done	AC_MSG_RESULT($ipv6type)fiif test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then	if test -d $ipv6libdir -a -f $ipv6libdir/lib$ipv6lib.a; then		LIBS="-L$ipv6libdir -l$ipv6lib $LIBS"		echo "You have $ipv6lib library, using it"	else		if test "$ipv6trylibc" = "yes"; then			echo "You do not have $ipv6lib library, using libc"		else			echo 'Fatal: no $ipv6lib library found.  cannot continue.'			echo "You need to fetch lib$ipv6lib.a from appropriate"			echo 'ipv6 kit and compile beforehand.'			exit 1		fi	fifiif test "$ipv6" = "yes"; then	#	# XXX - on Tru64 UNIX 5.1, there is no "getaddrinfo()"	# function in libc; there are "ngetaddrinfo()" and	# "ogetaddrinfo()" functions, and <netdb.h> #defines	# "getaddrinfo" to be either "ngetaddrinfo" or	# "ogetaddrinfo", depending on whether _SOCKADDR_LEN	# or _XOPEN_SOURCE_EXTENDED are defined or not.	#	# So this test doesn't work on Tru64 5.1, and possibly	# on other 5.x releases.  This causes the configure	# script to become confused, and results in libpcap	# being unbuildable.	#	AC_SEARCH_LIBS(getaddrinfo, socket, [dnl	AC_MSG_CHECKING(getaddrinfo bug)	AC_CACHE_VAL(td_cv_buggygetaddrinfo, [AC_TRY_RUN([#include <sys/types.h>#include <netdb.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>main(){  int passive, gaierr, inet4 = 0, inet6 = 0;  struct addrinfo hints, *ai, *aitop;  char straddr[INET6_ADDRSTRLEN], strport[16];  for (passive = 0; passive <= 1; passive++) {    memset(&hints, 0, sizeof(hints));    hints.ai_family = AF_UNSPEC;    hints.ai_flags = passive ? AI_PASSIVE : 0;    hints.ai_socktype = SOCK_STREAM;    hints.ai_protocol = IPPROTO_TCP;    if ((gaierr = getaddrinfo(NULL, "54321", &hints, &aitop)) != 0) {      (void)gai_strerror(gaierr);      goto bad;    }    for (ai = aitop; ai; ai = ai->ai_next) {      if (ai->ai_addr == NULL ||          ai->ai_addrlen == 0 ||          getnameinfo(ai->ai_addr, ai->ai_addrlen,                      straddr, sizeof(straddr), strport, sizeof(strport),                      NI_NUMERICHOST|NI_NUMERICSERV) != 0) {        goto bad;      }      switch (ai->ai_family) {      case AF_INET:        if (strcmp(strport, "54321") != 0) {          goto bad;        }        if (passive) {          if (strcmp(straddr, "0.0.0.0") != 0) {            goto bad;          }        } else {          if (strcmp(straddr, "127.0.0.1") != 0) {            goto bad;          }        }        inet4++;        break;      case AF_INET6:        if (strcmp(strport, "54321") != 0) {          goto bad;        }        if (passive) {          if (strcmp(straddr, "::") != 0) {            goto bad;          }        } else {          if (strcmp(straddr, "::1") != 0) {            goto bad;          }        }        inet6++;        break;      case AF_UNSPEC:        goto bad;        break;#ifdef AF_UNIX      case AF_UNIX:#else#ifdef AF_LOCAL      case AF_LOCAL:#endif#endif      default:        /* another family support? */        break;      }    }  }  /* supported family should be 2, unsupported family should be 0 */  if (!(inet4 == 0 || inet4 == 2))    goto bad;  if (!(inet6 == 0 || inet6 == 2))    goto bad;  if (aitop)    freeaddrinfo(aitop);  exit(0); bad:  if (aitop)    freeaddrinfo(aitop);  exit(1);}],	td_cv_buggygetaddrinfo=no,	td_cv_buggygetaddrinfo=yes,	td_cv_buggygetaddrinfo=yes)])	if test "$td_cv_buggygetaddrinfo" = no; then		AC_MSG_RESULT(good)	else		AC_MSG_RESULT(buggy)	fi	if test "$td_cv_buggygetaddrinfo" = "yes"; then		#		# XXX - it doesn't appear that "ipv6type" can ever be		# set to "linux".  Should this be testing for		# "linux-glibc", or for that *or* "linux-libinet6"?		# If the latter, note that "linux-libinet6" is also		# the type given to some non-Linux OSes.		#		if test "$ipv6type" != "linux"; then			echo 'Fatal: You must get working getaddrinfo() function.'			echo '       or you can specify "--disable-ipv6"'.			exit 1		else			echo 'Warning: getaddrinfo() implementation on your system seems be buggy.'			echo '         Better upgrade your system library to newest version'			echo '         of GNU C library (aka glibc).'		fi	fi	])	AC_REPLACE_FUNCS(getaddrinfo getnameinfo)fiAC_CACHE_CHECK([for dnet_htoa declaration in netdnet/dnetdb.h],[td_cv_decl_netdnet_dnetdb_h_dnet_htoa],[AC_EGREP_HEADER(dnet_htoa, netdnet/dnetdb.h,	td_cv_decl_netdnet_dnetdb_h_dnet_htoa=yes,	td_cv_decl_netdnet_dnetdb_h_dnet_htoa=no)])if test "$td_cv_decl_netdnet_dnetdb_h_dnet_htoa" = yes; then	AC_DEFINE(HAVE_NETDNET_DNETDB_H_DNET_HTOA)fidnldnl check sizeof basic types.dnl They're very likely to be wrong for cross-compiling.AC_CHECK_SIZEOF(char, 1)AC_CHECK_SIZEOF(short, 2)AC_CHECK_SIZEOF(int, 4)AC_CHECK_SIZEOF(long, 4)AC_CHECK_SIZEOF(long long, 8)dnldnl Checks for u_intXX_tdnl AC_CHECK_BITTYPES(ac_cv_bittypes)dnl if test "$ac_cv_bittypes" = no; thendnl 	missing_includes=yesdnl fidnldnl Checks for addrinfo structureAC_STRUCT_ADDRINFO(ac_cv_addrinfo)if test "$ac_cv_addrinfo" = no; then	missing_includes=yesfidnldnl Checks for NI_MAXSERVAC_NI_MAXSERV(ac_cv_maxserv)if test "$ac_cv_maxserv" = no; then	missing_includes=yesfidnldnl Checks for NI_NAMEREQDAC_NI_NAMEREQD(ac_cv_namereqd)if test "$ac_cv_namereqd" = no; then	missing_includes=yesfidnldnl Checks for sockaddr_storage structureAC_STRUCT_SA_STORAGE(ac_cv_sa_storage)if test "$ac_cv_sa_storage" = no; then	missing_includes=yesfidnldnl Checks for IN[6]ADDRSZAC_CHECK_ADDRSZ(ac_cv_addrsz)if test "$ac_cv_addrsz" = no; then	missing_includes=yesfidnldnl Checks for RES_USE_INET6AC_CHECK_RES_USE_INET6(ac_cv_res_inet6)if test "$ac_cv_res_inet6" = no; then	missing_includes=yesfidnldnl Checks for res_state_ext structureAC_STRUCT_RES_STATE_EXT(ac_cv_res_state_ext)if test "$ac_cv_res_state_ext" = no; then	missing_includes=yesfidnldnl Checks if res_state structure has nsort member.AC_STRUCT_RES_STATE(ac_cv_res_state)AC_REPLACE_FUNCS(vfprintf strcasecmp strlcat strlcpy strdup strsep)AC_CHECK_FUNCS(strftime)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?