| dnl -------------------------------------------------------- -*- autoconf -*- |
| dnl Licensed to the Apache Software Foundation (ASF) under one or more |
| dnl contributor license agreements. See the NOTICE file distributed with |
| dnl this work for additional information regarding copyright ownership. |
| dnl The ASF licenses this file to You under the Apache License, Version 2.0 |
| dnl (the "License"); you may not use this file except in compliance with |
| dnl the License. You may obtain a copy of the License at |
| dnl |
| dnl http://www.apache.org/licenses/LICENSE-2.0 |
| dnl |
| dnl Unless required by applicable law or agreed to in writing, software |
| dnl distributed under the License is distributed on an "AS IS" BASIS, |
| dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| dnl See the License for the specific language governing permissions and |
| dnl limitations under the License. |
| |
| |
| dnl |
| dnl custom autoconf rules for APRUTIL |
| dnl |
| |
| dnl |
| dnl APU_FIND_APR: figure out where APR is located |
| dnl |
| AC_DEFUN([APU_FIND_APR], [ |
| |
| dnl use the find_apr.m4 script to locate APR. sets apr_found and apr_config |
| APR_FIND_APR(,,,[2]) |
| if test "$apr_found" = "no"; then |
| AC_MSG_ERROR(APR could not be located. Please use the --with-apr option.) |
| fi |
| |
| APR_BUILD_DIR="`$apr_config --installbuilddir`" |
| |
| dnl make APR_BUILD_DIR an absolute directory (we'll need it in the |
| dnl sub-projects in some cases) |
| APR_BUILD_DIR="`cd $APR_BUILD_DIR && pwd`" |
| |
| APR_INCLUDES="`$apr_config --includes`" |
| APR_LIBS="`$apr_config --link-libtool --libs`" |
| APR_SO_EXT="`$apr_config --apr-so-ext`" |
| APR_LIB_TARGET="`$apr_config --apr-lib-target`" |
| |
| AC_SUBST(APR_INCLUDES) |
| AC_SUBST(APR_LIBS) |
| AC_SUBST(APR_BUILD_DIR) |
| ]) |
| |
| dnl |
| dnl APU_TRY_EXPAT_LINK( |
| dnl test-message, cache-var-name, hdrs, libs, |
| dnl [actions-on-success], [actions-on-failure]) |
| dnl |
| dnl Tests linking against expat with libraries 'libs' and includes |
| dnl 'hdrs', passing message + cache-var-name to AC_CACHE_CHECK. |
| dnl On success, sets $expat_libs to libs, sets $apu_have_expat to 1, |
| dnl and runs actions-on-success; on failure runs actions-on-failure. |
| dnl |
| AC_DEFUN([APU_TRY_EXPAT_LINK], [ |
| AC_CACHE_CHECK([$1], [$2], [ |
| apu_expat_LIBS=$LIBS |
| LIBS="$LIBS $4" |
| AC_TRY_LINK([#include <stdlib.h> |
| #include <$3>], [XML_ParserCreate(NULL);], |
| [$2=yes], [$2=no]) |
| LIBS=$apu_expat_LIBS |
| ]) |
| |
| if test $[$2] = yes; then |
| AC_DEFINE([HAVE_]translit([$3], [a-z./], [A-Z__]), 1, |
| [Define if $3 is available]) |
| apu_expat_libs="$4" |
| apu_has_expat=1 |
| $5 |
| else |
| apu_has_expat=0 |
| $6 |
| fi |
| ]) |
| |
| dnl |
| dnl APU_SYSTEM_EXPAT: tests for a system expat installation |
| dnl If present, sets $apu_has_expat to 1 and adjusts LDFLAGS/CPPFLAGS |
| dnl appropriately. This is mostly for compatibility with existing |
| dnl expat releases; all but the first APU_TRY_EXPAT_LINK call could |
| dnl be dropped later. |
| dnl |
| AC_DEFUN([APU_SYSTEM_EXPAT], [ |
| |
| APU_TRY_EXPAT_LINK([Expat 1.95.x], apu_cv_expat_system, |
| [expat.h], [-lexpat]) |
| |
| if test $apu_has_expat = 0; then |
| APU_TRY_EXPAT_LINK([old Debian-packaged expat], apu_cv_expat_debian, |
| [xmltok/xmlparse.h], [-lxmlparse -lxmltok]) |
| fi |
| |
| if test $apu_has_expat = 0; then |
| APU_TRY_EXPAT_LINK([old FreeBSD-packaged expat], apu_cv_expat_freebsd, |
| [xml/xmlparse.h], [-lexpat]) |
| fi |
| |
| if test $apu_has_expat = 0; then |
| APU_TRY_EXPAT_LINK([Expat 1.0/1.1], apu_cv_expat_1011, |
| [xmlparse/xmlparse.h], [-lexpat]) |
| fi |
| |
| if test $apu_has_expat = 0; then |
| APR_ADDTO(LDFLAGS, [-L/usr/local/lib]) |
| APR_ADDTO(CPPFLAGS, [-I/usr/local/include]) |
| |
| APU_TRY_EXPAT_LINK([Expat 1.95.x in /usr/local], |
| apu_cv_expat_usrlocal, [expat.h], [-lexpat], |
| [APR_ADDTO(APRUTIL_INCLUDES, [-I/usr/local/include]) |
| APR_ADDTO(APRUTIL_LDFLAGS, [-L/usr/local/lib])],[ |
| APR_REMOVEFROM(LDFLAGS, [-L/usr/local/lib]) |
| APR_REMOVEFROM(CPPFLAGS, [-I/usr/local/include]) |
| ]) |
| fi |
| ]) |
| |
| |
| dnl |
| dnl APU_FIND_EXPAT: figure out where EXPAT is located (or use bundled) |
| dnl |
| AC_DEFUN([APU_FIND_EXPAT], [ |
| |
| save_cppflags="$CPPFLAGS" |
| save_ldflags="$LDFLAGS" |
| |
| apu_has_expat=0 |
| |
| # Default: will use either external or bundled expat. |
| apu_try_external_expat=1 |
| apu_try_builtin_expat=1 |
| |
| AC_ARG_WITH([expat], |
| [ --with-expat=DIR specify Expat location, or 'builtin'], [ |
| if test "$withval" = "yes"; then |
| AC_MSG_ERROR([a directory must be specified for --with-expat]) |
| elif test "$withval" = "no"; then |
| AC_MSG_ERROR([Expat cannot be disabled (at this time)]) |
| elif test "$withval" = "builtin"; then |
| apu_try_external_expat=0 |
| else |
| # Add given path to standard search paths if appropriate: |
| if test "$withval" != "/usr"; then |
| APR_ADDTO(LDFLAGS, [-L$withval/lib]) |
| APR_ADDTO(CPPFLAGS, [-I$withval/include]) |
| APR_ADDTO(APRUTIL_INCLUDES, [-I$withval/include]) |
| APR_ADDTO(APRUTIL_LDFLAGS, [-L$withval/lib]) |
| fi |
| # ...and refuse to fall back on the builtin expat. |
| apu_try_builtin_expat=0 |
| fi |
| ]) |
| |
| if test $apu_try_external_expat = 1; then |
| APU_SYSTEM_EXPAT |
| fi |
| |
| if test "${apu_has_expat}${apu_try_builtin_expat}" = "01"; then |
| dnl This is a bit of a hack. This only works because we know that |
| dnl we are working with the bundled version of the software. |
| bundled_subdir="xml/expat" |
| APR_SUBDIR_CONFIG($bundled_subdir, [--prefix=$prefix --exec-prefix=$exec_prefix --libdir=$libdir --includedir=$includedir --bindir=$bindir]) |
| APR_ADDTO(APRUTIL_INCLUDES, [-I$top_builddir/$bundled_subdir/lib]) |
| APR_ADDTO(LDFLAGS, [-L$top_builddir/$bundled_subdir/lib]) |
| apu_expat_libs="$top_builddir/$bundled_subdir/lib/libexpat.la" |
| fi |
| |
| APR_ADDTO(APRUTIL_EXPORT_LIBS, [$apu_expat_libs]) |
| APR_ADDTO(APRUTIL_LIBS, [$apu_expat_libs]) |
| |
| APR_XML_DIR=$bundled_subdir |
| AC_SUBST(APR_XML_DIR) |
| |
| CPPFLAGS=$save_cppflags |
| LDFLAGS=$save_ldflags |
| ]) |
| |
| |
| dnl |
| dnl Find a particular LDAP library |
| dnl |
| AC_DEFUN([APU_FIND_LDAPLIB], [ |
| if test ${apu_has_ldap} != "1"; then |
| ldaplib=$1 |
| extralib=$2 |
| # Clear the cache entry for subsequent APU_FIND_LDAPLIB invocations. |
| changequote(,) |
| ldaplib_cache_id="`echo $ldaplib | sed -e 's/[^a-zA-Z0-9_]/_/g'`" |
| changequote([,]) |
| unset ac_cv_lib_${ldaplib_cache_id}_ldap_init |
| unset ac_cv_lib_${ldaplib_cache_id}___ldap_init |
| AC_CHECK_LIB(${ldaplib}, ldap_init, |
| [ |
| LDADD_ldap="-l${ldaplib} ${extralib}" |
| AC_CHECK_LIB(${ldaplib}, ldapssl_client_init, apu_has_ldapssl_client_init="1", , ${extralib}) |
| AC_CHECK_LIB(${ldaplib}, ldapssl_client_deinit, apu_has_ldapssl_client_deinit="1", , ${extralib}) |
| AC_CHECK_LIB(${ldaplib}, ldapssl_add_trusted_cert, apu_has_ldapssl_add_trusted_cert="1", , ${extralib}) |
| AC_CHECK_LIB(${ldaplib}, ldap_start_tls_s, apu_has_ldap_start_tls_s="1", , ${extralib}) |
| AC_CHECK_LIB(${ldaplib}, ldap_sslinit, apu_has_ldap_sslinit="1", , ${extralib}) |
| AC_CHECK_LIB(${ldaplib}, ldapssl_init, apu_has_ldapssl_init="1", , ${extralib}) |
| AC_CHECK_LIB(${ldaplib}, ldapssl_install_routines, apu_has_ldapssl_install_routines="1", , ${extralib}) |
| apu_has_ldap="1"; |
| ], , ${extralib}) |
| fi |
| ]) |
| |
| |
| dnl |
| dnl APU_FIND_LDAP: figure out where LDAP is located |
| dnl |
| AC_DEFUN([APU_FIND_LDAP], [ |
| |
| echo $ac_n "${nl}checking for ldap support..." |
| |
| apu_has_ldap="0"; |
| apu_has_ldapssl_client_init="0" |
| apu_has_ldapssl_client_deinit="0" |
| apu_has_ldapssl_add_trusted_cert="0" |
| apu_has_ldap_start_tls_s="0" |
| apu_has_ldapssl_init="0" |
| apu_has_ldap_sslinit="0" |
| apu_has_ldapssl_install_routines="0" |
| apu_has_ldap_openldap="0" |
| apu_has_ldap_solaris="0" |
| apu_has_ldap_novell="0" |
| apu_has_ldap_microsoft="0" |
| apu_has_ldap_netscape="0" |
| apu_has_ldap_mozilla="0" |
| apu_has_ldap_tivoli="0" |
| apu_has_ldap_zos="0" |
| apu_has_ldap_other="0" |
| LDADD_ldap="" |
| |
| AC_ARG_WITH(lber,[ --with-lber=library lber library to use], |
| [ |
| if test "$withval" = "yes"; then |
| apu_liblber_name="lber" |
| else |
| apu_liblber_name="$withval" |
| fi |
| ], |
| [ |
| apu_liblber_name="lber" |
| ]) |
| |
| AC_ARG_WITH(ldap-include,[ --with-ldap-include=path path to ldap include files with trailing slash]) |
| AC_ARG_WITH(ldap-lib,[ --with-ldap-lib=path path to ldap lib file]) |
| AC_ARG_WITH(ldap,[ --with-ldap=library ldap library to use], |
| [ |
| save_cppflags="$CPPFLAGS" |
| save_ldflags="$LDFLAGS" |
| save_libs="$LIBS" |
| if test -n "$with_ldap_include"; then |
| CPPFLAGS="$CPPFLAGS -I$with_ldap_include" |
| APR_ADDTO(APRUTIL_INCLUDES, [-I$with_ldap_include]) |
| fi |
| if test -n "$with_ldap_lib"; then |
| LDFLAGS="$LDFLAGS -L$with_ldap_lib" |
| APR_ADDTO(APRUTIL_LDFLAGS, [-L$with_ldap_lib]) |
| fi |
| |
| LIBLDAP="$withval" |
| if test "$LIBLDAP" = "yes"; then |
| dnl The iPlanet C SDK 5.0 is as yet untested... |
| APU_FIND_LDAPLIB("ldap50", "-lnspr4 -lplc4 -lplds4 -liutil50 -llber50 -lldif50 -lnss3 -lprldap50 -lssl3 -lssldap50") |
| APU_FIND_LDAPLIB("ldapssl41", "-lnspr3 -lplc3 -lplds3") |
| APU_FIND_LDAPLIB("ldapssl40") |
| APU_FIND_LDAPLIB("ldapssl30") |
| APU_FIND_LDAPLIB("ldapssl20") |
| APU_FIND_LDAPLIB("ldapsdk", "-lldapx -lldapssl -lldapgss -lgssapi_krb5") |
| APU_FIND_LDAPLIB("ldapsdk", "-lldapx -lldapssl -lldapgss -lgss -lresolv -lsocket") |
| APU_FIND_LDAPLIB("ldap", "-llber") |
| APU_FIND_LDAPLIB("ldap", "-llber -lresolv") |
| APU_FIND_LDAPLIB("ldap", "-llber -lresolv -lsocket -lnsl") |
| APU_FIND_LDAPLIB("ldap", "-ldl -lpthread") |
| else |
| APU_FIND_LDAPLIB($LIBLDAP) |
| APU_FIND_LDAPLIB($LIBLDAP, "-lresolv") |
| APU_FIND_LDAPLIB($LIBLDAP, "-lresolv -lsocket -lnsl") |
| APU_FIND_LDAPLIB($LIBLDAP, "-ldl -lpthread") |
| fi |
| |
| test ${apu_has_ldap} != "1" && AC_MSG_ERROR(could not find an LDAP library) |
| AC_CHECK_LIB($apu_liblber_name, ber_init, |
| [LDADD_ldap="${LDADD_ldap} -l${apu_liblber_name}"]) |
| |
| AC_CHECK_HEADERS(lber.h, lber_h=["#include <lber.h>"]) |
| |
| # Solaris has a problem in <ldap.h> which prevents it from |
| # being included by itself. Check for <ldap.h> manually, |
| # including lber.h first. |
| AC_CACHE_CHECK([for ldap.h], [apr_cv_hdr_ldap_h], |
| [AC_TRY_CPP( |
| [#ifdef HAVE_LBER_H |
| #include <lber.h> |
| #endif |
| #include <ldap.h> |
| ], [apr_cv_hdr_ldap_h=yes], [apr_cv_hdr_ldap_h=no])]) |
| if test "$apr_cv_hdr_ldap_h" = "yes"; then |
| ldap_h=["#include <ldap.h>"] |
| AC_DEFINE([HAVE_LDAP_H], 1, [Defined if ldap.h is present]) |
| fi |
| |
| AC_CHECK_HEADERS(ldap_ssl.h, ldap_ssl_h=["#include <ldap_ssl.h>"]) |
| |
| if test "$apr_cv_hdr_ldap_h" = "yes"; then |
| AC_CACHE_CHECK([for LDAP toolkit], |
| [apr_cv_ldap_toolkit], [ |
| if test "x$apr_cv_ldap_toolkit" = "x"; then |
| AC_EGREP_CPP([OpenLDAP], [$lber_h |
| $ldap_h |
| LDAP_VENDOR_NAME], [apu_has_ldap_openldap="1" |
| apr_cv_ldap_toolkit="OpenLDAP"]) |
| fi |
| if test "x$apr_cv_ldap_toolkit" = "x"; then |
| AC_EGREP_CPP([Sun Microsystems Inc.], [$lber_h |
| $ldap_h |
| LDAP_VENDOR_NAME], [apu_has_ldap_solaris="1" |
| apr_cv_ldap_toolkit="Solaris"]) |
| fi |
| if test "x$apr_cv_ldap_toolkit" = "x"; then |
| AC_EGREP_CPP([Novell], [$lber_h |
| $ldap_h |
| LDAP_VENDOR_NAME], [apu_has_ldap_novell="1" |
| apr_cv_ldap_toolkit="Novell"]) |
| fi |
| if test "x$apr_cv_ldap_toolkit" = "x"; then |
| AC_EGREP_CPP([Microsoft Corporation.], [$lber_h |
| $ldap_h |
| LDAP_VENDOR_NAME], [apu_has_ldap_microsoft="1" |
| apr_cv_ldap_toolkit="Microsoft"]) |
| fi |
| if test "x$apr_cv_ldap_toolkit" = "x"; then |
| AC_EGREP_CPP([Netscape Communications Corp.], [$lber_h |
| $ldap_h |
| LDAP_VENDOR_NAME], [apu_has_ldap_netscape="1" |
| apr_cv_ldap_toolkit="Netscape"]) |
| fi |
| if test "x$apr_cv_ldap_toolkit" = "x"; then |
| AC_EGREP_CPP([mozilla.org], [$lber_h |
| $ldap_h |
| LDAP_VENDOR_NAME], [apu_has_ldap_mozilla="1" |
| apr_cv_ldap_toolkit="Mozilla"]) |
| fi |
| if test "x$apr_cv_ldap_toolkit" = "x"; then |
| AC_EGREP_CPP([International Business Machines], [$lber_h |
| $ldap_h |
| LDAP_VENDOR_NAME], [apu_has_ldap_tivoli="1" |
| apr_cv_ldap_toolkit="Tivoli"]) |
| fi |
| if test "x$apr_cv_ldap_toolkit" = "x"; then |
| case "$host" in |
| *-ibm-os390) |
| AC_EGREP_CPP([IBM], [$lber_h |
| $ldap_h], [apu_has_ldap_zos="1" |
| apr_cv_ldap_toolkit="z/OS"]) |
| ;; |
| esac |
| fi |
| if test "x$apr_cv_ldap_toolkit" = "x"; then |
| apu_has_ldap_other="1" |
| apr_cv_ldap_toolkit="unknown" |
| fi |
| ]) |
| fi |
| |
| CPPFLAGS=$save_cppflags |
| LDFLAGS=$save_ldflags |
| LIBS=$save_libs |
| ]) |
| |
| if test "$apu_has_ldap_openldap" = "1"; then |
| save_cppflags="$CPPFLAGS" |
| save_ldflags="$LDFLAGS" |
| save_libs="$LIBS" |
| |
| CPPFLAGS="$CPPFLAGS $APRUTIL_INCLUDES" |
| LDFLAGS="$LDFLAGS $APRUTIL_LDFLAGS" |
| AC_CACHE_CHECK([style of ldap_set_rebind_proc routine], ac_cv_ldap_set_rebind_proc_style, |
| APR_TRY_COMPILE_NO_WARNING([ |
| #ifdef HAVE_LBER_H |
| #include <lber.h> |
| #endif |
| #ifdef HAVE_LDAP_H |
| #include <ldap.h> |
| #endif |
| ], [ |
| int tmp = ldap_set_rebind_proc((LDAP *)0, (LDAP_REBIND_PROC *)0, (void *)0); |
| /* use tmp to suppress the warning */ |
| tmp=0; |
| ], ac_cv_ldap_set_rebind_proc_style=three, ac_cv_ldap_set_rebind_proc_style=two)) |
| |
| if test "$ac_cv_ldap_set_rebind_proc_style" = "three"; then |
| AC_DEFINE(LDAP_SET_REBIND_PROC_THREE, 1, [Define if ldap_set_rebind_proc takes three arguments]) |
| fi |
| |
| CPPFLAGS="$save_cppflags" |
| LDFLAGS="$save_ldflags" |
| LIBS="$save_libs" |
| fi |
| |
| AC_SUBST(ldap_h) |
| AC_SUBST(lber_h) |
| AC_SUBST(ldap_ssl_h) |
| AC_SUBST(apu_has_ldapssl_client_init) |
| AC_SUBST(apu_has_ldapssl_client_deinit) |
| AC_SUBST(apu_has_ldapssl_add_trusted_cert) |
| AC_SUBST(apu_has_ldap_start_tls_s) |
| AC_SUBST(apu_has_ldapssl_init) |
| AC_SUBST(apu_has_ldap_sslinit) |
| AC_SUBST(apu_has_ldapssl_install_routines) |
| AC_SUBST(apu_has_ldap) |
| AC_SUBST(apu_has_ldap_openldap) |
| AC_SUBST(apu_has_ldap_solaris) |
| AC_SUBST(apu_has_ldap_novell) |
| AC_SUBST(apu_has_ldap_microsoft) |
| AC_SUBST(apu_has_ldap_netscape) |
| AC_SUBST(apu_has_ldap_mozilla) |
| AC_SUBST(apu_has_ldap_tivoli) |
| AC_SUBST(apu_has_ldap_zos) |
| AC_SUBST(apu_has_ldap_other) |
| AC_SUBST(LDADD_ldap) |
| |
| ]) |
| |
| dnl |
| dnl APU_CHECK_CRYPT_R_STYLE |
| dnl |
| dnl Decide which of a couple of flavors of crypt_r() is necessary for |
| dnl this platform. |
| dnl |
| AC_DEFUN([APU_CHECK_CRYPT_R_STYLE], [ |
| |
| AC_CACHE_CHECK([style of crypt_r], apr_cv_crypt_r_style, |
| [AC_TRY_COMPILE([#include <crypt.h>], |
| [CRYPTD buffer; |
| crypt_r("passwd", "hash", &buffer);], |
| [apr_cv_crypt_r_style=cryptd], |
| [AC_TRY_COMPILE([#include <crypt.h>], |
| [struct crypt_data buffer; |
| crypt_r("passwd", "hash", &buffer);], |
| [apr_cv_crypt_r_style=struct_crypt_data], |
| [apr_cv_crypt_r_style=none])])]) |
| |
| if test "$apr_cv_crypt_r_style" = "cryptd"; then |
| AC_DEFINE(CRYPT_R_CRYPTD, 1, [Define if crypt_r has uses CRYPTD]) |
| elif test "$apr_cv_crypt_r_style" = "struct_crypt_data"; then |
| AC_DEFINE(CRYPT_R_STRUCT_CRYPT_DATA, 1, [Define if crypt_r uses struct crypt_data]) |
| fi |
| ]) |