1dnl @(#) $Header: /tcpdump/master/libpcap/aclocal.m4,v 1.85.2.1 2005/04/21 03:42:09 guy Exp $ (LBL)
2dnl
3dnl Copyright (c) 1995, 1996, 1997, 1998
4dnl	The Regents of the University of California.  All rights reserved.
5dnl
6dnl Redistribution and use in source and binary forms, with or without
7dnl modification, are permitted provided that: (1) source code distributions
8dnl retain the above copyright notice and this paragraph in its entirety, (2)
9dnl distributions including binary code include the above copyright notice and
10dnl this paragraph in its entirety in the documentation or other materials
11dnl provided with the distribution, and (3) all advertising materials mentioning
12dnl features or use of this software display the following acknowledgement:
13dnl ``This product includes software developed by the University of California,
14dnl Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
15dnl the University nor the names of its contributors may be used to endorse
16dnl or promote products derived from this software without specific prior
17dnl written permission.
18dnl THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
19dnl WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
20dnl MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21dnl
22dnl LBL autoconf macros
23dnl
24
25dnl
26dnl Determine which compiler we're using (cc or gcc)
27dnl If using gcc, determine the version number
28dnl If using cc, require that it support ansi prototypes
29dnl If using gcc, use -O2 (otherwise use -O)
30dnl If using cc, explicitly specify /usr/local/include
31dnl
32dnl usage:
33dnl
34dnl	AC_LBL_C_INIT(copt, incls)
35dnl
36dnl results:
37dnl
38dnl	$1 (copt set)
39dnl	$2 (incls set)
40dnl	CC
41dnl	LDFLAGS
42dnl	ac_cv_lbl_gcc_vers
43dnl	LBL_CFLAGS
44dnl
45AC_DEFUN(AC_LBL_C_INIT,
46    [AC_PREREQ(2.12)
47    AC_BEFORE([$0], [AC_PROG_CC])
48    AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
49    AC_BEFORE([$0], [AC_LBL_DEVEL])
50    AC_ARG_WITH(gcc, [  --without-gcc           don't use gcc])
51    $1="-O"
52    $2=""
53    if test "${srcdir}" != "." ; then
54	    $2="-I\$(srcdir)"
55    fi
56    if test "${CFLAGS+set}" = set; then
57	    LBL_CFLAGS="$CFLAGS"
58    fi
59    if test -z "$CC" ; then
60	    case "$target_os" in
61
62	    bsdi*)
63		    AC_CHECK_PROG(SHLICC2, shlicc2, yes, no)
64		    if test $SHLICC2 = yes ; then
65			    CC=shlicc2
66			    export CC
67		    fi
68		    ;;
69	    esac
70    fi
71    if test -z "$CC" -a "$with_gcc" = no ; then
72	    CC=cc
73	    export CC
74    fi
75    AC_PROG_CC
76    if test "$GCC" = yes ; then
77	    if test "$SHLICC2" = yes ; then
78		    ac_cv_lbl_gcc_vers=2
79		    $1="-O2"
80	    else
81		    AC_MSG_CHECKING(gcc version)
82		    AC_CACHE_VAL(ac_cv_lbl_gcc_vers,
83			ac_cv_lbl_gcc_vers=`$CC -v 2>&1 | \
84			    sed -e '/^gcc version /!d' \
85				-e 's/^gcc version //' \
86				-e 's/ .*//' -e 's/^[[[^0-9]]]*//' \
87				-e 's/\..*//'`)
88		    AC_MSG_RESULT($ac_cv_lbl_gcc_vers)
89		    if test $ac_cv_lbl_gcc_vers -gt 1 ; then
90			    $1="-O2"
91		    fi
92	    fi
93    else
94	    AC_MSG_CHECKING(that $CC handles ansi prototypes)
95	    AC_CACHE_VAL(ac_cv_lbl_cc_ansi_prototypes,
96		AC_TRY_COMPILE(
97		    [#include <sys/types.h>],
98		    [int frob(int, char *)],
99		    ac_cv_lbl_cc_ansi_prototypes=yes,
100		    ac_cv_lbl_cc_ansi_prototypes=no))
101	    AC_MSG_RESULT($ac_cv_lbl_cc_ansi_prototypes)
102	    if test $ac_cv_lbl_cc_ansi_prototypes = no ; then
103		    case "$target_os" in
104
105		    hpux*)
106			    AC_MSG_CHECKING(for HP-UX ansi compiler ($CC -Aa -D_HPUX_SOURCE))
107			    savedcflags="$CFLAGS"
108			    CFLAGS="-Aa -D_HPUX_SOURCE $CFLAGS"
109			    AC_CACHE_VAL(ac_cv_lbl_cc_hpux_cc_aa,
110				AC_TRY_COMPILE(
111				    [#include <sys/types.h>],
112				    [int frob(int, char *)],
113				    ac_cv_lbl_cc_hpux_cc_aa=yes,
114				    ac_cv_lbl_cc_hpux_cc_aa=no))
115			    AC_MSG_RESULT($ac_cv_lbl_cc_hpux_cc_aa)
116			    if test $ac_cv_lbl_cc_hpux_cc_aa = no ; then
117				    AC_MSG_ERROR(see the INSTALL doc for more info)
118			    fi
119			    CFLAGS="$savedcflags"
120			    V_CCOPT="-Aa $V_CCOPT"
121			    AC_DEFINE(_HPUX_SOURCE,1,[needed on HP-UX])
122			    ;;
123
124		    *)
125			    AC_MSG_ERROR(see the INSTALL doc for more info)
126			    ;;
127		    esac
128	    fi
129	    $2="$$2 -I/usr/local/include"
130	    LDFLAGS="$LDFLAGS -L/usr/local/lib"
131
132	    case "$target_os" in
133
134	    irix*)
135		    V_CCOPT="$V_CCOPT -xansi -signed -g3"
136		    ;;
137
138	    osf*)
139		    V_CCOPT="$V_CCOPT -std1 -g3"
140		    ;;
141
142	    ultrix*)
143		    AC_MSG_CHECKING(that Ultrix $CC hacks const in prototypes)
144		    AC_CACHE_VAL(ac_cv_lbl_cc_const_proto,
145			AC_TRY_COMPILE(
146			    [#include <sys/types.h>],
147			    [struct a { int b; };
148			    void c(const struct a *)],
149			    ac_cv_lbl_cc_const_proto=yes,
150			    ac_cv_lbl_cc_const_proto=no))
151		    AC_MSG_RESULT($ac_cv_lbl_cc_const_proto)
152		    if test $ac_cv_lbl_cc_const_proto = no ; then
153			    AC_DEFINE(const,)
154		    fi
155		    ;;
156	    esac
157    fi
158])
159
160#
161# Try compiling a sample of the type of code that appears in
162# gencode.c with "inline", "__inline__", and "__inline".
163#
164# Autoconf's AC_C_INLINE, at least in autoconf 2.13, isn't good enough,
165# as it just tests whether a function returning "int" can be inlined;
166# at least some versions of HP's C compiler can inline that, but can't
167# inline a function that returns a struct pointer.
168#
169# Make sure we use the V_CCOPT flags, because some of those might
170# disable inlining.
171#
172AC_DEFUN(AC_LBL_C_INLINE,
173    [AC_MSG_CHECKING(for inline)
174    save_CFLAGS="$CFLAGS"
175    CFLAGS="$V_CCOPT"
176    AC_CACHE_VAL(ac_cv_lbl_inline, [
177	ac_cv_lbl_inline=""
178	ac_lbl_cc_inline=no
179	for ac_lbl_inline in inline __inline__ __inline
180	do
181	    AC_TRY_COMPILE(
182		[#define inline $ac_lbl_inline
183		static inline struct iltest *foo(void);
184		struct iltest {
185		    int iltest1;
186		    int iltest2;
187		};
188
189		static inline struct iltest *
190		foo()
191		{
192		    static struct iltest xxx;
193
194		    return &xxx;
195		}],,ac_lbl_cc_inline=yes,)
196	    if test "$ac_lbl_cc_inline" = yes ; then
197		break;
198	    fi
199	done
200	if test "$ac_lbl_cc_inline" = yes ; then
201	    ac_cv_lbl_inline=$ac_lbl_inline
202	fi])
203    CFLAGS="$save_CFLAGS"
204    if test ! -z "$ac_cv_lbl_inline" ; then
205	AC_MSG_RESULT($ac_cv_lbl_inline)
206    else
207	AC_MSG_RESULT(no)
208    fi
209    AC_DEFINE_UNQUOTED(inline, $ac_cv_lbl_inline, [Define as token for inline if inlining supported])])
210
211dnl
212dnl Use pfopen.c if available and pfopen() not in standard libraries
213dnl Require libpcap
214dnl Look for libpcap in ..
215dnl Use the installed libpcap if there is no local version
216dnl
217dnl usage:
218dnl
219dnl	AC_LBL_LIBPCAP(pcapdep, incls)
220dnl
221dnl results:
222dnl
223dnl	$1 (pcapdep set)
224dnl	$2 (incls appended)
225dnl	LIBS
226dnl	LBL_LIBS
227dnl
228AC_DEFUN(AC_LBL_LIBPCAP,
229    [AC_REQUIRE([AC_LBL_LIBRARY_NET])
230    dnl
231    dnl save a copy before locating libpcap.a
232    dnl
233    LBL_LIBS="$LIBS"
234    pfopen=/usr/examples/packetfilter/pfopen.c
235    if test -f $pfopen ; then
236	    AC_CHECK_FUNCS(pfopen)
237	    if test $ac_cv_func_pfopen = "no" ; then
238		    AC_MSG_RESULT(Using $pfopen)
239		    LIBS="$LIBS $pfopen"
240	    fi
241    fi
242    AC_MSG_CHECKING(for local pcap library)
243    libpcap=FAIL
244    lastdir=FAIL
245    places=`ls .. | sed -e 's,/$,,' -e 's,^,../,' | \
246	egrep '/libpcap-[[0-9]]*\.[[0-9]]*(\.[[0-9]]*)?([[ab]][[0-9]]*)?$'`
247    for dir in $places ../libpcap libpcap ; do
248	    basedir=`echo $dir | sed -e 's/[[ab]][[0-9]]*$//'`
249	    if test $lastdir = $basedir ; then
250		    dnl skip alphas when an actual release is present
251		    continue;
252	    fi
253	    lastdir=$dir
254	    if test -r $dir/pcap.c ; then
255		    libpcap=$dir/libpcap.a
256		    d=$dir
257		    dnl continue and select the last one that exists
258	    fi
259    done
260    if test $libpcap = FAIL ; then
261	    AC_MSG_RESULT(not found)
262	    AC_CHECK_LIB(pcap, main, libpcap="-lpcap")
263	    if test $libpcap = FAIL ; then
264		    AC_MSG_ERROR(see the INSTALL doc for more info)
265	    fi
266    else
267	    $1=$libpcap
268	    $2="-I$d $$2"
269	    AC_MSG_RESULT($libpcap)
270    fi
271    LIBS="$libpcap $LIBS"
272    case "$target_os" in
273
274    aix*)
275	    pseexe="/lib/pse.exp"
276	    AC_MSG_CHECKING(for $pseexe)
277	    if test -f $pseexe ; then
278		    AC_MSG_RESULT(yes)
279		    LIBS="$LIBS -I:$pseexe"
280	    fi
281	    ;;
282    esac])
283
284dnl
285dnl Define RETSIGTYPE and RETSIGVAL
286dnl
287dnl usage:
288dnl
289dnl	AC_LBL_TYPE_SIGNAL
290dnl
291dnl results:
292dnl
293dnl	RETSIGTYPE (defined)
294dnl	RETSIGVAL (defined)
295dnl
296AC_DEFUN(AC_LBL_TYPE_SIGNAL,
297    [AC_BEFORE([$0], [AC_LBL_LIBPCAP])
298    AC_TYPE_SIGNAL
299    if test "$ac_cv_type_signal" = void ; then
300	    AC_DEFINE(RETSIGVAL,[],[return value of signal handlers])
301    else
302	    AC_DEFINE(RETSIGVAL,(0),[return value of signal handlers])
303    fi
304    case "$target_os" in
305
306    irix*)
307	    AC_DEFINE(_BSD_SIGNALS,1,[get BSD semantics on Irix])
308	    ;;
309
310    *)
311	    dnl prefer sigset() to sigaction()
312	    AC_CHECK_FUNCS(sigset)
313	    if test $ac_cv_func_sigset = no ; then
314		    AC_CHECK_FUNCS(sigaction)
315	    fi
316	    ;;
317    esac])
318
319dnl
320dnl If using gcc, make sure we have ANSI ioctl definitions
321dnl
322dnl usage:
323dnl
324dnl	AC_LBL_FIXINCLUDES
325dnl
326AC_DEFUN(AC_LBL_FIXINCLUDES,
327    [if test "$GCC" = yes ; then
328	    AC_MSG_CHECKING(for ANSI ioctl definitions)
329	    AC_CACHE_VAL(ac_cv_lbl_gcc_fixincludes,
330		AC_TRY_COMPILE(
331		    [/*
332		     * This generates a "duplicate case value" when fixincludes
333		     * has not be run.
334		     */
335#		include <sys/types.h>
336#		include <sys/time.h>
337#		include <sys/ioctl.h>
338#		ifdef HAVE_SYS_IOCCOM_H
339#		include <sys/ioccom.h>
340#		endif],
341		    [switch (0) {
342		    case _IO('A', 1):;
343		    case _IO('B', 1):;
344		    }],
345		    ac_cv_lbl_gcc_fixincludes=yes,
346		    ac_cv_lbl_gcc_fixincludes=no))
347	    AC_MSG_RESULT($ac_cv_lbl_gcc_fixincludes)
348	    if test $ac_cv_lbl_gcc_fixincludes = no ; then
349		    # Don't cache failure
350		    unset ac_cv_lbl_gcc_fixincludes
351		    AC_MSG_ERROR(see the INSTALL for more info)
352	    fi
353    fi])
354
355dnl
356dnl Check for flex, default to lex
357dnl Require flex 2.4 or higher
358dnl Check for bison, default to yacc
359dnl Default to lex/yacc if both flex and bison are not available
360dnl Define the yy prefix string if using flex and bison
361dnl
362dnl usage:
363dnl
364dnl	AC_LBL_LEX_AND_YACC(lex, yacc, yyprefix)
365dnl
366dnl results:
367dnl
368dnl	$1 (lex set)
369dnl	$2 (yacc appended)
370dnl	$3 (optional flex and bison -P prefix)
371dnl
372AC_DEFUN(AC_LBL_LEX_AND_YACC,
373    [AC_ARG_WITH(flex, [  --without-flex          don't use flex])
374    AC_ARG_WITH(bison, [  --without-bison         don't use bison])
375    if test "$with_flex" = no ; then
376	    $1=lex
377    else
378	    AC_CHECK_PROGS($1, flex, lex)
379    fi
380    if test "$$1" = flex ; then
381	    # The -V flag was added in 2.4
382	    AC_MSG_CHECKING(for flex 2.4 or higher)
383	    AC_CACHE_VAL(ac_cv_lbl_flex_v24,
384		if flex -V >/dev/null 2>&1; then
385			ac_cv_lbl_flex_v24=yes
386		else
387			ac_cv_lbl_flex_v24=no
388		fi)
389	    AC_MSG_RESULT($ac_cv_lbl_flex_v24)
390	    if test $ac_cv_lbl_flex_v24 = no ; then
391		    s="2.4 or higher required"
392		    AC_MSG_WARN(ignoring obsolete flex executable ($s))
393		    $1=lex
394	    fi
395    fi
396    if test "$with_bison" = no ; then
397	    $2=yacc
398    else
399	    AC_CHECK_PROGS($2, bison, yacc)
400    fi
401    if test "$$2" = bison ; then
402	    $2="$$2 -y"
403    fi
404    if test "$$1" != lex -a "$$2" = yacc -o "$$1" = lex -a "$$2" != yacc ; then
405	    AC_MSG_WARN(don't have both flex and bison; reverting to lex/yacc)
406	    $1=lex
407	    $2=yacc
408    fi
409    if test "$$1" = flex -a -n "$3" ; then
410	    $1="$$1 -P$3"
411	    $2="$$2 -p $3"
412    fi])
413
414dnl
415dnl Checks to see if union wait is used with WEXITSTATUS()
416dnl
417dnl usage:
418dnl
419dnl	AC_LBL_UNION_WAIT
420dnl
421dnl results:
422dnl
423dnl	DECLWAITSTATUS (defined)
424dnl
425AC_DEFUN(AC_LBL_UNION_WAIT,
426    [AC_MSG_CHECKING(if union wait is used)
427    AC_CACHE_VAL(ac_cv_lbl_union_wait,
428	AC_TRY_COMPILE([
429#	include <sys/types.h>
430#	include <sys/wait.h>],
431	    [int status;
432	    u_int i = WEXITSTATUS(status);
433	    u_int j = waitpid(0, &status, 0);],
434	    ac_cv_lbl_union_wait=no,
435	    ac_cv_lbl_union_wait=yes))
436    AC_MSG_RESULT($ac_cv_lbl_union_wait)
437    if test $ac_cv_lbl_union_wait = yes ; then
438	    AC_DEFINE(DECLWAITSTATUS,union wait,[type for wait])
439    else
440	    AC_DEFINE(DECLWAITSTATUS,int,[type for wait])
441    fi])
442
443dnl
444dnl Checks to see if the sockaddr struct has the 4.4 BSD sa_len member
445dnl
446dnl usage:
447dnl
448dnl	AC_LBL_SOCKADDR_SA_LEN
449dnl
450dnl results:
451dnl
452dnl	HAVE_SOCKADDR_SA_LEN (defined)
453dnl
454AC_DEFUN(AC_LBL_SOCKADDR_SA_LEN,
455    [AC_MSG_CHECKING(if sockaddr struct has sa_len member)
456    AC_CACHE_VAL(ac_cv_lbl_sockaddr_has_sa_len,
457	AC_TRY_COMPILE([
458#	include <sys/types.h>
459#	include <sys/socket.h>],
460	[u_int i = sizeof(((struct sockaddr *)0)->sa_len)],
461	ac_cv_lbl_sockaddr_has_sa_len=yes,
462	ac_cv_lbl_sockaddr_has_sa_len=no))
463    AC_MSG_RESULT($ac_cv_lbl_sockaddr_has_sa_len)
464    if test $ac_cv_lbl_sockaddr_has_sa_len = yes ; then
465	    AC_DEFINE(HAVE_SOCKADDR_SA_LEN,1,[if struct sockaddr has sa_len])
466    fi])
467
468dnl
469dnl Checks to see if there's a sockaddr_storage structure
470dnl
471dnl usage:
472dnl
473dnl	AC_LBL_SOCKADDR_STORAGE
474dnl
475dnl results:
476dnl
477dnl	HAVE_SOCKADDR_STORAGE (defined)
478dnl
479AC_DEFUN(AC_LBL_SOCKADDR_STORAGE,
480    [AC_MSG_CHECKING(if sockaddr_storage struct exists)
481    AC_CACHE_VAL(ac_cv_lbl_has_sockaddr_storage,
482	AC_TRY_COMPILE([
483#	include <sys/types.h>
484#	include <sys/socket.h>],
485	[u_int i = sizeof (struct sockaddr_storage)],
486	ac_cv_lbl_has_sockaddr_storage=yes,
487	ac_cv_lbl_has_sockaddr_storage=no))
488    AC_MSG_RESULT($ac_cv_lbl_has_sockaddr_storage)
489    if test $ac_cv_lbl_has_sockaddr_storage = yes ; then
490	    AC_DEFINE(HAVE_SOCKADDR_STORAGE,1,[if struct sockaddr_storage exists])
491    fi])
492
493dnl
494dnl Checks to see if the dl_hp_ppa_info_t struct has the HP-UX 11.00
495dnl dl_module_id_1 member
496dnl
497dnl usage:
498dnl
499dnl	AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1
500dnl
501dnl results:
502dnl
503dnl	HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1 (defined)
504dnl
505dnl NOTE: any compile failure means we conclude that it doesn't have
506dnl that member, so if we don't have DLPI, don't have a <sys/dlpi_ext.h>
507dnl header, or have one that doesn't declare a dl_hp_ppa_info_t type,
508dnl we conclude it doesn't have that member (which is OK, as either we
509dnl won't be using code that would use that member, or we wouldn't
510dnl compile in any case).
511dnl
512AC_DEFUN(AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1,
513    [AC_MSG_CHECKING(if dl_hp_ppa_info_t struct has dl_module_id_1 member)
514    AC_CACHE_VAL(ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1,
515	AC_TRY_COMPILE([
516#	include <sys/types.h>
517#	include <sys/dlpi.h>
518#	include <sys/dlpi_ext.h>],
519	[u_int i = sizeof(((dl_hp_ppa_info_t *)0)->dl_module_id_1)],
520	ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=yes,
521	ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=no))
522    AC_MSG_RESULT($ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1)
523    if test $ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1 = yes ; then
524	    AC_DEFINE(HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1,1,[if ppa_info_t_dl_module_id exists])
525    fi])
526
527dnl
528dnl Checks to see if -R is used
529dnl
530dnl usage:
531dnl
532dnl	AC_LBL_HAVE_RUN_PATH
533dnl
534dnl results:
535dnl
536dnl	ac_cv_lbl_have_run_path (yes or no)
537dnl
538AC_DEFUN(AC_LBL_HAVE_RUN_PATH,
539    [AC_MSG_CHECKING(for ${CC-cc} -R)
540    AC_CACHE_VAL(ac_cv_lbl_have_run_path,
541	[echo 'main(){}' > conftest.c
542	${CC-cc} -o conftest conftest.c -R/a1/b2/c3 >conftest.out 2>&1
543	if test ! -s conftest.out ; then
544		ac_cv_lbl_have_run_path=yes
545	else
546		ac_cv_lbl_have_run_path=no
547	fi
548	rm -f conftest*])
549    AC_MSG_RESULT($ac_cv_lbl_have_run_path)
550    ])
551
552dnl
553dnl Due to the stupid way it's implemented, AC_CHECK_TYPE is nearly useless.
554dnl
555dnl usage:
556dnl
557dnl	AC_LBL_CHECK_TYPE
558dnl
559dnl results:
560dnl
561dnl	int32_t (defined)
562dnl	u_int32_t (defined)
563dnl
564AC_DEFUN(AC_LBL_CHECK_TYPE,
565    [AC_MSG_CHECKING(for $1 using $CC)
566    AC_CACHE_VAL(ac_cv_lbl_have_$1,
567	AC_TRY_COMPILE([
568#	include "confdefs.h"
569#	include <sys/types.h>
570#	if STDC_HEADERS
571#	include <stdlib.h>
572#	include <stddef.h>
573#	endif],
574	[$1 i],
575	ac_cv_lbl_have_$1=yes,
576	ac_cv_lbl_have_$1=no))
577    AC_MSG_RESULT($ac_cv_lbl_have_$1)
578    if test $ac_cv_lbl_have_$1 = no ; then
579	    AC_DEFINE($1, $2, [if we have $1])
580    fi])
581
582dnl
583dnl Checks to see if unaligned memory accesses fail
584dnl
585dnl usage:
586dnl
587dnl	AC_LBL_UNALIGNED_ACCESS
588dnl
589dnl results:
590dnl
591dnl	LBL_ALIGN (DEFINED)
592dnl
593AC_DEFUN(AC_LBL_UNALIGNED_ACCESS,
594    [AC_MSG_CHECKING(if unaligned accesses fail)
595    AC_CACHE_VAL(ac_cv_lbl_unaligned_fail,
596	[case "$host_cpu" in
597
598	#
599	# These are CPU types where:
600	#
601	#	the CPU faults on an unaligned access, but at least some
602	#	OSes that support that CPU catch the fault and simulate
603	#	the unaligned access (e.g., Alpha/{Digital,Tru64} UNIX) -
604	#	the simulation is slow, so we don't want to use it;
605	#
606	#	the CPU, I infer (from the old
607	#
608	# XXX: should also check that they don't do weird things (like on arm)
609	#
610	#	comment) doesn't fault on unaligned accesses, but doesn't
611	#	do a normal unaligned fetch, either (e.g., presumably, ARM);
612	#
613	#	for whatever reason, the test program doesn't work
614	#	(this has been claimed to be the case for several of those
615	#	CPUs - I don't know what the problem is; the problem
616	#	was reported as "the test program dumps core" for SuperH,
617	#	but that's what the test program is *supposed* to do -
618	#	it dumps core before it writes anything, so the test
619	#	for an empty output file should find an empty output
620	#	file and conclude that unaligned accesses don't work).
621	#
622	# This run-time test won't work if you're cross-compiling, so
623	# in order to support cross-compiling for a particular CPU,
624	# we have to wire in the list of CPU types anyway, as far as
625	# I know, so perhaps we should just have a set of CPUs on
626	# which we know it doesn't work, a set of CPUs on which we
627	# know it does work, and have the script just fail on other
628	# cpu types and update it when such a failure occurs.
629	#
630	alpha*|arm*|hp*|mips*|sh*|sparc*|ia64|nv1)
631		ac_cv_lbl_unaligned_fail=yes
632		;;
633
634	*)
635		cat >conftest.c <<EOF
636#		include <sys/types.h>
637#		include <sys/wait.h>
638#		include <stdio.h>
639		unsigned char a[[5]] = { 1, 2, 3, 4, 5 };
640		main() {
641		unsigned int i;
642		pid_t pid;
643		int status;
644		/* avoid "core dumped" message */
645		pid = fork();
646		if (pid <  0)
647			exit(2);
648		if (pid > 0) {
649			/* parent */
650			pid = waitpid(pid, &status, 0);
651			if (pid < 0)
652				exit(3);
653			exit(!WIFEXITED(status));
654		}
655		/* child */
656		i = *(unsigned int *)&a[[1]];
657		printf("%d\n", i);
658		exit(0);
659		}
660EOF
661		${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS \
662		    conftest.c $LIBS >/dev/null 2>&1
663		if test ! -x conftest ; then
664			dnl failed to compile for some reason
665			ac_cv_lbl_unaligned_fail=yes
666		else
667			./conftest >conftest.out
668			if test ! -s conftest.out ; then
669				ac_cv_lbl_unaligned_fail=yes
670			else
671				ac_cv_lbl_unaligned_fail=no
672			fi
673		fi
674		rm -f conftest* core core.conftest
675		;;
676	esac])
677    AC_MSG_RESULT($ac_cv_lbl_unaligned_fail)
678    if test $ac_cv_lbl_unaligned_fail = yes ; then
679	    AC_DEFINE(LBL_ALIGN,1,[if unaligned access fails])
680    fi])
681
682dnl
683dnl If using gcc and the file .devel exists:
684dnl	Compile with -g (if supported) and -Wall
685dnl	If using gcc 2, do extra prototype checking
686dnl	If an os prototype include exists, symlink os-proto.h to it
687dnl
688dnl usage:
689dnl
690dnl	AC_LBL_DEVEL(copt)
691dnl
692dnl results:
693dnl
694dnl	$1 (copt appended)
695dnl	HAVE_OS_PROTO_H (defined)
696dnl	os-proto.h (symlinked)
697dnl
698AC_DEFUN(AC_LBL_DEVEL,
699    [rm -f os-proto.h
700    if test "${LBL_CFLAGS+set}" = set; then
701	    $1="$$1 ${LBL_CFLAGS}"
702    fi
703    if test -f .devel ; then
704	    if test "$GCC" = yes ; then
705		    if test "${LBL_CFLAGS+set}" != set; then
706			    if test "$ac_cv_prog_cc_g" = yes ; then
707				    $1="-g $$1"
708			    fi
709			    $1="$$1 -Wall"
710			    if test $ac_cv_lbl_gcc_vers -gt 1 ; then
711				    $1="$$1 -Wmissing-prototypes -Wstrict-prototypes"
712			    fi
713		    fi
714	    else
715		    case "$target_os" in
716
717		    irix6*)
718			    V_CCOPT="$V_CCOPT -n32"
719			    ;;
720
721		    *)
722			    ;;
723		    esac
724	    fi
725	    os=`echo $target_os | sed -e 's/\([[0-9]][[0-9]]*\)[[^0-9]].*$/\1/'`
726	    name="lbl/os-$os.h"
727	    if test -f $name ; then
728		    ln -s $name os-proto.h
729		    AC_DEFINE(HAVE_OS_PROTO_H,1,[if there's an os_proto.h])
730	    else
731		    AC_MSG_WARN(can't find $name)
732	    fi
733    fi])
734
735dnl
736dnl Improved version of AC_CHECK_LIB
737dnl
738dnl Thanks to John Hawkinson (jhawk@mit.edu)
739dnl
740dnl usage:
741dnl
742dnl	AC_LBL_CHECK_LIB(LIBRARY, FUNCTION [, ACTION-IF-FOUND [,
743dnl	    ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
744dnl
745dnl results:
746dnl
747dnl	LIBS
748dnl
749
750define(AC_LBL_CHECK_LIB,
751[AC_MSG_CHECKING([for $2 in -l$1])
752dnl Use a cache variable name containing both the library and function name,
753dnl because the test really is for library $1 defining function $2, not
754dnl just for library $1.  Separate tests with the same $1 and different $2's
755dnl may have different results.
756ac_lib_var=`echo $1['_']$2['_']$5 | sed 'y%./+- %__p__%'`
757AC_CACHE_VAL(ac_cv_lbl_lib_$ac_lib_var,
758[ac_save_LIBS="$LIBS"
759LIBS="-l$1 $5 $LIBS"
760AC_TRY_LINK(dnl
761ifelse([$2], [main], , dnl Avoid conflicting decl of main.
762[/* Override any gcc2 internal prototype to avoid an error.  */
763]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus
764extern "C"
765#endif
766])dnl
767[/* We use char because int might match the return type of a gcc2
768    builtin and then its argument prototype would still apply.  */
769char $2();
770]),
771	    [$2()],
772	    eval "ac_cv_lbl_lib_$ac_lib_var=yes",
773	    eval "ac_cv_lbl_lib_$ac_lib_var=no")
774LIBS="$ac_save_LIBS"
775])dnl
776if eval "test \"`echo '$ac_cv_lbl_lib_'$ac_lib_var`\" = yes"; then
777  AC_MSG_RESULT(yes)
778  ifelse([$3], ,
779[changequote(, )dnl
780  ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \
781    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
782changequote([, ])dnl
783  AC_DEFINE_UNQUOTED($ac_tr_lib)
784  LIBS="-l$1 $LIBS"
785], [$3])
786else
787  AC_MSG_RESULT(no)
788ifelse([$4], , , [$4
789])dnl
790fi
791])
792
793dnl
794dnl AC_LBL_LIBRARY_NET
795dnl
796dnl This test is for network applications that need socket() and
797dnl gethostbyname() -ish functions.  Under Solaris, those applications
798dnl need to link with "-lsocket -lnsl".  Under IRIX, they need to link
799dnl with "-lnsl" but should *not* link with "-lsocket" because
800dnl libsocket.a breaks a number of things (for instance:
801dnl gethostbyname() under IRIX 5.2, and snoop sockets under most
802dnl versions of IRIX).
803dnl
804dnl Unfortunately, many application developers are not aware of this,
805dnl and mistakenly write tests that cause -lsocket to be used under
806dnl IRIX.  It is also easy to write tests that cause -lnsl to be used
807dnl under operating systems where neither are necessary (or useful),
808dnl such as SunOS 4.1.4, which uses -lnsl for TLI.
809dnl
810dnl This test exists so that every application developer does not test
811dnl this in a different, and subtly broken fashion.
812
813dnl It has been argued that this test should be broken up into two
814dnl seperate tests, one for the resolver libraries, and one for the
815dnl libraries necessary for using Sockets API. Unfortunately, the two
816dnl are carefully intertwined and allowing the autoconf user to use
817dnl them independantly potentially results in unfortunate ordering
818dnl dependancies -- as such, such component macros would have to
819dnl carefully use indirection and be aware if the other components were
820dnl executed. Since other autoconf macros do not go to this trouble,
821dnl and almost no applications use sockets without the resolver, this
822dnl complexity has not been implemented.
823dnl
824dnl The check for libresolv is in case you are attempting to link
825dnl statically and happen to have a libresolv.a lying around (and no
826dnl libnsl.a).
827dnl
828AC_DEFUN(AC_LBL_LIBRARY_NET, [
829    # Most operating systems have gethostbyname() in the default searched
830    # libraries (i.e. libc):
831    # Some OSes (eg. Solaris) place it in libnsl
832    # Some strange OSes (SINIX) have it in libsocket:
833    AC_SEARCH_LIBS(gethostbyname, nsl socket resolv)
834    # Unfortunately libsocket sometimes depends on libnsl and
835    # AC_SEARCH_LIBS isn't up to the task of handling dependencies like this.
836    if test "$ac_cv_search_gethostbyname" = "no"
837    then
838	AC_CHECK_LIB(socket, gethostbyname,
839                     LIBS="-lsocket -lnsl $LIBS", , -lnsl)
840    fi
841    AC_SEARCH_LIBS(socket, socket, ,
842	AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl))
843    # DLPI needs putmsg under HPUX so test for -lstr while we're at it
844    AC_SEARCH_LIBS(putmsg, str)
845    ])
846
847dnl
848dnl Test for __attribute__
849dnl
850
851AC_DEFUN(AC_C___ATTRIBUTE__, [
852AC_MSG_CHECKING(for __attribute__)
853AC_CACHE_VAL(ac_cv___attribute__, [
854AC_COMPILE_IFELSE(
855  AC_LANG_SOURCE([[
856#include <stdlib.h>
857
858static void foo(void) __attribute__ ((noreturn));
859
860static void
861foo(void)
862{
863  exit(1);
864}
865
866int
867main(int argc, char **argv)
868{
869  foo();
870}
871  ]]),
872ac_cv___attribute__=yes,
873ac_cv___attribute__=no)])
874if test "$ac_cv___attribute__" = "yes"; then
875  AC_DEFINE(HAVE___ATTRIBUTE__, 1, [define if your compiler has __attribute__])
876  V_DEFS="$V_DEFS -D_U_=\"__attribute__((unused))\""
877else
878  V_DEFS="$V_DEFS -D_U_=\"\""
879fi
880AC_MSG_RESULT($ac_cv___attribute__)
881])
882
883dnl
884dnl Checks to see if tpacket_stats is defined in linux/if_packet.h
885dnl If so then pcap-linux.c can use this to report proper statistics.
886dnl
887dnl -Scott Barron
888dnl
889AC_DEFUN(AC_LBL_TPACKET_STATS,
890   [AC_MSG_CHECKING(if if_packet.h has tpacket_stats defined)
891   AC_CACHE_VAL(ac_cv_lbl_tpacket_stats,
892   AC_TRY_COMPILE([
893#  include <linux/if_packet.h>],
894   [struct tpacket_stats stats],
895   ac_cv_lbl_tpacket_stats=yes,
896   ac_cv_lbl_tpacket_stats=no))
897   AC_MSG_RESULT($ac_cv_lbl_tpacket_stats)
898   if test $ac_cv_lbl_tpacket_stats = yes; then
899       AC_DEFINE(HAVE_TPACKET_STATS,1,[if if_packet.h has tpacket_stats defined])
900   fi])
901