xref: /minix3/external/bsd/tcpdump/dist/aclocal.m4 (revision b636d99d91c3d54204248f643c14627405d4afd1)
1*b636d99dSDavid van Moolenbroekdnl Copyright (c) 1995, 1996, 1997, 1998
2*b636d99dSDavid van Moolenbroekdnl	The Regents of the University of California.  All rights reserved.
3*b636d99dSDavid van Moolenbroekdnl
4*b636d99dSDavid van Moolenbroekdnl Redistribution and use in source and binary forms, with or without
5*b636d99dSDavid van Moolenbroekdnl modification, are permitted provided that: (1) source code distributions
6*b636d99dSDavid van Moolenbroekdnl retain the above copyright notice and this paragraph in its entirety, (2)
7*b636d99dSDavid van Moolenbroekdnl distributions including binary code include the above copyright notice and
8*b636d99dSDavid van Moolenbroekdnl this paragraph in its entirety in the documentation or other materials
9*b636d99dSDavid van Moolenbroekdnl provided with the distribution, and (3) all advertising materials mentioning
10*b636d99dSDavid van Moolenbroekdnl features or use of this software display the following acknowledgement:
11*b636d99dSDavid van Moolenbroekdnl ``This product includes software developed by the University of California,
12*b636d99dSDavid van Moolenbroekdnl Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
13*b636d99dSDavid van Moolenbroekdnl the University nor the names of its contributors may be used to endorse
14*b636d99dSDavid van Moolenbroekdnl or promote products derived from this software without specific prior
15*b636d99dSDavid van Moolenbroekdnl written permission.
16*b636d99dSDavid van Moolenbroekdnl THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
17*b636d99dSDavid van Moolenbroekdnl WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
18*b636d99dSDavid van Moolenbroekdnl MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
19*b636d99dSDavid van Moolenbroekdnl
20*b636d99dSDavid van Moolenbroekdnl LBL autoconf macros
21*b636d99dSDavid van Moolenbroekdnl
22*b636d99dSDavid van Moolenbroek
23*b636d99dSDavid van Moolenbroekdnl
24*b636d99dSDavid van Moolenbroekdnl Do whatever AC_LBL_C_INIT work is necessary before using AC_PROG_CC.
25*b636d99dSDavid van Moolenbroekdnl
26*b636d99dSDavid van Moolenbroekdnl It appears that newer versions of autoconf (2.64 and later) will,
27*b636d99dSDavid van Moolenbroekdnl if you use AC_TRY_COMPILE in a macro, stick AC_PROG_CC at the
28*b636d99dSDavid van Moolenbroekdnl beginning of the macro, even if the macro itself calls AC_PROG_CC.
29*b636d99dSDavid van Moolenbroekdnl See the "Prerequisite Macros" and "Expanded Before Required" sections
30*b636d99dSDavid van Moolenbroekdnl in the Autoconf documentation.
31*b636d99dSDavid van Moolenbroekdnl
32*b636d99dSDavid van Moolenbroekdnl This causes a steaming heap of fail in our case, as we were, in
33*b636d99dSDavid van Moolenbroekdnl AC_LBL_C_INIT, doing the tests we now do in AC_LBL_C_INIT_BEFORE_CC,
34*b636d99dSDavid van Moolenbroekdnl calling AC_PROG_CC, and then doing the tests we now do in
35*b636d99dSDavid van Moolenbroekdnl AC_LBL_C_INIT.  Now, we run AC_LBL_C_INIT_BEFORE_CC, AC_PROG_CC,
36*b636d99dSDavid van Moolenbroekdnl and AC_LBL_C_INIT at the top level.
37*b636d99dSDavid van Moolenbroekdnl
38*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_LBL_C_INIT_BEFORE_CC,
39*b636d99dSDavid van Moolenbroek[
40*b636d99dSDavid van Moolenbroek    AC_BEFORE([$0], [AC_LBL_C_INIT])
41*b636d99dSDavid van Moolenbroek    AC_BEFORE([$0], [AC_PROG_CC])
42*b636d99dSDavid van Moolenbroek    AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
43*b636d99dSDavid van Moolenbroek    AC_BEFORE([$0], [AC_LBL_DEVEL])
44*b636d99dSDavid van Moolenbroek    AC_ARG_WITH(gcc, [  --without-gcc           don't use gcc])
45*b636d99dSDavid van Moolenbroek    $1=""
46*b636d99dSDavid van Moolenbroek    if test "${srcdir}" != "." ; then
47*b636d99dSDavid van Moolenbroek	    $1="-I$srcdir"
48*b636d99dSDavid van Moolenbroek    fi
49*b636d99dSDavid van Moolenbroek    if test "${CFLAGS+set}" = set; then
50*b636d99dSDavid van Moolenbroek	    LBL_CFLAGS="$CFLAGS"
51*b636d99dSDavid van Moolenbroek    fi
52*b636d99dSDavid van Moolenbroek    if test -z "$CC" ; then
53*b636d99dSDavid van Moolenbroek	    case "$host_os" in
54*b636d99dSDavid van Moolenbroek
55*b636d99dSDavid van Moolenbroek	    bsdi*)
56*b636d99dSDavid van Moolenbroek		    AC_CHECK_PROG(SHLICC2, shlicc2, yes, no)
57*b636d99dSDavid van Moolenbroek		    if test $SHLICC2 = yes ; then
58*b636d99dSDavid van Moolenbroek			    CC=shlicc2
59*b636d99dSDavid van Moolenbroek			    export CC
60*b636d99dSDavid van Moolenbroek		    fi
61*b636d99dSDavid van Moolenbroek		    ;;
62*b636d99dSDavid van Moolenbroek	    esac
63*b636d99dSDavid van Moolenbroek    fi
64*b636d99dSDavid van Moolenbroek    if test -z "$CC" -a "$with_gcc" = no ; then
65*b636d99dSDavid van Moolenbroek	    CC=cc
66*b636d99dSDavid van Moolenbroek	    export CC
67*b636d99dSDavid van Moolenbroek    fi
68*b636d99dSDavid van Moolenbroek])
69*b636d99dSDavid van Moolenbroek
70*b636d99dSDavid van Moolenbroekdnl
71*b636d99dSDavid van Moolenbroekdnl Determine which compiler we're using (cc or gcc)
72*b636d99dSDavid van Moolenbroekdnl If using gcc, determine the version number
73*b636d99dSDavid van Moolenbroekdnl If using cc:
74*b636d99dSDavid van Moolenbroekdnl     require that it support ansi prototypes
75*b636d99dSDavid van Moolenbroekdnl     use -O (AC_PROG_CC will use -g -O2 on gcc, so we don't need to
76*b636d99dSDavid van Moolenbroekdnl     do that ourselves for gcc)
77*b636d99dSDavid van Moolenbroekdnl     add -g flags, as appropriate
78*b636d99dSDavid van Moolenbroekdnl     explicitly specify /usr/local/include
79*b636d99dSDavid van Moolenbroekdnl
80*b636d99dSDavid van Moolenbroekdnl NOTE WELL: with newer versions of autoconf, "gcc" means any compiler
81*b636d99dSDavid van Moolenbroekdnl that defines __GNUC__, which means clang, for example, counts as "gcc".
82*b636d99dSDavid van Moolenbroekdnl
83*b636d99dSDavid van Moolenbroekdnl usage:
84*b636d99dSDavid van Moolenbroekdnl
85*b636d99dSDavid van Moolenbroekdnl	AC_LBL_C_INIT(copt, incls)
86*b636d99dSDavid van Moolenbroekdnl
87*b636d99dSDavid van Moolenbroekdnl results:
88*b636d99dSDavid van Moolenbroekdnl
89*b636d99dSDavid van Moolenbroekdnl	$1 (copt set)
90*b636d99dSDavid van Moolenbroekdnl	$2 (incls set)
91*b636d99dSDavid van Moolenbroekdnl	CC
92*b636d99dSDavid van Moolenbroekdnl	LDFLAGS
93*b636d99dSDavid van Moolenbroekdnl	LBL_CFLAGS
94*b636d99dSDavid van Moolenbroekdnl
95*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_LBL_C_INIT,
96*b636d99dSDavid van Moolenbroek[
97*b636d99dSDavid van Moolenbroek    AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
98*b636d99dSDavid van Moolenbroek    AC_BEFORE([$0], [AC_LBL_DEVEL])
99*b636d99dSDavid van Moolenbroek    AC_BEFORE([$0], [AC_LBL_SHLIBS_INIT])
100*b636d99dSDavid van Moolenbroek    if test "$GCC" = yes ; then
101*b636d99dSDavid van Moolenbroek	    #
102*b636d99dSDavid van Moolenbroek	    # -Werror forces warnings to be errors.
103*b636d99dSDavid van Moolenbroek	    #
104*b636d99dSDavid van Moolenbroek	    ac_lbl_cc_force_warning_errors=-Werror
105*b636d99dSDavid van Moolenbroek
106*b636d99dSDavid van Moolenbroek	    #
107*b636d99dSDavid van Moolenbroek	    # Use -ffloat-store so that, on 32-bit x86, we don't
108*b636d99dSDavid van Moolenbroek	    # do 80-bit arithmetic with the FPU; that way we should
109*b636d99dSDavid van Moolenbroek	    # get the same results for floating-point calculations
110*b636d99dSDavid van Moolenbroek	    # on x86-32 and x86-64.
111*b636d99dSDavid van Moolenbroek	    #
112*b636d99dSDavid van Moolenbroek	    AC_LBL_CHECK_COMPILER_OPT($1, -ffloat-store)
113*b636d99dSDavid van Moolenbroek    else
114*b636d99dSDavid van Moolenbroek	    $2="$$2 -I/usr/local/include"
115*b636d99dSDavid van Moolenbroek	    LDFLAGS="$LDFLAGS -L/usr/local/lib"
116*b636d99dSDavid van Moolenbroek
117*b636d99dSDavid van Moolenbroek	    case "$host_os" in
118*b636d99dSDavid van Moolenbroek
119*b636d99dSDavid van Moolenbroek	    darwin*)
120*b636d99dSDavid van Moolenbroek		    #
121*b636d99dSDavid van Moolenbroek		    # This is assumed either to be GCC or clang, both
122*b636d99dSDavid van Moolenbroek		    # of which use -Werror to force warnings to be errors.
123*b636d99dSDavid van Moolenbroek		    #
124*b636d99dSDavid van Moolenbroek		    ac_lbl_cc_force_warning_errors=-Werror
125*b636d99dSDavid van Moolenbroek		    ;;
126*b636d99dSDavid van Moolenbroek
127*b636d99dSDavid van Moolenbroek	    hpux*)
128*b636d99dSDavid van Moolenbroek		    #
129*b636d99dSDavid van Moolenbroek		    # HP C, which is what we presume we're using, doesn't
130*b636d99dSDavid van Moolenbroek		    # exit with a non-zero exit status if we hand it an
131*b636d99dSDavid van Moolenbroek		    # invalid -W flag, can't be forced to do so even with
132*b636d99dSDavid van Moolenbroek		    # +We, and doesn't handle GCC-style -W flags, so we
133*b636d99dSDavid van Moolenbroek		    # don't want to try using GCC-style -W flags.
134*b636d99dSDavid van Moolenbroek		    #
135*b636d99dSDavid van Moolenbroek		    ac_lbl_cc_dont_try_gcc_dashW=yes
136*b636d99dSDavid van Moolenbroek		    ;;
137*b636d99dSDavid van Moolenbroek
138*b636d99dSDavid van Moolenbroek	    irix*)
139*b636d99dSDavid van Moolenbroek		    #
140*b636d99dSDavid van Moolenbroek		    # MIPS C, which is what we presume we're using, doesn't
141*b636d99dSDavid van Moolenbroek		    # necessarily exit with a non-zero exit status if we
142*b636d99dSDavid van Moolenbroek		    # hand it an invalid -W flag, can't be forced to do
143*b636d99dSDavid van Moolenbroek		    # so, and doesn't handle GCC-style -W flags, so we
144*b636d99dSDavid van Moolenbroek		    # don't want to try using GCC-style -W flags.
145*b636d99dSDavid van Moolenbroek		    #
146*b636d99dSDavid van Moolenbroek		    ac_lbl_cc_dont_try_gcc_dashW=yes
147*b636d99dSDavid van Moolenbroek		    #
148*b636d99dSDavid van Moolenbroek		    # It also, apparently, defaults to "char" being
149*b636d99dSDavid van Moolenbroek		    # unsigned, unlike most other C implementations;
150*b636d99dSDavid van Moolenbroek		    # I suppose we could say "signed char" whenever
151*b636d99dSDavid van Moolenbroek		    # we want to guarantee a signed "char", but let's
152*b636d99dSDavid van Moolenbroek		    # just force signed chars.
153*b636d99dSDavid van Moolenbroek		    #
154*b636d99dSDavid van Moolenbroek		    # -xansi is normally the default, but the
155*b636d99dSDavid van Moolenbroek		    # configure script was setting it; perhaps -cckr
156*b636d99dSDavid van Moolenbroek		    # was the default in the Old Days.  (Then again,
157*b636d99dSDavid van Moolenbroek		    # that would probably be for backwards compatibility
158*b636d99dSDavid van Moolenbroek		    # in the days when ANSI C was Shiny and New, i.e.
159*b636d99dSDavid van Moolenbroek		    # 1989 and the early '90's, so maybe we can just
160*b636d99dSDavid van Moolenbroek		    # drop support for those compilers.)
161*b636d99dSDavid van Moolenbroek		    #
162*b636d99dSDavid van Moolenbroek		    # -g is equivalent to -g2, which turns off
163*b636d99dSDavid van Moolenbroek		    # optimization; we choose -g3, which generates
164*b636d99dSDavid van Moolenbroek		    # debugging information but doesn't turn off
165*b636d99dSDavid van Moolenbroek		    # optimization (even if the optimization would
166*b636d99dSDavid van Moolenbroek		    # cause inaccuracies in debugging).
167*b636d99dSDavid van Moolenbroek		    #
168*b636d99dSDavid van Moolenbroek		    $1="$$1 -xansi -signed -g3"
169*b636d99dSDavid van Moolenbroek		    ;;
170*b636d99dSDavid van Moolenbroek
171*b636d99dSDavid van Moolenbroek	    osf*)
172*b636d99dSDavid van Moolenbroek	    	    #
173*b636d99dSDavid van Moolenbroek		    # Presumed to be DEC OSF/1, Digital UNIX, or
174*b636d99dSDavid van Moolenbroek		    # Tru64 UNIX.
175*b636d99dSDavid van Moolenbroek		    #
176*b636d99dSDavid van Moolenbroek		    # The DEC C compiler, which is what we presume we're
177*b636d99dSDavid van Moolenbroek		    # using, doesn't exit with a non-zero exit status if we
178*b636d99dSDavid van Moolenbroek		    # hand it an invalid -W flag, can't be forced to do
179*b636d99dSDavid van Moolenbroek		    # so, and doesn't handle GCC-style -W flags, so we
180*b636d99dSDavid van Moolenbroek		    # don't want to try using GCC-style -W flags.
181*b636d99dSDavid van Moolenbroek		    #
182*b636d99dSDavid van Moolenbroek		    ac_lbl_cc_dont_try_gcc_dashW=yes
183*b636d99dSDavid van Moolenbroek		    #
184*b636d99dSDavid van Moolenbroek		    # -g is equivalent to -g2, which turns off
185*b636d99dSDavid van Moolenbroek		    # optimization; we choose -g3, which generates
186*b636d99dSDavid van Moolenbroek		    # debugging information but doesn't turn off
187*b636d99dSDavid van Moolenbroek		    # optimization (even if the optimization would
188*b636d99dSDavid van Moolenbroek		    # cause inaccuracies in debugging).
189*b636d99dSDavid van Moolenbroek		    #
190*b636d99dSDavid van Moolenbroek		    $1="$$1 -g3"
191*b636d99dSDavid van Moolenbroek		    ;;
192*b636d99dSDavid van Moolenbroek
193*b636d99dSDavid van Moolenbroek	    solaris*)
194*b636d99dSDavid van Moolenbroek		    #
195*b636d99dSDavid van Moolenbroek		    # Assumed to be Sun C, which requires -errwarn to force
196*b636d99dSDavid van Moolenbroek		    # warnings to be treated as errors.
197*b636d99dSDavid van Moolenbroek		    #
198*b636d99dSDavid van Moolenbroek		    ac_lbl_cc_force_warning_errors=-errwarn
199*b636d99dSDavid van Moolenbroek		    ;;
200*b636d99dSDavid van Moolenbroek
201*b636d99dSDavid van Moolenbroek	    ultrix*)
202*b636d99dSDavid van Moolenbroek		    AC_MSG_CHECKING(that Ultrix $CC hacks const in prototypes)
203*b636d99dSDavid van Moolenbroek		    AC_CACHE_VAL(ac_cv_lbl_cc_const_proto,
204*b636d99dSDavid van Moolenbroek			AC_TRY_COMPILE(
205*b636d99dSDavid van Moolenbroek			    [#include <sys/types.h>],
206*b636d99dSDavid van Moolenbroek			    [struct a { int b; };
207*b636d99dSDavid van Moolenbroek			    void c(const struct a *)],
208*b636d99dSDavid van Moolenbroek			    ac_cv_lbl_cc_const_proto=yes,
209*b636d99dSDavid van Moolenbroek			    ac_cv_lbl_cc_const_proto=no))
210*b636d99dSDavid van Moolenbroek		    AC_MSG_RESULT($ac_cv_lbl_cc_const_proto)
211*b636d99dSDavid van Moolenbroek		    if test $ac_cv_lbl_cc_const_proto = no ; then
212*b636d99dSDavid van Moolenbroek			    AC_DEFINE(const,[],
213*b636d99dSDavid van Moolenbroek			        [to handle Ultrix compilers that don't support const in prototypes])
214*b636d99dSDavid van Moolenbroek		    fi
215*b636d99dSDavid van Moolenbroek		    ;;
216*b636d99dSDavid van Moolenbroek	    esac
217*b636d99dSDavid van Moolenbroek	    $1="$$1 -O"
218*b636d99dSDavid van Moolenbroek    fi
219*b636d99dSDavid van Moolenbroek])
220*b636d99dSDavid van Moolenbroek
221*b636d99dSDavid van Moolenbroekdnl
222*b636d99dSDavid van Moolenbroekdnl Check whether the compiler option specified as the second argument
223*b636d99dSDavid van Moolenbroekdnl is supported by the compiler and, if so, add it to the macro
224*b636d99dSDavid van Moolenbroekdnl specified as the first argument
225*b636d99dSDavid van Moolenbroekdnl
226*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_LBL_CHECK_COMPILER_OPT,
227*b636d99dSDavid van Moolenbroek    [
228*b636d99dSDavid van Moolenbroek	AC_MSG_CHECKING([whether the compiler supports the $2 option])
229*b636d99dSDavid van Moolenbroek	save_CFLAGS="$CFLAGS"
230*b636d99dSDavid van Moolenbroek	CFLAGS="$CFLAGS $ac_lbl_cc_force_warning_errors $2"
231*b636d99dSDavid van Moolenbroek	AC_TRY_COMPILE(
232*b636d99dSDavid van Moolenbroek	    [],
233*b636d99dSDavid van Moolenbroek	    [return 0],
234*b636d99dSDavid van Moolenbroek	    [
235*b636d99dSDavid van Moolenbroek		AC_MSG_RESULT([yes])
236*b636d99dSDavid van Moolenbroek		CFLAGS="$save_CFLAGS"
237*b636d99dSDavid van Moolenbroek		$1="$$1 $2"
238*b636d99dSDavid van Moolenbroek	    ],
239*b636d99dSDavid van Moolenbroek	    [
240*b636d99dSDavid van Moolenbroek		AC_MSG_RESULT([no])
241*b636d99dSDavid van Moolenbroek		CFLAGS="$save_CFLAGS"
242*b636d99dSDavid van Moolenbroek	    ])
243*b636d99dSDavid van Moolenbroek    ])
244*b636d99dSDavid van Moolenbroek
245*b636d99dSDavid van Moolenbroekdnl
246*b636d99dSDavid van Moolenbroekdnl Check whether the compiler supports an option to generate
247*b636d99dSDavid van Moolenbroekdnl Makefile-style dependency lines
248*b636d99dSDavid van Moolenbroekdnl
249*b636d99dSDavid van Moolenbroekdnl GCC uses -M for this.  Non-GCC compilers that support this
250*b636d99dSDavid van Moolenbroekdnl use a variety of flags, including but not limited to -M.
251*b636d99dSDavid van Moolenbroekdnl
252*b636d99dSDavid van Moolenbroekdnl We test whether the flag in question is supported, as older
253*b636d99dSDavid van Moolenbroekdnl versions of compilers might not support it.
254*b636d99dSDavid van Moolenbroekdnl
255*b636d99dSDavid van Moolenbroekdnl We don't try all the possible flags, just in case some flag means
256*b636d99dSDavid van Moolenbroekdnl "generate dependencies" on one compiler but means something else
257*b636d99dSDavid van Moolenbroekdnl on another compiler.
258*b636d99dSDavid van Moolenbroekdnl
259*b636d99dSDavid van Moolenbroekdnl Most compilers that support this send the output to the standard
260*b636d99dSDavid van Moolenbroekdnl output by default.  IBM's XLC, however, supports -M but sends
261*b636d99dSDavid van Moolenbroekdnl the output to {sourcefile-basename}.u, and AIX has no /dev/stdout
262*b636d99dSDavid van Moolenbroekdnl to work around that, so we don't bother with XLC.
263*b636d99dSDavid van Moolenbroekdnl
264*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_LBL_CHECK_DEPENDENCY_GENERATION_OPT,
265*b636d99dSDavid van Moolenbroek    [
266*b636d99dSDavid van Moolenbroek	AC_MSG_CHECKING([whether the compiler supports generating dependencies])
267*b636d99dSDavid van Moolenbroek	if test "$GCC" = yes ; then
268*b636d99dSDavid van Moolenbroek		#
269*b636d99dSDavid van Moolenbroek		# GCC, or a compiler deemed to be GCC by AC_PROG_CC (even
270*b636d99dSDavid van Moolenbroek		# though it's not); we assume that, in this case, the flag
271*b636d99dSDavid van Moolenbroek		# would be -M.
272*b636d99dSDavid van Moolenbroek		#
273*b636d99dSDavid van Moolenbroek		ac_lbl_dependency_flag="-M"
274*b636d99dSDavid van Moolenbroek	else
275*b636d99dSDavid van Moolenbroek		#
276*b636d99dSDavid van Moolenbroek		# Not GCC or a compiler deemed to be GCC; what platform is
277*b636d99dSDavid van Moolenbroek		# this?  (We're assuming that if the compiler isn't GCC
278*b636d99dSDavid van Moolenbroek		# it's the compiler from the vendor of the OS; that won't
279*b636d99dSDavid van Moolenbroek		# necessarily be true for x86 platforms, where it might be
280*b636d99dSDavid van Moolenbroek		# the Intel C compiler.)
281*b636d99dSDavid van Moolenbroek		#
282*b636d99dSDavid van Moolenbroek		case "$host_os" in
283*b636d99dSDavid van Moolenbroek
284*b636d99dSDavid van Moolenbroek		irix*|osf*|darwin*)
285*b636d99dSDavid van Moolenbroek			#
286*b636d99dSDavid van Moolenbroek			# MIPS C for IRIX, DEC C, and clang all use -M.
287*b636d99dSDavid van Moolenbroek			#
288*b636d99dSDavid van Moolenbroek			ac_lbl_dependency_flag="-M"
289*b636d99dSDavid van Moolenbroek			;;
290*b636d99dSDavid van Moolenbroek
291*b636d99dSDavid van Moolenbroek		solaris*)
292*b636d99dSDavid van Moolenbroek			#
293*b636d99dSDavid van Moolenbroek			# Sun C uses -xM.
294*b636d99dSDavid van Moolenbroek			#
295*b636d99dSDavid van Moolenbroek			ac_lbl_dependency_flag="-xM"
296*b636d99dSDavid van Moolenbroek			;;
297*b636d99dSDavid van Moolenbroek
298*b636d99dSDavid van Moolenbroek		hpux*)
299*b636d99dSDavid van Moolenbroek			#
300*b636d99dSDavid van Moolenbroek			# HP's older C compilers don't support this.
301*b636d99dSDavid van Moolenbroek			# HP's newer C compilers support this with
302*b636d99dSDavid van Moolenbroek			# either +M or +Make; the older compilers
303*b636d99dSDavid van Moolenbroek			# interpret +M as something completely
304*b636d99dSDavid van Moolenbroek			# different, so we use +Make so we don't
305*b636d99dSDavid van Moolenbroek			# think it works with the older compilers.
306*b636d99dSDavid van Moolenbroek			#
307*b636d99dSDavid van Moolenbroek			ac_lbl_dependency_flag="+Make"
308*b636d99dSDavid van Moolenbroek			;;
309*b636d99dSDavid van Moolenbroek
310*b636d99dSDavid van Moolenbroek		*)
311*b636d99dSDavid van Moolenbroek			#
312*b636d99dSDavid van Moolenbroek			# Not one of the above; assume no support for
313*b636d99dSDavid van Moolenbroek			# generating dependencies.
314*b636d99dSDavid van Moolenbroek			#
315*b636d99dSDavid van Moolenbroek			ac_lbl_dependency_flag=""
316*b636d99dSDavid van Moolenbroek			;;
317*b636d99dSDavid van Moolenbroek		esac
318*b636d99dSDavid van Moolenbroek	fi
319*b636d99dSDavid van Moolenbroek
320*b636d99dSDavid van Moolenbroek	#
321*b636d99dSDavid van Moolenbroek	# Is ac_lbl_dependency_flag defined and, if so, does the compiler
322*b636d99dSDavid van Moolenbroek	# complain about it?
323*b636d99dSDavid van Moolenbroek	#
324*b636d99dSDavid van Moolenbroek	# Note: clang doesn't seem to exit with an error status when handed
325*b636d99dSDavid van Moolenbroek	# an unknown non-warning error, even if you pass it
326*b636d99dSDavid van Moolenbroek	# -Werror=unknown-warning-option.  However, it always supports
327*b636d99dSDavid van Moolenbroek	# -M, so the fact that this test always succeeds with clang
328*b636d99dSDavid van Moolenbroek	# isn't an issue.
329*b636d99dSDavid van Moolenbroek	#
330*b636d99dSDavid van Moolenbroek	if test ! -z "$ac_lbl_dependency_flag"; then
331*b636d99dSDavid van Moolenbroek		AC_LANG_CONFTEST(
332*b636d99dSDavid van Moolenbroek		    [AC_LANG_SOURCE([[int main(void) { return 0; }]])])
333*b636d99dSDavid van Moolenbroek		echo "$CC" $ac_lbl_dependency_flag conftest.c >&5
334*b636d99dSDavid van Moolenbroek		if "$CC" $ac_lbl_dependency_flag conftest.c >/dev/null 2>&1; then
335*b636d99dSDavid van Moolenbroek			AC_MSG_RESULT([yes, with $ac_lbl_dependency_flag])
336*b636d99dSDavid van Moolenbroek			DEPENDENCY_CFLAG="$ac_lbl_dependency_flag"
337*b636d99dSDavid van Moolenbroek			MKDEP='${srcdir}/mkdep'
338*b636d99dSDavid van Moolenbroek		else
339*b636d99dSDavid van Moolenbroek			AC_MSG_RESULT([no])
340*b636d99dSDavid van Moolenbroek			#
341*b636d99dSDavid van Moolenbroek			# We can't run mkdep, so have "make depend" do
342*b636d99dSDavid van Moolenbroek			# nothing.
343*b636d99dSDavid van Moolenbroek			#
344*b636d99dSDavid van Moolenbroek			MKDEP=:
345*b636d99dSDavid van Moolenbroek		fi
346*b636d99dSDavid van Moolenbroek		rm -rf conftest*
347*b636d99dSDavid van Moolenbroek	else
348*b636d99dSDavid van Moolenbroek		AC_MSG_RESULT([no])
349*b636d99dSDavid van Moolenbroek		#
350*b636d99dSDavid van Moolenbroek		# We can't run mkdep, so have "make depend" do
351*b636d99dSDavid van Moolenbroek		# nothing.
352*b636d99dSDavid van Moolenbroek		#
353*b636d99dSDavid van Moolenbroek		MKDEP=:
354*b636d99dSDavid van Moolenbroek	fi
355*b636d99dSDavid van Moolenbroek	AC_SUBST(DEPENDENCY_CFLAG)
356*b636d99dSDavid van Moolenbroek	AC_SUBST(MKDEP)
357*b636d99dSDavid van Moolenbroek    ])
358*b636d99dSDavid van Moolenbroek
359*b636d99dSDavid van Moolenbroek#
360*b636d99dSDavid van Moolenbroek# Try compiling a sample of the type of code that appears in
361*b636d99dSDavid van Moolenbroek# gencode.c with "inline", "__inline__", and "__inline".
362*b636d99dSDavid van Moolenbroek#
363*b636d99dSDavid van Moolenbroek# Autoconf's AC_C_INLINE, at least in autoconf 2.13, isn't good enough,
364*b636d99dSDavid van Moolenbroek# as it just tests whether a function returning "int" can be inlined;
365*b636d99dSDavid van Moolenbroek# at least some versions of HP's C compiler can inline that, but can't
366*b636d99dSDavid van Moolenbroek# inline a function that returns a struct pointer.
367*b636d99dSDavid van Moolenbroek#
368*b636d99dSDavid van Moolenbroek# Make sure we use the V_CCOPT flags, because some of those might
369*b636d99dSDavid van Moolenbroek# disable inlining.
370*b636d99dSDavid van Moolenbroek#
371*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_LBL_C_INLINE,
372*b636d99dSDavid van Moolenbroek    [AC_MSG_CHECKING(for inline)
373*b636d99dSDavid van Moolenbroek    save_CFLAGS="$CFLAGS"
374*b636d99dSDavid van Moolenbroek    CFLAGS="$V_CCOPT"
375*b636d99dSDavid van Moolenbroek    AC_CACHE_VAL(ac_cv_lbl_inline, [
376*b636d99dSDavid van Moolenbroek	ac_cv_lbl_inline=""
377*b636d99dSDavid van Moolenbroek	ac_lbl_cc_inline=no
378*b636d99dSDavid van Moolenbroek	for ac_lbl_inline in inline __inline__ __inline
379*b636d99dSDavid van Moolenbroek	do
380*b636d99dSDavid van Moolenbroek	    AC_TRY_COMPILE(
381*b636d99dSDavid van Moolenbroek		[#define inline $ac_lbl_inline
382*b636d99dSDavid van Moolenbroek		static inline struct iltest *foo(void);
383*b636d99dSDavid van Moolenbroek		struct iltest {
384*b636d99dSDavid van Moolenbroek		    int iltest1;
385*b636d99dSDavid van Moolenbroek		    int iltest2;
386*b636d99dSDavid van Moolenbroek		};
387*b636d99dSDavid van Moolenbroek
388*b636d99dSDavid van Moolenbroek		static inline struct iltest *
389*b636d99dSDavid van Moolenbroek		foo()
390*b636d99dSDavid van Moolenbroek		{
391*b636d99dSDavid van Moolenbroek		    static struct iltest xxx;
392*b636d99dSDavid van Moolenbroek
393*b636d99dSDavid van Moolenbroek		    return &xxx;
394*b636d99dSDavid van Moolenbroek		}],,ac_lbl_cc_inline=yes,)
395*b636d99dSDavid van Moolenbroek	    if test "$ac_lbl_cc_inline" = yes ; then
396*b636d99dSDavid van Moolenbroek		break;
397*b636d99dSDavid van Moolenbroek	    fi
398*b636d99dSDavid van Moolenbroek	done
399*b636d99dSDavid van Moolenbroek	if test "$ac_lbl_cc_inline" = yes ; then
400*b636d99dSDavid van Moolenbroek	    ac_cv_lbl_inline=$ac_lbl_inline
401*b636d99dSDavid van Moolenbroek	fi])
402*b636d99dSDavid van Moolenbroek    CFLAGS="$save_CFLAGS"
403*b636d99dSDavid van Moolenbroek    if test ! -z "$ac_cv_lbl_inline" ; then
404*b636d99dSDavid van Moolenbroek	AC_MSG_RESULT($ac_cv_lbl_inline)
405*b636d99dSDavid van Moolenbroek    else
406*b636d99dSDavid van Moolenbroek	AC_MSG_RESULT(no)
407*b636d99dSDavid van Moolenbroek    fi
408*b636d99dSDavid van Moolenbroek    AC_DEFINE_UNQUOTED(inline, $ac_cv_lbl_inline, [Define as token for inline if inlining supported])])
409*b636d99dSDavid van Moolenbroek
410*b636d99dSDavid van Moolenbroekdnl
411*b636d99dSDavid van Moolenbroekdnl Use pfopen.c if available and pfopen() not in standard libraries
412*b636d99dSDavid van Moolenbroekdnl Require libpcap
413*b636d99dSDavid van Moolenbroekdnl Look for libpcap in ..
414*b636d99dSDavid van Moolenbroekdnl Use the installed libpcap if there is no local version
415*b636d99dSDavid van Moolenbroekdnl
416*b636d99dSDavid van Moolenbroekdnl usage:
417*b636d99dSDavid van Moolenbroekdnl
418*b636d99dSDavid van Moolenbroekdnl	AC_LBL_LIBPCAP(pcapdep, incls)
419*b636d99dSDavid van Moolenbroekdnl
420*b636d99dSDavid van Moolenbroekdnl results:
421*b636d99dSDavid van Moolenbroekdnl
422*b636d99dSDavid van Moolenbroekdnl	$1 (pcapdep set)
423*b636d99dSDavid van Moolenbroekdnl	$2 (incls appended)
424*b636d99dSDavid van Moolenbroekdnl	LIBS
425*b636d99dSDavid van Moolenbroekdnl	LBL_LIBS
426*b636d99dSDavid van Moolenbroekdnl
427*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_LBL_LIBPCAP,
428*b636d99dSDavid van Moolenbroek    [AC_REQUIRE([AC_LBL_LIBRARY_NET])
429*b636d99dSDavid van Moolenbroek    dnl
430*b636d99dSDavid van Moolenbroek    dnl save a copy before locating libpcap.a
431*b636d99dSDavid van Moolenbroek    dnl
432*b636d99dSDavid van Moolenbroek    LBL_LIBS="$LIBS"
433*b636d99dSDavid van Moolenbroek    pfopen=/usr/examples/packetfilter/pfopen.c
434*b636d99dSDavid van Moolenbroek    if test -f $pfopen ; then
435*b636d99dSDavid van Moolenbroek	    AC_CHECK_FUNCS(pfopen)
436*b636d99dSDavid van Moolenbroek	    if test $ac_cv_func_pfopen = "no" ; then
437*b636d99dSDavid van Moolenbroek		    AC_MSG_RESULT(Using $pfopen)
438*b636d99dSDavid van Moolenbroek		    LIBS="$LIBS $pfopen"
439*b636d99dSDavid van Moolenbroek	    fi
440*b636d99dSDavid van Moolenbroek    fi
441*b636d99dSDavid van Moolenbroek	libpcap=FAIL
442*b636d99dSDavid van Moolenbroek	AC_MSG_CHECKING(for local pcap library)
443*b636d99dSDavid van Moolenbroek	AC_ARG_WITH([system-libpcap],
444*b636d99dSDavid van Moolenbroek		[AS_HELP_STRING([--with-system-libpcap], [don't use local pcap library])])
445*b636d99dSDavid van Moolenbroek	if test "x$with_system_libpcap" != xyes ; then
446*b636d99dSDavid van Moolenbroek		lastdir=FAIL
447*b636d99dSDavid van Moolenbroek    	places=`ls $srcdir/.. | sed -e 's,/$,,' -e "s,^,$srcdir/../," | \
448*b636d99dSDavid van Moolenbroek		egrep '/libpcap-[[0-9]]+\.[[0-9]]+(\.[[0-9]]*)?([[ab]][[0-9]]*|-PRE-GIT)?$'`
449*b636d99dSDavid van Moolenbroek    	places2=`ls .. | sed -e 's,/$,,' -e "s,^,../," | \
450*b636d99dSDavid van Moolenbroek		egrep '/libpcap-[[0-9]]+\.[[0-9]]+(\.[[0-9]]*)?([[ab]][[0-9]]*|-PRE-GIT)?$'`
451*b636d99dSDavid van Moolenbroek    	for dir in $places $srcdir/../libpcap ../libpcap $srcdir/libpcap $places2 ; do
452*b636d99dSDavid van Moolenbroek	    	basedir=`echo $dir | sed -e 's/[[ab]][[0-9]]*$//' | \
453*b636d99dSDavid van Moolenbroek	        	sed -e 's/-PRE-GIT$//' `
454*b636d99dSDavid van Moolenbroek	    	if test $lastdir = $basedir ; then
455*b636d99dSDavid van Moolenbroek		    	dnl skip alphas when an actual release is present
456*b636d99dSDavid van Moolenbroek		    	continue;
457*b636d99dSDavid van Moolenbroek	    	fi
458*b636d99dSDavid van Moolenbroek	    	lastdir=$dir
459*b636d99dSDavid van Moolenbroek	    	if test -r $dir/libpcap.a ; then
460*b636d99dSDavid van Moolenbroek		    	libpcap=$dir/libpcap.a
461*b636d99dSDavid van Moolenbroek		    	d=$dir
462*b636d99dSDavid van Moolenbroek		    	dnl continue and select the last one that exists
463*b636d99dSDavid van Moolenbroek	    	fi
464*b636d99dSDavid van Moolenbroek		done
465*b636d99dSDavid van Moolenbroek	fi
466*b636d99dSDavid van Moolenbroek    if test $libpcap = FAIL ; then
467*b636d99dSDavid van Moolenbroek	    AC_MSG_RESULT(not found)
468*b636d99dSDavid van Moolenbroek
469*b636d99dSDavid van Moolenbroek	    #
470*b636d99dSDavid van Moolenbroek	    # Look for pcap-config.
471*b636d99dSDavid van Moolenbroek	    #
472*b636d99dSDavid van Moolenbroek	    AC_PATH_TOOL(PCAP_CONFIG, pcap-config)
473*b636d99dSDavid van Moolenbroek	    if test -n "$PCAP_CONFIG" ; then
474*b636d99dSDavid van Moolenbroek		#
475*b636d99dSDavid van Moolenbroek		# Found - use it to get the include flags for
476*b636d99dSDavid van Moolenbroek		# libpcap and the flags to link with libpcap.
477*b636d99dSDavid van Moolenbroek		#
478*b636d99dSDavid van Moolenbroek		# Please read section 11.6 "Shell Substitutions"
479*b636d99dSDavid van Moolenbroek		# in the autoconf manual before doing anything
480*b636d99dSDavid van Moolenbroek		# to this that involves quoting.  Especially note
481*b636d99dSDavid van Moolenbroek		# the statement "There is just no portable way to use
482*b636d99dSDavid van Moolenbroek		# double-quoted strings inside double-quoted back-quoted
483*b636d99dSDavid van Moolenbroek		# expressions (pfew!)."
484*b636d99dSDavid van Moolenbroek		#
485*b636d99dSDavid van Moolenbroek		cflags=`"$PCAP_CONFIG" --cflags`
486*b636d99dSDavid van Moolenbroek		$2="$cflags $$2"
487*b636d99dSDavid van Moolenbroek		libpcap=`"$PCAP_CONFIG" --libs`
488*b636d99dSDavid van Moolenbroek	    else
489*b636d99dSDavid van Moolenbroek		#
490*b636d99dSDavid van Moolenbroek		# Not found; look for pcap.
491*b636d99dSDavid van Moolenbroek		#
492*b636d99dSDavid van Moolenbroek		AC_CHECK_LIB(pcap, main, libpcap="-lpcap")
493*b636d99dSDavid van Moolenbroek		if test $libpcap = FAIL ; then
494*b636d99dSDavid van Moolenbroek		    AC_MSG_ERROR(see the INSTALL doc for more info)
495*b636d99dSDavid van Moolenbroek		fi
496*b636d99dSDavid van Moolenbroek		dnl
497*b636d99dSDavid van Moolenbroek		dnl Some versions of Red Hat Linux put "pcap.h" in
498*b636d99dSDavid van Moolenbroek		dnl "/usr/include/pcap"; had the LBL folks done so,
499*b636d99dSDavid van Moolenbroek		dnl that would have been a good idea, but for
500*b636d99dSDavid van Moolenbroek		dnl the Red Hat folks to do so just breaks source
501*b636d99dSDavid van Moolenbroek		dnl compatibility with other systems.
502*b636d99dSDavid van Moolenbroek		dnl
503*b636d99dSDavid van Moolenbroek		dnl We work around this by assuming that, as we didn't
504*b636d99dSDavid van Moolenbroek		dnl find a local libpcap, libpcap is in /usr/lib or
505*b636d99dSDavid van Moolenbroek		dnl /usr/local/lib and that the corresponding header
506*b636d99dSDavid van Moolenbroek		dnl file is under one of those directories; if we don't
507*b636d99dSDavid van Moolenbroek		dnl find it in either of those directories, we check to
508*b636d99dSDavid van Moolenbroek		dnl see if it's in a "pcap" subdirectory of them and,
509*b636d99dSDavid van Moolenbroek		dnl if so, add that subdirectory to the "-I" list.
510*b636d99dSDavid van Moolenbroek		dnl
511*b636d99dSDavid van Moolenbroek		dnl (We now also put pcap.h in /usr/include/pcap, but we
512*b636d99dSDavid van Moolenbroek		dnl leave behind a /usr/include/pcap.h that includes it,
513*b636d99dSDavid van Moolenbroek		dnl so you can still just include <pcap.h>.)
514*b636d99dSDavid van Moolenbroek		dnl
515*b636d99dSDavid van Moolenbroek		AC_MSG_CHECKING(for extraneous pcap header directories)
516*b636d99dSDavid van Moolenbroek		if test \( ! -r /usr/local/include/pcap.h \) -a \
517*b636d99dSDavid van Moolenbroek			\( ! -r /usr/include/pcap.h \); then
518*b636d99dSDavid van Moolenbroek		    if test -r /usr/local/include/pcap/pcap.h; then
519*b636d99dSDavid van Moolenbroek			d="/usr/local/include/pcap"
520*b636d99dSDavid van Moolenbroek		    elif test -r /usr/include/pcap/pcap.h; then
521*b636d99dSDavid van Moolenbroek			d="/usr/include/pcap"
522*b636d99dSDavid van Moolenbroek		    fi
523*b636d99dSDavid van Moolenbroek		fi
524*b636d99dSDavid van Moolenbroek		if test -z "$d" ; then
525*b636d99dSDavid van Moolenbroek		    AC_MSG_RESULT(not found)
526*b636d99dSDavid van Moolenbroek		else
527*b636d99dSDavid van Moolenbroek		    $2="-I$d $$2"
528*b636d99dSDavid van Moolenbroek		    AC_MSG_RESULT(found -- -I$d added)
529*b636d99dSDavid van Moolenbroek		fi
530*b636d99dSDavid van Moolenbroek	    fi
531*b636d99dSDavid van Moolenbroek    else
532*b636d99dSDavid van Moolenbroek	    $1=$libpcap
533*b636d99dSDavid van Moolenbroek	    places=`ls $srcdir/.. | sed -e 's,/$,,' -e "s,^,$srcdir/../," | \
534*b636d99dSDavid van Moolenbroek    	 		egrep '/libpcap-[[0-9]]*.[[0-9]]*(.[[0-9]]*)?([[ab]][[0-9]]*)?$'`
535*b636d99dSDavid van Moolenbroek	    places2=`ls .. | sed -e 's,/$,,' -e "s,^,../," | \
536*b636d99dSDavid van Moolenbroek    	 		egrep '/libpcap-[[0-9]]*.[[0-9]]*(.[[0-9]]*)?([[ab]][[0-9]]*)?$'`
537*b636d99dSDavid van Moolenbroek            pcapH=FAIL
538*b636d99dSDavid van Moolenbroek	    if test -r $d/pcap.h; then
539*b636d99dSDavid van Moolenbroek                    pcapH=$d
540*b636d99dSDavid van Moolenbroek	    else
541*b636d99dSDavid van Moolenbroek                for dir in $places $srcdir/../libpcap ../libpcap $srcdir/libpcap $places2 ; do
542*b636d99dSDavid van Moolenbroek                   if test -r $dir/pcap.h ; then
543*b636d99dSDavid van Moolenbroek                       pcapH=$dir
544*b636d99dSDavid van Moolenbroek                   fi
545*b636d99dSDavid van Moolenbroek                done
546*b636d99dSDavid van Moolenbroek            fi
547*b636d99dSDavid van Moolenbroek
548*b636d99dSDavid van Moolenbroek            if test $pcapH = FAIL ; then
549*b636d99dSDavid van Moolenbroek                    AC_MSG_ERROR(cannot find pcap.h: see INSTALL)
550*b636d99dSDavid van Moolenbroek 	    fi
551*b636d99dSDavid van Moolenbroek            $2="-I$pcapH $$2"
552*b636d99dSDavid van Moolenbroek	    AC_MSG_RESULT($libpcap)
553*b636d99dSDavid van Moolenbroek	    AC_PATH_PROG(PCAP_CONFIG, pcap-config,, $d)
554*b636d99dSDavid van Moolenbroek	    if test -n "$PCAP_CONFIG"; then
555*b636d99dSDavid van Moolenbroek		#
556*b636d99dSDavid van Moolenbroek		# The libpcap directory has a pcap-config script.
557*b636d99dSDavid van Moolenbroek		# Use it to get any additioal libraries needed
558*b636d99dSDavid van Moolenbroek		# to link with the libpcap archive library in
559*b636d99dSDavid van Moolenbroek		# that directory.
560*b636d99dSDavid van Moolenbroek		#
561*b636d99dSDavid van Moolenbroek		# Please read section 11.6 "Shell Substitutions"
562*b636d99dSDavid van Moolenbroek		# in the autoconf manual before doing anything
563*b636d99dSDavid van Moolenbroek		# to this that involves quoting.  Especially note
564*b636d99dSDavid van Moolenbroek		# the statement "There is just no portable way to use
565*b636d99dSDavid van Moolenbroek		# double-quoted strings inside double-quoted back-quoted
566*b636d99dSDavid van Moolenbroek		# expressions (pfew!)."
567*b636d99dSDavid van Moolenbroek		#
568*b636d99dSDavid van Moolenbroek		additional_libs=`"$PCAP_CONFIG" --additional-libs --static`
569*b636d99dSDavid van Moolenbroek		libpcap="$libpcap $additional_libs"
570*b636d99dSDavid van Moolenbroek	    fi
571*b636d99dSDavid van Moolenbroek    fi
572*b636d99dSDavid van Moolenbroek    LIBS="$libpcap $LIBS"
573*b636d99dSDavid van Moolenbroek    if ! test -n "$PCAP_CONFIG" ; then
574*b636d99dSDavid van Moolenbroek	#
575*b636d99dSDavid van Moolenbroek	# We don't have pcap-config; find out any additional link flags
576*b636d99dSDavid van Moolenbroek	# we need.  (If we have pcap-config, we assume it tells us what
577*b636d99dSDavid van Moolenbroek	# we need.)
578*b636d99dSDavid van Moolenbroek	#
579*b636d99dSDavid van Moolenbroek	case "$host_os" in
580*b636d99dSDavid van Moolenbroek
581*b636d99dSDavid van Moolenbroek	aix*)
582*b636d99dSDavid van Moolenbroek	    #
583*b636d99dSDavid van Moolenbroek	    # If libpcap is DLPI-based, we have to use /lib/pse.exp if
584*b636d99dSDavid van Moolenbroek	    # present, as we use the STREAMS routines.
585*b636d99dSDavid van Moolenbroek	    #
586*b636d99dSDavid van Moolenbroek	    # (XXX - true only if we're linking with a static libpcap?)
587*b636d99dSDavid van Moolenbroek	    #
588*b636d99dSDavid van Moolenbroek	    pseexe="/lib/pse.exp"
589*b636d99dSDavid van Moolenbroek	    AC_MSG_CHECKING(for $pseexe)
590*b636d99dSDavid van Moolenbroek	    if test -f $pseexe ; then
591*b636d99dSDavid van Moolenbroek		    AC_MSG_RESULT(yes)
592*b636d99dSDavid van Moolenbroek		    LIBS="$LIBS -I:$pseexe"
593*b636d99dSDavid van Moolenbroek	    fi
594*b636d99dSDavid van Moolenbroek
595*b636d99dSDavid van Moolenbroek	    #
596*b636d99dSDavid van Moolenbroek	    # If libpcap is BPF-based, we need "-lodm" and "-lcfg", as
597*b636d99dSDavid van Moolenbroek	    # we use them to load the BPF module.
598*b636d99dSDavid van Moolenbroek	    #
599*b636d99dSDavid van Moolenbroek	    # (XXX - true only if we're linking with a static libpcap?)
600*b636d99dSDavid van Moolenbroek	    #
601*b636d99dSDavid van Moolenbroek	    LIBS="$LIBS -lodm -lcfg"
602*b636d99dSDavid van Moolenbroek	    ;;
603*b636d99dSDavid van Moolenbroek	esac
604*b636d99dSDavid van Moolenbroek    fi
605*b636d99dSDavid van Moolenbroek
606*b636d99dSDavid van Moolenbroek    dnl
607*b636d99dSDavid van Moolenbroek    dnl Check for "pcap_loop()", to make sure we found a working
608*b636d99dSDavid van Moolenbroek    dnl libpcap and have all the right other libraries with which
609*b636d99dSDavid van Moolenbroek    dnl to link.  (Otherwise, the checks below will fail, not
610*b636d99dSDavid van Moolenbroek    dnl because the routines are missing from the library, but
611*b636d99dSDavid van Moolenbroek    dnl because we aren't linking properly with libpcap, and
612*b636d99dSDavid van Moolenbroek    dnl that will cause confusing errors at build time.)
613*b636d99dSDavid van Moolenbroek    dnl
614*b636d99dSDavid van Moolenbroek    AC_CHECK_FUNC(pcap_loop,,
615*b636d99dSDavid van Moolenbroek	[
616*b636d99dSDavid van Moolenbroek	    AC_MSG_ERROR(
617*b636d99dSDavid van Moolenbroek[Report this to tcpdump-workers@lists.tcpdump.org, and include the
618*b636d99dSDavid van Moolenbroekconfig.log file in your report.  If you have downloaded libpcap from
619*b636d99dSDavid van Moolenbroektcpdump.org, and built it yourself, please also include the config.log
620*b636d99dSDavid van Moolenbroekfile from the libpcap source directory, the Makefile from the libpcap
621*b636d99dSDavid van Moolenbroeksource directory, and the output of the make process for libpcap, as
622*b636d99dSDavid van Moolenbroekthis could be a problem with the libpcap that was built, and we will
623*b636d99dSDavid van Moolenbroeknot be able to determine why this is happening, and thus will not be
624*b636d99dSDavid van Moolenbroekable to fix it, without that information, as we have not been able to
625*b636d99dSDavid van Moolenbroekreproduce this problem ourselves.])
626*b636d99dSDavid van Moolenbroek	])
627*b636d99dSDavid van Moolenbroek])
628*b636d99dSDavid van Moolenbroek
629*b636d99dSDavid van Moolenbroekdnl
630*b636d99dSDavid van Moolenbroekdnl Define RETSIGTYPE and RETSIGVAL
631*b636d99dSDavid van Moolenbroekdnl
632*b636d99dSDavid van Moolenbroekdnl usage:
633*b636d99dSDavid van Moolenbroekdnl
634*b636d99dSDavid van Moolenbroekdnl	AC_LBL_TYPE_SIGNAL
635*b636d99dSDavid van Moolenbroekdnl
636*b636d99dSDavid van Moolenbroekdnl results:
637*b636d99dSDavid van Moolenbroekdnl
638*b636d99dSDavid van Moolenbroekdnl	RETSIGTYPE (defined)
639*b636d99dSDavid van Moolenbroekdnl	RETSIGVAL (defined)
640*b636d99dSDavid van Moolenbroekdnl
641*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_LBL_TYPE_SIGNAL,
642*b636d99dSDavid van Moolenbroek    [AC_BEFORE([$0], [AC_LBL_LIBPCAP])
643*b636d99dSDavid van Moolenbroek    AC_TYPE_SIGNAL
644*b636d99dSDavid van Moolenbroek    if test "$ac_cv_type_signal" = void ; then
645*b636d99dSDavid van Moolenbroek	    AC_DEFINE(RETSIGVAL,[],[return value of signal handlers])
646*b636d99dSDavid van Moolenbroek    else
647*b636d99dSDavid van Moolenbroek	    AC_DEFINE(RETSIGVAL,(0),[return value of signal handlers])
648*b636d99dSDavid van Moolenbroek    fi
649*b636d99dSDavid van Moolenbroek    case "$host_os" in
650*b636d99dSDavid van Moolenbroek
651*b636d99dSDavid van Moolenbroek    irix*)
652*b636d99dSDavid van Moolenbroek	    AC_DEFINE(_BSD_SIGNALS,1,[get BSD semantics on Irix])
653*b636d99dSDavid van Moolenbroek	    ;;
654*b636d99dSDavid van Moolenbroek
655*b636d99dSDavid van Moolenbroek    *)
656*b636d99dSDavid van Moolenbroek	    dnl prefer sigaction() to sigset()
657*b636d99dSDavid van Moolenbroek	    AC_CHECK_FUNCS(sigaction)
658*b636d99dSDavid van Moolenbroek	    if test $ac_cv_func_sigaction = no ; then
659*b636d99dSDavid van Moolenbroek		    AC_CHECK_FUNCS(sigset)
660*b636d99dSDavid van Moolenbroek	    fi
661*b636d99dSDavid van Moolenbroek	    ;;
662*b636d99dSDavid van Moolenbroek    esac])
663*b636d99dSDavid van Moolenbroek
664*b636d99dSDavid van Moolenbroekdnl
665*b636d99dSDavid van Moolenbroekdnl If using gcc, make sure we have ANSI ioctl definitions
666*b636d99dSDavid van Moolenbroekdnl
667*b636d99dSDavid van Moolenbroekdnl usage:
668*b636d99dSDavid van Moolenbroekdnl
669*b636d99dSDavid van Moolenbroekdnl	AC_LBL_FIXINCLUDES
670*b636d99dSDavid van Moolenbroekdnl
671*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_LBL_FIXINCLUDES,
672*b636d99dSDavid van Moolenbroek    [if test "$GCC" = yes ; then
673*b636d99dSDavid van Moolenbroek	    AC_MSG_CHECKING(for ANSI ioctl definitions)
674*b636d99dSDavid van Moolenbroek	    AC_CACHE_VAL(ac_cv_lbl_gcc_fixincludes,
675*b636d99dSDavid van Moolenbroek		AC_TRY_COMPILE(
676*b636d99dSDavid van Moolenbroek		    [/*
677*b636d99dSDavid van Moolenbroek		     * This generates a "duplicate case value" when fixincludes
678*b636d99dSDavid van Moolenbroek		     * has not be run.
679*b636d99dSDavid van Moolenbroek		     */
680*b636d99dSDavid van Moolenbroek#		include <sys/types.h>
681*b636d99dSDavid van Moolenbroek#		include <sys/time.h>
682*b636d99dSDavid van Moolenbroek#		include <sys/ioctl.h>
683*b636d99dSDavid van Moolenbroek#		ifdef HAVE_SYS_IOCCOM_H
684*b636d99dSDavid van Moolenbroek#		include <sys/ioccom.h>
685*b636d99dSDavid van Moolenbroek#		endif],
686*b636d99dSDavid van Moolenbroek		    [switch (0) {
687*b636d99dSDavid van Moolenbroek		    case _IO('A', 1):;
688*b636d99dSDavid van Moolenbroek		    case _IO('B', 1):;
689*b636d99dSDavid van Moolenbroek		    }],
690*b636d99dSDavid van Moolenbroek		    ac_cv_lbl_gcc_fixincludes=yes,
691*b636d99dSDavid van Moolenbroek		    ac_cv_lbl_gcc_fixincludes=no))
692*b636d99dSDavid van Moolenbroek	    AC_MSG_RESULT($ac_cv_lbl_gcc_fixincludes)
693*b636d99dSDavid van Moolenbroek	    if test $ac_cv_lbl_gcc_fixincludes = no ; then
694*b636d99dSDavid van Moolenbroek		    # Don't cache failure
695*b636d99dSDavid van Moolenbroek		    unset ac_cv_lbl_gcc_fixincludes
696*b636d99dSDavid van Moolenbroek		    AC_MSG_ERROR(see the INSTALL for more info)
697*b636d99dSDavid van Moolenbroek	    fi
698*b636d99dSDavid van Moolenbroek    fi])
699*b636d99dSDavid van Moolenbroek
700*b636d99dSDavid van Moolenbroekdnl
701*b636d99dSDavid van Moolenbroekdnl Checks to see if union wait is used with WEXITSTATUS()
702*b636d99dSDavid van Moolenbroekdnl
703*b636d99dSDavid van Moolenbroekdnl usage:
704*b636d99dSDavid van Moolenbroekdnl
705*b636d99dSDavid van Moolenbroekdnl	AC_LBL_UNION_WAIT
706*b636d99dSDavid van Moolenbroekdnl
707*b636d99dSDavid van Moolenbroekdnl results:
708*b636d99dSDavid van Moolenbroekdnl
709*b636d99dSDavid van Moolenbroekdnl	DECLWAITSTATUS (defined)
710*b636d99dSDavid van Moolenbroekdnl
711*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_LBL_UNION_WAIT,
712*b636d99dSDavid van Moolenbroek    [AC_MSG_CHECKING(if union wait is used)
713*b636d99dSDavid van Moolenbroek    AC_CACHE_VAL(ac_cv_lbl_union_wait,
714*b636d99dSDavid van Moolenbroek	AC_TRY_COMPILE([
715*b636d99dSDavid van Moolenbroek#	include <sys/types.h>
716*b636d99dSDavid van Moolenbroek#	include <sys/wait.h>],
717*b636d99dSDavid van Moolenbroek	    [int status;
718*b636d99dSDavid van Moolenbroek	    u_int i = WEXITSTATUS(status);
719*b636d99dSDavid van Moolenbroek	    u_int j = waitpid(0, &status, 0);],
720*b636d99dSDavid van Moolenbroek	    ac_cv_lbl_union_wait=no,
721*b636d99dSDavid van Moolenbroek	    ac_cv_lbl_union_wait=yes))
722*b636d99dSDavid van Moolenbroek    AC_MSG_RESULT($ac_cv_lbl_union_wait)
723*b636d99dSDavid van Moolenbroek    if test $ac_cv_lbl_union_wait = yes ; then
724*b636d99dSDavid van Moolenbroek	    AC_DEFINE(DECLWAITSTATUS,union wait,[type for wait])
725*b636d99dSDavid van Moolenbroek    else
726*b636d99dSDavid van Moolenbroek	    AC_DEFINE(DECLWAITSTATUS,int,[type for wait])
727*b636d99dSDavid van Moolenbroek    fi])
728*b636d99dSDavid van Moolenbroek
729*b636d99dSDavid van Moolenbroekdnl
730*b636d99dSDavid van Moolenbroekdnl Checks to see if the sockaddr struct has the 4.4 BSD sa_len member
731*b636d99dSDavid van Moolenbroekdnl
732*b636d99dSDavid van Moolenbroekdnl usage:
733*b636d99dSDavid van Moolenbroekdnl
734*b636d99dSDavid van Moolenbroekdnl	AC_LBL_SOCKADDR_SA_LEN
735*b636d99dSDavid van Moolenbroekdnl
736*b636d99dSDavid van Moolenbroekdnl results:
737*b636d99dSDavid van Moolenbroekdnl
738*b636d99dSDavid van Moolenbroekdnl	HAVE_SOCKADDR_SA_LEN (defined)
739*b636d99dSDavid van Moolenbroekdnl
740*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_LBL_SOCKADDR_SA_LEN,
741*b636d99dSDavid van Moolenbroek    [AC_MSG_CHECKING(if sockaddr struct has the sa_len member)
742*b636d99dSDavid van Moolenbroek    AC_CACHE_VAL(ac_cv_lbl_sockaddr_has_sa_len,
743*b636d99dSDavid van Moolenbroek	AC_TRY_COMPILE([
744*b636d99dSDavid van Moolenbroek#	include <sys/types.h>
745*b636d99dSDavid van Moolenbroek#	include <sys/socket.h>],
746*b636d99dSDavid van Moolenbroek	[u_int i = sizeof(((struct sockaddr *)0)->sa_len)],
747*b636d99dSDavid van Moolenbroek	ac_cv_lbl_sockaddr_has_sa_len=yes,
748*b636d99dSDavid van Moolenbroek	ac_cv_lbl_sockaddr_has_sa_len=no))
749*b636d99dSDavid van Moolenbroek    AC_MSG_RESULT($ac_cv_lbl_sockaddr_has_sa_len)
750*b636d99dSDavid van Moolenbroek    if test $ac_cv_lbl_sockaddr_has_sa_len = yes ; then
751*b636d99dSDavid van Moolenbroek	    AC_DEFINE(HAVE_SOCKADDR_SA_LEN,1,[if struct sockaddr has the sa_len member])
752*b636d99dSDavid van Moolenbroek    fi])
753*b636d99dSDavid van Moolenbroek
754*b636d99dSDavid van Moolenbroekdnl
755*b636d99dSDavid van Moolenbroekdnl Checks to see if -R is used
756*b636d99dSDavid van Moolenbroekdnl
757*b636d99dSDavid van Moolenbroekdnl usage:
758*b636d99dSDavid van Moolenbroekdnl
759*b636d99dSDavid van Moolenbroekdnl	AC_LBL_HAVE_RUN_PATH
760*b636d99dSDavid van Moolenbroekdnl
761*b636d99dSDavid van Moolenbroekdnl results:
762*b636d99dSDavid van Moolenbroekdnl
763*b636d99dSDavid van Moolenbroekdnl	ac_cv_lbl_have_run_path (yes or no)
764*b636d99dSDavid van Moolenbroekdnl
765*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_LBL_HAVE_RUN_PATH,
766*b636d99dSDavid van Moolenbroek    [AC_MSG_CHECKING(for ${CC-cc} -R)
767*b636d99dSDavid van Moolenbroek    AC_CACHE_VAL(ac_cv_lbl_have_run_path,
768*b636d99dSDavid van Moolenbroek	[echo 'main(){}' > conftest.c
769*b636d99dSDavid van Moolenbroek	${CC-cc} -o conftest conftest.c -R/a1/b2/c3 >conftest.out 2>&1
770*b636d99dSDavid van Moolenbroek	if test ! -s conftest.out ; then
771*b636d99dSDavid van Moolenbroek		ac_cv_lbl_have_run_path=yes
772*b636d99dSDavid van Moolenbroek	else
773*b636d99dSDavid van Moolenbroek		ac_cv_lbl_have_run_path=no
774*b636d99dSDavid van Moolenbroek	fi
775*b636d99dSDavid van Moolenbroek	rm -f -r conftest*])
776*b636d99dSDavid van Moolenbroek    AC_MSG_RESULT($ac_cv_lbl_have_run_path)
777*b636d99dSDavid van Moolenbroek    ])
778*b636d99dSDavid van Moolenbroek
779*b636d99dSDavid van Moolenbroekdnl
780*b636d99dSDavid van Moolenbroekdnl Check whether a given format can be used to print 64-bit integers
781*b636d99dSDavid van Moolenbroekdnl
782*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_LBL_CHECK_64BIT_FORMAT,
783*b636d99dSDavid van Moolenbroek  [
784*b636d99dSDavid van Moolenbroek    AC_MSG_CHECKING([whether %$1x can be used to format 64-bit integers])
785*b636d99dSDavid van Moolenbroek    AC_RUN_IFELSE(
786*b636d99dSDavid van Moolenbroek      [
787*b636d99dSDavid van Moolenbroek	AC_LANG_SOURCE(
788*b636d99dSDavid van Moolenbroek	  [[
789*b636d99dSDavid van Moolenbroek#	    ifdef HAVE_INTTYPES_H
790*b636d99dSDavid van Moolenbroek	    #include <inttypes.h>
791*b636d99dSDavid van Moolenbroek#	    endif
792*b636d99dSDavid van Moolenbroek	    #include <stdio.h>
793*b636d99dSDavid van Moolenbroek	    #include <sys/types.h>
794*b636d99dSDavid van Moolenbroek
795*b636d99dSDavid van Moolenbroek	    main()
796*b636d99dSDavid van Moolenbroek	    {
797*b636d99dSDavid van Moolenbroek	      uint64_t t = 1;
798*b636d99dSDavid van Moolenbroek	      char strbuf[16+1];
799*b636d99dSDavid van Moolenbroek	      sprintf(strbuf, "%016$1x", t << 32);
800*b636d99dSDavid van Moolenbroek	      if (strcmp(strbuf, "0000000100000000") == 0)
801*b636d99dSDavid van Moolenbroek		exit(0);
802*b636d99dSDavid van Moolenbroek	      else
803*b636d99dSDavid van Moolenbroek		exit(1);
804*b636d99dSDavid van Moolenbroek	    }
805*b636d99dSDavid van Moolenbroek	  ]])
806*b636d99dSDavid van Moolenbroek      ],
807*b636d99dSDavid van Moolenbroek      [
808*b636d99dSDavid van Moolenbroek	AC_DEFINE(PRId64, "$1d", [define if the platform doesn't define PRId64])
809*b636d99dSDavid van Moolenbroek	AC_DEFINE(PRIo64, "$1o", [define if the platform doesn't define PRIo64])
810*b636d99dSDavid van Moolenbroek	AC_DEFINE(PRIx64, "$1x", [define if the platform doesn't define PRIu64])
811*b636d99dSDavid van Moolenbroek	AC_DEFINE(PRIu64, "$1u", [define if the platform doesn't define PRIx64])
812*b636d99dSDavid van Moolenbroek	AC_MSG_RESULT(yes)
813*b636d99dSDavid van Moolenbroek      ],
814*b636d99dSDavid van Moolenbroek      [
815*b636d99dSDavid van Moolenbroek	AC_MSG_RESULT(no)
816*b636d99dSDavid van Moolenbroek	$2
817*b636d99dSDavid van Moolenbroek      ])
818*b636d99dSDavid van Moolenbroek  ])
819*b636d99dSDavid van Moolenbroek
820*b636d99dSDavid van Moolenbroekdnl
821*b636d99dSDavid van Moolenbroekdnl Checks to see if unaligned memory accesses fail
822*b636d99dSDavid van Moolenbroekdnl
823*b636d99dSDavid van Moolenbroekdnl usage:
824*b636d99dSDavid van Moolenbroekdnl
825*b636d99dSDavid van Moolenbroekdnl	AC_LBL_UNALIGNED_ACCESS
826*b636d99dSDavid van Moolenbroekdnl
827*b636d99dSDavid van Moolenbroekdnl results:
828*b636d99dSDavid van Moolenbroekdnl
829*b636d99dSDavid van Moolenbroekdnl	LBL_ALIGN (DEFINED)
830*b636d99dSDavid van Moolenbroekdnl
831*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_LBL_UNALIGNED_ACCESS,
832*b636d99dSDavid van Moolenbroek    [AC_MSG_CHECKING(if unaligned accesses fail)
833*b636d99dSDavid van Moolenbroek    AC_CACHE_VAL(ac_cv_lbl_unaligned_fail,
834*b636d99dSDavid van Moolenbroek	[case "$host_cpu" in
835*b636d99dSDavid van Moolenbroek
836*b636d99dSDavid van Moolenbroek	#
837*b636d99dSDavid van Moolenbroek	# These are CPU types where:
838*b636d99dSDavid van Moolenbroek	#
839*b636d99dSDavid van Moolenbroek	#	the CPU faults on an unaligned access, but at least some
840*b636d99dSDavid van Moolenbroek	#	OSes that support that CPU catch the fault and simulate
841*b636d99dSDavid van Moolenbroek	#	the unaligned access (e.g., Alpha/{Digital,Tru64} UNIX) -
842*b636d99dSDavid van Moolenbroek	#	the simulation is slow, so we don't want to use it;
843*b636d99dSDavid van Moolenbroek	#
844*b636d99dSDavid van Moolenbroek	#	the CPU, I infer (from the old
845*b636d99dSDavid van Moolenbroek	#
846*b636d99dSDavid van Moolenbroek	# XXX: should also check that they don't do weird things (like on arm)
847*b636d99dSDavid van Moolenbroek	#
848*b636d99dSDavid van Moolenbroek	#	comment) doesn't fault on unaligned accesses, but doesn't
849*b636d99dSDavid van Moolenbroek	#	do a normal unaligned fetch, either (e.g., presumably, ARM);
850*b636d99dSDavid van Moolenbroek	#
851*b636d99dSDavid van Moolenbroek	#	for whatever reason, the test program doesn't work
852*b636d99dSDavid van Moolenbroek	#	(this has been claimed to be the case for several of those
853*b636d99dSDavid van Moolenbroek	#	CPUs - I don't know what the problem is; the problem
854*b636d99dSDavid van Moolenbroek	#	was reported as "the test program dumps core" for SuperH,
855*b636d99dSDavid van Moolenbroek	#	but that's what the test program is *supposed* to do -
856*b636d99dSDavid van Moolenbroek	#	it dumps core before it writes anything, so the test
857*b636d99dSDavid van Moolenbroek	#	for an empty output file should find an empty output
858*b636d99dSDavid van Moolenbroek	#	file and conclude that unaligned accesses don't work).
859*b636d99dSDavid van Moolenbroek	#
860*b636d99dSDavid van Moolenbroek	# This run-time test won't work if you're cross-compiling, so
861*b636d99dSDavid van Moolenbroek	# in order to support cross-compiling for a particular CPU,
862*b636d99dSDavid van Moolenbroek	# we have to wire in the list of CPU types anyway, as far as
863*b636d99dSDavid van Moolenbroek	# I know, so perhaps we should just have a set of CPUs on
864*b636d99dSDavid van Moolenbroek	# which we know it doesn't work, a set of CPUs on which we
865*b636d99dSDavid van Moolenbroek	# know it does work, and have the script just fail on other
866*b636d99dSDavid van Moolenbroek	# cpu types and update it when such a failure occurs.
867*b636d99dSDavid van Moolenbroek	#
868*b636d99dSDavid van Moolenbroek	alpha*|arm*|bfin*|hp*|mips*|sh*|sparc*|ia64|nv1)
869*b636d99dSDavid van Moolenbroek		ac_cv_lbl_unaligned_fail=yes
870*b636d99dSDavid van Moolenbroek		;;
871*b636d99dSDavid van Moolenbroek
872*b636d99dSDavid van Moolenbroek	*)
873*b636d99dSDavid van Moolenbroek		cat >conftest.c <<EOF
874*b636d99dSDavid van Moolenbroek#		include <sys/types.h>
875*b636d99dSDavid van Moolenbroek#		include <sys/wait.h>
876*b636d99dSDavid van Moolenbroek#		include <stdio.h>
877*b636d99dSDavid van Moolenbroek		unsigned char a[[5]] = { 1, 2, 3, 4, 5 };
878*b636d99dSDavid van Moolenbroek		main() {
879*b636d99dSDavid van Moolenbroek		unsigned int i;
880*b636d99dSDavid van Moolenbroek		pid_t pid;
881*b636d99dSDavid van Moolenbroek		int status;
882*b636d99dSDavid van Moolenbroek		/* avoid "core dumped" message */
883*b636d99dSDavid van Moolenbroek		pid = fork();
884*b636d99dSDavid van Moolenbroek		if (pid <  0)
885*b636d99dSDavid van Moolenbroek			exit(2);
886*b636d99dSDavid van Moolenbroek		if (pid > 0) {
887*b636d99dSDavid van Moolenbroek			/* parent */
888*b636d99dSDavid van Moolenbroek			pid = waitpid(pid, &status, 0);
889*b636d99dSDavid van Moolenbroek			if (pid < 0)
890*b636d99dSDavid van Moolenbroek				exit(3);
891*b636d99dSDavid van Moolenbroek			exit(!WIFEXITED(status));
892*b636d99dSDavid van Moolenbroek		}
893*b636d99dSDavid van Moolenbroek		/* child */
894*b636d99dSDavid van Moolenbroek		i = *(unsigned int *)&a[[1]];
895*b636d99dSDavid van Moolenbroek		printf("%d\n", i);
896*b636d99dSDavid van Moolenbroek		exit(0);
897*b636d99dSDavid van Moolenbroek		}
898*b636d99dSDavid van MoolenbroekEOF
899*b636d99dSDavid van Moolenbroek		${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS \
900*b636d99dSDavid van Moolenbroek		    conftest.c $LIBS >/dev/null 2>&1
901*b636d99dSDavid van Moolenbroek		if test ! -x conftest ; then
902*b636d99dSDavid van Moolenbroek			dnl failed to compile for some reason
903*b636d99dSDavid van Moolenbroek			ac_cv_lbl_unaligned_fail=yes
904*b636d99dSDavid van Moolenbroek		else
905*b636d99dSDavid van Moolenbroek			./conftest >conftest.out
906*b636d99dSDavid van Moolenbroek			if test ! -s conftest.out ; then
907*b636d99dSDavid van Moolenbroek				ac_cv_lbl_unaligned_fail=yes
908*b636d99dSDavid van Moolenbroek			else
909*b636d99dSDavid van Moolenbroek				ac_cv_lbl_unaligned_fail=no
910*b636d99dSDavid van Moolenbroek			fi
911*b636d99dSDavid van Moolenbroek		fi
912*b636d99dSDavid van Moolenbroek		rm -f -r conftest* core core.conftest
913*b636d99dSDavid van Moolenbroek		;;
914*b636d99dSDavid van Moolenbroek	esac])
915*b636d99dSDavid van Moolenbroek    AC_MSG_RESULT($ac_cv_lbl_unaligned_fail)
916*b636d99dSDavid van Moolenbroek    if test $ac_cv_lbl_unaligned_fail = yes ; then
917*b636d99dSDavid van Moolenbroek	    AC_DEFINE(LBL_ALIGN,1,[if unaligned access fails])
918*b636d99dSDavid van Moolenbroek    fi])
919*b636d99dSDavid van Moolenbroek
920*b636d99dSDavid van Moolenbroekdnl
921*b636d99dSDavid van Moolenbroekdnl If the file .devel exists:
922*b636d99dSDavid van Moolenbroekdnl	Add some warning flags if the compiler supports them
923*b636d99dSDavid van Moolenbroekdnl	If an os prototype include exists, symlink os-proto.h to it
924*b636d99dSDavid van Moolenbroekdnl
925*b636d99dSDavid van Moolenbroekdnl usage:
926*b636d99dSDavid van Moolenbroekdnl
927*b636d99dSDavid van Moolenbroekdnl	AC_LBL_DEVEL(copt)
928*b636d99dSDavid van Moolenbroekdnl
929*b636d99dSDavid van Moolenbroekdnl results:
930*b636d99dSDavid van Moolenbroekdnl
931*b636d99dSDavid van Moolenbroekdnl	$1 (copt appended)
932*b636d99dSDavid van Moolenbroekdnl	HAVE_OS_PROTO_H (defined)
933*b636d99dSDavid van Moolenbroekdnl	os-proto.h (symlinked)
934*b636d99dSDavid van Moolenbroekdnl
935*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_LBL_DEVEL,
936*b636d99dSDavid van Moolenbroek    [rm -f os-proto.h
937*b636d99dSDavid van Moolenbroek    if test "${LBL_CFLAGS+set}" = set; then
938*b636d99dSDavid van Moolenbroek	    $1="$$1 ${LBL_CFLAGS}"
939*b636d99dSDavid van Moolenbroek    fi
940*b636d99dSDavid van Moolenbroek    if test -f .devel ; then
941*b636d99dSDavid van Moolenbroek	    #
942*b636d99dSDavid van Moolenbroek	    # Skip all the warning option stuff on some compilers.
943*b636d99dSDavid van Moolenbroek	    #
944*b636d99dSDavid van Moolenbroek	    if test "$ac_lbl_cc_dont_try_gcc_dashW" != yes; then
945*b636d99dSDavid van Moolenbroek		    AC_LBL_CHECK_COMPILER_OPT($1, -Wall)
946*b636d99dSDavid van Moolenbroek		    AC_LBL_CHECK_COMPILER_OPT($1, -Wmissing-prototypes)
947*b636d99dSDavid van Moolenbroek		    AC_LBL_CHECK_COMPILER_OPT($1, -Wstrict-prototypes)
948*b636d99dSDavid van Moolenbroek		    AC_LBL_CHECK_COMPILER_OPT($1, -Wwrite-strings)
949*b636d99dSDavid van Moolenbroek		    AC_LBL_CHECK_COMPILER_OPT($1, -Wpointer-arith)
950*b636d99dSDavid van Moolenbroek		    AC_LBL_CHECK_COMPILER_OPT($1, -W)
951*b636d99dSDavid van Moolenbroek	    fi
952*b636d99dSDavid van Moolenbroek	    AC_LBL_CHECK_DEPENDENCY_GENERATION_OPT()
953*b636d99dSDavid van Moolenbroek	    #
954*b636d99dSDavid van Moolenbroek	    # We used to set -n32 for IRIX 6 when not using GCC (presumed
955*b636d99dSDavid van Moolenbroek	    # to mean that we're using MIPS C or MIPSpro C); it specified
956*b636d99dSDavid van Moolenbroek	    # the "new" faster 32-bit ABI, introduced in IRIX 6.2.  I'm
957*b636d99dSDavid van Moolenbroek	    # not sure why that would be something to do *only* with a
958*b636d99dSDavid van Moolenbroek	    # .devel file; why should the ABI for which we produce code
959*b636d99dSDavid van Moolenbroek	    # depend on .devel?
960*b636d99dSDavid van Moolenbroek	    #
961*b636d99dSDavid van Moolenbroek	    os=`echo $host_os | sed -e 's/\([[0-9]][[0-9]]*\)[[^0-9]].*$/\1/'`
962*b636d99dSDavid van Moolenbroek	    name="lbl/os-$os.h"
963*b636d99dSDavid van Moolenbroek	    if test -f $name ; then
964*b636d99dSDavid van Moolenbroek		    ln -s $name os-proto.h
965*b636d99dSDavid van Moolenbroek		    AC_DEFINE(HAVE_OS_PROTO_H, 1,
966*b636d99dSDavid van Moolenbroek			[if there's an os_proto.h for this platform, to use additional prototypes])
967*b636d99dSDavid van Moolenbroek	    else
968*b636d99dSDavid van Moolenbroek		    AC_MSG_WARN(can't find $name)
969*b636d99dSDavid van Moolenbroek	    fi
970*b636d99dSDavid van Moolenbroek    fi])
971*b636d99dSDavid van Moolenbroek
972*b636d99dSDavid van Moolenbroekdnl
973*b636d99dSDavid van Moolenbroekdnl Improved version of AC_CHECK_LIB
974*b636d99dSDavid van Moolenbroekdnl
975*b636d99dSDavid van Moolenbroekdnl Thanks to John Hawkinson (jhawk@mit.edu)
976*b636d99dSDavid van Moolenbroekdnl
977*b636d99dSDavid van Moolenbroekdnl usage:
978*b636d99dSDavid van Moolenbroekdnl
979*b636d99dSDavid van Moolenbroekdnl	AC_LBL_CHECK_LIB(LIBRARY, FUNCTION [, ACTION-IF-FOUND [,
980*b636d99dSDavid van Moolenbroekdnl	    ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
981*b636d99dSDavid van Moolenbroekdnl
982*b636d99dSDavid van Moolenbroekdnl results:
983*b636d99dSDavid van Moolenbroekdnl
984*b636d99dSDavid van Moolenbroekdnl	LIBS
985*b636d99dSDavid van Moolenbroekdnl
986*b636d99dSDavid van Moolenbroekdnl XXX - "AC_LBL_LIBRARY_NET" was redone to use "AC_SEARCH_LIBS"
987*b636d99dSDavid van Moolenbroekdnl rather than "AC_LBL_CHECK_LIB", so this isn't used any more.
988*b636d99dSDavid van Moolenbroekdnl We keep it around for reference purposes in case it's ever
989*b636d99dSDavid van Moolenbroekdnl useful in the future.
990*b636d99dSDavid van Moolenbroekdnl
991*b636d99dSDavid van Moolenbroek
992*b636d99dSDavid van Moolenbroekdefine(AC_LBL_CHECK_LIB,
993*b636d99dSDavid van Moolenbroek[AC_MSG_CHECKING([for $2 in -l$1])
994*b636d99dSDavid van Moolenbroekdnl Use a cache variable name containing the library, function
995*b636d99dSDavid van Moolenbroekdnl name, and extra libraries to link with, because the test really is
996*b636d99dSDavid van Moolenbroekdnl for library $1 defining function $2, when linked with potinal
997*b636d99dSDavid van Moolenbroekdnl library $5, not just for library $1.  Separate tests with the same
998*b636d99dSDavid van Moolenbroekdnl $1 and different $2's or $5's may have different results.
999*b636d99dSDavid van Moolenbroekac_lib_var=`echo $1['_']$2['_']$5 | sed 'y%./+- %__p__%'`
1000*b636d99dSDavid van MoolenbroekAC_CACHE_VAL(ac_cv_lbl_lib_$ac_lib_var,
1001*b636d99dSDavid van Moolenbroek[ac_save_LIBS="$LIBS"
1002*b636d99dSDavid van MoolenbroekLIBS="-l$1 $5 $LIBS"
1003*b636d99dSDavid van MoolenbroekAC_TRY_LINK(dnl
1004*b636d99dSDavid van Moolenbroekifelse([$2], [main], , dnl Avoid conflicting decl of main.
1005*b636d99dSDavid van Moolenbroek[/* Override any gcc2 internal prototype to avoid an error.  */
1006*b636d99dSDavid van Moolenbroek]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus
1007*b636d99dSDavid van Moolenbroekextern "C"
1008*b636d99dSDavid van Moolenbroek#endif
1009*b636d99dSDavid van Moolenbroek])dnl
1010*b636d99dSDavid van Moolenbroek[/* We use char because int might match the return type of a gcc2
1011*b636d99dSDavid van Moolenbroek    builtin and then its argument prototype would still apply.  */
1012*b636d99dSDavid van Moolenbroekchar $2();
1013*b636d99dSDavid van Moolenbroek]),
1014*b636d99dSDavid van Moolenbroek	    [$2()],
1015*b636d99dSDavid van Moolenbroek	    eval "ac_cv_lbl_lib_$ac_lib_var=yes",
1016*b636d99dSDavid van Moolenbroek	    eval "ac_cv_lbl_lib_$ac_lib_var=no")
1017*b636d99dSDavid van MoolenbroekLIBS="$ac_save_LIBS"
1018*b636d99dSDavid van Moolenbroek])dnl
1019*b636d99dSDavid van Moolenbroekif eval "test \"`echo '$ac_cv_lbl_lib_'$ac_lib_var`\" = yes"; then
1020*b636d99dSDavid van Moolenbroek  AC_MSG_RESULT(yes)
1021*b636d99dSDavid van Moolenbroek  ifelse([$3], ,
1022*b636d99dSDavid van Moolenbroek[changequote(, )dnl
1023*b636d99dSDavid van Moolenbroek  ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \
1024*b636d99dSDavid van Moolenbroek    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
1025*b636d99dSDavid van Moolenbroekchangequote([, ])dnl
1026*b636d99dSDavid van Moolenbroek  AC_DEFINE_UNQUOTED($ac_tr_lib)
1027*b636d99dSDavid van Moolenbroek  LIBS="-l$1 $LIBS"
1028*b636d99dSDavid van Moolenbroek], [$3])
1029*b636d99dSDavid van Moolenbroekelse
1030*b636d99dSDavid van Moolenbroek  AC_MSG_RESULT(no)
1031*b636d99dSDavid van Moolenbroekifelse([$4], , , [$4
1032*b636d99dSDavid van Moolenbroek])dnl
1033*b636d99dSDavid van Moolenbroekfi
1034*b636d99dSDavid van Moolenbroek])
1035*b636d99dSDavid van Moolenbroek
1036*b636d99dSDavid van Moolenbroekdnl
1037*b636d99dSDavid van Moolenbroekdnl AC_LBL_LIBRARY_NET
1038*b636d99dSDavid van Moolenbroekdnl
1039*b636d99dSDavid van Moolenbroekdnl This test is for network applications that need socket() and
1040*b636d99dSDavid van Moolenbroekdnl gethostbyname() -ish functions.  Under Solaris, those applications
1041*b636d99dSDavid van Moolenbroekdnl need to link with "-lsocket -lnsl".  Under IRIX, they need to link
1042*b636d99dSDavid van Moolenbroekdnl with "-lnsl" but should *not* link with "-lsocket" because
1043*b636d99dSDavid van Moolenbroekdnl libsocket.a breaks a number of things (for instance:
1044*b636d99dSDavid van Moolenbroekdnl gethostbyname() under IRIX 5.2, and snoop sockets under most
1045*b636d99dSDavid van Moolenbroekdnl versions of IRIX).
1046*b636d99dSDavid van Moolenbroekdnl
1047*b636d99dSDavid van Moolenbroekdnl Unfortunately, many application developers are not aware of this,
1048*b636d99dSDavid van Moolenbroekdnl and mistakenly write tests that cause -lsocket to be used under
1049*b636d99dSDavid van Moolenbroekdnl IRIX.  It is also easy to write tests that cause -lnsl to be used
1050*b636d99dSDavid van Moolenbroekdnl under operating systems where neither are necessary (or useful),
1051*b636d99dSDavid van Moolenbroekdnl such as SunOS 4.1.4, which uses -lnsl for TLI.
1052*b636d99dSDavid van Moolenbroekdnl
1053*b636d99dSDavid van Moolenbroekdnl This test exists so that every application developer does not test
1054*b636d99dSDavid van Moolenbroekdnl this in a different, and subtly broken fashion.
1055*b636d99dSDavid van Moolenbroek
1056*b636d99dSDavid van Moolenbroekdnl It has been argued that this test should be broken up into two
1057*b636d99dSDavid van Moolenbroekdnl seperate tests, one for the resolver libraries, and one for the
1058*b636d99dSDavid van Moolenbroekdnl libraries necessary for using Sockets API. Unfortunately, the two
1059*b636d99dSDavid van Moolenbroekdnl are carefully intertwined and allowing the autoconf user to use
1060*b636d99dSDavid van Moolenbroekdnl them independantly potentially results in unfortunate ordering
1061*b636d99dSDavid van Moolenbroekdnl dependancies -- as such, such component macros would have to
1062*b636d99dSDavid van Moolenbroekdnl carefully use indirection and be aware if the other components were
1063*b636d99dSDavid van Moolenbroekdnl executed. Since other autoconf macros do not go to this trouble,
1064*b636d99dSDavid van Moolenbroekdnl and almost no applications use sockets without the resolver, this
1065*b636d99dSDavid van Moolenbroekdnl complexity has not been implemented.
1066*b636d99dSDavid van Moolenbroekdnl
1067*b636d99dSDavid van Moolenbroekdnl The check for libresolv is in case you are attempting to link
1068*b636d99dSDavid van Moolenbroekdnl statically and happen to have a libresolv.a lying around (and no
1069*b636d99dSDavid van Moolenbroekdnl libnsl.a).
1070*b636d99dSDavid van Moolenbroekdnl
1071*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_LBL_LIBRARY_NET, [
1072*b636d99dSDavid van Moolenbroek    # Most operating systems have gethostbyname() in the default searched
1073*b636d99dSDavid van Moolenbroek    # libraries (i.e. libc):
1074*b636d99dSDavid van Moolenbroek    # Some OSes (eg. Solaris) place it in libnsl
1075*b636d99dSDavid van Moolenbroek    # Some strange OSes (SINIX) have it in libsocket:
1076*b636d99dSDavid van Moolenbroek    AC_SEARCH_LIBS(gethostbyname, nsl socket resolv)
1077*b636d99dSDavid van Moolenbroek    # Unfortunately libsocket sometimes depends on libnsl and
1078*b636d99dSDavid van Moolenbroek    # AC_SEARCH_LIBS isn't up to the task of handling dependencies like this.
1079*b636d99dSDavid van Moolenbroek    if test "$ac_cv_search_gethostbyname" = "no"
1080*b636d99dSDavid van Moolenbroek    then
1081*b636d99dSDavid van Moolenbroek	AC_CHECK_LIB(socket, gethostbyname,
1082*b636d99dSDavid van Moolenbroek                     LIBS="-lsocket -lnsl $LIBS", , -lnsl)
1083*b636d99dSDavid van Moolenbroek    fi
1084*b636d99dSDavid van Moolenbroek    AC_SEARCH_LIBS(socket, socket, ,
1085*b636d99dSDavid van Moolenbroek	AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl))
1086*b636d99dSDavid van Moolenbroek    # DLPI needs putmsg under HPUX so test for -lstr while we're at it
1087*b636d99dSDavid van Moolenbroek    AC_SEARCH_LIBS(putmsg, str)
1088*b636d99dSDavid van Moolenbroek    ])
1089*b636d99dSDavid van Moolenbroek
1090*b636d99dSDavid van Moolenbroekdnl Copyright (c) 1999 WIDE Project. All rights reserved.
1091*b636d99dSDavid van Moolenbroekdnl
1092*b636d99dSDavid van Moolenbroekdnl Redistribution and use in source and binary forms, with or without
1093*b636d99dSDavid van Moolenbroekdnl modification, are permitted provided that the following conditions
1094*b636d99dSDavid van Moolenbroekdnl are met:
1095*b636d99dSDavid van Moolenbroekdnl 1. Redistributions of source code must retain the above copyright
1096*b636d99dSDavid van Moolenbroekdnl    notice, this list of conditions and the following disclaimer.
1097*b636d99dSDavid van Moolenbroekdnl 2. Redistributions in binary form must reproduce the above copyright
1098*b636d99dSDavid van Moolenbroekdnl    notice, this list of conditions and the following disclaimer in the
1099*b636d99dSDavid van Moolenbroekdnl    documentation and/or other materials provided with the distribution.
1100*b636d99dSDavid van Moolenbroekdnl 3. Neither the name of the project nor the names of its contributors
1101*b636d99dSDavid van Moolenbroekdnl    may be used to endorse or promote products derived from this software
1102*b636d99dSDavid van Moolenbroekdnl    without specific prior written permission.
1103*b636d99dSDavid van Moolenbroekdnl
1104*b636d99dSDavid van Moolenbroekdnl THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
1105*b636d99dSDavid van Moolenbroekdnl ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1106*b636d99dSDavid van Moolenbroekdnl IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1107*b636d99dSDavid van Moolenbroekdnl ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
1108*b636d99dSDavid van Moolenbroekdnl FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1109*b636d99dSDavid van Moolenbroekdnl DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
1110*b636d99dSDavid van Moolenbroekdnl OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1111*b636d99dSDavid van Moolenbroekdnl HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
1112*b636d99dSDavid van Moolenbroekdnl LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
1113*b636d99dSDavid van Moolenbroekdnl OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
1114*b636d99dSDavid van Moolenbroekdnl SUCH DAMAGE.
1115*b636d99dSDavid van Moolenbroek
1116*b636d99dSDavid van Moolenbroekdnl
1117*b636d99dSDavid van Moolenbroekdnl Checks to see if AF_INET6 is defined
1118*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_CHECK_AF_INET6, [
1119*b636d99dSDavid van Moolenbroek	AC_MSG_CHECKING(for AF_INET6)
1120*b636d99dSDavid van Moolenbroek	AC_CACHE_VAL($1,
1121*b636d99dSDavid van Moolenbroek	AC_TRY_COMPILE([
1122*b636d99dSDavid van Moolenbroek#		include <sys/types.h>
1123*b636d99dSDavid van Moolenbroek#		include <sys/socket.h>],
1124*b636d99dSDavid van Moolenbroek		[int a = AF_INET6],
1125*b636d99dSDavid van Moolenbroek		$1=yes,
1126*b636d99dSDavid van Moolenbroek		$1=no))
1127*b636d99dSDavid van Moolenbroek	AC_MSG_RESULT($$1)
1128*b636d99dSDavid van Moolenbroek		if test $$1 = yes ; then
1129*b636d99dSDavid van Moolenbroek			AC_DEFINE(HAVE_AF_INET6)
1130*b636d99dSDavid van Moolenbroek	fi
1131*b636d99dSDavid van Moolenbroek])
1132*b636d99dSDavid van Moolenbroek
1133*b636d99dSDavid van Moolenbroekdnl
1134*b636d99dSDavid van Moolenbroekdnl Checks to see if the sockaddr struct has the 4.4 BSD sa_len member
1135*b636d99dSDavid van Moolenbroekdnl borrowed from LBL libpcap
1136*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_CHECK_SA_LEN, [
1137*b636d99dSDavid van Moolenbroek	AC_MSG_CHECKING(if sockaddr struct has sa_len member)
1138*b636d99dSDavid van Moolenbroek	AC_CACHE_VAL($1,
1139*b636d99dSDavid van Moolenbroek	AC_TRY_COMPILE([
1140*b636d99dSDavid van Moolenbroek#		include <sys/types.h>
1141*b636d99dSDavid van Moolenbroek#		include <sys/socket.h>],
1142*b636d99dSDavid van Moolenbroek		[u_int i = sizeof(((struct sockaddr *)0)->sa_len)],
1143*b636d99dSDavid van Moolenbroek		$1=yes,
1144*b636d99dSDavid van Moolenbroek		$1=no))
1145*b636d99dSDavid van Moolenbroek	AC_MSG_RESULT($$1)
1146*b636d99dSDavid van Moolenbroek		if test $$1 = yes ; then
1147*b636d99dSDavid van Moolenbroek			AC_DEFINE(HAVE_SOCKADDR_SA_LEN)
1148*b636d99dSDavid van Moolenbroek	fi
1149*b636d99dSDavid van Moolenbroek])
1150*b636d99dSDavid van Moolenbroek
1151*b636d99dSDavid van Moolenbroekdnl
1152*b636d99dSDavid van Moolenbroekdnl Checks for addrinfo structure
1153*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_STRUCT_ADDRINFO, [
1154*b636d99dSDavid van Moolenbroek	AC_MSG_CHECKING(for addrinfo)
1155*b636d99dSDavid van Moolenbroek	AC_CACHE_VAL($1,
1156*b636d99dSDavid van Moolenbroek	AC_TRY_COMPILE([
1157*b636d99dSDavid van Moolenbroek#		include <netdb.h>],
1158*b636d99dSDavid van Moolenbroek		[struct addrinfo a],
1159*b636d99dSDavid van Moolenbroek		$1=yes,
1160*b636d99dSDavid van Moolenbroek		$1=no))
1161*b636d99dSDavid van Moolenbroek	AC_MSG_RESULT($$1)
1162*b636d99dSDavid van Moolenbroek	if test $$1 = yes; then
1163*b636d99dSDavid van Moolenbroek		AC_DEFINE(HAVE_ADDRINFO, 1,
1164*b636d99dSDavid van Moolenbroek		    [define if you have the addrinfo function])
1165*b636d99dSDavid van Moolenbroek	else
1166*b636d99dSDavid van Moolenbroek		AC_DEFINE(NEED_ADDRINFO_H, 1,
1167*b636d99dSDavid van Moolenbroek		    [define if you need to include missing/addrinfo.h])
1168*b636d99dSDavid van Moolenbroek	fi
1169*b636d99dSDavid van Moolenbroek])
1170*b636d99dSDavid van Moolenbroek
1171*b636d99dSDavid van Moolenbroekdnl
1172*b636d99dSDavid van Moolenbroekdnl Checks for NI_MAXSERV
1173*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_NI_MAXSERV, [
1174*b636d99dSDavid van Moolenbroek	AC_MSG_CHECKING(for NI_MAXSERV)
1175*b636d99dSDavid van Moolenbroek	AC_CACHE_VAL($1,
1176*b636d99dSDavid van Moolenbroek	AC_EGREP_CPP(yes, [#include <netdb.h>
1177*b636d99dSDavid van Moolenbroek#ifdef NI_MAXSERV
1178*b636d99dSDavid van Moolenbroekyes
1179*b636d99dSDavid van Moolenbroek#endif],
1180*b636d99dSDavid van Moolenbroek		$1=yes,
1181*b636d99dSDavid van Moolenbroek		$1=no))
1182*b636d99dSDavid van Moolenbroek	AC_MSG_RESULT($$1)
1183*b636d99dSDavid van Moolenbroek	if test $$1 != yes; then
1184*b636d99dSDavid van Moolenbroek		AC_DEFINE(NEED_ADDRINFO_H)
1185*b636d99dSDavid van Moolenbroek	fi
1186*b636d99dSDavid van Moolenbroek])
1187*b636d99dSDavid van Moolenbroek
1188*b636d99dSDavid van Moolenbroekdnl
1189*b636d99dSDavid van Moolenbroekdnl Checks for NI_NAMEREQD
1190*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_NI_NAMEREQD, [
1191*b636d99dSDavid van Moolenbroek	AC_MSG_CHECKING(for NI_NAMEREQD)
1192*b636d99dSDavid van Moolenbroek	AC_CACHE_VAL($1,
1193*b636d99dSDavid van Moolenbroek	AC_EGREP_CPP(yes, [#include <netdb.h>
1194*b636d99dSDavid van Moolenbroek#ifdef NI_NOFQDN
1195*b636d99dSDavid van Moolenbroekyes
1196*b636d99dSDavid van Moolenbroek#endif],
1197*b636d99dSDavid van Moolenbroek		$1=yes,
1198*b636d99dSDavid van Moolenbroek		$1=no))
1199*b636d99dSDavid van Moolenbroek	AC_MSG_RESULT($$1)
1200*b636d99dSDavid van Moolenbroek	if test $$1 != yes; then
1201*b636d99dSDavid van Moolenbroek		AC_DEFINE(NEED_ADDRINFO_H)
1202*b636d99dSDavid van Moolenbroek	fi
1203*b636d99dSDavid van Moolenbroek])
1204*b636d99dSDavid van Moolenbroek
1205*b636d99dSDavid van Moolenbroekdnl
1206*b636d99dSDavid van Moolenbroekdnl Checks for sockaddr_storage structure
1207*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_STRUCT_SA_STORAGE, [
1208*b636d99dSDavid van Moolenbroek	AC_MSG_CHECKING(for sockaddr_storage)
1209*b636d99dSDavid van Moolenbroek	AC_CACHE_VAL($1,
1210*b636d99dSDavid van Moolenbroek	AC_TRY_COMPILE([
1211*b636d99dSDavid van Moolenbroek#		include <sys/types.h>
1212*b636d99dSDavid van Moolenbroek#		include <sys/socket.h>],
1213*b636d99dSDavid van Moolenbroek		[struct sockaddr_storage s],
1214*b636d99dSDavid van Moolenbroek		$1=yes,
1215*b636d99dSDavid van Moolenbroek		$1=no))
1216*b636d99dSDavid van Moolenbroek	AC_MSG_RESULT($$1)
1217*b636d99dSDavid van Moolenbroek	if test $$1 = yes; then
1218*b636d99dSDavid van Moolenbroek		AC_DEFINE(HAVE_SOCKADDR_STORAGE, 1,
1219*b636d99dSDavid van Moolenbroek		    [define if you have struct sockaddr_storage])
1220*b636d99dSDavid van Moolenbroek	fi
1221*b636d99dSDavid van Moolenbroek])
1222*b636d99dSDavid van Moolenbroek
1223*b636d99dSDavid van Moolenbroekdnl
1224*b636d99dSDavid van Moolenbroekdnl check for h_errno
1225*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_VAR_H_ERRNO, [
1226*b636d99dSDavid van Moolenbroek	AC_MSG_CHECKING(for h_errno)
1227*b636d99dSDavid van Moolenbroek	AC_CACHE_VAL(ac_cv_var_h_errno,
1228*b636d99dSDavid van Moolenbroek	AC_TRY_COMPILE([
1229*b636d99dSDavid van Moolenbroek#		include <sys/types.h>
1230*b636d99dSDavid van Moolenbroek#		include <netdb.h>],
1231*b636d99dSDavid van Moolenbroek		[int foo = h_errno;],
1232*b636d99dSDavid van Moolenbroek		ac_cv_var_h_errno=yes,
1233*b636d99dSDavid van Moolenbroek		ac_cv_var_h_errno=no))
1234*b636d99dSDavid van Moolenbroek	AC_MSG_RESULT($ac_cv_var_h_errno)
1235*b636d99dSDavid van Moolenbroek	if test "$ac_cv_var_h_errno" = "yes"; then
1236*b636d99dSDavid van Moolenbroek		AC_DEFINE(HAVE_H_ERRNO, 1,
1237*b636d99dSDavid van Moolenbroek		    [define if you have the h_errno variable])
1238*b636d99dSDavid van Moolenbroek	fi
1239*b636d99dSDavid van Moolenbroek])
1240*b636d99dSDavid van Moolenbroek
1241*b636d99dSDavid van Moolenbroekdnl
1242*b636d99dSDavid van Moolenbroekdnl Test for __attribute__
1243*b636d99dSDavid van Moolenbroekdnl
1244*b636d99dSDavid van Moolenbroek
1245*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_C___ATTRIBUTE__, [
1246*b636d99dSDavid van MoolenbroekAC_MSG_CHECKING(for __attribute__)
1247*b636d99dSDavid van MoolenbroekAC_CACHE_VAL(ac_cv___attribute__, [
1248*b636d99dSDavid van MoolenbroekAC_COMPILE_IFELSE([
1249*b636d99dSDavid van Moolenbroek  AC_LANG_SOURCE([[
1250*b636d99dSDavid van Moolenbroek#include <stdlib.h>
1251*b636d99dSDavid van Moolenbroek
1252*b636d99dSDavid van Moolenbroekstatic void foo(void) __attribute__ ((noreturn));
1253*b636d99dSDavid van Moolenbroek
1254*b636d99dSDavid van Moolenbroekstatic void
1255*b636d99dSDavid van Moolenbroekfoo(void)
1256*b636d99dSDavid van Moolenbroek{
1257*b636d99dSDavid van Moolenbroek  exit(1);
1258*b636d99dSDavid van Moolenbroek}
1259*b636d99dSDavid van Moolenbroek
1260*b636d99dSDavid van Moolenbroekint
1261*b636d99dSDavid van Moolenbroekmain(int argc, char **argv)
1262*b636d99dSDavid van Moolenbroek{
1263*b636d99dSDavid van Moolenbroek  foo();
1264*b636d99dSDavid van Moolenbroek}
1265*b636d99dSDavid van Moolenbroek  ]])],
1266*b636d99dSDavid van Moolenbroekac_cv___attribute__=yes,
1267*b636d99dSDavid van Moolenbroekac_cv___attribute__=no)])
1268*b636d99dSDavid van Moolenbroekif test "$ac_cv___attribute__" = "yes"; then
1269*b636d99dSDavid van Moolenbroek  AC_DEFINE(HAVE___ATTRIBUTE__, 1, [define if your compiler has __attribute__])
1270*b636d99dSDavid van Moolenbroekelse
1271*b636d99dSDavid van Moolenbroek  #
1272*b636d99dSDavid van Moolenbroek  # We can't use __attribute__, so we can't use __attribute__((unused)),
1273*b636d99dSDavid van Moolenbroek  # so we define _U_ to an empty string.
1274*b636d99dSDavid van Moolenbroek  #
1275*b636d99dSDavid van Moolenbroek  V_DEFS="$V_DEFS -D_U_=\"\""
1276*b636d99dSDavid van Moolenbroekfi
1277*b636d99dSDavid van MoolenbroekAC_MSG_RESULT($ac_cv___attribute__)
1278*b636d99dSDavid van Moolenbroek])
1279*b636d99dSDavid van Moolenbroek
1280*b636d99dSDavid van Moolenbroek
1281*b636d99dSDavid van Moolenbroekdnl
1282*b636d99dSDavid van Moolenbroekdnl Test whether __attribute__((unused)) can be used without warnings
1283*b636d99dSDavid van Moolenbroekdnl
1284*b636d99dSDavid van Moolenbroek
1285*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_C___ATTRIBUTE___UNUSED, [
1286*b636d99dSDavid van MoolenbroekAC_MSG_CHECKING([whether __attribute__((unused)) can be used without warnings])
1287*b636d99dSDavid van MoolenbroekAC_CACHE_VAL(ac_cv___attribute___unused, [
1288*b636d99dSDavid van Moolenbroeksave_CFLAGS="$CFLAGS"
1289*b636d99dSDavid van MoolenbroekCFLAGS="$CFLAGS $ac_lbl_cc_force_warning_errors"
1290*b636d99dSDavid van MoolenbroekAC_COMPILE_IFELSE([
1291*b636d99dSDavid van Moolenbroek  AC_LANG_SOURCE([[
1292*b636d99dSDavid van Moolenbroek#include <stdlib.h>
1293*b636d99dSDavid van Moolenbroek#include <stdio.h>
1294*b636d99dSDavid van Moolenbroek
1295*b636d99dSDavid van Moolenbroekint
1296*b636d99dSDavid van Moolenbroekmain(int argc  __attribute((unused)), char **argv __attribute((unused)))
1297*b636d99dSDavid van Moolenbroek{
1298*b636d99dSDavid van Moolenbroek  printf("Hello, world!\n");
1299*b636d99dSDavid van Moolenbroek  return 0;
1300*b636d99dSDavid van Moolenbroek}
1301*b636d99dSDavid van Moolenbroek  ]])],
1302*b636d99dSDavid van Moolenbroekac_cv___attribute___unused=yes,
1303*b636d99dSDavid van Moolenbroekac_cv___attribute___unused=no)])
1304*b636d99dSDavid van MoolenbroekCFLAGS="$save_CFLAGS"
1305*b636d99dSDavid van Moolenbroekif test "$ac_cv___attribute___unused" = "yes"; then
1306*b636d99dSDavid van Moolenbroek  V_DEFS="$V_DEFS -D_U_=\"__attribute__((unused))\""
1307*b636d99dSDavid van Moolenbroekelse
1308*b636d99dSDavid van Moolenbroek  V_DEFS="$V_DEFS -D_U_=\"\""
1309*b636d99dSDavid van Moolenbroekfi
1310*b636d99dSDavid van MoolenbroekAC_MSG_RESULT($ac_cv___attribute___unused)
1311*b636d99dSDavid van Moolenbroek])
1312*b636d99dSDavid van Moolenbroek
1313*b636d99dSDavid van Moolenbroekdnl
1314*b636d99dSDavid van Moolenbroekdnl Test whether __attribute__((format)) can be used without warnings
1315*b636d99dSDavid van Moolenbroekdnl
1316*b636d99dSDavid van Moolenbroek
1317*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_C___ATTRIBUTE___FORMAT, [
1318*b636d99dSDavid van MoolenbroekAC_MSG_CHECKING([whether __attribute__((format)) can be used without warnings])
1319*b636d99dSDavid van MoolenbroekAC_CACHE_VAL(ac_cv___attribute___format, [
1320*b636d99dSDavid van Moolenbroeksave_CFLAGS="$CFLAGS"
1321*b636d99dSDavid van MoolenbroekCFLAGS="$CFLAGS $ac_lbl_cc_force_warning_errors"
1322*b636d99dSDavid van MoolenbroekAC_COMPILE_IFELSE([
1323*b636d99dSDavid van Moolenbroek  AC_LANG_SOURCE([[
1324*b636d99dSDavid van Moolenbroek#include <stdlib.h>
1325*b636d99dSDavid van Moolenbroek
1326*b636d99dSDavid van Moolenbroekextern int foo(const char *fmt, ...)
1327*b636d99dSDavid van Moolenbroek		  __attribute__ ((format (printf, 1, 2)));
1328*b636d99dSDavid van Moolenbroek
1329*b636d99dSDavid van Moolenbroekint
1330*b636d99dSDavid van Moolenbroekmain(int argc, char **argv)
1331*b636d99dSDavid van Moolenbroek{
1332*b636d99dSDavid van Moolenbroek  foo("%s", "test");
1333*b636d99dSDavid van Moolenbroek}
1334*b636d99dSDavid van Moolenbroek  ]])],
1335*b636d99dSDavid van Moolenbroekac_cv___attribute___format=yes,
1336*b636d99dSDavid van Moolenbroekac_cv___attribute___format=no)])
1337*b636d99dSDavid van MoolenbroekCFLAGS="$save_CFLAGS"
1338*b636d99dSDavid van Moolenbroekif test "$ac_cv___attribute___format" = "yes"; then
1339*b636d99dSDavid van Moolenbroek  AC_DEFINE(__ATTRIBUTE___FORMAT_OK, 1,
1340*b636d99dSDavid van Moolenbroek    [define if your compiler allows __attribute__((format)) without a warning])
1341*b636d99dSDavid van Moolenbroekfi
1342*b636d99dSDavid van MoolenbroekAC_MSG_RESULT($ac_cv___attribute___format)
1343*b636d99dSDavid van Moolenbroek])
1344*b636d99dSDavid van Moolenbroek
1345*b636d99dSDavid van Moolenbroekdnl
1346*b636d99dSDavid van Moolenbroekdnl Test whether __attribute__((format)) can be applied to function
1347*b636d99dSDavid van Moolenbroekdnl pointers
1348*b636d99dSDavid van Moolenbroekdnl
1349*b636d99dSDavid van Moolenbroek
1350*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_C___ATTRIBUTE___FORMAT_FUNCTION_POINTER, [
1351*b636d99dSDavid van MoolenbroekAC_MSG_CHECKING([whether __attribute__((format)) can be applied to function pointers])
1352*b636d99dSDavid van MoolenbroekAC_CACHE_VAL(ac_cv___attribute___format_function_pointer, [
1353*b636d99dSDavid van MoolenbroekAC_COMPILE_IFELSE([
1354*b636d99dSDavid van Moolenbroek  AC_LANG_SOURCE([[
1355*b636d99dSDavid van Moolenbroek#include <stdlib.h>
1356*b636d99dSDavid van Moolenbroek
1357*b636d99dSDavid van Moolenbroekextern int (*foo)(const char *fmt, ...)
1358*b636d99dSDavid van Moolenbroek		  __attribute__ ((format (printf, 1, 2)));
1359*b636d99dSDavid van Moolenbroek
1360*b636d99dSDavid van Moolenbroekint
1361*b636d99dSDavid van Moolenbroekmain(int argc, char **argv)
1362*b636d99dSDavid van Moolenbroek{
1363*b636d99dSDavid van Moolenbroek  (*foo)("%s", "test");
1364*b636d99dSDavid van Moolenbroek}
1365*b636d99dSDavid van Moolenbroek  ]])],
1366*b636d99dSDavid van Moolenbroekac_cv___attribute___format_function_pointer=yes,
1367*b636d99dSDavid van Moolenbroekac_cv___attribute___format_function_pointer=no)])
1368*b636d99dSDavid van Moolenbroekif test "$ac_cv___attribute___format_function_pointer" = "yes"; then
1369*b636d99dSDavid van Moolenbroek  AC_DEFINE(__ATTRIBUTE___FORMAT_OK_FOR_FUNCTION_POINTERS, 1,
1370*b636d99dSDavid van Moolenbroek    [define if your compiler allows __attribute__((format)) to be applied to function pointers])
1371*b636d99dSDavid van Moolenbroekfi
1372*b636d99dSDavid van MoolenbroekAC_MSG_RESULT($ac_cv___attribute___format_function_pointer)
1373*b636d99dSDavid van Moolenbroek])
1374*b636d99dSDavid van Moolenbroek
1375*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_C___ATTRIBUTE___NORETURN_FUNCTION_POINTER, [
1376*b636d99dSDavid van MoolenbroekAC_MSG_CHECKING([whether __attribute__((noreturn)) can be applied to function pointers without warnings])
1377*b636d99dSDavid van MoolenbroekAC_CACHE_VAL(ac_cv___attribute___noreturn_function_pointer, [
1378*b636d99dSDavid van Moolenbroeksave_CFLAGS="$CFLAGS"
1379*b636d99dSDavid van MoolenbroekCFLAGS="$CFLAGS $ac_lbl_cc_force_warning_errors"
1380*b636d99dSDavid van MoolenbroekAC_COMPILE_IFELSE([
1381*b636d99dSDavid van Moolenbroek  AC_LANG_SOURCE([[
1382*b636d99dSDavid van Moolenbroek#include <stdlib.h>
1383*b636d99dSDavid van Moolenbroek
1384*b636d99dSDavid van Moolenbroekextern int (*foo)(int i)
1385*b636d99dSDavid van Moolenbroek		  __attribute__ ((noreturn));
1386*b636d99dSDavid van Moolenbroek
1387*b636d99dSDavid van Moolenbroekint
1388*b636d99dSDavid van Moolenbroekmain(int argc, char **argv)
1389*b636d99dSDavid van Moolenbroek{
1390*b636d99dSDavid van Moolenbroek  (*foo)(1);
1391*b636d99dSDavid van Moolenbroek}
1392*b636d99dSDavid van Moolenbroek  ]])],
1393*b636d99dSDavid van Moolenbroekac_cv___attribute___noreturn_function_pointer=yes,
1394*b636d99dSDavid van Moolenbroekac_cv___attribute___noreturn_function_pointer=no)])
1395*b636d99dSDavid van MoolenbroekCFLAGS="$save_CFLAGS"
1396*b636d99dSDavid van Moolenbroekif test "$ac_cv___attribute___noreturn_function_pointer" = "yes"; then
1397*b636d99dSDavid van Moolenbroek  AC_DEFINE(__ATTRIBUTE___NORETURN_OK_FOR_FUNCTION_POINTERS, 1,
1398*b636d99dSDavid van Moolenbroek    [define if your compiler allows __attribute__((noreturn)) to be applied to function pointers])
1399*b636d99dSDavid van Moolenbroekfi
1400*b636d99dSDavid van MoolenbroekAC_MSG_RESULT($ac_cv___attribute___noreturn_function_pointer)
1401*b636d99dSDavid van Moolenbroek])
1402*b636d99dSDavid van Moolenbroek
1403*b636d99dSDavid van MoolenbroekAC_DEFUN(AC_LBL_SSLEAY,
1404*b636d99dSDavid van Moolenbroek    [
1405*b636d99dSDavid van Moolenbroek	#
1406*b636d99dSDavid van Moolenbroek	# Find the last component of $libdir; it's not necessarily
1407*b636d99dSDavid van Moolenbroek	# "lib" - it might be "lib64" on, for example, x86-64
1408*b636d99dSDavid van Moolenbroek	# Linux systems.
1409*b636d99dSDavid van Moolenbroek	#
1410*b636d99dSDavid van Moolenbroek	# We assume the directory in which we're looking for
1411*b636d99dSDavid van Moolenbroek	# libcrypto has a subdirectory with that as its name.
1412*b636d99dSDavid van Moolenbroek	#
1413*b636d99dSDavid van Moolenbroek	tmplib=`echo "$libdir" | sed 's,.*/,,'`
1414*b636d99dSDavid van Moolenbroek
1415*b636d99dSDavid van Moolenbroek	#
1416*b636d99dSDavid van Moolenbroek	# XXX - is there a better way to check if a given library is
1417*b636d99dSDavid van Moolenbroek	# in a given directory than checking each of the possible
1418*b636d99dSDavid van Moolenbroek	# shared library suffixes?
1419*b636d99dSDavid van Moolenbroek	#
1420*b636d99dSDavid van Moolenbroek	# Are there any other suffixes we need to look for?  Do we
1421*b636d99dSDavid van Moolenbroek	# have to worry about ".so.{version}"?
1422*b636d99dSDavid van Moolenbroek	#
1423*b636d99dSDavid van Moolenbroek	# Or should we just look for "libcrypto.*"?
1424*b636d99dSDavid van Moolenbroek	#
1425*b636d99dSDavid van Moolenbroek	if test -d "$1/$tmplib" -a \( -f "$1/$tmplib/libcrypto.a" -o \
1426*b636d99dSDavid van Moolenbroek		          	    -f "$1/$tmplib/libcrypto.so" -o \
1427*b636d99dSDavid van Moolenbroek		          	    -f "$1/$tmplib/libcrypto.sl" -o \
1428*b636d99dSDavid van Moolenbroek			  	    -f "$1/$tmplib/libcrypto.dylib" \); then
1429*b636d99dSDavid van Moolenbroek		ac_cv_ssleay_path="$1"
1430*b636d99dSDavid van Moolenbroek	fi
1431*b636d99dSDavid van Moolenbroek
1432*b636d99dSDavid van Moolenbroek	#
1433*b636d99dSDavid van Moolenbroek	# Make sure we have the headers as well.
1434*b636d99dSDavid van Moolenbroek	#
1435*b636d99dSDavid van Moolenbroek	if test -d "$1/include/openssl" -a -f "$1/include/openssl/des.h"; then
1436*b636d99dSDavid van Moolenbroek		incdir="-I$1/include"
1437*b636d99dSDavid van Moolenbroek	fi
1438*b636d99dSDavid van Moolenbroek])
1439