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