configure.in revision 190225
1dnl @(#) $Header: /tcpdump/master/libpcap/configure.in,v 1.138.2.22 2008-10-24 07:30:18 guy Exp $ (LBL)
2dnl
3dnl Copyright (c) 1994, 1995, 1996, 1997
4dnl	The Regents of the University of California.  All rights reserved.
5dnl
6dnl Process this file with autoconf to produce a configure script.
7dnl
8
9AC_REVISION($Revision: 1.138.2.22 $)
10AC_PREREQ(2.50)
11AC_INIT(pcap.c)
12
13AC_CANONICAL_SYSTEM
14
15AC_LBL_C_INIT(V_CCOPT, V_INCLS, V_LIBS)
16AC_LBL_C_INLINE
17AC_C___ATTRIBUTE__
18
19AC_LBL_CHECK_TYPE(u_int8_t, u_char)
20AC_LBL_CHECK_TYPE(u_int16_t, u_short)
21AC_LBL_CHECK_TYPE(u_int32_t, u_int)
22AC_LBL_CHECK_TYPE(u_int64_t, unsigned long long)
23
24#
25# Try to arrange for large file support.
26#
27AC_SYS_LARGEFILE
28AC_FUNC_FSEEKO
29
30dnl
31dnl libpcap doesn't itself use <sys/ioccom.h>; however, the test program
32dnl in "AC_LBL_FIXINCLUDES" in "aclocal.m4" uses it, so we have to
33dnl test for it and set "HAVE_SYS_IOCCOM_H" if we have it, otherwise
34dnl "AC_LBL_FIXINCLUDES" won't work on some platforms such as Solaris.
35dnl
36AC_CHECK_HEADERS(sys/ioccom.h sys/sockio.h limits.h paths.h)
37AC_CHECK_HEADERS(net/pfvar.h, , , [#include <sys/types.h>
38#include <sys/socket.h>
39#include <net/if.h>])
40if test "$ac_cv_header_net_pfvar_h" = yes; then
41	#
42	# Check for various PF actions.
43	#
44	AC_MSG_CHECKING(whether net/pfvar.h defines PF_NAT through PF_NORDR)
45	AC_TRY_COMPILE(
46	    [#include <sys/types.h>
47	    #include <sys/socket.h>
48	    #include <net/if.h>
49	    #include <net/pfvar.h>],
50	    [return PF_NAT+PF_NONAT+PF_BINAT+PF_NOBINAT+PF_RDR+PF_NORDR;],
51	    [
52		AC_MSG_RESULT(yes)
53		AC_DEFINE(HAVE_PF_NAT_THROUGH_PF_NORDR, 1,
54		    [define if net/pfvar.h defines PF_NAT through PF_NORDR])
55	    ],
56	    AC_MSG_RESULT(no))
57fi
58AC_CHECK_HEADERS(netinet/if_ether.h, , , [#include <sys/types.h>
59#include <sys/socket.h>])
60if test "$ac_cv_header_netinet_if_ether_h" != yes; then
61	#
62	# The simple test didn't work.
63	# Do we need to include <net/if.h> first?
64	# Unset ac_cv_header_netinet_if_ether_h so we don't
65	# treat the previous failure as a cached value and
66	# suppress the next test.
67	#
68	AC_MSG_NOTICE([Rechecking with some additional includes])
69	unset ac_cv_header_netinet_if_ether_h
70	AC_CHECK_HEADERS(netinet/if_ether.h, , , [#include <sys/types.h>
71#include <sys/socket.h>
72#include <netinet/in.h>
73struct mbuf;
74struct rtentry;
75#include <net/if.h>])
76fi
77
78AC_LBL_FIXINCLUDES
79
80AC_CHECK_FUNCS(strerror strlcpy)
81
82needsnprintf=no
83AC_CHECK_FUNCS(vsnprintf snprintf,,
84	[needsnprintf=yes])
85if test $needsnprintf = yes; then
86	AC_LIBOBJ(snprintf)
87fi
88
89#
90# Do this before checking for ether_hostton(), as it's a
91# "gethostbyname() -ish function".
92#
93AC_LBL_LIBRARY_NET
94
95#
96# You are in a twisty little maze of UN*Xes, all different.
97# Some might not have ether_hostton().
98# Some might have it, but not declare it in any header file.
99# Some might have it, but declare it in <netinet/if_ether.h>.
100# Some might have it, but declare it in <netinet/ether.h>
101# (And some might have it but document it as something declared in
102# <netinet/ethernet.h>, although <netinet/if_ether.h> appears to work.)
103#
104# Before you is a C compiler.
105#
106AC_CHECK_FUNCS(ether_hostton)
107if test "$ac_cv_func_ether_hostton" = yes; then
108	#
109	# OK, we have ether_hostton().  Do we have <netinet/if_ether.h>?
110	#
111	if test "$ac_cv_header_netinet_if_ether_h" = yes; then
112		#
113		# Yes.  Does it declare ether_hostton()?
114		#
115		AC_CHECK_DECL(ether_hostton,
116		    [
117			AC_DEFINE(NETINET_IF_ETHER_H_DECLARES_ETHER_HOSTTON,,
118			    [Define to 1 if netinet/if_ether.h declares `ether_hostton'])
119		    ],,
120		    [
121#include <sys/types.h>
122#include <sys/socket.h>
123#include <netinet/in.h>
124#include <arpa/inet.h>
125struct mbuf;
126struct rtentry;
127#include <net/if.h>
128#include <netinet/if_ether.h>
129		    ])
130	fi
131	#
132	# Did that succeed?
133	#
134	if test "$ac_cv_have_decl_ether_hostton" != yes; then
135		#
136		# No, how about <netinet/ether.h>, as on Linux?
137		#
138		AC_CHECK_HEADERS(netinet/ether.h)
139		if test "$ac_cv_header_netinet_ether_h" = yes; then
140			#
141			# We have it - does it declare ether_hostton()?
142			# Unset ac_cv_have_decl_ether_hostton so we don't
143			# treat the previous failure as a cached value and
144			# suppress the next test.
145			#
146			unset ac_cv_have_decl_ether_hostton
147			AC_CHECK_DECL(ether_hostton,
148			    [
149				AC_DEFINE(NETINET_ETHER_H_DECLARES_ETHER_HOSTTON,,
150				    [Define to 1 if netinet/ether.h declares `ether_hostton'])
151			    ],,
152			    [
153#include <netinet/ether.h>
154			    ])
155		fi
156	fi
157	#
158	# Is ether_hostton() declared?
159	#
160	if test "$ac_cv_have_decl_ether_hostton" != yes; then
161		#
162		# No, we'll have to declare it ourselves.
163		# Do we have "struct ether_addr"?
164		#
165		AC_CHECK_TYPES(struct ether_addr,,,
166		    [
167#include <sys/types.h>
168#include <sys/socket.h>
169#include <netinet/in.h>
170#include <arpa/inet.h>
171struct mbuf;
172struct rtentry;
173#include <net/if.h>
174#include <netinet/if_ether.h>
175		    ])
176		AC_DEFINE(HAVE_DECL_ETHER_HOSTTON, 0,
177		    [Define to 1 if you have the declaration of `ether_hostton', and to 0 if you
178don't.])
179	else
180		AC_DEFINE(HAVE_DECL_ETHER_HOSTTON, 1,
181		    [Define to 1 if you have the declaration of `ether_hostton', and to 0 if you
182don't.])
183	fi
184fi
185
186dnl to pacify those who hate protochain insn
187AC_MSG_CHECKING(if --disable-protochain option is specified)
188AC_ARG_ENABLE(protochain, [  --disable-protochain    disable \"protochain\" insn])
189case "x$enable_protochain" in
190xyes)	enable_protochain=enabled	;;
191xno)	enable_protochain=disabled	;;
192x)	enable_protochain=enabled	;;
193esac
194
195if test "$enable_protochain" = "disabled"; then
196	AC_DEFINE(NO_PROTOCHAIN,1,[do not use protochain])
197fi
198AC_MSG_RESULT(${enable_protochain})
199
200#
201# SITA support is mutually exclusive with native capture support;
202# "--with-sita" selects SITA support.
203#
204AC_ARG_WITH(sita, [  --with-sita             include SITA support],
205[
206	AC_DEFINE(SITA,1,[include ACN support])
207	AC_MSG_NOTICE(Enabling SITA ACN support)
208	V_PCAP=sita
209	V_FINDALLDEVS=sita
210],
211[
212dnl
213dnl Not all versions of test support -c (character special) but it's a
214dnl better way of testing since the device might be protected. So we
215dnl check in our normal order using -r and then check the for the /dev
216dnl guys again using -c.
217dnl
218dnl XXX This could be done for cross-compiling, but for now it's not.
219dnl
220if test -z "$with_pcap" && test "$cross_compiling" = yes; then
221	AC_MSG_ERROR(pcap type not determined when cross-compiling; use --with-pcap=...)
222fi
223AC_ARG_WITH(pcap, [  --with-pcap=TYPE        use packet capture TYPE])
224AC_MSG_CHECKING(packet capture type)
225if test ! -z "$with_pcap" ; then
226	V_PCAP="$withval"
227elif test -r /dev/bpf ; then
228	#
229	# Cloning BPF device.
230	#
231	V_PCAP=bpf
232	AC_DEFINE(HAVE_CLONING_BPF,1,[define if you have a cloning BPF device])
233elif test -r /dev/bpf0 ; then
234	V_PCAP=bpf
235elif test -r /usr/include/net/pfilt.h ; then
236	V_PCAP=pf
237elif test -r /dev/enet ; then
238	V_PCAP=enet
239elif test -r /dev/nit ; then
240	V_PCAP=snit
241elif test -r /usr/include/sys/net/nit.h ; then
242	V_PCAP=nit
243elif test -r /usr/include/linux/socket.h ; then
244	V_PCAP=linux
245elif test -r /usr/include/net/raw.h ; then
246	V_PCAP=snoop
247elif test -r /usr/include/odmi.h ; then
248	#
249	# On AIX, the BPF devices might not yet be present - they're
250	# created the first time libpcap runs after booting.
251	# We check for odmi.h instead.
252	#
253	V_PCAP=bpf
254elif test -r /usr/include/sys/dlpi.h ; then
255	V_PCAP=dlpi
256elif test -c /dev/bpf0 ; then		# check again in case not readable
257	V_PCAP=bpf
258elif test -c /dev/enet ; then		# check again in case not readable
259	V_PCAP=enet
260elif test -c /dev/nit ; then		# check again in case not readable
261	V_PCAP=snit
262else
263	V_PCAP=null
264fi
265AC_MSG_RESULT($V_PCAP)
266
267#
268# Do capture-mechanism-dependent tests.
269#
270case "$V_PCAP" in
271dlpi)
272	#
273	# Checks to see if Solaris has the public libdlpi(3LIB) library.
274	# Note: The existence of /usr/include/libdlpi.h does not mean it is the
275	# public libdlpi(3LIB) version. Before libdlpi was made public, a 
276	# private version also existed, which did not have the same APIs. 
277	# Due to a gcc bug, the default search path for 32-bit libraries does
278	# not include /lib, we add it explicitly here.
279	# [http://bugs.opensolaris.org/view_bug.do?bug_id=6619485]. 
280	# Also, due to the bug above applications that link to libpcap with
281	# libdlpi will have to add "-L/lib" option to "configure".
282	#
283	saved_ldflags=$LDFLAGS
284	LDFLAGS="$LIBS -L/lib"
285	AC_CHECK_LIB(dlpi, dlpi_walk,
286		LIBS="-ldlpi $LIBS"
287		V_PCAP=libdlpi
288		AC_DEFINE(HAVE_LIBDLPI,1,[if libdlpi exists]),
289		V_PCAP=dlpi)
290	LDFLAGS=$saved_ldflags
291
292	#
293	# Checks whether <sys/dlpi.h> is usable, to catch weird SCO
294	# versions of DLPI.
295	#
296	AC_MSG_CHECKING(whether <sys/dlpi.h> is usable)
297	AC_CACHE_VAL(ac_cv_sys_dlpi_usable,
298		AC_TRY_COMPILE(
299		    [
300			#include <sys/types.h>
301			#include <sys/time.h>
302			#include <sys/dlpi.h>
303		    ],
304		    [int i = DL_PROMISC_PHYS;],
305		    ac_cv_sys_dlpi_usable=yes,
306		    ac_cv_sys_dlpi_usable=no))
307	AC_MSG_RESULT($ac_cv_sys_dlpi_usable)
308	if test $ac_cv_sys_dlpi_usable = no ; then
309		AC_MSG_ERROR(<sys/dlpi.h> is not usable on this system; it probably has a non-standard DLPI)
310	fi
311
312	#
313	# Check whether we have a /dev/dlpi device or have multiple devices.
314	#
315	AC_MSG_CHECKING(for /dev/dlpi device)
316	if test -c /dev/dlpi ; then
317		AC_MSG_RESULT(yes)
318		AC_DEFINE(HAVE_DEV_DLPI, 1, [define if you have a /dev/dlpi])
319	else
320		AC_MSG_RESULT(no)
321		dir="/dev/dlpi"
322		AC_MSG_CHECKING(for $dir directory)
323		if test -d $dir ; then
324			AC_MSG_RESULT(yes)
325			AC_DEFINE_UNQUOTED(PCAP_DEV_PREFIX, "$dir", [/dev/dlpi directory])
326		else
327			AC_MSG_RESULT(no)
328		fi
329	fi
330
331	#
332	# This check is for Solaris with DLPI support for passive modes.
333	# See dlpi(7P) for more details.
334	#
335	AC_LBL_DL_PASSIVE_REQ_T
336	;;
337
338linux)
339	AC_MSG_CHECKING(Linux kernel version)
340 	if test "$cross_compiling" = yes; then
341 		AC_CACHE_VAL(ac_cv_linux_vers,
342 		    ac_cv_linux_vers=unknown)
343 	else
344 		AC_CACHE_VAL(ac_cv_linux_vers,
345 		    ac_cv_linux_vers=`uname -r 2>&1 | \
346 			sed -n -e '$s/.* //' -e '$s/\..*//p'`)
347 	fi
348	AC_MSG_RESULT($ac_cv_linux_vers)
349 	if test $ac_cv_linux_vers = unknown ; then
350 		AC_MSG_ERROR(cannot determine linux version when cross-compiling)
351 	fi
352	if test $ac_cv_linux_vers -lt 2 ; then
353		AC_MSG_ERROR(version 2 or higher required; see the INSTALL doc for more info)
354	fi
355	AC_CHECK_HEADERS(linux/wireless.h, [], [],
356	[
357#include <sys/socket.h>
358#include <net/if.h>
359#include <linux/types.h>
360	])
361	AC_CHECK_HEADERS()
362	AC_LBL_TPACKET_STATS
363	AC_LBL_LINUX_TPACKET_AUXDATA_TP_VLAN_TCI
364	;;
365
366bpf)
367	#
368	# Check whether we have the *BSD-style ioctls.
369	#
370	AC_CHECK_HEADERS(net/if_media.h)
371
372	AC_MSG_CHECKING(whether the system supports zerocopy BPF)
373	AC_TRY_COMPILE(
374	    [#include <sys/socket.h>
375	    #include <sys/ioctl.h>
376	    #include <net/if.h>
377	    #include <net/bpf.h>],
378	    [return (BIOCROTZBUF + BPF_BUFMODE_ZBUF);],
379	    [  
380		AC_MSG_RESULT(yes)
381		AC_DEFINE(HAVE_ZEROCOPY_BPF, 1,
382		[define if the system supports zerocopy BPF])
383	    ],
384	    AC_MSG_RESULT(no))
385	;;
386
387dag)
388	V_DEFS="$V_DEFS -DDAG_ONLY"
389	;;
390
391septel)
392	V_DEFS="$V_DEFS -DSEPTEL_ONLY"
393	;;
394
395null)
396	AC_MSG_WARN(cannot determine packet capture interface)
397	AC_MSG_WARN((see the INSTALL doc for more info))
398	;;
399esac
400
401dnl
402dnl Now figure out how we get a list of interfaces and addresses,
403dnl if we support capturing.  Don't bother if we don't support
404dnl capturing.
405dnl
406if test "$V_PCAP" = null
407then
408	#
409	# We can't capture, so we can't open any capture
410	# devices, so we won't return any interfaces.
411	#
412	V_FINDALLDEVS=null
413else
414	AC_CHECK_FUNC(getifaddrs,[
415		#
416		# We have "getifaddrs()"; make sure we have <ifaddrs.h>
417		# as well, just in case some platform is really weird.
418		#
419		AC_CHECK_HEADER(ifaddrs.h,[
420		    #
421		    # We have the header, so we use "getifaddrs()" to
422		    # get the list of interfaces.
423		    #
424		    V_FINDALLDEVS=getad
425		],[
426		    #
427		    # We don't have the header - give up.
428		    # XXX - we could also fall back on some other
429		    # mechanism, but, for now, this'll catch this
430		    # problem so that we can at least try to figure
431		    # out something to do on systems with "getifaddrs()"
432		    # but without "ifaddrs.h", if there is something
433		    # we can do on those systems.
434		    #
435		    AC_MSG_ERROR([Your system has getifaddrs() but doesn't have a usable <ifaddrs.h>.])
436		])
437	],[
438		#
439		# Well, we don't have "getifaddrs()", so we have to use
440		# some other mechanism; determine what that mechanism is.
441		#
442		# The first thing we use is the type of capture mechanism,
443		# which is somewhat of a proxy for the OS we're using.
444		#
445		case "$V_PCAP" in
446
447		dlpi|libdlpi)
448			AC_CHECK_HEADERS(sys/bufmod.h sys/dlpi_ext.h)
449			#
450			# This might be Solaris 8 or later, with
451			# SIOCGLIFCONF, or it might be some other OS
452			# or some older version of Solaris, with
453			# just SIOCGIFCONF.
454			#
455			AC_MSG_CHECKING(whether we have SIOCGLIFCONF)
456			AC_CACHE_VAL(ac_cv_lbl_have_siocglifconf,
457			    AC_TRY_COMPILE(
458				[#include <sys/param.h>
459				#include <sys/file.h>
460				#include <sys/ioctl.h>
461				#include <sys/socket.h>
462				#include <sys/sockio.h>],
463				[ioctl(0, SIOCGLIFCONF, (char *)0);],
464				ac_cv_lbl_have_siocglifconf=yes,
465				ac_cv_lbl_have_siocglifconf=no))
466			AC_MSG_RESULT($ac_cv_lbl_have_siocglifconf)
467			if test $ac_cv_lbl_have_siocglifconf = yes ; then
468				V_FINDALLDEVS=glifc
469			else
470				V_FINDALLDEVS=gifc
471			fi
472			#
473			# Needed for common functions used by pcap-[dlpi,libdlpi].c
474			#
475		 	SSRC="dlpisubs.c"
476			;;
477
478		*)
479			#
480			# Assume we just have SIOCGIFCONF.
481			# (XXX - on at least later Linux kernels, there's
482			# another mechanism, and we should be using that
483			# instead.)
484			#
485			V_FINDALLDEVS=gifc
486			;;
487		esac])
488fi
489])
490
491AC_MSG_CHECKING(for socklen_t)
492AC_TRY_COMPILE([
493	#include <sys/types.h>
494	#include <sys/socket.h>
495	],
496	[ socklen_t x; ],
497	have_socklen_t=yes,
498	have_socklen_t=no)
499if test "x$have_socklen_t" = "xyes"; then
500	AC_DEFINE(HAVE_SOCKLEN_T, 1, [define if socklen_t is defined])
501fi
502AC_MSG_RESULT($have_socklen_t)
503
504AC_ARG_ENABLE(ipv6, [  --enable-ipv6           build IPv6-capable version @<:@default=yes, if getaddrinfo available@:>@],
505    [],
506    [enable_ipv6=ifavailable])
507if test "$enable_ipv6" != "no"; then
508	AC_CHECK_FUNC(getaddrinfo,
509	    [
510		AC_DEFINE(INET6,1,[IPv6])
511	    ],
512	    [
513		if test "$enable_ipv6" != "ifavailable"; then
514			AC_MSG_FAILURE([--enable-ipv6 was given, but getaddrinfo isn't available])
515		fi
516	    ])
517fi
518
519AC_MSG_CHECKING(whether to build optimizer debugging code)
520AC_ARG_ENABLE(optimizer-dbg, [  --enable-optimizer-dbg  build optimizer debugging code])
521if test "$enable_optimizer_dbg" = "yes"; then
522	AC_DEFINE(BDEBUG,1,[Enable optimizer debugging])
523fi
524AC_MSG_RESULT(${enable_optimizer_dbg-no})
525
526AC_MSG_CHECKING(whether to build parser debugging code)
527AC_ARG_ENABLE(yydebug, [  --enable-yydebug        build parser debugging code])
528if test "$enable_yydebug" = "yes"; then
529	AC_DEFINE(YYDEBUG,1,[Enable parser debugging])
530fi
531AC_MSG_RESULT(${enable_yydebug-no})
532
533AC_MSG_CHECKING(whether we have /proc/net/dev)
534if test -r /proc/net/dev ; then
535	ac_cv_lbl_proc_net_dev=yes
536else
537	ac_cv_lbl_proc_net_dev=no
538fi
539if test $ac_cv_lbl_proc_net_dev = yes; then
540	AC_DEFINE(HAVE_PROC_NET_DEV, 1, [define if you have a /proc/net/dev])
541fi
542AC_MSG_RESULT($ac_cv_lbl_proc_net_dev)
543
544# Check for Endace DAG card support.
545AC_ARG_WITH([dag], [  --with-dag[[=DIR]]        include Endace DAG support ("yes", "no" or DIR; default="yes" on BSD and Linux if present)],
546[
547	if test "$withval" = no
548	then
549		# User doesn't want DAG support.
550		want_dag=no
551	elif test "$withval" = yes
552	then
553		# User wants DAG support but hasn't specified a directory.
554		want_dag=yes
555	else
556		# User wants DAG support and has specified a directory, so use the provided value.
557		want_dag=yes
558		dag_root=$withval
559	fi
560],[
561	#
562	# Use DAG API if present, otherwise don't
563	#
564	want_dag=ifpresent
565])
566
567AC_ARG_WITH([dag-includes], [  --with-dag-includes=DIR   Endace DAG include directory],
568[
569	# User wants DAG support and has specified a header directory, so use the provided value.
570	want_dag=yes
571	dag_include_dir=$withval
572],[])
573
574AC_ARG_WITH([dag-libraries], [  --with-dag-libraries=DIR  Endace DAG library directory],
575[
576	# User wants DAG support and has specified a library directory, so use the provided value.
577	want_dag=yes
578	dag_lib_dir=$withval
579],[])
580
581case "$V_PCAP" in
582linux|bpf|dag)
583	#
584	# We support the DAG API if we're on Linux or BSD, or if we're
585	# building a DAG-only libpcap.
586	#
587	;;
588*)
589	#
590	# If the user explicitly requested DAG, tell them it's not
591	# supported.
592	#
593	# If they expressed no preference, don't include it.
594	#
595	if test $want_dag = yes; then
596		AC_MSG_ERROR([DAG support is only available with 'linux' 'bpf' and 'dag' packet capture types])
597	elif test $want_dag = yes; then
598		want_dag=no
599	fi
600	;;
601esac
602
603ac_cv_lbl_dag_api=no
604if test "$want_dag" != no; then
605
606	AC_MSG_CHECKING([whether we have DAG API headers])
607
608	# If necessary, set default paths for DAG API headers and libraries.
609	if test -z "$dag_root"; then
610	    dag_root=/usr/local
611	fi
612
613	if test -z "$dag_include_dir"; then
614		dag_include_dir="$dag_root/include"
615	fi
616
617	if test -z "$dag_lib_dir"; then
618	    dag_lib_dir="$dag_root/lib"
619	fi
620	
621	if test -z "$dag_tools_dir"; then
622	    dag_tools_dir="$dag_root/tools"
623		fi
624
625	if test -r $dag_include_dir/dagapi.h; then
626		ac_cv_lbl_dag_api=yes
627	fi
628	AC_MSG_RESULT([$ac_cv_lbl_dag_api ($dag_include_dir)])
629fi
630
631if test $ac_cv_lbl_dag_api = yes; then
632
633	AC_MSG_CHECKING([dagapi.o])	
634	dagapi_obj=no
635	if test -r $dag_tools_dir/dagapi.o; then
636		# 2.4.x.
637		dagapi_obj=$dag_tools_dir/dagapi.o
638	elif test -r $dag_lib_dir/dagapi.o; then
639		# 2.5.x.
640		dagapi_obj=$dag_lib_dir/dagapi.o
641	elif test -r $dag_lib_dir/libdag.a; then
642		# 2.5.x.
643		ar x $dag_lib_dir/libdag.a dagapi.o 2>/dev/null
644		if test -r ./dagapi.o; then
645		    dagapi_obj=./dagapi.o
646		else
647		    ar x $dag_lib_dir/libdag.a libdag_la-dagapi.o 2>/dev/null
648		    if test -r ./libdag_la-dagapi.o; then
649		       dagapi_obj=./libdag_la-dagapi.o
650		    fi		
651		fi
652	fi
653
654	if test $dagapi_obj = no; then
655		AC_MSG_RESULT([no (checked $dag_lib_dir  $dag_tools_dir  $dag_lib_dir/libdag.a)])
656			ac_cv_lbl_dag_api=no
657	else
658		AC_MSG_RESULT([yes ($dagapi_obj)])
659	fi
660fi
661
662if test $ac_cv_lbl_dag_api = yes; then
663
664	AC_MSG_CHECKING([dagopts.o])	
665	dagopts_obj=no
666	if test -r $dag_tools_dir/dagopts.o; then
667		# 2.4.x.
668		dagopts_obj=$dag_tools_dir/dagopts.o
669	elif test -r $dag_lib_dir/dagopts.o; then
670		# 2.5.x.
671		dagopts_obj=$dag_lib_dir/dagopts.o
672	elif test -r $dag_lib_dir/libdag.a; then
673		# 2.5.x.
674		ar x $dag_lib_dir/libdag.a dagopts.o 2>/dev/null
675		if test -r ./dagopts.o; then
676		    dagopts_obj=./dagopts.o
677		else
678		    ar x $dag_lib_dir/libdag.a libdag_la-dagopts.o 2>/dev/null
679		    if test -r ./libdag_la-dagopts.o; then
680		       dagopts_obj=./libdag_la-dagopts.o
681		    fi
682		fi
683	fi
684
685	if test $dagopts_obj = no; then
686		AC_MSG_RESULT([no (checked $dag_lib_dir  $dag_tools_dir  $dag_lib_dir/libdag.a)])
687		ac_cv_lbl_dag_api=no
688	else
689		AC_MSG_RESULT([yes ($dagopts_obj)])
690	fi
691fi
692
693if test $ac_cv_lbl_dag_api = yes; then
694	# Under 2.5.x only we need to add dagreg.o.
695	if test -r $dag_include_dir/dagreg.h; then
696		AC_MSG_CHECKING([dagreg.o])	
697		dagreg_obj=no
698		if test -r $dag_lib_dir/dagreg.o; then
699			# Object file is ready and waiting.
700			dagreg_obj=$dag_lib_dir/dagreg.o
701		elif test -r $dag_lib_dir/libdag.a; then
702			# Extract from libdag.a.
703			ar x $dag_lib_dir/libdag.a dagreg.o 2>/dev/null
704			if test -r ./dagreg.o; then
705				dagreg_obj=./dagreg.o
706			else
707				ar x $dag_lib_dir/libdag.a libdag_la-dagreg.o 2>/dev/null
708				if test -r ./libdag_la-dagreg.o; then
709				   dagreg_obj=./libdag_la-dagreg.o
710				fi
711			fi
712		fi
713
714		if test $dagreg_obj = no; then
715			AC_MSG_RESULT([no (checked $dag_lib_dir  $dag_lib_dir/libdag.a)])
716			ac_cv_lbl_dag_api=no
717		else
718			AC_MSG_RESULT([yes ($dagreg_obj)])
719		fi
720	fi
721fi
722
723if test $ac_cv_lbl_dag_api = yes; then
724	V_INCLS="$V_INCLS -I$dag_include_dir"
725	V_LIBS="$V_LIBS $dagapi_obj $dagopts_obj $dagreg_obj"
726	if test $V_PCAP != dag ; then
727		 SSRC="pcap-dag.c"
728	fi
729
730	# See if we can find a general version string.
731	# Don't need to save and restore LIBS to prevent -ldag being
732	# included if there's a found-action (arg 3).
733	saved_ldflags=$LDFLAGS
734	LDFLAGS="-L$dag_lib_dir"
735	AC_CHECK_LIB([dag], [dag_attach_stream], [dag_streams="1"], [dag_streams="0"])
736	AC_CHECK_LIB([dag],[dag_get_erf_types], [
737		AC_DEFINE(HAVE_DAG_GET_ERF_TYPES, 1, [define if you have dag_get_erf_types()])])
738	AC_CHECK_LIB([dag],[dag_get_stream_erf_types], [
739		AC_DEFINE(HAVE_DAG_GET_STREAM_ERF_TYPES, 1, [define if you have dag_get_stream_erf_types()])])
740	LDFLAGS=$saved_ldflags
741
742	if test "$dag_streams" = 1; then
743		AC_DEFINE(HAVE_DAG_STREAMS_API, 1, [define if you have streams capable DAG API])
744		DAGLIBS="-ldag"
745	fi
746
747	AC_DEFINE(HAVE_DAG_API, 1, [define if you have the DAG API])
748fi
749
750AC_MSG_CHECKING(whether we have the DAG API)
751
752if test $ac_cv_lbl_dag_api = no; then
753	AC_MSG_RESULT(no)
754	if test "$want_dag" = yes; then
755        	# User wanted DAG support but we couldn't find it.
756		AC_MSG_ERROR([DAG API requested, but not found at $dag_root: use --without-dag])
757	fi
758
759	if test "$V_PCAP" = dag; then
760		# User requested "dag" capture type but the DAG API wasn't
761		# found.
762		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.)])
763	fi
764else
765	AC_MSG_RESULT(yes)
766fi
767
768AC_ARG_WITH(septel, [  --with-septel[[=DIR]]     include Septel support (located in directory DIR, if supplied).  [default=yes, on Linux, if present]],
769[
770	if test "$withval" = no
771	then
772		want_septel=no
773	elif test "$withval" = yes
774	then
775		want_septel=yes
776		septel_root=
777	else
778		want_septel=yes
779		septel_root=$withval
780	fi
781],[
782	#
783	# Use Septel API if present, otherwise don't
784	#
785	want_septel=ifpresent
786	septel_root=./../septel
787])
788ac_cv_lbl_septel_api=no
789case "$V_PCAP" in
790linux|septel)
791	#
792	# We support the Septel API if we're on Linux, or if we're building
793	# a Septel-only libpcap.
794	#
795	;;
796*)
797	#
798	# If the user explicitly requested Septel, tell them it's not
799	# supported.
800	#
801	# If they expressed no preference, don't include it.
802	#
803	if test $want_septel = yes; then
804		AC_MSG_ERROR(Septel support only available with 'linux' and 'septel' packet capture types)
805	elif test $want_septel = yes; then
806		want_septel=no
807	fi
808	;;
809esac
810
811if test "$with_septel" != no; then
812	AC_MSG_CHECKING(whether we have Septel API)
813
814	if test -z "$septel_root"; then
815		septel_root=$srcdir/../septel
816
817	fi
818
819	septel_tools_dir="$septel_root"
820	septel_include_dir="$septel_root/INC"
821	DEF="-DHAVE_SEPTEL_API"
822
823	ac_cv_lbl_septel_api=no
824	if test -r "$septel_include_dir/msg.h"; then
825		V_INCLS="$V_INCLS -I$septel_include_dir"
826		V_DEFS="$V_DEFS $DEF"
827		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 "
828
829		if test "$V_PCAP" != septel ; then
830			 SSRC="pcap-septel.c"
831
832		fi
833		ac_cv_lbl_septel_api=yes
834	fi
835
836	AC_MSG_RESULT($ac_cv_lbl_septel_api)
837	if test $ac_cv_lbl_septel_api = no; then
838		if test "$want_septel" = yes; then
839			AC_MSG_ERROR(Septel API not found under directory $septel_root; use --without-septel)
840		fi
841	else
842		AC_DEFINE(HAVE_SEPTEL_API, 1, [define if you have a Septel API])
843	fi
844fi
845
846if test "$V_PCAP" = septel -a "$ac_cv_lbl_septel_api" = no; then
847	AC_MSG_ERROR(Specifying the capture type as 'septel' requires the Septel API to be present; use --with-septel=DIR)
848fi
849
850
851AC_LBL_LEX_AND_YACC(V_LEX, V_YACC, pcap_)
852if test "$V_LEX" = lex ; then
853# Some versions of lex can't handle the definitions section of scanner.l .
854# Try lexing it and complain if it can't deal.
855	AC_CACHE_CHECK([for capable lex], tcpdump_cv_capable_lex,
856		if lex -t scanner.l > /dev/null 2>&1; then
857			tcpdump_cv_capable_lex=yes
858		else
859			tcpdump_cv_capable_lex=insufficient
860		fi)
861	if test $tcpdump_cv_capable_lex = insufficient ; then
862		AC_MSG_ERROR([Your operating system's lex is insufficient to compile
863 libpcap.  flex is a lex replacement that has many advantages, including
864 being able to compile libpcap.  For more information, see
865 http://www.gnu.org/software/flex/flex.html .])
866	fi
867fi
868
869#
870# Assume a.out/ELF convention for shared library names (".so"), and
871# V7/BSD convention for man pages (file formats in section 5,
872# miscellaneous info in section 7).
873#
874DYEXT="so"
875MAN_FILE_FORMATS=5
876MAN_MISC_INFO=7
877case "$host_os" in
878
879aix*)
880	dnl Workaround to enable certain features
881	AC_DEFINE(_SUN,1,[define on AIX to get certain functions])
882
883	# We need "-lodm" and "-lcfg", as libpcap requires them on
884	# AIX.
885	DEPLIBS="-lodm -lcfg"
886	;;
887
888darwin*)
889	DYEXT="dylib"
890	V_CCOPT="$V_CCOPT -fno-common"
891	;;
892
893hpux9*)
894	AC_DEFINE(HAVE_HPUX9,1,[on HP-UX 9.x])
895
896	#
897	# Use System V conventions for man pages.
898	#
899	MAN_FILE_FORMATS=4
900	MAN_MISC_INFO=5
901	;;
902
903hpux10.0*)
904
905	#
906	# Use System V conventions for man pages.
907	#
908	MAN_FILE_FORMATS=4
909	MAN_MISC_INFO=5
910	;;
911
912hpux10.1*)
913
914	#
915	# Use System V conventions for man pages.
916	#
917	MAN_FILE_FORMATS=4
918	MAN_MISC_INFO=5
919	;;
920
921hpux*)
922	dnl HPUX 10.20 and above is similar to HPUX 9, but
923	dnl not the same....
924	dnl
925	dnl XXX - DYEXT should be set to "sl" if this is building
926	dnl for 32-bit PA-RISC, but should be left as "so" for
927	dnl 64-bit PA-RISC or, I suspect, IA-64.
928	AC_DEFINE(HAVE_HPUX10_20_OR_LATER,1,[on HP-UX 10.20 or later])
929
930	#
931	# Use System V conventions for man pages.
932	#
933	MAN_FILE_FORMATS=4
934	MAN_MISC_INFO=5
935	;;
936
937irix*)
938	#
939	# Use System V conventions for man pages.
940	#
941	MAN_FILE_FORMATS=4
942	MAN_MISC_INFO=5
943	;;
944
945linux*)
946	V_CCOPT="$V_CCOPT -fPIC"
947	;;
948
949osf*)
950	#
951	# Use System V conventions for man pages.
952	#
953	MAN_FILE_FORMATS=4
954	MAN_MISC_INFO=5
955	;;
956
957sinix*)
958	AC_MSG_CHECKING(if SINIX compiler defines sinix)
959	AC_CACHE_VAL(ac_cv_cc_sinix_defined,
960		AC_TRY_COMPILE(
961		    [],
962		    [int i = sinix;],
963		    ac_cv_cc_sinix_defined=yes,
964		    ac_cv_cc_sinix_defined=no))
965	    AC_MSG_RESULT($ac_cv_cc_sinix_defined)
966	    if test $ac_cv_cc_sinix_defined = no ; then
967		    AC_DEFINE(sinix,1,[on sinix])
968	    fi
969	;;
970
971solaris*)
972	AC_DEFINE(HAVE_SOLARIS,1,[On solaris])
973
974	#
975	# Use System V conventions for man pages.
976	#
977	MAN_FILE_FORMATS=4
978	MAN_MISC_INFO=5
979	;;
980esac
981
982AC_PROG_RANLIB
983
984AC_LBL_DEVEL(V_CCOPT)
985
986AC_LBL_SOCKADDR_SA_LEN
987
988AC_LBL_SOCKADDR_STORAGE
989
990AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1
991
992AC_LBL_UNALIGNED_ACCESS
993
994#
995# Makefile.in includes rules to generate version.h, so we assume
996# that it will be generated if autoconf is used.
997#
998AC_DEFINE(HAVE_VERSION_H, 1, [define if version.h is generated in the build procedure])
999
1000rm -f net
1001ln -s ${srcdir}/bpf/net net
1002
1003AC_SUBST(V_CCOPT)
1004AC_SUBST(V_DEFS)
1005AC_SUBST(V_INCLS)
1006AC_SUBST(V_LIBS)
1007AC_SUBST(V_LEX)
1008AC_SUBST(V_PCAP)
1009AC_SUBST(V_FINDALLDEVS)
1010AC_SUBST(V_YACC)
1011AC_SUBST(SSRC)
1012AC_SUBST(DYEXT)
1013AC_SUBST(DAGLIBS)
1014AC_SUBST(DEPLIBS)
1015AC_SUBST(MAN_FILE_FORMATS)
1016AC_SUBST(MAN_MISC_INFO)
1017
1018dnl check for USB sniffing support
1019AC_MSG_CHECKING(for USB sniffing support)
1020case "$host_os" in
1021linux*)
1022       AC_DEFINE(PCAP_SUPPORT_USB, 1, [target host supports USB sniffing])
1023       USB_SRC=pcap-usb-linux.c
1024       AC_MSG_RESULT(yes)
1025       ac_usb_dev_name=`udevinfo -q name -p /sys/class/usb_device/usbmon 2>/dev/null`
1026       if test $? -ne 0 ; then
1027               ac_usb_dev_name="usbmon"
1028       fi
1029       AC_DEFINE_UNQUOTED(LINUX_USB_MON_DEV, "/dev/$ac_usb_dev_name", [path for device for USB sniffing])
1030       AC_MSG_NOTICE(Device for USB sniffing is /dev/$ac_usb_dev_name)
1031       ;;
1032*)
1033       AC_MSG_RESULT(no)
1034       ;;
1035esac
1036AC_SUBST(PCAP_SUPPORT_USB)
1037AC_SUBST(USB_SRC)
1038
1039dnl check for bluetooth sniffing support
1040case "$host_os" in
1041linux*)
1042       AC_CHECK_HEADER(bluetooth/bluetooth.h,
1043       	[
1044	  AC_DEFINE(PCAP_SUPPORT_BT, 1, [target host supports Bluetooth sniffing])
1045          BT_SRC=pcap-bt-linux.c
1046          AC_MSG_NOTICE(Bluetooth sniffing is supported)
1047	],
1048	AC_MSG_NOTICE(Bluetooth sniffing is not supported; install bluez-lib devel to enable it)
1049       )
1050       ;;
1051*)
1052       AC_MSG_NOTICE(no Bluetooth sniffing support)
1053       ;;
1054esac
1055AC_SUBST(PCAP_SUPPORT_BT)
1056AC_SUBST(BT_SRC)
1057
1058AC_PROG_INSTALL
1059
1060AC_CONFIG_HEADER(config.h)
1061
1062AC_OUTPUT(Makefile pcap-filter.manmisc pcap-linktype.manmisc
1063	pcap-savefile.manfile pcap.3pcap pcap_compile.3pcap
1064	pcap_datalink.3pcap pcap_dump_open.3pcap
1065	pcap_list_datalinks.3pcap pcap_open_dead.3pcap
1066	pcap_open_offline.3pcap)
1067
1068if test -f .devel ; then
1069	make depend
1070fi
1071exit 0
1072