]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/libpcap/aclocal.m4
Virgin import of tcpdump.org libpcap v0.5
[FreeBSD/FreeBSD.git] / contrib / libpcap / aclocal.m4
1 dnl @(#) $Header: /tcpdump/master/libpcap/aclocal.m4,v 1.66 1999/10/30 04:41:48 itojun Exp $ (LBL)
2 dnl
3 dnl Copyright (c) 1995, 1996, 1997, 1998
4 dnl     The Regents of the University of California.  All rights reserved.
5 dnl
6 dnl Redistribution and use in source and binary forms, with or without
7 dnl modification, are permitted provided that: (1) source code distributions
8 dnl retain the above copyright notice and this paragraph in its entirety, (2)
9 dnl distributions including binary code include the above copyright notice and
10 dnl this paragraph in its entirety in the documentation or other materials
11 dnl provided with the distribution, and (3) all advertising materials mentioning
12 dnl features or use of this software display the following acknowledgement:
13 dnl ``This product includes software developed by the University of California,
14 dnl Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
15 dnl the University nor the names of its contributors may be used to endorse
16 dnl or promote products derived from this software without specific prior
17 dnl written permission.
18 dnl THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
19 dnl WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
20 dnl MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21 dnl
22 dnl LBL autoconf macros
23 dnl
24
25 dnl
26 dnl Determine which compiler we're using (cc or gcc)
27 dnl If using gcc, determine the version number
28 dnl If using cc, require that it support ansi prototypes
29 dnl If using gcc, use -O2 (otherwise use -O)
30 dnl If using cc, explicitly specify /usr/local/include
31 dnl
32 dnl usage:
33 dnl
34 dnl     AC_LBL_C_INIT(copt, incls)
35 dnl
36 dnl results:
37 dnl
38 dnl     $1 (copt set)
39 dnl     $2 (incls set)
40 dnl     CC
41 dnl     LDFLAGS
42 dnl     ac_cv_lbl_gcc_vers
43 dnl     LBL_CFLAGS
44 dnl
45 AC_DEFUN(AC_LBL_C_INIT,
46     [AC_PREREQ(2.12)
47     AC_BEFORE([$0], [AC_PROG_CC])
48     AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
49     AC_BEFORE([$0], [AC_LBL_DEVEL])
50     AC_ARG_WITH(gcc, [  --without-gcc           don't use gcc])
51     $1="-O"
52     $2=""
53     if test "${srcdir}" != "." ; then
54             $2="-I\$(srcdir)"
55     fi
56     if test "${CFLAGS+set}" = set; then
57             LBL_CFLAGS="$CFLAGS"
58     fi
59     if test -z "$CC" ; then
60             case "$target_os" in
61
62             bsdi*)
63                     AC_CHECK_PROG(SHLICC2, shlicc2, yes, no)
64                     if test $SHLICC2 = yes ; then
65                             CC=shlicc2
66                             export CC
67                     fi
68                     ;;
69             esac
70     fi
71     if test -z "$CC" -a "$with_gcc" = no ; then
72             CC=cc
73             export CC
74     fi
75     AC_PROG_CC
76     if test "$GCC" = yes ; then
77             if test "$SHLICC2" = yes ; then
78                     ac_cv_lbl_gcc_vers=2
79                     $1="-O2"
80             else
81                     AC_MSG_CHECKING(gcc version)
82                     AC_CACHE_VAL(ac_cv_lbl_gcc_vers,
83                         ac_cv_lbl_gcc_vers=`$CC -v 2>&1 | \
84                             sed -e '/^gcc version /!d' \
85                                 -e 's/^gcc version //' \
86                                 -e 's/ .*//' -e 's/^[[[^0-9]]]*//' \
87                                 -e 's/\..*//'`)
88                     AC_MSG_RESULT($ac_cv_lbl_gcc_vers)
89                     if test $ac_cv_lbl_gcc_vers -gt 1 ; then
90                             $1="-O2"
91                     fi
92             fi
93     else
94             AC_MSG_CHECKING(that $CC handles ansi prototypes)
95             AC_CACHE_VAL(ac_cv_lbl_cc_ansi_prototypes,
96                 AC_TRY_COMPILE(
97                     [#include <sys/types.h>],
98                     [int frob(int, char *)],
99                     ac_cv_lbl_cc_ansi_prototypes=yes,
100                     ac_cv_lbl_cc_ansi_prototypes=no))
101             AC_MSG_RESULT($ac_cv_lbl_cc_ansi_prototypes)
102             if test $ac_cv_lbl_cc_ansi_prototypes = no ; then
103                     case "$target_os" in
104
105                     hpux*)
106                             AC_MSG_CHECKING(for HP-UX ansi compiler ($CC -Aa -D_HPUX_SOURCE))
107                             savedcflags="$CFLAGS"
108                             CFLAGS="-Aa -D_HPUX_SOURCE $CFLAGS"
109                             AC_CACHE_VAL(ac_cv_lbl_cc_hpux_cc_aa,
110                                 AC_TRY_COMPILE(
111                                     [#include <sys/types.h>],
112                                     [int frob(int, char *)],
113                                     ac_cv_lbl_cc_hpux_cc_aa=yes,
114                                     ac_cv_lbl_cc_hpux_cc_aa=no))
115                             AC_MSG_RESULT($ac_cv_lbl_cc_hpux_cc_aa)
116                             if test $ac_cv_lbl_cc_hpux_cc_aa = no ; then
117                                     AC_MSG_ERROR(see the INSTALL doc for more info)
118                             fi
119                             CFLAGS="$savedcflags"
120                             V_CCOPT="-Aa $V_CCOPT"
121                             AC_DEFINE(_HPUX_SOURCE)
122                             ;;
123
124                     *)
125                             AC_MSG_ERROR(see the INSTALL doc for more info)
126                             ;;
127                     esac
128             fi
129             $2="$$2 -I/usr/local/include"
130             LDFLAGS="$LDFLAGS -L/usr/local/lib"
131
132             case "$target_os" in
133
134             irix*)
135                     V_CCOPT="$V_CCOPT -xansi -signed -g3"
136                     ;;
137
138             osf*)
139                     V_CCOPT="$V_CCOPT -std1 -g3"
140                     ;;
141
142             ultrix*)
143                     AC_MSG_CHECKING(that Ultrix $CC hacks const in prototypes)
144                     AC_CACHE_VAL(ac_cv_lbl_cc_const_proto,
145                         AC_TRY_COMPILE(
146                             [#include <sys/types.h>],
147                             [struct a { int b; };
148                             void c(const struct a *)],
149                             ac_cv_lbl_cc_const_proto=yes,
150                             ac_cv_lbl_cc_const_proto=no))
151                     AC_MSG_RESULT($ac_cv_lbl_cc_const_proto)
152                     if test $ac_cv_lbl_cc_const_proto = no ; then
153                             AC_DEFINE(const,)
154                     fi
155                     ;;
156             esac
157     fi
158 ])
159
160 dnl
161 dnl Use pfopen.c if available and pfopen() not in standard libraries
162 dnl Require libpcap
163 dnl Look for libpcap in ..
164 dnl Use the installed libpcap if there is no local version
165 dnl
166 dnl usage:
167 dnl
168 dnl     AC_LBL_LIBPCAP(pcapdep, incls)
169 dnl
170 dnl results:
171 dnl
172 dnl     $1 (pcapdep set)
173 dnl     $2 (incls appended)
174 dnl     LIBS
175 dnl     LBL_LIBS
176 dnl
177 AC_DEFUN(AC_LBL_LIBPCAP,
178     [AC_REQUIRE([AC_LBL_LIBRARY_NET])
179     dnl
180     dnl save a copy before locating libpcap.a
181     dnl
182     LBL_LIBS="$LIBS"
183     pfopen=/usr/examples/packetfilter/pfopen.c
184     if test -f $pfopen ; then
185             AC_CHECK_FUNCS(pfopen)
186             if test $ac_cv_func_pfopen = "no" ; then
187                     AC_MSG_RESULT(Using $pfopen)
188                     LIBS="$LIBS $pfopen"
189             fi
190     fi
191     AC_MSG_CHECKING(for local pcap library)
192     libpcap=FAIL
193     lastdir=FAIL
194     places=`ls .. | sed -e 's,/$,,' -e 's,^,../,' | \
195         egrep '/libpcap-[[0-9]]*\.[[0-9]]*(\.[[0-9]]*)?([[ab]][[0-9]]*)?$'`
196     for dir in $places ../libpcap libpcap ; do
197             basedir=`echo $dir | sed -e 's/[[ab]][[0-9]]*$//'`
198             if test $lastdir = $basedir ; then
199                     dnl skip alphas when an actual release is present
200                     continue;
201             fi
202             lastdir=$dir
203             if test -r $dir/pcap.c ; then
204                     libpcap=$dir/libpcap.a
205                     d=$dir
206                     dnl continue and select the last one that exists
207             fi
208     done
209     if test $libpcap = FAIL ; then
210             AC_MSG_RESULT(not found)
211             AC_CHECK_LIB(pcap, main, libpcap="-lpcap")
212             if test $libpcap = FAIL ; then
213                     AC_MSG_ERROR(see the INSTALL doc for more info)
214             fi
215     else
216             $1=$libpcap
217             $2="-I$d $$2"
218             AC_MSG_RESULT($libpcap)
219     fi
220     LIBS="$libpcap $LIBS"
221     case "$target_os" in
222
223     aix*)
224             pseexe="/lib/pse.exp"
225             AC_MSG_CHECKING(for $pseexe)
226             if test -f $pseexe ; then
227                     AC_MSG_RESULT(yes)
228                     LIBS="$LIBS -I:$pseexe"
229             fi
230             ;;
231     esac])
232
233 dnl
234 dnl Define RETSIGTYPE and RETSIGVAL
235 dnl
236 dnl usage:
237 dnl
238 dnl     AC_LBL_TYPE_SIGNAL
239 dnl
240 dnl results:
241 dnl
242 dnl     RETSIGTYPE (defined)
243 dnl     RETSIGVAL (defined)
244 dnl
245 AC_DEFUN(AC_LBL_TYPE_SIGNAL,
246     [AC_BEFORE([$0], [AC_LBL_LIBPCAP])
247     AC_TYPE_SIGNAL
248     if test "$ac_cv_type_signal" = void ; then
249             AC_DEFINE(RETSIGVAL,)
250     else
251             AC_DEFINE(RETSIGVAL,(0))
252     fi
253     case "$target_os" in
254
255     irix*)
256             AC_DEFINE(_BSD_SIGNALS)
257             ;;
258
259     *)
260             dnl prefer sigset() to sigaction()
261             AC_CHECK_FUNCS(sigset)
262             if test $ac_cv_func_sigset = no ; then
263                     AC_CHECK_FUNCS(sigaction)
264             fi
265             ;;
266     esac])
267
268 dnl
269 dnl If using gcc, make sure we have ANSI ioctl definitions
270 dnl
271 dnl usage:
272 dnl
273 dnl     AC_LBL_FIXINCLUDES
274 dnl
275 AC_DEFUN(AC_LBL_FIXINCLUDES,
276     [if test "$GCC" = yes ; then
277             AC_MSG_CHECKING(for ANSI ioctl definitions)
278             AC_CACHE_VAL(ac_cv_lbl_gcc_fixincludes,
279                 AC_TRY_COMPILE(
280                     [/*
281                      * This generates a "duplicate case value" when fixincludes
282                      * has not be run.
283                      */
284 #               include <sys/types.h>
285 #               include <sys/time.h>
286 #               include <sys/ioctl.h>
287 #               ifdef HAVE_SYS_IOCCOM_H
288 #               include <sys/ioccom.h>
289 #               endif],
290                     [switch (0) {
291                     case _IO('A', 1):;
292                     case _IO('B', 1):;
293                     }],
294                     ac_cv_lbl_gcc_fixincludes=yes,
295                     ac_cv_lbl_gcc_fixincludes=no))
296             AC_MSG_RESULT($ac_cv_lbl_gcc_fixincludes)
297             if test $ac_cv_lbl_gcc_fixincludes = no ; then
298                     # Don't cache failure
299                     unset ac_cv_lbl_gcc_fixincludes
300                     AC_MSG_ERROR(see the INSTALL for more info)
301             fi
302     fi])
303
304 dnl
305 dnl Check for flex, default to lex
306 dnl Require flex 2.4 or higher
307 dnl Check for bison, default to yacc
308 dnl Default to lex/yacc if both flex and bison are not available
309 dnl Define the yy prefix string if using flex and bison
310 dnl
311 dnl usage:
312 dnl
313 dnl     AC_LBL_LEX_AND_YACC(lex, yacc, yyprefix)
314 dnl
315 dnl results:
316 dnl
317 dnl     $1 (lex set)
318 dnl     $2 (yacc appended)
319 dnl     $3 (optional flex and bison -P prefix)
320 dnl
321 AC_DEFUN(AC_LBL_LEX_AND_YACC,
322     [AC_ARG_WITH(flex, [  --without-flex          don't use flex])
323     AC_ARG_WITH(bison, [  --without-bison         don't use bison])
324     if test "$with_flex" = no ; then
325             $1=lex
326     else
327             AC_CHECK_PROGS($1, flex, lex)
328     fi
329     if test "$$1" = flex ; then
330             # The -V flag was added in 2.4
331             AC_MSG_CHECKING(for flex 2.4 or higher)
332             AC_CACHE_VAL(ac_cv_lbl_flex_v24,
333                 if flex -V >/dev/null 2>&1; then
334                         ac_cv_lbl_flex_v24=yes
335                 else
336                         ac_cv_lbl_flex_v24=no
337                 fi)
338             AC_MSG_RESULT($ac_cv_lbl_flex_v24)
339             if test $ac_cv_lbl_flex_v24 = no ; then
340                     s="2.4 or higher required"
341                     AC_MSG_WARN(ignoring obsolete flex executable ($s))
342                     $1=lex
343             fi
344     fi
345     if test "$with_bison" = no ; then
346             $2=yacc
347     else
348             AC_CHECK_PROGS($2, bison, yacc)
349     fi
350     if test "$$2" = bison ; then
351             $2="$$2 -y"
352     fi
353     if test "$$1" != lex -a "$$2" = yacc -o "$$1" = lex -a "$$2" != yacc ; then
354             AC_MSG_WARN(don't have both flex and bison; reverting to lex/yacc)
355             $1=lex
356             $2=yacc
357     fi
358     if test "$$1" = flex -a -n "$3" ; then
359             $1="$$1 -P$3"
360             $2="$$2 -p $3"
361     fi])
362
363 dnl
364 dnl Checks to see if union wait is used with WEXITSTATUS()
365 dnl
366 dnl usage:
367 dnl
368 dnl     AC_LBL_UNION_WAIT
369 dnl
370 dnl results:
371 dnl
372 dnl     DECLWAITSTATUS (defined)
373 dnl
374 AC_DEFUN(AC_LBL_UNION_WAIT,
375     [AC_MSG_CHECKING(if union wait is used)
376     AC_CACHE_VAL(ac_cv_lbl_union_wait,
377         AC_TRY_COMPILE([
378 #       include <sys/types.h>
379 #       include <sys/wait.h>],
380             [int status;
381             u_int i = WEXITSTATUS(status);
382             u_int j = waitpid(0, &status, 0);],
383             ac_cv_lbl_union_wait=no,
384             ac_cv_lbl_union_wait=yes))
385     AC_MSG_RESULT($ac_cv_lbl_union_wait)
386     if test $ac_cv_lbl_union_wait = yes ; then
387             AC_DEFINE(DECLWAITSTATUS,union wait)
388     else
389             AC_DEFINE(DECLWAITSTATUS,int)
390     fi])
391
392 dnl
393 dnl Checks to see if the sockaddr struct has the 4.4 BSD sa_len member
394 dnl
395 dnl usage:
396 dnl
397 dnl     AC_LBL_SOCKADDR_SA_LEN
398 dnl
399 dnl results:
400 dnl
401 dnl     HAVE_SOCKADDR_SA_LEN (defined)
402 dnl
403 AC_DEFUN(AC_LBL_SOCKADDR_SA_LEN,
404     [AC_MSG_CHECKING(if sockaddr struct has sa_len member)
405     AC_CACHE_VAL(ac_cv_lbl_sockaddr_has_sa_len,
406         AC_TRY_COMPILE([
407 #       include <sys/types.h>
408 #       include <sys/socket.h>],
409         [u_int i = sizeof(((struct sockaddr *)0)->sa_len)],
410         ac_cv_lbl_sockaddr_has_sa_len=yes,
411         ac_cv_lbl_sockaddr_has_sa_len=no))
412     AC_MSG_RESULT($ac_cv_lbl_sockaddr_has_sa_len)
413     if test $ac_cv_lbl_sockaddr_has_sa_len = yes ; then
414             AC_DEFINE(HAVE_SOCKADDR_SA_LEN)
415     fi])
416
417 dnl
418 dnl Checks to see if -R is used
419 dnl
420 dnl usage:
421 dnl
422 dnl     AC_LBL_HAVE_RUN_PATH
423 dnl
424 dnl results:
425 dnl
426 dnl     ac_cv_lbl_have_run_path (yes or no)
427 dnl
428 AC_DEFUN(AC_LBL_HAVE_RUN_PATH,
429     [AC_MSG_CHECKING(for ${CC-cc} -R)
430     AC_CACHE_VAL(ac_cv_lbl_have_run_path,
431         [echo 'main(){}' > conftest.c
432         ${CC-cc} -o conftest conftest.c -R/a1/b2/c3 >conftest.out 2>&1
433         if test ! -s conftest.out ; then
434                 ac_cv_lbl_have_run_path=yes
435         else
436                 ac_cv_lbl_have_run_path=no
437         fi
438         rm -f conftest*])
439     AC_MSG_RESULT($ac_cv_lbl_have_run_path)
440     ])
441
442 dnl
443 dnl Due to the stupid way it's implemented, AC_CHECK_TYPE is nearly useless.
444 dnl
445 dnl usage:
446 dnl
447 dnl     AC_LBL_CHECK_TYPE
448 dnl
449 dnl results:
450 dnl
451 dnl     int32_t (defined)
452 dnl     u_int32_t (defined)
453 dnl
454 AC_DEFUN(AC_LBL_CHECK_TYPE,
455     [AC_MSG_CHECKING(for $1 using $CC)
456     AC_CACHE_VAL(ac_cv_lbl_have_$1,
457         AC_TRY_COMPILE([
458 #       include "confdefs.h"
459 #       include <sys/types.h>
460 #       if STDC_HEADERS
461 #       include <stdlib.h>
462 #       include <stddef.h>
463 #       endif],
464         [$1 i],
465         ac_cv_lbl_have_$1=yes,
466         ac_cv_lbl_have_$1=no))
467     AC_MSG_RESULT($ac_cv_lbl_have_$1)
468     if test $ac_cv_lbl_have_$1 = no ; then
469             AC_DEFINE($1, $2)
470     fi])
471
472 dnl
473 dnl Checks to see if unaligned memory accesses fail
474 dnl
475 dnl usage:
476 dnl
477 dnl     AC_LBL_UNALIGNED_ACCESS
478 dnl
479 dnl results:
480 dnl
481 dnl     LBL_ALIGN (DEFINED)
482 dnl
483 AC_DEFUN(AC_LBL_UNALIGNED_ACCESS,
484     [AC_MSG_CHECKING(if unaligned accesses fail)
485     AC_CACHE_VAL(ac_cv_lbl_unaligned_fail,
486         [case "$target_cpu" in
487
488         alpha|hp*|mips|sparc)
489                 ac_cv_lbl_unaligned_fail=yes
490                 ;;
491
492         *)
493                 cat >conftest.c <<EOF
494 #               include <sys/types.h>
495 #               include <sys/wait.h>
496 #               include <stdio.h>
497                 unsigned char a[[5]] = { 1, 2, 3, 4, 5 };
498                 main() {
499                 unsigned int i;
500                 pid_t pid;
501                 int status;
502                 /* avoid "core dumped" message */
503                 pid = fork();
504                 if (pid <  0)
505                         exit(2);
506                 if (pid > 0) {
507                         /* parent */
508                         pid = waitpid(pid, &status, 0);
509                         if (pid < 0)
510                                 exit(3);
511                         exit(!WIFEXITED(status));
512                 }
513                 /* child */
514                 i = *(unsigned int *)&a[[1]];
515                 printf("%d\n", i);
516                 exit(0);
517                 }
518 EOF
519                 ${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS \
520                     conftest.c $LIBS >/dev/null 2>&1
521                 if test ! -x conftest ; then
522                         dnl failed to compile for some reason
523                         ac_cv_lbl_unaligned_fail=yes
524                 else
525                         ./conftest >conftest.out
526                         if test ! -s conftest.out ; then
527                                 ac_cv_lbl_unaligned_fail=yes
528                         else
529                                 ac_cv_lbl_unaligned_fail=no
530                         fi
531                 fi
532                 rm -f conftest* core core.conftest
533                 ;;
534         esac])
535     AC_MSG_RESULT($ac_cv_lbl_unaligned_fail)
536     if test $ac_cv_lbl_unaligned_fail = yes ; then
537             AC_DEFINE(LBL_ALIGN)
538     fi])
539
540 dnl
541 dnl If using gcc and the file .devel exists:
542 dnl     Compile with -g (if supported) and -Wall
543 dnl     If using gcc 2, do extra prototype checking
544 dnl     If an os prototype include exists, symlink os-proto.h to it
545 dnl
546 dnl usage:
547 dnl
548 dnl     AC_LBL_DEVEL(copt)
549 dnl
550 dnl results:
551 dnl
552 dnl     $1 (copt appended)
553 dnl     HAVE_OS_PROTO_H (defined)
554 dnl     os-proto.h (symlinked)
555 dnl
556 AC_DEFUN(AC_LBL_DEVEL,
557     [rm -f os-proto.h
558     if test "${LBL_CFLAGS+set}" = set; then
559             $1="$$1 ${LBL_CFLAGS}"
560     fi
561     if test -f .devel ; then
562             if test "$GCC" = yes ; then
563                     if test "${LBL_CFLAGS+set}" != set; then
564                             if test "$ac_cv_prog_cc_g" = yes ; then
565                                     $1="-g $$1"
566                             fi
567                             $1="$$1 -Wall"
568                             if test $ac_cv_lbl_gcc_vers -gt 1 ; then
569                                     $1="$$1 -Wmissing-prototypes -Wstrict-prototypes"
570                             fi
571                     fi
572             else
573                     case "$target_os" in
574
575                     irix6*)
576                             V_CCOPT="$V_CCOPT -n32"
577                             ;;
578
579                     *)
580                             ;;
581                     esac
582             fi
583             os=`echo $target_os | sed -e 's/\([[0-9]][[0-9]]*\)[[^0-9]].*$/\1/'`
584             name="lbl/os-$os.h"
585             if test -f $name ; then
586                     ln -s $name os-proto.h
587                     AC_DEFINE(HAVE_OS_PROTO_H)
588             else
589                     AC_MSG_WARN(can't find $name)
590             fi
591     fi])
592
593 dnl
594 dnl Improved version of AC_CHECK_LIB
595 dnl
596 dnl Thanks to John Hawkinson (jhawk@mit.edu)
597 dnl
598 dnl usage:
599 dnl
600 dnl     AC_LBL_CHECK_LIB(LIBRARY, FUNCTION [, ACTION-IF-FOUND [,
601 dnl         ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
602 dnl
603 dnl results:
604 dnl
605 dnl     LIBS
606 dnl
607
608 define(AC_LBL_CHECK_LIB,
609 [AC_MSG_CHECKING([for $2 in -l$1])
610 dnl Use a cache variable name containing both the library and function name,
611 dnl because the test really is for library $1 defining function $2, not
612 dnl just for library $1.  Separate tests with the same $1 and different $2's
613 dnl may have different results.
614 ac_lib_var=`echo $1['_']$2['_']$5 | sed 'y%./+- %__p__%'`
615 AC_CACHE_VAL(ac_cv_lbl_lib_$ac_lib_var,
616 [ac_save_LIBS="$LIBS"
617 LIBS="-l$1 $5 $LIBS"
618 AC_TRY_LINK(dnl
619 ifelse([$2], [main], , dnl Avoid conflicting decl of main.
620 [/* Override any gcc2 internal prototype to avoid an error.  */
621 ]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus
622 extern "C"
623 #endif
624 ])dnl
625 [/* We use char because int might match the return type of a gcc2
626     builtin and then its argument prototype would still apply.  */
627 char $2();
628 ]),
629             [$2()],
630             eval "ac_cv_lbl_lib_$ac_lib_var=yes",
631             eval "ac_cv_lbl_lib_$ac_lib_var=no")
632 LIBS="$ac_save_LIBS"
633 ])dnl
634 if eval "test \"`echo '$ac_cv_lbl_lib_'$ac_lib_var`\" = yes"; then
635   AC_MSG_RESULT(yes)
636   ifelse([$3], ,
637 [changequote(, )dnl
638   ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \
639     -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
640 changequote([, ])dnl
641   AC_DEFINE_UNQUOTED($ac_tr_lib)
642   LIBS="-l$1 $LIBS"
643 ], [$3])
644 else
645   AC_MSG_RESULT(no)
646 ifelse([$4], , , [$4
647 ])dnl
648 fi
649 ])
650
651 dnl
652 dnl AC_LBL_LIBRARY_NET
653 dnl
654 dnl This test is for network applications that need socket() and
655 dnl gethostbyname() -ish functions.  Under Solaris, those applications
656 dnl need to link with "-lsocket -lnsl".  Under IRIX, they need to link
657 dnl with "-lnsl" but should *not* link with "-lsocket" because
658 dnl libsocket.a breaks a number of things (for instance:
659 dnl gethostbyname() under IRIX 5.2, and snoop sockets under most
660 dnl versions of IRIX).
661 dnl
662 dnl Unfortunately, many application developers are not aware of this,
663 dnl and mistakenly write tests that cause -lsocket to be used under
664 dnl IRIX.  It is also easy to write tests that cause -lnsl to be used
665 dnl under operating systems where neither are necessary (or useful),
666 dnl such as SunOS 4.1.4, which uses -lnsl for TLI.
667 dnl
668 dnl This test exists so that every application developer does not test
669 dnl this in a different, and subtly broken fashion.
670
671 dnl It has been argued that this test should be broken up into two
672 dnl seperate tests, one for the resolver libraries, and one for the
673 dnl libraries necessary for using Sockets API. Unfortunately, the two
674 dnl are carefully intertwined and allowing the autoconf user to use
675 dnl them independantly potentially results in unfortunate ordering
676 dnl dependancies -- as such, such component macros would have to
677 dnl carefully use indirection and be aware if the other components were
678 dnl executed. Since other autoconf macros do not go to this trouble,
679 dnl and almost no applications use sockets without the resolver, this
680 dnl complexity has not been implemented.
681 dnl
682 dnl The check for libresolv is in case you are attempting to link
683 dnl statically and happen to have a libresolv.a lying around (and no
684 dnl libnsl.a).
685 dnl
686 AC_DEFUN(AC_LBL_LIBRARY_NET, [
687     # Most operating systems have gethostbyname() in the default searched
688     # libraries (i.e. libc):
689     AC_CHECK_FUNC(gethostbyname, ,
690         # Some OSes (eg. Solaris) place it in libnsl:
691         AC_LBL_CHECK_LIB(nsl, gethostbyname, , 
692             # Some strange OSes (SINIX) have it in libsocket:
693             AC_LBL_CHECK_LIB(socket, gethostbyname, ,
694                 # Unfortunately libsocket sometimes depends on libnsl.
695                 # AC_CHECK_LIB's API is essentially broken so the
696                 # following ugliness is necessary:
697                 AC_LBL_CHECK_LIB(socket, gethostbyname,
698                     LIBS="-lsocket -lnsl $LIBS",
699                     AC_CHECK_LIB(resolv, gethostbyname),
700                     -lnsl))))
701     AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
702         AC_LBL_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", ,
703             -lnsl)))
704     # DLPI needs putmsg under HPUX so test for -lstr while we're at it
705     AC_CHECK_LIB(str, putmsg)
706     ])