ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/thttpd/aclocal.m4
Revision: 1.1
Committed: Mon Jun 18 21:11:56 2001 UTC (23 years ago) by root
Branch: MAIN
CVS Tags: mp_j, dp_j, cp_j, HEAD
Branch point for: connpatch, dirpatch, mmapppatch
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 dnl
2     dnl Improved version of AC_CHECK_LIB
3     dnl
4     dnl Thanks to John Hawkinson (jhawk@mit.edu)
5     dnl
6     dnl usage:
7     dnl
8     dnl AC_LBL_CHECK_LIB(LIBRARY, FUNCTION [, ACTION-IF-FOUND [,
9     dnl ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
10     dnl
11     dnl results:
12     dnl
13     dnl LIBS
14     dnl
15    
16     define(AC_LBL_CHECK_LIB,
17     [AC_MSG_CHECKING([for $2 in -l$1])
18     dnl Use a cache variable name containing both the library and function name,
19     dnl because the test really is for library $1 defining function $2, not
20     dnl just for library $1. Separate tests with the same $1 and different $2's
21     dnl may have different results.
22     ac_lib_var=`echo $1['_']$2['_']$5 | sed 'y%./+- %__p__%'`
23     AC_CACHE_VAL(ac_cv_lbl_lib_$ac_lib_var,
24     [ac_save_LIBS="$LIBS"
25     LIBS="-l$1 $5 $LIBS"
26     AC_TRY_LINK(dnl
27     ifelse([$2], [main], , dnl Avoid conflicting decl of main.
28     [/* Override any gcc2 internal prototype to avoid an error. */
29     ]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus
30     extern "C"
31     #endif
32     ])dnl
33     [/* We use char because int might match the return type of a gcc2
34     builtin and then its argument prototype would still apply. */
35     char $2();
36     ]),
37     [$2()],
38     eval "ac_cv_lbl_lib_$ac_lib_var=yes",
39     eval "ac_cv_lbl_lib_$ac_lib_var=no")
40     LIBS="$ac_save_LIBS"
41     ])dnl
42     if eval "test \"`echo '$ac_cv_lbl_lib_'$ac_lib_var`\" = yes"; then
43     AC_MSG_RESULT(yes)
44     ifelse([$3], ,
45     [changequote(, )dnl
46     ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \
47     -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
48     changequote([, ])dnl
49     AC_DEFINE_UNQUOTED($ac_tr_lib)
50     LIBS="-l$1 $LIBS"
51     ], [$3])
52     else
53     AC_MSG_RESULT(no)
54     ifelse([$4], , , [$4
55     ])dnl
56     fi
57     ])
58    
59     dnl
60     dnl AC_LBL_LIBRARY_NET
61     dnl
62     dnl This test is for network applications that need socket() and
63     dnl gethostbyname() -ish functions. Under Solaris, those applications
64     dnl need to link with "-lsocket -lnsl". Under IRIX, they need to link
65     dnl with "-lnsl" but should *not* link with "-lsocket" because
66     dnl libsocket.a breaks a number of things (for instance:
67     dnl gethostbyname() under IRIX 5.2, and snoop sockets under most
68     dnl versions of IRIX).
69     dnl
70     dnl Unfortunately, many application developers are not aware of this,
71     dnl and mistakenly write tests that cause -lsocket to be used under
72     dnl IRIX. It is also easy to write tests that cause -lnsl to be used
73     dnl under operating systems where neither are necessary (or useful),
74     dnl such as SunOS 4.1.4, which uses -lnsl for TLI.
75     dnl
76     dnl This test exists so that every application developer does not test
77     dnl this in a different, and subtly broken fashion.
78    
79     dnl It has been argued that this test should be broken up into two
80     dnl seperate tests, one for the resolver libraries, and one for the
81     dnl libraries necessary for using Sockets API. Unfortunately, the two
82     dnl are carefully intertwined and allowing the autoconf user to use
83     dnl them independantly potentially results in unfortunate ordering
84     dnl dependancies -- as such, such component macros would have to
85     dnl carefully use indirection and be aware if the other components were
86     dnl executed. Since other autoconf macros do not go to this trouble,
87     dnl and almost no applications use sockets without the resolver, this
88     dnl complexity has not been implemented.
89     dnl
90     dnl The check for libresolv is in case you are attempting to link
91     dnl statically and happen to have a libresolv.a lying around (and no
92     dnl libnsl.a).
93     dnl
94     AC_DEFUN(AC_LBL_LIBRARY_NET, [
95     # Most operating systems have gethostbyname() in the default searched
96     # libraries (i.e. libc):
97     AC_CHECK_FUNC(gethostbyname, ,
98     # Some OSes (eg. Solaris) place it in libnsl:
99     AC_LBL_CHECK_LIB(nsl, gethostbyname, ,
100     # Some strange OSes (SINIX) have it in libsocket:
101     AC_LBL_CHECK_LIB(socket, gethostbyname, ,
102     # Unfortunately libsocket sometimes depends on libnsl.
103     # AC_CHECK_LIB's API is essentially broken so the
104     # following ugliness is necessary:
105     AC_LBL_CHECK_LIB(socket, gethostbyname,
106     LIBS="-lsocket -lnsl $LIBS",
107     AC_CHECK_LIB(resolv, gethostbyname),
108     -lnsl))))
109     AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
110     AC_LBL_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", ,
111     -lnsl)))
112     # DLPI needs putmsg under HPUX so test for -lstr while we're at it
113     AC_CHECK_LIB(str, putmsg)
114     ])
115    
116     dnl
117     dnl Checks to see if struct tm has the BSD tm_gmtoff member
118     dnl
119     dnl usage:
120     dnl
121     dnl AC_ACME_TM_GMTOFF
122     dnl
123     dnl results:
124     dnl
125     dnl HAVE_TM_GMTOFF (defined)
126     dnl
127     AC_DEFUN(AC_ACME_TM_GMTOFF,
128     [AC_MSG_CHECKING(if struct tm has tm_gmtoff member)
129     AC_CACHE_VAL(ac_cv_acme_tm_has_tm_gmtoff,
130     AC_TRY_COMPILE([
131     # include <sys/types.h>
132     # include <time.h>],
133     [u_int i = sizeof(((struct tm *)0)->tm_gmtoff)],
134     ac_cv_acme_tm_has_tm_gmtoff=yes,
135     ac_cv_acme_tm_has_tm_gmtoff=no))
136     AC_MSG_RESULT($ac_cv_acme_tm_has_tm_gmtoff)
137     if test $ac_cv_acme_tm_has_tm_gmtoff = yes ; then
138     AC_DEFINE(HAVE_TM_GMTOFF)
139     fi])
140    
141     dnl
142     dnl Checks to see if struct sockaddr_storage exists
143     dnl
144     dnl usage:
145     dnl
146     dnl AC_ACME_SOCKADDR_STORAGE
147     dnl
148     dnl results:
149     dnl
150     dnl HAVE_SOCKADDR_STORAGE (defined)
151     dnl
152     AC_DEFUN(AC_ACME_SOCKADDR_STORAGE,
153     [AC_MSG_CHECKING(if struct sockaddr_storage exists)
154     AC_CACHE_VAL(ac_cv_acme_sockaddr_storage,
155     AC_TRY_COMPILE([
156     # include <sys/types.h>
157     # include <sys/socket.h>],
158     [struct sockaddr_storage sas],
159     ac_cv_acme_sockaddr_storage=yes,
160     ac_cv_acme_sockaddr_storage=no))
161     AC_MSG_RESULT($ac_cv_acme_sockaddr_storage)
162     if test $ac_cv_acme_sockaddr_storage = yes ; then
163     AC_DEFINE(HAVE_SOCKADDR_STORAGE)
164     fi])
165    
166     dnl
167     dnl Checks to see if struct sockaddr_in6 exists
168     dnl
169     dnl usage:
170     dnl
171     dnl AC_ACME_SOCKADDR_IN6
172     dnl
173     dnl results:
174     dnl
175     dnl HAVE_SOCKADDR_IN6 (defined)
176     dnl
177     AC_DEFUN(AC_ACME_SOCKADDR_IN6,
178     [AC_MSG_CHECKING(if struct sockaddr_in6 exists)
179     AC_CACHE_VAL(ac_cv_acme_sockaddr_in6,
180     AC_TRY_COMPILE([
181     # include <sys/types.h>
182     # include <sys/socket.h>
183     # include <netinet/in.h>],
184     [struct sockaddr_in6 sa6],
185     ac_cv_acme_sockaddr_in6=yes,
186     ac_cv_acme_sockaddr_in6=no))
187     AC_MSG_RESULT($ac_cv_acme_sockaddr_in6)
188     if test $ac_cv_acme_sockaddr_in6 = yes ; then
189     AC_DEFINE(HAVE_SOCKADDR_IN6)
190     fi])