aclocal.m4
上传用户:tjescc
上传日期:2021-02-23
资源大小:419k
文件大小:19k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

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