1 dnl -------------------------------------------------------- -*- autoconf -*-
2 dnl Copyright 2000-2005 The Apache Software Foundation or its licensors, as
5 dnl Licensed under the Apache License, Version 2.0 (the "License");
6 dnl you may not use this file except in compliance with the License.
7 dnl You may obtain a copy of the License at
9 dnl http://www.apache.org/licenses/LICENSE-2.0
11 dnl Unless required by applicable law or agreed to in writing, software
12 dnl distributed under the License is distributed on an "AS IS" BASIS,
13 dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 dnl See the License for the specific language governing permissions and
15 dnl limitations under the License.
19 dnl custom autoconf rules for APRUTIL
23 dnl APU_FIND_APR: figure out where APR is located
25 AC_DEFUN([APU_FIND_APR], [
27 dnl use the find_apr.m4 script to locate APR. sets apr_found and apr_config
29 if test "$apr_found" = "no"; then
30 AC_MSG_ERROR(APR could not be located. Please use the --with-apr option.)
33 APR_BUILD_DIR="`$apr_config --installbuilddir`"
35 dnl make APR_BUILD_DIR an absolute directory (we'll need it in the
36 dnl sub-projects in some cases)
37 APR_BUILD_DIR="`cd $APR_BUILD_DIR && pwd`"
39 APR_INCLUDES="`$apr_config --includes`"
40 APR_LIBS="`$apr_config --link-libtool --libs`"
41 APR_SO_EXT="`$apr_config --apr-so-ext`"
42 APR_LIB_TARGET="`$apr_config --apr-lib-target`"
44 AC_SUBST(APR_INCLUDES)
46 AC_SUBST(APR_BUILD_DIR)
51 dnl APU_TEST_EXPAT(directory): test if Expat is located in the specified dir
53 dnl if present: sets expat_include_dir, expat_libs, possibly expat_old
55 AC_DEFUN([APU_TEST_EXPAT], [
56 AC_MSG_CHECKING(for Expat in ifelse($2,,$1,$2))
60 if test -r "$1/lib/expat.h.in"; then
61 dnl Expat 1.95.* distribution
62 expat_include_dir="$1/lib"
63 expat_ldflags="-L$1/lib"
65 expat_libtool="$1/lib/libexpat.la"
66 elif test -r "$1/include/expat.h" -a \
67 -r "$1/lib/libexpat.la"; then
68 dnl Expat 1.95.* installation (with libtool)
69 expat_include_dir="$1/include"
70 expat_ldflags="-L$1/lib"
72 expat_libtool="$1/lib/libexpat.la"
73 elif test -r "$1/include/expat.h" -a \
74 -r "$1/lib64/libexpat.la"; then
75 dnl Expat 1.95.* installation on certain 64-bit platforms (with libtool)
76 expat_include_dir="$1/include"
77 expat_ldflags="-L$1/lib64"
79 expat_libtool="$1/lib64/libexpat.la"
80 elif test -r "$1/include/expat.h" -a \
81 -r "$1/lib/libexpat.a"; then
82 dnl Expat 1.95.* installation (without libtool)
83 dnl FreeBSD textproc/expat2
84 expat_include_dir="$1/include"
85 expat_ldflags="-L$1/lib"
87 elif test -r "$1/xmlparse.h"; then
88 dnl maybe an expat-lite. use this dir for both includes and libs
89 expat_include_dir="$1"
92 expat_libtool="$1/libexpat.la"
94 elif test -r "$1/include/xmlparse.h" -a \
95 -r "$1/lib/libexpat.a"; then
96 dnl previously installed expat
97 expat_include_dir="$1/include"
98 expat_ldflags="-L$1/lib"
101 elif test -r "$1/include/xml/xmlparse.h" -a \
102 -r "$1/lib/xml/libexpat.a"; then
103 dnl previously installed expat
104 expat_include_dir="$1/include/xml"
105 expat_ldflags="-L$1/lib"
108 elif test -r "$1/include/xmltok/xmlparse.h"; then
109 dnl Debian distribution
110 expat_include_dir="$1/include/xmltok"
111 expat_ldflags="-L$1/lib"
112 expat_libs="-lxmlparse -lxmltok"
114 elif test -r "$1/include/xml/xmlparse.h" -a \
115 -r "$1/lib/libexpat.a"; then
116 dnl FreeBSD textproc/expat package
117 expat_include_dir="$1/include/xml"
118 expat_ldflags="-L$1/lib"
121 elif test -r "$1/xmlparse/xmlparse.h"; then
122 dnl Expat 1.0 or 1.1 source directory
123 expat_include_dir="$1/xmlparse"
128 dnl ### test for installed Expat 1.95.* distros
130 if test -n "$expat_include_dir"; then
131 dnl ### more info about what we found there? version? using .la?
140 dnl APU_FIND_EXPAT: figure out where EXPAT is located (or use bundled)
142 AC_DEFUN([APU_FIND_EXPAT], [
145 [ --with-expat=DIR specify Expat location, or 'builtin'], [
146 if test "$withval" = "yes"; then
147 AC_MSG_ERROR([a directory must be specified for --with-expat])
148 elif test "$withval" = "no"; then
149 AC_MSG_ERROR([Expat cannot be disabled (at this time)])
150 elif test "$withval" = "builtin"; then
151 abs_expatdir="`cd $srcdir/xml/expat && pwd`"
152 if test -d $abs_expatdir/. -a ! -d xml/expat/.; then
155 APU_TEST_EXPAT($abs_expatdir, xml/expat)
157 abs_expatdir="`cd $withval && pwd`"
158 APU_TEST_EXPAT($abs_expatdir, $withval)
159 if test -z "$expat_include_dir"; then
160 AC_MSG_ERROR([Expat was not found (or recognized) in \"$withval\"])
165 if test -z "$expat_include_dir"; then
166 for d in /usr /usr/local xml/expat-cvs xml/expat $srcdir/xml/expat ; do
168 if test -n "$expat_include_dir"; then
169 dnl For /usr installs of expat, we can't specify -L/usr/lib
170 if test "$d" = "/usr"; then
177 if test -z "$expat_include_dir"; then
178 AC_MSG_ERROR([could not locate Expat. use --with-expat])
181 dnl If this expat doesn't use libtool natively, we'll mimic it for our
182 dnl dependency library generation.
183 if test -z "$expat_libtool"; then
184 expat_libtool="$expat_ldflags $expat_libs"
187 if test -n "$expat_old"; then
188 AC_DEFINE(APR_HAVE_OLD_EXPAT, 1, [define if Expat 1.0 or 1.1 was found])
191 dnl special-case the bundled distribution (use absolute dirs)
192 if test "$expat_include_dir" = "xml/expat/lib" -o "$expat_include_dir" = "xml/expat-cvs/lib"; then
193 bundled_subdir="`echo $expat_include_dir | sed -e 's%/lib%%'`"
194 APR_SUBDIR_CONFIG($bundled_subdir, [--prefix=$prefix --exec-prefix=$exec_prefix --libdir=$libdir --includedir=$includedir --bindir=$bindir])
195 expat_include_dir=$top_builddir/$bundled_subdir/lib
196 expat_ldflags="-L$top_builddir/$bundled_subdir/lib"
198 expat_libtool=$top_builddir/$bundled_subdir/lib/libexpat.la
199 APR_XML_SUBDIRS="`echo $bundled_subdir | sed -e 's%xml/%%'`"
200 APR_ADDTO(APRUTIL_EXPORT_LIBS, [$expat_libtool])
202 if test "$expat_include_dir" = "$abs_srcdir/xml/expat/include" -o "$expat_include_dir" = "$abs_srcdir/xml/expat/lib"; then
203 dnl This is a bit of a hack. This only works because we know that
204 dnl we are working with the bundled version of the software.
205 bundled_subdir="xml/expat"
206 APR_SUBDIR_CONFIG($bundled_subdir, [--prefix=$prefix --exec-prefix=$exec_prefix --libdir=$libdir --includedir=$includedir --bindir=$bindir])
207 expat_include_dir=$top_builddir/$bundled_subdir/lib
208 expat_ldflags="-L$top_builddir/$bundled_subdir/lib"
210 expat_libtool=$top_builddir/$bundled_subdir/lib/libexpat.la
211 APR_XML_SUBDIRS="`echo $bundled_subdir | sed -e 's%xml/%%'`"
212 APR_ADDTO(APRUTIL_EXPORT_LIBS, [$expat_libtool])
214 APR_ADDTO(APRUTIL_EXPORT_LIBS, [$expat_libs])
217 APR_XML_DIR=$bundled_subdir
218 APR_XML_EXPAT_OLD=$expat_old
219 AC_SUBST(APR_XML_SUBDIRS)
220 AC_SUBST(APR_XML_DIR)
221 AC_SUBST(APR_XML_EXPAT_OLD)
223 if test "$expat_include_dir" != "/usr/include"; then
224 APR_ADDTO(APRUTIL_INCLUDES, [-I$expat_include_dir])
226 APR_ADDTO(APRUTIL_LDFLAGS, [$expat_ldflags])
227 APR_ADDTO(APRUTIL_LIBS, [$expat_libtool])
232 dnl Find a particular LDAP library
234 AC_DEFUN([APU_FIND_LDAPLIB], [
235 if test ${apu_has_ldap} != "1"; then
238 unset ac_cv_lib_${ldaplib}_ldap_init
239 unset ac_cv_lib_${ldaplib}___ldap_init
240 AC_CHECK_LIB(${ldaplib}, ldap_init,
242 APR_ADDTO(APRUTIL_EXPORT_LIBS,[-l${ldaplib} ${extralib}])
243 APR_ADDTO(APRUTIL_LIBS,[-l${ldaplib} ${extralib}])
244 AC_CHECK_LIB(${ldaplib}, ldapssl_client_init, apu_has_ldapssl_client_init="1", , ${extralib})
245 AC_CHECK_LIB(${ldaplib}, ldapssl_client_deinit, apu_has_ldapssl_client_deinit="1", , ${extralib})
246 AC_CHECK_LIB(${ldaplib}, ldapssl_add_trusted_cert, apu_has_ldapssl_add_trusted_cert="1", , ${extralib})
247 AC_CHECK_LIB(${ldaplib}, ldap_start_tls_s, apu_has_ldap_start_tls_s="1", , ${extralib})
248 AC_CHECK_LIB(${ldaplib}, ldap_sslinit, apu_has_ldap_sslinit="1", , ${extralib})
249 AC_CHECK_LIB(${ldaplib}, ldapssl_init, apu_has_ldapssl_init="1", , ${extralib})
250 AC_CHECK_LIB(${ldaplib}, ldapssl_install_routines, apu_has_ldapssl_install_routines="1", , ${extralib})
258 dnl APU_FIND_LDAP: figure out where LDAP is located
260 AC_DEFUN([APU_FIND_LDAP], [
262 echo $ac_n "${nl}checking for ldap support..."
265 apu_has_ldapssl_client_init="0"
266 apu_has_ldapssl_client_deinit="0"
267 apu_has_ldapssl_add_trusted_cert="0"
268 apu_has_ldap_start_tls_s="0"
269 apu_has_ldapssl_init="0"
270 apu_has_ldap_sslinit="0"
271 apu_has_ldapssl_install_routines="0"
272 apu_has_ldap_openldap="0"
273 apu_has_ldap_solaris="0"
274 apu_has_ldap_novell="0"
275 apu_has_ldap_microsoft="0"
276 apu_has_ldap_netscape="0"
277 apu_has_ldap_mozilla="0"
278 apu_has_ldap_other="0"
280 AC_ARG_WITH(ldap-include,[ --with-ldap-include=path path to ldap include files with trailing slash])
281 AC_ARG_WITH(ldap-lib,[ --with-ldap-lib=path path to ldap lib file])
282 AC_ARG_WITH(ldap,[ --with-ldap=library ldap library to use],
284 save_cppflags="$CPPFLAGS"
285 save_ldflags="$LDFLAGS"
287 if test -n "$with_ldap_include"; then
288 CPPFLAGS="$CPPFLAGS -I$with_ldap_include"
289 APR_ADDTO(APRUTIL_INCLUDES, [-I$with_ldap_include])
291 if test -n "$with_ldap_lib"; then
292 LDFLAGS="$LDFLAGS -L$with_ldap_lib"
293 APR_ADDTO(APRUTIL_LDFLAGS, [-L$with_ldap_lib])
297 if test "$LIBLDAP" = "yes"; then
298 dnl The iPlanet C SDK 5.0 is as yet untested...
299 APU_FIND_LDAPLIB("ldap50", "-lnspr4 -lplc4 -lplds4 -liutil50 -llber50 -lldif50 -lnss3 -lprldap50 -lssl3 -lssldap50")
300 APU_FIND_LDAPLIB("ldapssl41", "-lnspr3 -lplc3 -lplds3")
301 APU_FIND_LDAPLIB("ldapssl40")
302 APU_FIND_LDAPLIB("ldapssl30")
303 APU_FIND_LDAPLIB("ldapssl20")
304 APU_FIND_LDAPLIB("ldapsdk", "-lldapx -lldapssl -lldapgss -lgssapi_krb5")
305 APU_FIND_LDAPLIB("ldapsdk", "-lldapx -lldapssl -lldapgss -lgss -lresolv -lsocket")
306 APU_FIND_LDAPLIB("ldap", "-llber")
307 APU_FIND_LDAPLIB("ldap", "-llber -lresolv")
308 APU_FIND_LDAPLIB("ldap", "-llber -lresolv -lsocket -lnsl")
309 APU_FIND_LDAPLIB("ldap", "-ldl -lpthread")
311 APU_FIND_LDAPLIB($LIBLDAP)
312 APU_FIND_LDAPLIB($LIBLDAP, "-lresolv")
313 APU_FIND_LDAPLIB($LIBLDAP, "-lresolv -lsocket -lnsl")
314 APU_FIND_LDAPLIB($LIBLDAP, "-ldl -lpthread")
317 test ${apu_has_ldap} != "1" && AC_MSG_ERROR(could not find an LDAP library)
318 AC_CHECK_LIB(lber, ber_init)
320 AC_CHECK_HEADERS(lber.h, lber_h=["#include <lber.h>"])
322 # Solaris has a problem in <ldap.h> which prevents it from
323 # being included by itself. Check for <ldap.h> manually,
324 # including lber.h first.
325 AC_CACHE_CHECK([for ldap.h], [apr_cv_hdr_ldap_h],
331 ], [apr_cv_hdr_ldap_h=yes], [apr_cv_hdr_ldap_h=no])])
332 if test "$apr_cv_hdr_ldap_h" = "yes"; then
333 ldap_h=["#include <ldap.h>"]
334 AC_DEFINE([HAVE_LDAP_H], 1, [Defined if ldap.h is present])
337 AC_CHECK_HEADERS(ldap_ssl.h, ldap_ssl_h=["#include <ldap_ssl.h>"])
339 if test "$apr_cv_hdr_ldap_h" = "yes"; then
340 AC_CACHE_CHECK([for LDAP toolkit],
341 [apr_cv_ldap_toolkit], [
342 if test "x$apr_cv_ldap_toolkit" = "x"; then
343 AC_EGREP_CPP([OpenLDAP], [$lber_h
345 LDAP_VENDOR_NAME], [apu_has_ldap_openldap="1"
346 apr_cv_ldap_toolkit="OpenLDAP"])
348 if test "x$apr_cv_ldap_toolkit" = "x"; then
349 AC_EGREP_CPP([Sun Microsystems Inc.], [$lber_h
351 LDAP_VENDOR_NAME], [apu_has_ldap_solaris="1"
352 apr_cv_ldap_toolkit="Solaris"])
354 if test "x$apr_cv_ldap_toolkit" = "x"; then
355 AC_EGREP_CPP([Novell], [$lber_h
357 LDAP_VENDOR_NAME], [apu_has_ldap_novell="1"
358 apr_cv_ldap_toolkit="Novell"])
360 if test "x$apr_cv_ldap_toolkit" = "x"; then
361 AC_EGREP_CPP([Microsoft Corporation.], [$lber_h
363 LDAP_VENDOR_NAME], [apu_has_ldap_microsoft="1"
364 apr_cv_ldap_toolkit="Microsoft"])
366 if test "x$apr_cv_ldap_toolkit" = "x"; then
367 AC_EGREP_CPP([Netscape Communications Corp.], [$lber_h
369 LDAP_VENDOR_NAME], [apu_has_ldap_netscape="1"
370 apr_cv_ldap_toolkit="Netscape"])
372 if test "x$apr_cv_ldap_toolkit" = "x"; then
373 AC_EGREP_CPP([mozilla.org], [$lber_h
375 LDAP_VENDOR_NAME], [apu_has_ldap_mozilla="1"
376 apr_cv_ldap_toolkit="Mozilla"])
378 if test "x$apr_cv_ldap_toolkit" = "x"; then
379 apu_has_ldap_other="1"
380 apr_cv_ldap_toolkit="unknown"
385 CPPFLAGS=$save_cppflags
386 LDFLAGS=$save_ldflags
393 AC_SUBST(apu_has_ldapssl_client_init)
394 AC_SUBST(apu_has_ldapssl_client_deinit)
395 AC_SUBST(apu_has_ldapssl_add_trusted_cert)
396 AC_SUBST(apu_has_ldap_start_tls_s)
397 AC_SUBST(apu_has_ldapssl_init)
398 AC_SUBST(apu_has_ldap_sslinit)
399 AC_SUBST(apu_has_ldapssl_install_routines)
400 AC_SUBST(apu_has_ldap)
401 AC_SUBST(apu_has_ldap_openldap)
402 AC_SUBST(apu_has_ldap_solaris)
403 AC_SUBST(apu_has_ldap_novell)
404 AC_SUBST(apu_has_ldap_microsoft)
405 AC_SUBST(apu_has_ldap_netscape)
406 AC_SUBST(apu_has_ldap_mozilla)
407 AC_SUBST(apu_has_ldap_other)
412 dnl APU_CHECK_CRYPT_R_STYLE
414 dnl Decide which of a couple of flavors of crypt_r() is necessary for
417 AC_DEFUN([APU_CHECK_CRYPT_R_STYLE], [
419 AC_CACHE_CHECK([style of crypt_r], apr_cv_crypt_r_style,
420 [AC_TRY_COMPILE([#include <crypt.h>],
422 crypt_r("passwd", "hash", &buffer);],
423 [apr_cv_crypt_r_style=cryptd],
424 [AC_TRY_COMPILE([#include <crypt.h>],
425 [struct crypt_data buffer;
426 crypt_r("passwd", "hash", &buffer);],
427 [apr_cv_crypt_r_style=struct_crypt_data],
428 [apr_cv_crypt_r_style=none])])])
430 if test "$apr_cv_crypt_r_style" = "cryptd"; then
431 AC_DEFINE(CRYPT_R_CRYPTD, 1, [Define if crypt_r has uses CRYPTD])
432 elif test "$apr_cv_crypt_r_style" = "struct_crypt_data"; then
433 AC_DEFINE(CRYPT_R_STRUCT_CRYPT_DATA, 1, [Define if crypt_r uses struct crypt_data])