Home | History | Annotate | Download | only in libpcap
      1 dnl @(#) $Header: /tcpdump/master/libpcap/configure.in,v 1.120.2.13 2007/09/12 19:17:24 guy Exp $ (LBL)
      2 dnl
      3 dnl Copyright (c) 1994, 1995, 1996, 1997
      4 dnl	The Regents of the University of California.  All rights reserved.
      5 dnl
      6 dnl Process this file with autoconf to produce a configure script.
      7 dnl
      8 
      9 AC_REVISION($Revision: 1.120.2.13 $)
     10 AC_PREREQ(2.50)
     11 AC_INIT(pcap.c)
     12 
     13 AC_CANONICAL_SYSTEM
     14 
     15 AC_LBL_C_INIT(V_CCOPT, V_INCLS, V_LIBS)
     16 AC_LBL_C_INLINE
     17 AC_C___ATTRIBUTE__
     18 
     19 AC_LBL_CHECK_TYPE(u_int8_t, u_char)
     20 AC_LBL_CHECK_TYPE(u_int16_t, u_short)
     21 AC_LBL_CHECK_TYPE(u_int32_t, u_int)
     22 
     23 dnl
     24 dnl libpcap doesn't itself use <sys/ioccom.h>; however, the test program
     25 dnl in "AC_LBL_FIXINCLUDES" in "aclocal.m4" uses it, so we have to
     26 dnl test for it and set "HAVE_SYS_IOCCOM_H" if we have it, otherwise
     27 dnl "AC_LBL_FIXINCLUDES" won't work on some platforms such as Solaris.
     28 dnl
     29 AC_CHECK_HEADERS(sys/ioccom.h sys/sockio.h limits.h paths.h)
     30 AC_CHECK_HEADERS(net/pfvar.h, , , [#include <sys/types.h>
     31 #include <sys/socket.h>
     32 #include <net/if.h>])
     33 AC_CHECK_HEADERS(netinet/if_ether.h, , , [#include <sys/types.h>
     34 #include <sys/socket.h>])
     35 if test "$ac_cv_header_netinet_if_ether_h" != yes; then
     36 	#
     37 	# The simple test didn't work.
     38 	# Do we need to include <net/if.h> first?
     39 	# Unset ac_cv_header_netinet_if_ether_h so we don't
     40 	# treat the previous failure as a cached value and
     41 	# suppress the next test.
     42 	#
     43 	AC_MSG_NOTICE([Rechecking with some additional includes])
     44 	unset ac_cv_header_netinet_if_ether_h
     45 	AC_CHECK_HEADERS(netinet/if_ether.h, , , [#include <sys/types.h>
     46 #include <sys/socket.h>
     47 #include <netinet/in.h>
     48 struct mbuf;
     49 struct rtentry;
     50 #include <net/if.h>])
     51 fi
     52 
     53 AC_LBL_FIXINCLUDES
     54 
     55 AC_CHECK_FUNCS(strerror strlcpy)
     56 
     57 needsnprintf=no
     58 AC_CHECK_FUNCS(vsnprintf snprintf,,
     59 	[needsnprintf=yes])
     60 if test $needsnprintf = yes; then
     61 	AC_LIBOBJ(snprintf)
     62 fi
     63 
     64 #
     65 # Do this before checking for ether_hostton(), as it's a
     66 # "gethostbyname() -ish function".
     67 #
     68 AC_LBL_LIBRARY_NET
     69 
     70 #
     71 # You are in a twisty little maze of UN*Xes, all different.
     72 # Some might not have ether_hostton().
     73 # Some might have it, but not declare it in any header file.
     74 # Some might have it, but declare it in <netinet/if_ether.h>.
     75 # Some might have it, but declare it in <netinet/ether.h>
     76 # (And some might have it but document it as something declared in
     77 # <netinet/ethernet.h>, although <netinet/if_ether.h> appears to work.)
     78 #
     79 # Before you is a C compiler.
     80 #
     81 AC_CHECK_FUNCS(ether_hostton)
     82 if test "$ac_cv_func_ether_hostton" = yes; then
     83 	#
     84 	# OK, we have ether_hostton().  Do we have <netinet/if_ether.h>?
     85 	#
     86 	if test "$ac_cv_header_netinet_if_ether_h" = yes; then
     87 		#
     88 		# Yes.  Does it declare ether_hostton()?
     89 		#
     90 		AC_CHECK_DECL(ether_hostton,
     91 		    [
     92 			AC_DEFINE(NETINET_IF_ETHER_H_DECLARES_ETHER_HOSTTON,,
     93 			    [Define to 1 if netinet/if_ether.h declares `ether_hostton'])
     94 		    ],,
     95 		    [
     96 #include <sys/types.h>
     97 #include <sys/socket.h>
     98 #include <netinet/in.h>
     99 #include <arpa/inet.h>
    100 struct mbuf;
    101 struct rtentry;
    102 #include <net/if.h>
    103 #include <netinet/if_ether.h>
    104 		    ])
    105 	fi
    106 	#
    107 	# Did that succeed?
    108 	#
    109 	if test "$ac_cv_have_decl_ether_hostton" != yes; then
    110 		#
    111 		# No, how about <netinet/ether.h>, as on Linux?
    112 		#
    113 		AC_CHECK_HEADERS(netinet/ether.h)
    114 		if test "$ac_cv_header_netinet_ether_h" = yes; then
    115 			#
    116 			# We have it - does it declare ether_hostton()?
    117 			# Unset ac_cv_have_decl_ether_hostton so we don't
    118 			# treat the previous failure as a cached value and
    119 			# suppress the next test.
    120 			#
    121 			unset ac_cv_have_decl_ether_hostton
    122 			AC_CHECK_DECL(ether_hostton,
    123 			    [
    124 				AC_DEFINE(NETINET_ETHER_H_DECLARES_ETHER_HOSTTON,,
    125 				    [Define to 1 if netinet/ether.h declares `ether_hostton'])
    126 			    ],,
    127 			    [
    128 #include <netinet/ether.h>
    129 			    ])
    130 		fi
    131 	fi
    132 	#
    133 	# Is ether_hostton() declared?
    134 	#
    135 	if test "$ac_cv_have_decl_ether_hostton" != yes; then
    136 		#
    137 		# No, we'll have to declare it ourselves.
    138 		# Do we have "struct ether_addr"?
    139 		#
    140 		AC_CHECK_TYPES(struct ether_addr,,,
    141 		    [
    142 #include <sys/types.h>
    143 #include <sys/socket.h>
    144 #include <netinet/in.h>
    145 #include <arpa/inet.h>
    146 struct mbuf;
    147 struct rtentry;
    148 #include <net/if.h>
    149 #include <netinet/if_ether.h>
    150 		    ])
    151 		AC_DEFINE(HAVE_DECL_ETHER_HOSTTON, 0,
    152 		    [Define to 1 if you have the declaration of `ether_hostton', and to 0 if you
    153 don't.])
    154 	else
    155 		AC_DEFINE(HAVE_DECL_ETHER_HOSTTON, 1,
    156 		    [Define to 1 if you have the declaration of `ether_hostton', and to 0 if you
    157 don't.])
    158 	fi
    159 fi
    160 
    161 dnl to pacify those who hate protochain insn
    162 AC_MSG_CHECKING(if --disable-protochain option is specified)
    163 AC_ARG_ENABLE(protochain, [  --disable-protochain    disable \"protochain\" insn])
    164 case "x$enable_protochain" in
    165 xyes)	enable_protochain=enabled	;;
    166 xno)	enable_protochain=disabled	;;
    167 x)	enable_protochain=enabled	;;
    168 esac
    169 
    170 if test "$enable_protochain" = "disabled"; then
    171 	AC_DEFINE(NO_PROTOCHAIN,1,[do not use protochain])
    172 fi
    173 AC_MSG_RESULT(${enable_protochain})
    174 
    175 dnl
    176 dnl Not all versions of test support -c (character special) but it's a
    177 dnl better way of testing since the device might be protected. So we
    178 dnl check in our normal order using -r and then check the for the /dev
    179 dnl guys again using -c.
    180 dnl
    181 dnl XXX This could be done for cross-compiling, but for now it's not.
    182 dnl
    183 if test -z "$with_pcap" && test "$cross_compiling" = yes; then
    184 	AC_MSG_ERROR(pcap type not determined when cross-compiling; use --with-pcap=...)
    185 fi
    186 AC_ARG_WITH(pcap, [  --with-pcap=TYPE        use packet capture TYPE])
    187 AC_MSG_CHECKING(packet capture type)
    188 if test ! -z "$with_pcap" ; then
    189 	V_PCAP="$withval"
    190 elif test -r /dev/bpf ; then
    191 	#
    192 	# Cloning BPF device.
    193 	#
    194 	V_PCAP=bpf
    195 	AC_DEFINE(HAVE_CLONING_BPF,1,[define if you have a cloning BPF device])
    196 elif test -r /dev/bpf0 ; then
    197 	V_PCAP=bpf
    198 elif test -r /usr/include/net/pfilt.h ; then
    199 	V_PCAP=pf
    200 elif test -r /dev/enet ; then
    201 	V_PCAP=enet
    202 elif test -r /dev/nit ; then
    203 	V_PCAP=snit
    204 elif test -r /usr/include/sys/net/nit.h ; then
    205 	V_PCAP=nit
    206 elif test -r /usr/include/linux/socket.h ; then
    207 	V_PCAP=linux
    208 elif test -r /usr/include/net/raw.h ; then
    209 	V_PCAP=snoop
    210 elif test -r /usr/include/odmi.h ; then
    211 	#
    212 	# On AIX, the BPF devices might not yet be present - they're
    213 	# created the first time libpcap runs after booting.
    214 	# We check for odmi.h instead.
    215 	#
    216 	V_PCAP=bpf
    217 elif test -r /usr/include/sys/dlpi.h ; then
    218 	V_PCAP=dlpi
    219 elif test -c /dev/bpf0 ; then		# check again in case not readable
    220 	V_PCAP=bpf
    221 elif test -c /dev/enet ; then		# check again in case not readable
    222 	V_PCAP=enet
    223 elif test -c /dev/nit ; then		# check again in case not readable
    224 	V_PCAP=snit
    225 else
    226 	V_PCAP=null
    227 fi
    228 AC_MSG_RESULT($V_PCAP)
    229 
    230 dnl
    231 dnl Now figure out how we get a list of interfaces and addresses,
    232 dnl if we support capturing.  Don't bother if we don't support
    233 dnl capturing.
    234 dnl
    235 if test "$V_PCAP" = null
    236 then
    237 	#
    238 	# We can't capture, so we can't open any capture
    239 	# devices, so we won't return any interfaces.
    240 	#
    241 	V_FINDALLDEVS=null
    242 else
    243 	AC_CHECK_FUNC(getifaddrs,[
    244 		#
    245 		# We have "getifaddrs()"; make sure we have <ifaddrs.h>
    246 		# as well, just in case some platform is really weird.
    247 		#
    248 		AC_CHECK_HEADER(ifaddrs.h,[
    249 		    #
    250 		    # We have the header, so we use "getifaddrs()" to
    251 		    # get the list of interfaces.
    252 		    #
    253 		    V_FINDALLDEVS=getad
    254 		],[
    255 		    #
    256 		    # We don't have the header - give up.
    257 		    # XXX - we could also fall back on some other
    258 		    # mechanism, but, for now, this'll catch this
    259 		    # problem so that we can at least try to figure
    260 		    # out something to do on systems with "getifaddrs()"
    261 		    # but without "ifaddrs.h", if there is something
    262 		    # we can do on those systems.
    263 		    #
    264 		    AC_MSG_ERROR([Your system has getifaddrs() but doesn't have a usable <ifaddrs.h>.])
    265 		])
    266 	],[
    267 		#
    268 		# Well, we don't have "getifaddrs()", so we have to use
    269 		# some other mechanism; determine what that mechanism is.
    270 		#
    271 		# The first thing we use is the type of capture mechanism,
    272 		# which is somewhat of a proxy for the OS we're using.
    273 		#
    274 		case "$V_PCAP" in
    275 
    276 		dlpi)
    277 			#
    278 			# This might be Solaris 8 or later, with
    279 			# SIOCGLIFCONF, or it might be some other OS
    280 			# or some older version of Solaris, with
    281 			# just SIOCGIFCONF.
    282 			#
    283 			AC_MSG_CHECKING(whether we have SIOCGLIFCONF)
    284 			AC_CACHE_VAL(ac_cv_lbl_have_siocglifconf,
    285 			    AC_TRY_COMPILE(
    286 				[#include <sys/param.h>
    287 				#include <sys/file.h>
    288 				#include <sys/ioctl.h>
    289 				#include <sys/socket.h>
    290 				#include <sys/sockio.h>],
    291 				[ioctl(0, SIOCGLIFCONF, (char *)0);],
    292 				ac_cv_lbl_have_siocglifconf=yes,
    293 				ac_cv_lbl_have_siocglifconf=no))
    294 			AC_MSG_RESULT($ac_cv_lbl_have_siocglifconf)
    295 			if test $ac_cv_lbl_have_siocglifconf = yes ; then
    296 				V_FINDALLDEVS=glifc
    297 			else
    298 				V_FINDALLDEVS=gifc
    299 			fi
    300 			;;
    301 
    302 		*)
    303 			#
    304 			# Assume we just have SIOCGIFCONF.
    305 			# (XXX - on at least later Linux kernels, there's
    306 			# another mechanism, and we should be using that
    307 			# instead.)
    308 			#
    309 			V_FINDALLDEVS=gifc
    310 			;;
    311 		esac])
    312 fi
    313 
    314 AC_MSG_CHECKING(if --enable-ipv6 option is specified)
    315 AC_ARG_ENABLE(ipv6, [  --enable-ipv6           build IPv6-capable version])
    316 if test "$enable_ipv6" = "yes"; then
    317 	AC_DEFINE(INET6,1,[IPv6])
    318 fi
    319 AC_MSG_RESULT(${enable_ipv6-no})
    320 
    321 AC_MSG_CHECKING(whether to build optimizer debugging code)
    322 AC_ARG_ENABLE(optimizer-dbg, [  --enable-optimizer-dbg  build optimizer debugging code])
    323 if test "$enable_optimizer_dbg" = "yes"; then
    324 	AC_DEFINE(BDEBUG,1,[Enable optimizer debugging])
    325 fi
    326 AC_MSG_RESULT(${enable_optimizer_dbg-no})
    327 
    328 AC_MSG_CHECKING(whether to build parser debugging code)
    329 AC_ARG_ENABLE(yydebug, [  --enable-yydebug        build parser debugging code])
    330 if test "$enable_yydebug" = "yes"; then
    331 	AC_DEFINE(YYDEBUG,1,[Enable parser debugging])
    332 fi
    333 AC_MSG_RESULT(${enable_yydebug-no})
    334 
    335 case "$V_PCAP" in
    336 
    337 dlpi)
    338 	AC_CHECK_HEADERS(sys/bufmod.h sys/dlpi_ext.h)
    339 	AC_MSG_CHECKING(for /dev/dlpi device)
    340 	if test -c /dev/dlpi ; then
    341 		AC_MSG_RESULT(yes)
    342 		AC_DEFINE(HAVE_DEV_DLPI, 1, [define if you have a /dev/dlpi])
    343 	else
    344 		AC_MSG_RESULT(no)
    345 		dir="/dev/dlpi"
    346 		AC_MSG_CHECKING(for $dir directory)
    347 		if test -d $dir ; then
    348 			AC_MSG_RESULT(yes)
    349 			AC_DEFINE_UNQUOTED(PCAP_DEV_PREFIX, "$dir", [/dev/dlpi directory])
    350 		else
    351 			AC_MSG_RESULT(no)
    352 		fi
    353 	fi
    354 	;;
    355 
    356 linux)
    357 	AC_MSG_CHECKING(Linux kernel version)
    358  	if test "$cross_compiling" = yes; then
    359  		AC_CACHE_VAL(ac_cv_linux_vers,
    360  		    ac_cv_linux_vers=unknown)
    361  	else
    362  		AC_CACHE_VAL(ac_cv_linux_vers,
    363  		    ac_cv_linux_vers=`uname -r 2>&1 | \
    364  			sed -n -e '$s/.* //' -e '$s/\..*//p'`)
    365  	fi
    366 	AC_MSG_RESULT($ac_cv_linux_vers)
    367  	if test $ac_cv_linux_vers = unknown ; then
    368  		AC_MSG_ERROR(cannot determine linux version when cross-compiling)
    369  	fi
    370 	if test $ac_cv_linux_vers -lt 2 ; then
    371 		AC_MSG_ERROR(version 2 or higher required; see the INSTALL doc for more info)
    372 	fi
    373 	AC_LBL_TPACKET_STATS
    374 	;;
    375 
    376 dag)
    377 	V_DEFS="$V_DEFS -DDAG_ONLY"
    378 	;;
    379 
    380 septel)
    381 	V_DEFS="$V_DEFS -DSEPTEL_ONLY"
    382 	;;
    383 
    384 null)
    385 	AC_MSG_WARN(cannot determine packet capture interface)
    386 	AC_MSG_WARN((see the INSTALL doc for more info))
    387 	;;
    388 
    389 esac
    390 
    391 AC_MSG_CHECKING(whether we have /proc/net/dev)
    392 if test -r /proc/net/dev ; then
    393 	ac_cv_lbl_proc_net_dev=yes
    394 else
    395 	ac_cv_lbl_proc_net_dev=no
    396 fi
    397 if test $ac_cv_lbl_proc_net_dev = yes; then
    398 	AC_DEFINE(HAVE_PROC_NET_DEV, 1, [define if you have a /proc/net/dev])
    399 fi
    400 AC_MSG_RESULT($ac_cv_lbl_proc_net_dev)
    401 
    402 # Check for Endace DAG card support.
    403 AC_ARG_WITH([dag], [  --with-dag[[=DIR]]        include Endace DAG support ("yes", "no" or DIR; default="yes" on BSD and Linux if present)],
    404 [
    405 	if test "$withval" = no
    406 	then
    407 		# User doesn't want DAG support.
    408 		want_dag=no
    409 	elif test "$withval" = yes
    410 	then
    411 		# User wants DAG support but hasn't specified a directory.
    412 		want_dag=yes
    413 	else
    414 		# User wants DAG support and has specified a directory, so use the provided value.
    415 		want_dag=yes
    416 		dag_root=$withval
    417 	fi
    418 ],[
    419 	#
    420 	# Use DAG API if present, otherwise don't
    421 	#
    422 	want_dag=ifpresent
    423 ])
    424 
    425 AC_ARG_WITH([dag-includes], [  --with-dag-includes=DIR   Endace DAG include directory],
    426 [
    427 	# User wants DAG support and has specified a header directory, so use the provided value.
    428 	want_dag=yes
    429 	dag_include_dir=$withval
    430 ],[])
    431 
    432 AC_ARG_WITH([dag-libraries], [  --with-dag-libraries=DIR  Endace DAG library directory],
    433 [
    434 	# User wants DAG support and has specified a library directory, so use the provided value.
    435 	want_dag=yes
    436 	dag_lib_dir=$withval
    437 ],[])
    438 
    439 case "$V_PCAP" in
    440 linux|bpf|dag)
    441 	#
    442 	# We support the DAG API if we're on Linux or BSD, or if we're
    443 	# building a DAG-only libpcap.
    444 	#
    445 	;;
    446 *)
    447 	#
    448 	# If the user explicitly requested DAG, tell them it's not
    449 	# supported.
    450 	#
    451 	# If they expressed no preference, don't include it.
    452 	#
    453 	if test $want_dag = yes; then
    454 		AC_MSG_ERROR([DAG support is only available with 'linux' 'bpf' and 'dag' packet capture types])
    455 	elif test $want_dag = yes; then
    456 		want_dag=no
    457 	fi
    458 	;;
    459 esac
    460 
    461 ac_cv_lbl_dag_api=no
    462 if test "$want_dag" != no; then
    463 
    464 	AC_MSG_CHECKING([whether we have DAG API headers])
    465 
    466 	# If necessary, set default paths for DAG API headers and libraries.
    467 	if test -z "$dag_root"; then
    468 	    dag_root=/usr/local
    469 	fi
    470 
    471 	if test -z "$dag_include_dir"; then
    472 		dag_include_dir="$dag_root/include"
    473 	fi
    474 
    475 	if test -z "$dag_lib_dir"; then
    476 	    dag_lib_dir="$dag_root/lib"
    477 	fi
    478 	
    479 	if test -z "$dag_tools_dir"; then
    480 	    dag_tools_dir="$dag_root/tools"
    481 		fi
    482 
    483 	if test -r $dag_include_dir/dagapi.h; then
    484 		ac_cv_lbl_dag_api=yes
    485 	fi
    486 	AC_MSG_RESULT([$ac_cv_lbl_dag_api ($dag_include_dir)])
    487 fi
    488 
    489 if test $ac_cv_lbl_dag_api = yes; then
    490 
    491 	AC_MSG_CHECKING([dagapi.o])	
    492 	dagapi_obj=no
    493 	if test -r $dag_tools_dir/dagapi.o; then
    494 		# 2.4.x.
    495 		dagapi_obj=$dag_tools_dir/dagapi.o
    496 	elif test -r $dag_lib_dir/dagapi.o; then
    497 		# 2.5.x.
    498 		dagapi_obj=$dag_lib_dir/dagapi.o
    499 	elif test -r $dag_lib_dir/libdag.a; then
    500 		# 2.5.x.
    501 		ar x $dag_lib_dir/libdag.a dagapi.o
    502 		if test -r ./dagapi.o; then
    503 		    dagapi_obj=./dagapi.o
    504 		else
    505 		    ar x $dag_lib_dir/libdag.a libdag_la-dagapi.o
    506 		    if test -r ./libdag_la-dagapi.o; then
    507 		       dagapi_obj=./libdag_la-dagapi.o
    508 		    fi		
    509 		fi
    510 	fi
    511 
    512 	if test $dagapi_obj = no; then
    513 		AC_MSG_RESULT([no (checked $dag_lib_dir  $dag_tools_dir  $dag_lib_dir/libdag.a)])
    514 			ac_cv_lbl_dag_api=no
    515 	else
    516 		AC_MSG_RESULT([yes ($dagapi_obj)])
    517 	fi
    518 fi
    519 
    520 if test $ac_cv_lbl_dag_api = yes; then
    521 
    522 	AC_MSG_CHECKING([dagopts.o])	
    523 	dagopts_obj=no
    524 	if test -r $dag_tools_dir/dagopts.o; then
    525 		# 2.4.x.
    526 		dagopts_obj=$dag_tools_dir/dagopts.o
    527 	elif test -r $dag_lib_dir/dagopts.o; then
    528 		# 2.5.x.
    529 		dagopts_obj=$dag_lib_dir/dagopts.o
    530 	elif test -r $dag_lib_dir/libdag.a; then
    531 		# 2.5.x.
    532 		ar x $dag_lib_dir/libdag.a dagopts.o
    533 		if test -r ./dagopts.o; then
    534 		    dagopts_obj=./dagopts.o
    535 		else
    536 		    ar x $dag_lib_dir/libdag.a libdag_la-dagopts.o
    537 		    if test -r ./libdag_la-dagopts.o; then
    538 		       dagopts_obj=./libdag_la-dagopts.o
    539 		    fi
    540 		fi
    541 	fi
    542 
    543 	if test $dagopts_obj = no; then
    544 		AC_MSG_RESULT([no (checked $dag_lib_dir  $dag_tools_dir  $dag_lib_dir/libdag.a)])
    545 		ac_cv_lbl_dag_api=no
    546 	else
    547 		AC_MSG_RESULT([yes ($dagopts_obj)])
    548 	fi
    549 fi
    550 
    551 if test $ac_cv_lbl_dag_api = yes; then
    552 	# Under 2.5.x only we need to add dagreg.o.
    553 	if test -r $dag_include_dir/dagreg.h; then
    554 		AC_MSG_CHECKING([dagreg.o])	
    555 		dagreg_obj=no
    556 		if test -r $dag_lib_dir/dagreg.o; then
    557 			# Object file is ready and waiting.
    558 			dagreg_obj=$dag_lib_dir/dagreg.o
    559 		elif test -r $dag_lib_dir/libdag.a; then
    560 			# Extract from libdag.a.
    561 			ar x $dag_lib_dir/libdag.a dagreg.o
    562 			if test -r ./dagreg.o; then
    563 				dagreg_obj=./dagreg.o
    564 			else
    565 				ar x $dag_lib_dir/libdag.a libdag_la-dagreg.o
    566 				if test -r ./libdag_la-dagreg.o; then
    567 				   dagreg_obj=./libdag_la-dagreg.o
    568 				fi
    569 			fi
    570 		fi
    571 
    572 		if test $dagreg_obj = no; then
    573 			AC_MSG_RESULT([no (checked $dag_lib_dir  $dag_lib_dir/libdag.a)])
    574 			ac_cv_lbl_dag_api=no
    575 		else
    576 			AC_MSG_RESULT([yes ($dagreg_obj)])
    577 		fi
    578 	fi
    579 fi
    580 
    581 if test $ac_cv_lbl_dag_api = yes; then
    582 	V_INCLS="$V_INCLS -I$dag_include_dir"
    583 	V_LIBS="$V_LIBS $dagapi_obj $dagopts_obj $dagreg_obj"
    584 	if test $V_PCAP != dag ; then
    585 		 SSRC="pcap-dag.c"
    586 	fi
    587 
    588 	# See if we can find a general version string.
    589 	# Don't need to save and restore LIBS to prevent -ldag being
    590 	# included if there's a found-action (arg 3).
    591 	saved_ldflags=$LDFLAGS
    592 	LDFLAGS="-L$dag_lib_dir"
    593 	AC_CHECK_LIB([dag], [dag_attach_stream], [dag_version="2.5.x"], [dag_version="2.4.x"])
    594 	AC_CHECK_LIB([dag],[dag_get_erf_types], [
    595 		AC_DEFINE(HAVE_DAG_GET_ERF_TYPES, 1, [define if you have dag_get_erf_types()])]
    596 	)
    597 	LDFLAGS=$saved_ldflags
    598 
    599 	if test "$dag_version" = 2.5.x; then
    600 		AC_DEFINE(HAVE_DAG_STREAMS_API, 1, [define if you have streams capable DAG API])
    601 		DAGLIBS="-ldag"
    602 	fi
    603 
    604 	# See if we can find a specific version string.
    605 	AC_MSG_CHECKING([the DAG API version])
    606 	if test -r "$dag_root/VERSION"; then
    607 		dag_version="`cat $dag_root/VERSION`"
    608 	fi
    609 	AC_MSG_RESULT([$dag_version])
    610 	AC_DEFINE(HAVE_DAG_API, 1, [define if you have the DAG API])
    611 fi
    612 
    613 if test $ac_cv_lbl_dag_api = no; then
    614 	if test "$want_dag" = yes; then
    615         	# User wanted DAG support but we couldn't find it.
    616 		AC_MSG_ERROR([DAG API requested, but not found at $dag_root: use --without-dag])
    617 	fi
    618 
    619 	if test "$V_PCAP" = dag; then
    620 		# User requested "dag" capture type but the DAG API wasn't
    621 		# found.
    622 		AC_MSG_ERROR([Specifying the capture type as "dag" requires the DAG API to be present; use the --with-dag options to specify the location. (Try "./configure --help" for more information.)])
    623 	fi
    624 fi
    625 
    626 AC_ARG_WITH(septel, [  --with-septel[[=DIR]]     include Septel support (located in directory DIR, if supplied).  [default=yes, on Linux, if present]],
    627 [
    628 	if test "$withval" = no
    629 	then
    630 		want_septel=no
    631 	elif test "$withval" = yes
    632 	then
    633 		want_septel=yes
    634 		septel_root=
    635 	else
    636 		want_septel=yes
    637 		septel_root=$withval
    638 	fi
    639 ],[
    640 	#
    641 	# Use Septel API if present, otherwise don't
    642 	#
    643 	want_septel=ifpresent
    644 	septel_root=./../septel
    645 ])
    646 ac_cv_lbl_septel_api=no
    647 case "$V_PCAP" in
    648 linux|septel)
    649 	#
    650 	# We support the Septel API if we're on Linux, or if we're building
    651 	# a Septel-only libpcap.
    652 	#
    653 	;;
    654 *)
    655 	#
    656 	# If the user explicitly requested Septel, tell them it's not
    657 	# supported.
    658 	#
    659 	# If they expressed no preference, don't include it.
    660 	#
    661 	if test $want_septel = yes; then
    662 		AC_MSG_ERROR(Septel support only available with 'linux' and 'septel' packet capture types)
    663 	elif test $want_septel = yes; then
    664 		want_septel=no
    665 	fi
    666 	;;
    667 esac
    668 
    669 if test "$with_septel" != no; then
    670 	AC_MSG_CHECKING(whether we have Septel API)
    671 
    672 	if test -z "$septel_root"; then
    673 		septel_root=$srcdir/../septel
    674 
    675 	fi
    676 
    677 	septel_tools_dir="$septel_root"
    678 	septel_include_dir="$septel_root/INC"
    679 	DEF="-DHAVE_SEPTEL_API"
    680 
    681 	ac_cv_lbl_septel_api=no
    682 	if test -r "$septel_include_dir/msg.h"; then
    683 		V_INCLS="$V_INCLS -I$septel_include_dir"
    684 		V_DEFS="$V_DEFS $DEF"
    685 		V_LIBS="$V_LIBS $septel_tools_dir/asciibin.o $septel_tools_dir/bit2byte.o $septel_tools_dir/confirm.o $septel_tools_dir/fmtmsg.o $septel_tools_dir/gct_unix.o $septel_tools_dir/hqueue.o $septel_tools_dir/ident.o $septel_tools_dir/mem.o $septel_tools_dir/pack.o $septel_tools_dir/parse.o $septel_tools_dir/pool.o $septel_tools_dir/sdlsig.o $septel_tools_dir/strtonum.o $septel_tools_dir/timer.o $septel_tools_dir/trace.o "
    686 
    687 		if test "$V_PCAP" != septel ; then
    688 			 SSRC="pcap-septel.c"
    689 
    690 		fi
    691 		ac_cv_lbl_septel_api=yes
    692 	fi
    693 
    694 	AC_MSG_RESULT($ac_cv_lbl_septel_api)
    695 	if test $ac_cv_lbl_septel_api = no; then
    696 		if test "$want_septel" = yes; then
    697 			AC_MSG_ERROR(Septel API not found under directory $septel_root; use --without-septel)
    698 		fi
    699 	else
    700 		AC_DEFINE(HAVE_SEPTEL_API, 1, [define if you have a Septel API])
    701 	fi
    702 fi
    703 
    704 if test "$V_PCAP" = septel -a "$ac_cv_lbl_septel_api" = no; then
    705 	AC_MSG_ERROR(Specifying the capture type as 'septel' requires the Septel API to be present; use --with-septel=DIR)
    706 fi
    707 
    708 
    709 AC_LBL_LEX_AND_YACC(V_LEX, V_YACC, pcap_)
    710 if test "$V_LEX" = lex ; then
    711 # Some versions of lex can't handle the definitions section of scanner.l .
    712 # Try lexing it and complain if it can't deal.
    713 	AC_CACHE_CHECK([for capable lex], tcpdump_cv_capable_lex,
    714 		if lex -t scanner.l > /dev/null 2>&1; then
    715 			tcpdump_cv_capable_lex=yes
    716 		else
    717 			tcpdump_cv_capable_lex=insufficient
    718 		fi)
    719 	if test $tcpdump_cv_capable_lex = insufficient ; then
    720 		AC_MSG_ERROR([Your operating system's lex is insufficient to compile
    721  libpcap.  flex is a lex replacement that has many advantages, including
    722  being able to compile libpcap.  For more information, see
    723  http://www.gnu.org/software/flex/flex.html .])
    724 	fi
    725 fi
    726 
    727 DYEXT="so"
    728 case "$host_os" in
    729 
    730 aix*)
    731 	dnl Workaround to enable certain features
    732 	AC_DEFINE(_SUN,1,[define on AIX to get certain functions])
    733 	;;
    734 
    735 hpux9*)
    736 	AC_DEFINE(HAVE_HPUX9,1,[on HP-UX 9.x])
    737 	;;
    738 
    739 hpux10.0*)
    740 	;;
    741 
    742 hpux10.1*)
    743 	;;
    744 
    745 hpux*)
    746 	dnl HPUX 10.20 and above is similar to HPUX 9, but
    747 	dnl not the same....
    748 	dnl
    749 	dnl XXX - DYEXT should be set to "sl" if this is building
    750 	dnl for 32-bit PA-RISC, but should be left as "so" for
    751 	dnl 64-bit PA-RISC or, I suspect, IA-64.
    752 	AC_DEFINE(HAVE_HPUX10_20_OR_LATER,1,[on HP-UX 10.20 or later])
    753 	;;
    754 
    755 sinix*)
    756 	AC_MSG_CHECKING(if SINIX compiler defines sinix)
    757 	AC_CACHE_VAL(ac_cv_cc_sinix_defined,
    758 		AC_TRY_COMPILE(
    759 		    [],
    760 		    [int i = sinix;],
    761 		    ac_cv_cc_sinix_defined=yes,
    762 		    ac_cv_cc_sinix_defined=no))
    763 	    AC_MSG_RESULT($ac_cv_cc_sinix_defined)
    764 	    if test $ac_cv_cc_sinix_defined = no ; then
    765 		    AC_DEFINE(sinix,1,[on sinix])
    766 	    fi
    767 	;;
    768 
    769 solaris*)
    770 	AC_DEFINE(HAVE_SOLARIS,1,[On solaris])
    771 	;;
    772 
    773 darwin*)
    774 	DYEXT="dylib"
    775 	V_CCOPT="$V_CCOPT -fno-common"
    776 	;;
    777 
    778 linux*)
    779 	V_CCOPT="$V_CCOPT -fPIC"
    780 	;;
    781 
    782 esac
    783 
    784 AC_PROG_RANLIB
    785 
    786 AC_LBL_DEVEL(V_CCOPT)
    787 
    788 AC_LBL_SOCKADDR_SA_LEN
    789 
    790 AC_LBL_SOCKADDR_STORAGE
    791 
    792 AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1
    793 
    794 AC_LBL_UNALIGNED_ACCESS
    795 
    796 #
    797 # Makefile.in includes rules to generate version.h, so we assume
    798 # that it will be generated if autoconf is used.
    799 #
    800 AC_DEFINE(HAVE_VERSION_H, 1, [define if version.h is generated in the build procedure])
    801 
    802 rm -f net
    803 ln -s ${srcdir}/bpf/net net
    804 
    805 AC_SUBST(V_CCOPT)
    806 AC_SUBST(V_DEFS)
    807 AC_SUBST(V_INCLS)
    808 AC_SUBST(V_LIBS)
    809 AC_SUBST(V_LEX)
    810 AC_SUBST(V_PCAP)
    811 AC_SUBST(V_FINDALLDEVS)
    812 AC_SUBST(V_RANLIB)
    813 AC_SUBST(V_YACC)
    814 AC_SUBST(SSRC)
    815 AC_SUBST(DYEXT)
    816 AC_SUBST(DAGLIBS)
    817 
    818 AC_PROG_INSTALL
    819 
    820 AC_CONFIG_HEADER(config.h)
    821 
    822 AC_OUTPUT(Makefile)
    823 
    824 if test -f .devel ; then
    825 	make depend
    826 fi
    827 exit 0
    828