1dnl @(#) $Header: /tcpdump/master/libpcap/aclocal.m4,v 1.93 2008-11-18 07:29:48 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 Do whatever AC_LBL_C_INIT work is necessary before using AC_PROG_CC.
27dnl
28dnl It appears that newer versions of autoconf (2.64 and later) will,
29dnl if you use AC_TRY_COMPILE in a macro, stick AC_PROG_CC at the
30dnl beginning of the macro, even if the macro itself calls AC_PROG_CC.
31dnl See the "Prerequisite Macros" and "Expanded Before Required" sections
32dnl in the Autoconf documentation.
33dnl
34dnl This causes a steaming heap of fail in our case, as we were, in
35dnl AC_LBL_C_INIT, doing the tests we now do in AC_LBL_C_INIT_BEFORE_CC,
36dnl calling AC_PROG_CC, and then doing the tests we now do in
37dnl AC_LBL_C_INIT.  Now, we run AC_LBL_C_INIT_BEFORE_CC, AC_PROG_CC,
38dnl and AC_LBL_C_INIT at the top level.
39dnl
40AC_DEFUN(AC_LBL_C_INIT_BEFORE_CC,
41    [AC_PREREQ(2.50)
42    AC_BEFORE([$0], [AC_LBL_C_INIT])
43    AC_BEFORE([$0], [AC_PROG_CC])
44    AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
45    AC_BEFORE([$0], [AC_LBL_DEVEL])
46    AC_ARG_WITH(gcc, [  --without-gcc           don't use gcc])
47    $1="-O"
48    $2=""
49    if test "${srcdir}" != "." ; then
50	    $2="-I\$(srcdir)"
51    fi
52    if test "${CFLAGS+set}" = set; then
53	    LBL_CFLAGS="$CFLAGS"
54    fi
55    if test -z "$CC" ; then
56	    case "$host_os" in
57
58	    bsdi*)
59		    AC_CHECK_PROG(SHLICC2, shlicc2, yes, no)
60		    if test $SHLICC2 = yes ; then
61			    CC=shlicc2
62			    export CC
63		    fi
64		    ;;
65	    esac
66    fi
67    if test -z "$CC" -a "$with_gcc" = no ; then
68	    CC=cc
69	    export CC
70    fi
71])
72
73dnl
74dnl Determine which compiler we're using (cc or gcc)
75dnl If using gcc, determine the version number
76dnl If using cc, require that it support ansi prototypes
77dnl If using gcc, use -O2 (otherwise use -O)
78dnl If using cc, explicitly specify /usr/local/include
79dnl
80dnl usage:
81dnl
82dnl	AC_LBL_C_INIT(copt, incls)
83dnl
84dnl results:
85dnl
86dnl	$1 (copt set)
87dnl	$2 (incls set)
88dnl	CC
89dnl	LDFLAGS
90dnl	ac_cv_lbl_gcc_vers
91dnl	LBL_CFLAGS
92dnl
93AC_DEFUN(AC_LBL_C_INIT,
94    [AC_PREREQ(2.50)
95    AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
96    AC_BEFORE([$0], [AC_LBL_DEVEL])
97    AC_BEFORE([$0], [AC_LBL_SHLIBS_INIT])
98    if test "$GCC" = yes ; then
99	    if test "$SHLICC2" = yes ; then
100		    ac_cv_lbl_gcc_vers=2
101		    $1="-O2"
102	    else
103		    AC_MSG_CHECKING(gcc version)
104		    AC_CACHE_VAL(ac_cv_lbl_gcc_vers,
105			ac_cv_lbl_gcc_vers=`$CC -v 2>&1 | \
106			    sed -e '/^gcc version /!d' \
107				-e 's/^gcc version //' \
108				-e 's/ .*//' -e 's/^[[[^0-9]]]*//' \
109				-e 's/\..*//'`)
110		    AC_MSG_RESULT($ac_cv_lbl_gcc_vers)
111		    if test $ac_cv_lbl_gcc_vers -gt 1 ; then
112			    $1="-O2"
113		    fi
114	    fi
115    else
116	    AC_MSG_CHECKING(that $CC handles ansi prototypes)
117	    AC_CACHE_VAL(ac_cv_lbl_cc_ansi_prototypes,
118		AC_TRY_COMPILE(
119		    [#include <sys/types.h>],
120		    [int frob(int, char *)],
121		    ac_cv_lbl_cc_ansi_prototypes=yes,
122		    ac_cv_lbl_cc_ansi_prototypes=no))
123	    AC_MSG_RESULT($ac_cv_lbl_cc_ansi_prototypes)
124	    if test $ac_cv_lbl_cc_ansi_prototypes = no ; then
125		    case "$host_os" in
126
127		    hpux*)
128			    AC_MSG_CHECKING(for HP-UX ansi compiler ($CC -Aa -D_HPUX_SOURCE))
129			    savedcflags="$CFLAGS"
130			    CFLAGS="-Aa -D_HPUX_SOURCE $CFLAGS"
131			    AC_CACHE_VAL(ac_cv_lbl_cc_hpux_cc_aa,
132				AC_TRY_COMPILE(
133				    [#include <sys/types.h>],
134				    [int frob(int, char *)],
135				    ac_cv_lbl_cc_hpux_cc_aa=yes,
136				    ac_cv_lbl_cc_hpux_cc_aa=no))
137			    AC_MSG_RESULT($ac_cv_lbl_cc_hpux_cc_aa)
138			    if test $ac_cv_lbl_cc_hpux_cc_aa = no ; then
139				    AC_MSG_ERROR(see the INSTALL doc for more info)
140			    fi
141			    CFLAGS="$savedcflags"
142			    $1="-Aa $$1"
143			    AC_DEFINE(_HPUX_SOURCE,1,[needed on HP-UX])
144			    ;;
145
146		    osf*)
147			    AC_MSG_CHECKING(for ansi mode in DEC compiler ($CC -std1))
148			    savedcflags="$CFLAGS"
149			    CFLAGS="-std1"
150			    AC_CACHE_VAL(ac_cv_lbl_cc_osf1_cc_std1,
151				AC_TRY_COMPILE(
152				    [#include <sys/types.h>],
153				    [int frob(int, char *)],
154				    ac_cv_lbl_cc_osf1_cc_std1=yes,
155				    ac_cv_lbl_cc_osf1_cc_std1=no))
156			    AC_MSG_RESULT($ac_cv_lbl_cc_osf1_cc_std1)
157			    if test $ac_cv_lbl_cc_osf1_cc_std1 = no ; then
158				    AC_MSG_ERROR(see the INSTALL doc for more info)
159			    fi
160			    CFLAGS="$savedcflags"
161			    $1="-std1 $$1"
162			    ;;
163
164		    *)
165			    AC_MSG_ERROR(see the INSTALL doc for more info)
166			    ;;
167		    esac
168	    fi
169	    $2="$$2 -I/usr/local/include"
170	    LDFLAGS="$LDFLAGS -L/usr/local/lib"
171
172	    case "$host_os" in
173
174	    irix*)
175		    $1="$$1 -xansi -signed -g3"
176		    ;;
177
178	    osf*)
179	    	    #
180		    # Presumed to be DEC OSF/1, Digital UNIX, or
181		    # Tru64 UNIX.
182		    #
183		    $1="$$1 -g3"
184		    ;;
185
186	    ultrix*)
187		    AC_MSG_CHECKING(that Ultrix $CC hacks const in prototypes)
188		    AC_CACHE_VAL(ac_cv_lbl_cc_const_proto,
189			AC_TRY_COMPILE(
190			    [#include <sys/types.h>],
191			    [struct a { int b; };
192			    void c(const struct a *)],
193			    ac_cv_lbl_cc_const_proto=yes,
194			    ac_cv_lbl_cc_const_proto=no))
195		    AC_MSG_RESULT($ac_cv_lbl_cc_const_proto)
196		    if test $ac_cv_lbl_cc_const_proto = no ; then
197			    AC_DEFINE(const,[],
198			        [to handle Ultrix compilers that don't support const in prototypes])
199		    fi
200		    ;;
201	    esac
202    fi
203])
204
205dnl
206dnl Determine what options are needed to build a shared library
207dnl
208dnl usage:
209dnl
210dnl	AC_LBL_SHLIBS_INIT
211dnl
212dnl results:
213dnl
214dnl	V_CCOPT (modified to build position-independent code)
215dnl	V_SHLIB_CMD
216dnl	V_SHLIB_OPT
217dnl	V_SONAME_OPT
218dnl	V_RPATH_OPT
219dnl
220AC_DEFUN(AC_LBL_SHLIBS_INIT,
221    [AC_PREREQ(2.50)
222    if test "$GCC" = yes ; then
223	    #
224	    # On platforms where we build a shared library:
225	    #
226	    #	add options to generate position-independent code,
227	    #	if necessary (it's the default in AIX and Darwin/OS X);
228	    #
229	    #	define option to set the soname of the shared library,
230	    #	if the OS supports that;
231	    #
232	    #	add options to specify, at link time, a directory to
233	    #	add to the run-time search path, if that's necessary.
234	    #
235	    V_SHLIB_CMD="\$(CC)"
236	    V_SHLIB_OPT="-shared"
237	    case "$host_os" in
238
239	    aix*)
240		    ;;
241
242	    freebsd*|netbsd*|openbsd*|dragonfly*|linux*|osf*)
243	    	    #
244		    # Platforms where the linker is the GNU linker
245		    # or accepts command-line arguments like
246		    # those the GNU linker accepts.
247		    #
248		    # Some instruction sets require -fPIC on some
249		    # operating systems.  Check for them.  If you
250		    # have a combination that requires it, add it
251		    # here.
252		    #
253		    PIC_OPT=-fpic
254		    case "$host_cpu" in
255
256		    sparc64*)
257			case "$host_os" in
258
259			freebsd*)
260			    PIC_OPT=-fPIC
261			    ;;
262			esac
263			;;
264		    esac
265		    V_CCOPT="$V_CCOPT $PIC_OPT"
266		    V_SONAME_OPT="-Wl,-soname,"
267		    V_RPATH_OPT="-Wl,-rpath,"
268		    ;;
269
270	    hpux*)
271		    V_CCOPT="$V_CCOPT -fpic"
272	    	    #
273		    # XXX - this assumes GCC is using the HP linker,
274		    # rather than the GNU linker, and that the "+h"
275		    # option is used on all HP-UX platforms, both .sl
276		    # and .so.
277		    #
278		    V_SONAME_OPT="-Wl,+h,"
279		    #
280		    # By default, directories specifed with -L
281		    # are added to the run-time search path, so
282		    # we don't add them in pcap-config.
283		    #
284		    ;;
285
286	    solaris*)
287		    V_CCOPT="$V_CCOPT -fpic"
288		    #
289		    # XXX - this assumes GCC is using the Sun linker,
290		    # rather than the GNU linker.
291		    #
292		    V_SONAME_OPT="-Wl,-h,"
293		    V_RPATH_OPT="-Wl,-R,"
294		    ;;
295	    esac
296    else
297	    #
298	    # Set the appropriate compiler flags and, on platforms
299	    # where we build a shared library:
300	    #
301	    #	add options to generate position-independent code,
302	    #	if necessary (it's the default in Darwin/OS X);
303	    #
304	    #	if we generate ".so" shared libraries, define the
305	    #	appropriate options for building the shared library;
306	    #
307	    #	add options to specify, at link time, a directory to
308	    #	add to the run-time search path, if that's necessary.
309	    #
310	    # Note: spaces after V_SONAME_OPT are significant; on
311	    # some platforms the soname is passed with a GCC-like
312	    # "-Wl,-soname,{soname}" option, with the soname part
313	    # of the option, while on other platforms the C compiler
314	    # driver takes it as a regular option with the soname
315	    # following the option.  The same applies to V_RPATH_OPT.
316	    #
317	    case "$host_os" in
318
319	    aix*)
320		    V_SHLIB_CMD="\$(CC)"
321		    V_SHLIB_OPT="-G -bnoentry -bexpall"
322		    ;;
323
324	    freebsd*|netbsd*|openbsd*|dragonfly*|linux*)
325		    #
326		    # "cc" is GCC.
327		    #
328		    V_CCOPT="$V_CCOPT -fpic"
329		    V_SHLIB_CMD="\$(CC)"
330		    V_SHLIB_OPT="-shared"
331		    V_SONAME_OPT="-Wl,-soname,"
332		    V_RPATH_OPT="-Wl,-rpath,"
333		    ;;
334
335	    hpux*)
336		    V_CCOPT="$V_CCOPT +z"
337		    V_SHLIB_CMD="\$(LD)"
338		    V_SHLIB_OPT="-b"
339		    V_SONAME_OPT="+h "
340		    #
341		    # By default, directories specifed with -L
342		    # are added to the run-time search path, so
343		    # we don't add them in pcap-config.
344		    #
345		    ;;
346
347	    osf*)
348	    	    #
349		    # Presumed to be DEC OSF/1, Digital UNIX, or
350		    # Tru64 UNIX.
351		    #
352		    V_SHLIB_CMD="\$(CC)"
353		    V_SHLIB_OPT="-shared"
354		    V_SONAME_OPT="-soname "
355		    V_RPATH_OPT="-rpath "
356		    ;;
357
358	    solaris*)
359		    V_CCOPT="$V_CCOPT -Kpic"
360		    V_SHLIB_CMD="\$(CC)"
361		    V_SHLIB_OPT="-G"
362		    V_SONAME_OPT="-h "
363		    V_RPATH_OPT="-R"
364		    ;;
365	    esac
366    fi
367])
368
369#
370# Try compiling a sample of the type of code that appears in
371# gencode.c with "inline", "__inline__", and "__inline".
372#
373# Autoconf's AC_C_INLINE, at least in autoconf 2.13, isn't good enough,
374# as it just tests whether a function returning "int" can be inlined;
375# at least some versions of HP's C compiler can inline that, but can't
376# inline a function that returns a struct pointer.
377#
378# Make sure we use the V_CCOPT flags, because some of those might
379# disable inlining.
380#
381AC_DEFUN(AC_LBL_C_INLINE,
382    [AC_MSG_CHECKING(for inline)
383    save_CFLAGS="$CFLAGS"
384    CFLAGS="$V_CCOPT"
385    AC_CACHE_VAL(ac_cv_lbl_inline, [
386	ac_cv_lbl_inline=""
387	ac_lbl_cc_inline=no
388	for ac_lbl_inline in inline __inline__ __inline
389	do
390	    AC_TRY_COMPILE(
391		[#define inline $ac_lbl_inline
392		static inline struct iltest *foo(void);
393		struct iltest {
394		    int iltest1;
395		    int iltest2;
396		};
397
398		static inline struct iltest *
399		foo()
400		{
401		    static struct iltest xxx;
402
403		    return &xxx;
404		}],,ac_lbl_cc_inline=yes,)
405	    if test "$ac_lbl_cc_inline" = yes ; then
406		break;
407	    fi
408	done
409	if test "$ac_lbl_cc_inline" = yes ; then
410	    ac_cv_lbl_inline=$ac_lbl_inline
411	fi])
412    CFLAGS="$save_CFLAGS"
413    if test ! -z "$ac_cv_lbl_inline" ; then
414	AC_MSG_RESULT($ac_cv_lbl_inline)
415    else
416	AC_MSG_RESULT(no)
417    fi
418    AC_DEFINE_UNQUOTED(inline, $ac_cv_lbl_inline, [Define as token for inline if inlining supported])])
419
420dnl
421dnl If using gcc, make sure we have ANSI ioctl definitions
422dnl
423dnl usage:
424dnl
425dnl	AC_LBL_FIXINCLUDES
426dnl
427AC_DEFUN(AC_LBL_FIXINCLUDES,
428    [if test "$GCC" = yes ; then
429	    AC_MSG_CHECKING(for ANSI ioctl definitions)
430	    AC_CACHE_VAL(ac_cv_lbl_gcc_fixincludes,
431		AC_TRY_COMPILE(
432		    [/*
433		     * This generates a "duplicate case value" when fixincludes
434		     * has not be run.
435		     */
436#		include <sys/types.h>
437#		include <sys/time.h>
438#		include <sys/ioctl.h>
439#		ifdef HAVE_SYS_IOCCOM_H
440#		include <sys/ioccom.h>
441#		endif],
442		    [switch (0) {
443		    case _IO('A', 1):;
444		    case _IO('B', 1):;
445		    }],
446		    ac_cv_lbl_gcc_fixincludes=yes,
447		    ac_cv_lbl_gcc_fixincludes=no))
448	    AC_MSG_RESULT($ac_cv_lbl_gcc_fixincludes)
449	    if test $ac_cv_lbl_gcc_fixincludes = no ; then
450		    # Don't cache failure
451		    unset ac_cv_lbl_gcc_fixincludes
452		    AC_MSG_ERROR(see the INSTALL for more info)
453	    fi
454    fi])
455
456dnl
457dnl Check for flex, default to lex
458dnl Require flex 2.4 or higher
459dnl Check for bison, default to yacc
460dnl Default to lex/yacc if both flex and bison are not available
461dnl Define the yy prefix string if using flex and bison
462dnl
463dnl usage:
464dnl
465dnl	AC_LBL_LEX_AND_YACC(lex, yacc, yyprefix)
466dnl
467dnl results:
468dnl
469dnl	$1 (lex set)
470dnl	$2 (yacc appended)
471dnl	$3 (optional flex and bison -P prefix)
472dnl
473AC_DEFUN(AC_LBL_LEX_AND_YACC,
474    [AC_ARG_WITH(flex, [  --without-flex          don't use flex])
475    AC_ARG_WITH(bison, [  --without-bison         don't use bison])
476    if test "$with_flex" = no ; then
477	    $1=lex
478    else
479	    AC_CHECK_PROGS($1, flex, lex)
480    fi
481    if test "$$1" = flex ; then
482	    # The -V flag was added in 2.4
483	    AC_MSG_CHECKING(for flex 2.4 or higher)
484	    AC_CACHE_VAL(ac_cv_lbl_flex_v24,
485		if flex -V >/dev/null 2>&1; then
486			ac_cv_lbl_flex_v24=yes
487		else
488			ac_cv_lbl_flex_v24=no
489		fi)
490	    AC_MSG_RESULT($ac_cv_lbl_flex_v24)
491	    if test $ac_cv_lbl_flex_v24 = no ; then
492		    s="2.4 or higher required"
493		    AC_MSG_WARN(ignoring obsolete flex executable ($s))
494		    $1=lex
495	    fi
496    fi
497    if test "$with_bison" = no ; then
498	    $2=yacc
499    else
500	    AC_CHECK_PROGS($2, bison, yacc)
501    fi
502    if test "$$2" = bison ; then
503	    $2="$$2 -y"
504    fi
505    if test "$$1" != lex -a "$$2" = yacc -o "$$1" = lex -a "$$2" != yacc ; then
506	    AC_MSG_WARN(don't have both flex and bison; reverting to lex/yacc)
507	    $1=lex
508	    $2=yacc
509    fi
510    if test "$$1" = flex -a -n "$3" ; then
511	    $1="$$1 -P$3"
512	    $2="$$2 -p $3"
513    fi])
514
515dnl
516dnl Checks to see if union wait is used with WEXITSTATUS()
517dnl
518dnl usage:
519dnl
520dnl	AC_LBL_UNION_WAIT
521dnl
522dnl results:
523dnl
524dnl	DECLWAITSTATUS (defined)
525dnl
526AC_DEFUN(AC_LBL_UNION_WAIT,
527    [AC_MSG_CHECKING(if union wait is used)
528    AC_CACHE_VAL(ac_cv_lbl_union_wait,
529	AC_TRY_COMPILE([
530#	include <sys/types.h>
531#	include <sys/wait.h>],
532	    [int status;
533	    u_int i = WEXITSTATUS(status);
534	    u_int j = waitpid(0, &status, 0);],
535	    ac_cv_lbl_union_wait=no,
536	    ac_cv_lbl_union_wait=yes))
537    AC_MSG_RESULT($ac_cv_lbl_union_wait)
538    if test $ac_cv_lbl_union_wait = yes ; then
539	    AC_DEFINE(DECLWAITSTATUS,union wait,[type for wait])
540    else
541	    AC_DEFINE(DECLWAITSTATUS,int,[type for wait])
542    fi])
543
544dnl
545dnl Checks to see if the sockaddr struct has the 4.4 BSD sa_len member
546dnl
547dnl usage:
548dnl
549dnl	AC_LBL_SOCKADDR_SA_LEN
550dnl
551dnl results:
552dnl
553dnl	HAVE_SOCKADDR_SA_LEN (defined)
554dnl
555AC_DEFUN(AC_LBL_SOCKADDR_SA_LEN,
556    [AC_MSG_CHECKING(if sockaddr struct has the sa_len member)
557    AC_CACHE_VAL(ac_cv_lbl_sockaddr_has_sa_len,
558	AC_TRY_COMPILE([
559#	include <sys/types.h>
560#	include <sys/socket.h>],
561	[u_int i = sizeof(((struct sockaddr *)0)->sa_len)],
562	ac_cv_lbl_sockaddr_has_sa_len=yes,
563	ac_cv_lbl_sockaddr_has_sa_len=no))
564    AC_MSG_RESULT($ac_cv_lbl_sockaddr_has_sa_len)
565    if test $ac_cv_lbl_sockaddr_has_sa_len = yes ; then
566	    AC_DEFINE(HAVE_SOCKADDR_SA_LEN,1,[if struct sockaddr has the sa_len member])
567    fi])
568
569dnl
570dnl Checks to see if there's a sockaddr_storage structure
571dnl
572dnl usage:
573dnl
574dnl	AC_LBL_SOCKADDR_STORAGE
575dnl
576dnl results:
577dnl
578dnl	HAVE_SOCKADDR_STORAGE (defined)
579dnl
580AC_DEFUN(AC_LBL_SOCKADDR_STORAGE,
581    [AC_MSG_CHECKING(if sockaddr_storage struct exists)
582    AC_CACHE_VAL(ac_cv_lbl_has_sockaddr_storage,
583	AC_TRY_COMPILE([
584#	include <sys/types.h>
585#	include <sys/socket.h>],
586	[u_int i = sizeof (struct sockaddr_storage)],
587	ac_cv_lbl_has_sockaddr_storage=yes,
588	ac_cv_lbl_has_sockaddr_storage=no))
589    AC_MSG_RESULT($ac_cv_lbl_has_sockaddr_storage)
590    if test $ac_cv_lbl_has_sockaddr_storage = yes ; then
591	    AC_DEFINE(HAVE_SOCKADDR_STORAGE,1,[if struct sockaddr_storage exists])
592    fi])
593
594dnl
595dnl Checks to see if the dl_hp_ppa_info_t struct has the HP-UX 11.00
596dnl dl_module_id_1 member
597dnl
598dnl usage:
599dnl
600dnl	AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1
601dnl
602dnl results:
603dnl
604dnl	HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1 (defined)
605dnl
606dnl NOTE: any compile failure means we conclude that it doesn't have
607dnl that member, so if we don't have DLPI, don't have a <sys/dlpi_ext.h>
608dnl header, or have one that doesn't declare a dl_hp_ppa_info_t type,
609dnl we conclude it doesn't have that member (which is OK, as either we
610dnl won't be using code that would use that member, or we wouldn't
611dnl compile in any case).
612dnl
613AC_DEFUN(AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1,
614    [AC_MSG_CHECKING(if dl_hp_ppa_info_t struct has dl_module_id_1 member)
615    AC_CACHE_VAL(ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1,
616	AC_TRY_COMPILE([
617#	include <sys/types.h>
618#	include <sys/dlpi.h>
619#	include <sys/dlpi_ext.h>],
620	[u_int i = sizeof(((dl_hp_ppa_info_t *)0)->dl_module_id_1)],
621	ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=yes,
622	ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=no))
623    AC_MSG_RESULT($ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1)
624    if test $ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1 = yes ; then
625	    AC_DEFINE(HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1,1,[if ppa_info_t_dl_module_id exists])
626    fi])
627
628dnl
629dnl Checks to see if -R is used
630dnl
631dnl usage:
632dnl
633dnl	AC_LBL_HAVE_RUN_PATH
634dnl
635dnl results:
636dnl
637dnl	ac_cv_lbl_have_run_path (yes or no)
638dnl
639AC_DEFUN(AC_LBL_HAVE_RUN_PATH,
640    [AC_MSG_CHECKING(for ${CC-cc} -R)
641    AC_CACHE_VAL(ac_cv_lbl_have_run_path,
642	[echo 'main(){}' > conftest.c
643	${CC-cc} -o conftest conftest.c -R/a1/b2/c3 >conftest.out 2>&1
644	if test ! -s conftest.out ; then
645		ac_cv_lbl_have_run_path=yes
646	else
647		ac_cv_lbl_have_run_path=no
648	fi
649	rm -f -r conftest*])
650    AC_MSG_RESULT($ac_cv_lbl_have_run_path)
651    ])
652
653dnl
654dnl Checks to see if unaligned memory accesses fail
655dnl
656dnl usage:
657dnl
658dnl	AC_LBL_UNALIGNED_ACCESS
659dnl
660dnl results:
661dnl
662dnl	LBL_ALIGN (DEFINED)
663dnl
664AC_DEFUN(AC_LBL_UNALIGNED_ACCESS,
665    [AC_MSG_CHECKING(if unaligned accesses fail)
666    AC_CACHE_VAL(ac_cv_lbl_unaligned_fail,
667	[case "$host_cpu" in
668
669	#
670	# These are CPU types where:
671	#
672	#	the CPU faults on an unaligned access, but at least some
673	#	OSes that support that CPU catch the fault and simulate
674	#	the unaligned access (e.g., Alpha/{Digital,Tru64} UNIX) -
675	#	the simulation is slow, so we don't want to use it;
676	#
677	#	the CPU, I infer (from the old
678	#
679	# XXX: should also check that they don't do weird things (like on arm)
680	#
681	#	comment) doesn't fault on unaligned accesses, but doesn't
682	#	do a normal unaligned fetch, either (e.g., presumably, ARM);
683	#
684	#	for whatever reason, the test program doesn't work
685	#	(this has been claimed to be the case for several of those
686	#	CPUs - I don't know what the problem is; the problem
687	#	was reported as "the test program dumps core" for SuperH,
688	#	but that's what the test program is *supposed* to do -
689	#	it dumps core before it writes anything, so the test
690	#	for an empty output file should find an empty output
691	#	file and conclude that unaligned accesses don't work).
692	#
693	# This run-time test won't work if you're cross-compiling, so
694	# in order to support cross-compiling for a particular CPU,
695	# we have to wire in the list of CPU types anyway, as far as
696	# I know, so perhaps we should just have a set of CPUs on
697	# which we know it doesn't work, a set of CPUs on which we
698	# know it does work, and have the script just fail on other
699	# cpu types and update it when such a failure occurs.
700	#
701	alpha*|arm*|bfin*|hp*|mips*|sh*|sparc*|ia64|nv1)
702		ac_cv_lbl_unaligned_fail=yes
703		;;
704
705	*)
706		cat >conftest.c <<EOF
707#		include <sys/types.h>
708#		include <sys/wait.h>
709#		include <stdio.h>
710		unsigned char a[[5]] = { 1, 2, 3, 4, 5 };
711		main() {
712		unsigned int i;
713		pid_t pid;
714		int status;
715		/* avoid "core dumped" message */
716		pid = fork();
717		if (pid <  0)
718			exit(2);
719		if (pid > 0) {
720			/* parent */
721			pid = waitpid(pid, &status, 0);
722			if (pid < 0)
723				exit(3);
724			exit(!WIFEXITED(status));
725		}
726		/* child */
727		i = *(unsigned int *)&a[[1]];
728		printf("%d\n", i);
729		exit(0);
730		}
731EOF
732		${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS \
733		    conftest.c $LIBS >/dev/null 2>&1
734		if test ! -x conftest ; then
735			dnl failed to compile for some reason
736			ac_cv_lbl_unaligned_fail=yes
737		else
738			./conftest >conftest.out
739			if test ! -s conftest.out ; then
740				ac_cv_lbl_unaligned_fail=yes
741			else
742				ac_cv_lbl_unaligned_fail=no
743			fi
744		fi
745		rm -f -r conftest* core core.conftest
746		;;
747	esac])
748    AC_MSG_RESULT($ac_cv_lbl_unaligned_fail)
749    if test $ac_cv_lbl_unaligned_fail = yes ; then
750	    AC_DEFINE(LBL_ALIGN,1,[if unaligned access fails])
751    fi])
752
753dnl
754dnl If using gcc and the file .devel exists:
755dnl	Compile with -g (if supported) and -Wall
756dnl	If using gcc 2 or later, do extra prototype checking
757dnl	If an os prototype include exists, symlink os-proto.h to it
758dnl
759dnl usage:
760dnl
761dnl	AC_LBL_DEVEL(copt)
762dnl
763dnl results:
764dnl
765dnl	$1 (copt appended)
766dnl	HAVE_OS_PROTO_H (defined)
767dnl	os-proto.h (symlinked)
768dnl
769AC_DEFUN(AC_LBL_DEVEL,
770    [rm -f os-proto.h
771    if test "${LBL_CFLAGS+set}" = set; then
772	    $1="$$1 ${LBL_CFLAGS}"
773    fi
774    if test -f .devel ; then
775	    if test "$GCC" = yes ; then
776		    if test "${LBL_CFLAGS+set}" != set; then
777			    if test "$ac_cv_prog_cc_g" = yes ; then
778				    $1="-g $$1"
779			    fi
780			    $1="$$1 -Wall"
781			    if test $ac_cv_lbl_gcc_vers -gt 1 ; then
782				    $1="$$1 -Wmissing-prototypes -Wstrict-prototypes"
783			    fi
784		    fi
785	    else
786		    case "$host_os" in
787
788		    irix6*)
789			    V_CCOPT="$V_CCOPT -n32"
790			    ;;
791
792		    *)
793			    ;;
794		    esac
795	    fi
796	    os=`echo $host_os | sed -e 's/\([[0-9]][[0-9]]*\)[[^0-9]].*$/\1/'`
797	    name="lbl/os-$os.h"
798	    if test -f $name ; then
799		    ln -s $name os-proto.h
800		    AC_DEFINE(HAVE_OS_PROTO_H, 1,
801			[if there's an os_proto.h for this platform, to use additional prototypes])
802	    else
803		    AC_MSG_WARN(can't find $name)
804	    fi
805    fi])
806
807dnl
808dnl Improved version of AC_CHECK_LIB
809dnl
810dnl Thanks to John Hawkinson (jhawk@mit.edu)
811dnl
812dnl usage:
813dnl
814dnl	AC_LBL_CHECK_LIB(LIBRARY, FUNCTION [, ACTION-IF-FOUND [,
815dnl	    ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
816dnl
817dnl results:
818dnl
819dnl	LIBS
820dnl
821dnl XXX - "AC_LBL_LIBRARY_NET" was redone to use "AC_SEARCH_LIBS"
822dnl rather than "AC_LBL_CHECK_LIB", so this isn't used any more.
823dnl We keep it around for reference purposes in case it's ever
824dnl useful in the future.
825dnl
826
827define(AC_LBL_CHECK_LIB,
828[AC_MSG_CHECKING([for $2 in -l$1])
829dnl Use a cache variable name containing the library, function
830dnl name, and extra libraries to link with, because the test really is
831dnl for library $1 defining function $2, when linked with potinal
832dnl library $5, not just for library $1.  Separate tests with the same
833dnl $1 and different $2's or $5's may have different results.
834ac_lib_var=`echo $1['_']$2['_']$5 | sed 'y%./+- %__p__%'`
835AC_CACHE_VAL(ac_cv_lbl_lib_$ac_lib_var,
836[ac_save_LIBS="$LIBS"
837LIBS="-l$1 $5 $LIBS"
838AC_TRY_LINK(dnl
839ifelse([$2], [main], , dnl Avoid conflicting decl of main.
840[/* Override any gcc2 internal prototype to avoid an error.  */
841]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus
842extern "C"
843#endif
844])dnl
845[/* We use char because int might match the return type of a gcc2
846    builtin and then its argument prototype would still apply.  */
847char $2();
848]),
849	    [$2()],
850	    eval "ac_cv_lbl_lib_$ac_lib_var=yes",
851	    eval "ac_cv_lbl_lib_$ac_lib_var=no")
852LIBS="$ac_save_LIBS"
853])dnl
854if eval "test \"`echo '$ac_cv_lbl_lib_'$ac_lib_var`\" = yes"; then
855  AC_MSG_RESULT(yes)
856  ifelse([$3], ,
857[changequote(, )dnl
858  ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \
859    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
860changequote([, ])dnl
861  AC_DEFINE_UNQUOTED($ac_tr_lib)
862  LIBS="-l$1 $LIBS"
863], [$3])
864else
865  AC_MSG_RESULT(no)
866ifelse([$4], , , [$4
867])dnl
868fi
869])
870
871dnl
872dnl AC_LBL_LIBRARY_NET
873dnl
874dnl This test is for network applications that need socket() and
875dnl gethostbyname() -ish functions.  Under Solaris, those applications
876dnl need to link with "-lsocket -lnsl".  Under IRIX, they need to link
877dnl with "-lnsl" but should *not* link with "-lsocket" because
878dnl libsocket.a breaks a number of things (for instance:
879dnl gethostbyname() under IRIX 5.2, and snoop sockets under most
880dnl versions of IRIX).
881dnl
882dnl Unfortunately, many application developers are not aware of this,
883dnl and mistakenly write tests that cause -lsocket to be used under
884dnl IRIX.  It is also easy to write tests that cause -lnsl to be used
885dnl under operating systems where neither are necessary (or useful),
886dnl such as SunOS 4.1.4, which uses -lnsl for TLI.
887dnl
888dnl This test exists so that every application developer does not test
889dnl this in a different, and subtly broken fashion.
890
891dnl It has been argued that this test should be broken up into two
892dnl seperate tests, one for the resolver libraries, and one for the
893dnl libraries necessary for using Sockets API. Unfortunately, the two
894dnl are carefully intertwined and allowing the autoconf user to use
895dnl them independantly potentially results in unfortunate ordering
896dnl dependancies -- as such, such component macros would have to
897dnl carefully use indirection and be aware if the other components were
898dnl executed. Since other autoconf macros do not go to this trouble,
899dnl and almost no applications use sockets without the resolver, this
900dnl complexity has not been implemented.
901dnl
902dnl The check for libresolv is in case you are attempting to link
903dnl statically and happen to have a libresolv.a lying around (and no
904dnl libnsl.a).
905dnl
906AC_DEFUN(AC_LBL_LIBRARY_NET, [
907    # Most operating systems have gethostbyname() in the default searched
908    # libraries (i.e. libc):
909    # Some OSes (eg. Solaris) place it in libnsl
910    # Some strange OSes (SINIX) have it in libsocket:
911    AC_SEARCH_LIBS(gethostbyname, nsl socket resolv)
912    # Unfortunately libsocket sometimes depends on libnsl and
913    # AC_SEARCH_LIBS isn't up to the task of handling dependencies like this.
914    if test "$ac_cv_search_gethostbyname" = "no"
915    then
916	AC_CHECK_LIB(socket, gethostbyname,
917                     LIBS="-lsocket -lnsl $LIBS", , -lnsl)
918    fi
919    AC_SEARCH_LIBS(socket, socket, ,
920	AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl))
921    # DLPI needs putmsg under HPUX so test for -lstr while we're at it
922    AC_SEARCH_LIBS(putmsg, str)
923    ])
924
925dnl
926dnl Test for __attribute__
927dnl
928
929AC_DEFUN(AC_C___ATTRIBUTE__, [
930AC_MSG_CHECKING(for __attribute__)
931AC_CACHE_VAL(ac_cv___attribute__, [
932AC_COMPILE_IFELSE(
933  AC_LANG_SOURCE([[
934#include <stdlib.h>
935
936static void foo(void) __attribute__ ((noreturn));
937
938static void
939foo(void)
940{
941  exit(1);
942}
943
944int
945main(int argc, char **argv)
946{
947  foo();
948}
949  ]]),
950ac_cv___attribute__=yes,
951ac_cv___attribute__=no)])
952if test "$ac_cv___attribute__" = "yes"; then
953  AC_DEFINE(HAVE___ATTRIBUTE__, 1, [define if your compiler has __attribute__])
954  V_DEFS="$V_DEFS -D_U_=\"__attribute__((unused))\""
955else
956  V_DEFS="$V_DEFS -D_U_=\"\""
957fi
958AC_MSG_RESULT($ac_cv___attribute__)
959])
960
961dnl
962dnl Checks to see if tpacket_stats is defined in linux/if_packet.h
963dnl If so then pcap-linux.c can use this to report proper statistics.
964dnl
965dnl -Scott Barron
966dnl
967AC_DEFUN(AC_LBL_TPACKET_STATS,
968   [AC_MSG_CHECKING(if if_packet.h has tpacket_stats defined)
969   AC_CACHE_VAL(ac_cv_lbl_tpacket_stats,
970   AC_TRY_COMPILE([
971#  include <linux/if_packet.h>],
972   [struct tpacket_stats stats],
973   ac_cv_lbl_tpacket_stats=yes,
974   ac_cv_lbl_tpacket_stats=no))
975   AC_MSG_RESULT($ac_cv_lbl_tpacket_stats)
976   if test $ac_cv_lbl_tpacket_stats = yes; then
977       AC_DEFINE(HAVE_TPACKET_STATS,1,[if if_packet.h has tpacket_stats defined])
978   fi])
979
980dnl
981dnl Checks to see if the tpacket_auxdata struct has a tp_vlan_tci member.
982dnl
983dnl usage:
984dnl
985dnl	AC_LBL_LINUX_TPACKET_AUXDATA_TP_VLAN_TCI
986dnl
987dnl results:
988dnl
989dnl	HAVE_LINUX_TPACKET_AUXDATA_TP_VLAN_TCI (defined)
990dnl
991dnl NOTE: any compile failure means we conclude that it doesn't have
992dnl that member, so if we don't have tpacket_auxdata, we conclude it
993dnl doesn't have that member (which is OK, as either we won't be using
994dnl code that would use that member, or we wouldn't compile in any case).
995dnl
996AC_DEFUN(AC_LBL_LINUX_TPACKET_AUXDATA_TP_VLAN_TCI,
997    [AC_MSG_CHECKING(if tpacket_auxdata struct has tp_vlan_tci member)
998    AC_CACHE_VAL(ac_cv_lbl_linux_tpacket_auxdata_tp_vlan_tci,
999	AC_TRY_COMPILE([
1000#	include <sys/types.h>
1001#	include <linux/if_packet.h>],
1002	[u_int i = sizeof(((struct tpacket_auxdata *)0)->tp_vlan_tci)],
1003	ac_cv_lbl_linux_tpacket_auxdata_tp_vlan_tci=yes,
1004	ac_cv_lbl_linux_tpacket_auxdata_tp_vlan_tci=no))
1005    AC_MSG_RESULT($ac_cv_lbl_linux_tpacket_auxdata_tp_vlan_tci)
1006    if test $ac_cv_lbl_linux_tpacket_auxdata_tp_vlan_tci = yes ; then
1007	    HAVE_LINUX_TPACKET_AUXDATA=tp_vlan_tci
1008	    AC_SUBST(HAVE_LINUX_TPACKET_AUXDATA)
1009	    AC_DEFINE(HAVE_LINUX_TPACKET_AUXDATA_TP_VLAN_TCI,1,[if tp_vlan_tci exists])
1010    fi])
1011
1012dnl
1013dnl Checks to see if Solaris has the dl_passive_req_t struct defined
1014dnl in <sys/dlpi.h>.
1015dnl
1016dnl usage:
1017dnl
1018dnl	AC_LBL_DL_PASSIVE_REQ_T
1019dnl
1020dnl results:
1021dnl 
1022dnl 	HAVE_DLPI_PASSIVE (defined)
1023dnl
1024AC_DEFUN(AC_LBL_DL_PASSIVE_REQ_T,
1025        [AC_MSG_CHECKING(if dl_passive_req_t struct exists)
1026       AC_CACHE_VAL(ac_cv_lbl_has_dl_passive_req_t,
1027                AC_TRY_COMPILE([
1028#       include <sys/types.h>
1029#       include <sys/dlpi.h>],
1030        [u_int i = sizeof(dl_passive_req_t)],
1031        ac_cv_lbl_has_dl_passive_req_t=yes,
1032        ac_cv_lbl_has_dl_passive_req_t=no))
1033    AC_MSG_RESULT($ac_cv_lbl_has_dl_passive_req_t)
1034    if test $ac_cv_lbl_has_dl_passive_req_t = yes ; then
1035            AC_DEFINE(HAVE_DLPI_PASSIVE,1,[if passive_req_t primitive
1036		exists])
1037    fi])
1038