* ldap.m4: If we don't find ldap or winldap, try for mozldap.
[gnupg.git] / m4 / ldap.m4
1 dnl Check for LDAP
2 dnl Copyright (C) 2005, 2007 Free Software Foundation, Inc.
3 dnl
4 dnl This file is free software, distributed under the terms of the GNU
5 dnl General Public License.  As a special exception to the GNU General
6 dnl Public License, this file may be distributed as part of a program
7 dnl that contains a configuration script generated by Autoconf, under
8 dnl the same distribution terms as the rest of that program.
9 dnl
10 dnl Defines @GPGKEYS_LDAP@ to a executable name if a working ldap
11 dnl setup is found, and sets @LDAPLIBS@ to the necessary libraries.
12
13 AC_DEFUN([GNUPG_CHECK_LDAP],
14 [
15 # Try and link a LDAP test program to weed out unusable LDAP
16 # libraries.  -lldap [-llber [-lresolv]] is for older OpenLDAPs.
17 # OpenLDAP, circa 1999, was terrible with creating weird dependencies.
18 # If all else fails, the user can play guess-the-dependency by using
19 # something like ./configure LDAPLIBS="-Lfoo -lbar"
20
21 AC_ARG_WITH(ldap,
22   AC_HELP_STRING([--with-ldap=DIR],[look for the LDAP library in DIR]),
23   [_ldap_with=$withval])
24
25 if test x$_ldap_with != xno ; then
26
27   if test -d "$withval" ; then
28      LDAP_CPPFLAGS="-I$withval/include"
29      LDAP_LDFLAGS="-L$withval/lib"
30   fi
31
32   _ldap_save_cppflags=$CPPFLAGS
33   CPPFLAGS="${LDAP_CPPFLAGS} ${CPPFLAGS}"
34   _ldap_save_ldflags=$LDFLAGS
35   LDFLAGS="${LDAP_LDFLAGS} ${LDFLAGS}"
36   _ldap_save_libs=$LIBS
37
38   for MY_LDAPLIBS in ${LDAPLIBS+"$LDAPLIBS"} "-lldap" "-lldap -llber" "-lldap -llber -lresolv" "-lwldap32"; do
39
40     LIBS="$MY_LDAPLIBS $1 $_ldap_save_libs"
41
42     AC_MSG_CHECKING([whether LDAP via \"$MY_LDAPLIBS\" is present and sane])
43     AC_TRY_LINK([
44 #ifdef _WIN32
45 #include <winsock2.h>
46 #include <winldap.h>
47 #else
48 #include <ldap.h>
49 #endif
50 ],[ldap_open("foobar",1234);],
51                 [gnupg_cv_func_ldap_init=yes],[gnupg_cv_func_ldap_init=no])
52     AC_MSG_RESULT([$gnupg_cv_func_ldap_init])
53
54     if test $gnupg_cv_func_ldap_init = no; then
55       AC_MSG_CHECKING([whether I can make LDAP be sane with lber.h])
56       AC_TRY_LINK([#include <lber.h>
57 #include <ldap.h>],[ldap_open("foobar",1234);],
58          [gnupg_cv_func_ldaplber_init=yes],[gnupg_cv_func_ldaplber_init=no])
59       AC_MSG_RESULT([$gnupg_cv_func_ldaplber_init])
60     fi
61
62     if test "$gnupg_cv_func_ldaplber_init" = yes ; then
63        AC_DEFINE(NEED_LBER_H,1,
64           [Define if the LDAP library requires including lber.h before ldap.h])
65     fi
66
67     if test "$gnupg_cv_func_ldap_init" = yes || \
68         test "$gnupg_cv_func_ldaplber_init" = yes ; then
69        LDAPLIBS="$LDAP_LDFLAGS $MY_LDAPLIBS"
70        GPGKEYS_LDAP="gpgkeys_ldap$EXEEXT"
71        break
72     fi
73   done
74
75   if test "$GPGKEYS_LDAP" = "" ; then
76      # It didn't work, so try for mozldap.  We only do this via
77      # pkg-config due to a really impressive dependency list.
78      AC_PATH_PROG([_pkg_config],[pkg-config])
79      if test x$_pkg_config != x ; then
80         AC_MSG_CHECKING([for mozldap])
81         LDAPLIBS=`$_pkg_config --libs mozldap 2>/dev/null`
82         LDAP_CPPFLAGS=`$_pkg_config --cflags mozldap 2>/dev/null`
83         if test x"$LDAPLIBS" = x && test x"$LDAP_CPPFLAGS" = x; then
84            AC_MSG_RESULT([no])
85         else
86            AC_MSG_RESULT([yes])
87            LIBS="$LDAPLIBS"
88            GPGKEYS_LDAP="gpgkeys_ldap$EXEEXT"
89            CPPFLAGS="${LDAP_CPPFLAGS} ${CPPFLAGS}"
90            AC_CHECK_HEADERS([ldap_ssl.h],,,[#include <ldap.h>])
91         fi
92      fi
93   fi
94
95   if test "$GPGKEYS_LDAP" != "" ; then
96      # Whichever library we ended up with, check for some features...
97      AC_CHECK_FUNCS(ldap_get_option ldap_set_option ldap_start_tls_s)
98
99      if test "$ac_cv_func_ldap_get_option" != yes ; then
100         AC_MSG_CHECKING([whether LDAP supports ld_errno])
101         AC_TRY_LINK([#include <ldap.h>],[LDAP *ldap; ldap->ld_errno;],
102            [gnupg_cv_func_ldap_ld_errno=yes],
103            [gnupg_cv_func_ldap_ld_errno=no])
104         AC_MSG_RESULT([$gnupg_cv_func_ldap_ld_errno])
105
106         if test "$gnupg_cv_func_ldap_ld_errno" = yes ; then
107            AC_DEFINE(HAVE_LDAP_LD_ERRNO,1,
108                      [Define if the LDAP library supports ld_errno])
109         fi
110      fi
111   fi
112
113   LIBS=$_ldap_save_libs
114   CPPFLAGS=$_ldap_save_cppflags
115   LDFLAGS=$_ldap_save_ldflags
116
117   AC_SUBST(GPGKEYS_LDAP)
118   AC_SUBST(LDAPLIBS)
119   AC_SUBST(LDAP_CPPFLAGS)
120 fi
121 ])dnl