* ldap.m4: New. Moved from configure.ac.
[gnupg.git] / m4 / ldap.m4
1 dnl Check for LDAP
2 dnl Copyright (C) 2005 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 HAVE_LIBUSB to 1 if a working libusb setup is found, and sets
11 dnl @LIBUSB@ to the necessary libraries.  HAVE_USB_GET_BUSSES is set if
12 dnl usb_get_busses() exists.
13
14 AC_DEFUN([GNUPG_CHECK_LDAP],
15 [
16 # Try and link a LDAP test program to weed out unusable LDAP
17 # libraries.  -lldap [-llber [-lresolv]] is for older OpenLDAPs.
18 # OpenLDAP, circa 1999, was terrible with creating weird dependencies.
19 # This seems to have all been resolved, so I'm simplifying this code
20 # significantly.  If all else fails, the user can play
21 # guess-the-dependency by using something like ./configure
22 # LDAPLIBS="-Lfoo -lbar"
23
24   AC_ARG_WITH(ldap,
25      AC_HELP_STRING([--with-ldap=DIR],[look for the LDAP library in DIR]),
26      [
27      if test -d "$withval" ; then
28         CPPFLAGS="${CPPFLAGS} -I$withval/include"
29         LDFLAGS="${LDFLAGS} -L$withval/lib"
30      fi
31      ])
32
33   for MY_LDAPLIBS in ${LDAPLIBS+"$LDAPLIBS"} "-lldap" "-lldap -llber" "-lldap -llber -lresolv" "-lwldap32"; do
34     _ldap_save_libs=$LIBS
35     LIBS="$MY_LDAPLIBS $1 $LIBS"
36
37     AC_MSG_CHECKING([whether LDAP via \"$MY_LDAPLIBS\" is present and sane])
38     AC_TRY_LINK([
39 #ifdef _WIN32
40 #include <winsock2.h>
41 #include <winldap.h>
42 #else
43 #include <ldap.h>
44 #endif
45 ],[ldap_open("foobar",1234);],
46                 [gnupg_cv_func_ldap_init=yes],[gnupg_cv_func_ldap_init=no])
47     AC_MSG_RESULT([$gnupg_cv_func_ldap_init])
48
49     if test $gnupg_cv_func_ldap_init = no; then
50       AC_MSG_CHECKING([whether I can make LDAP be sane with lber.h])
51       AC_TRY_LINK([#include <lber.h>
52 #include <ldap.h>],[ldap_open("foobar",1234);],
53          [gnupg_cv_func_ldaplber_init=yes],[gnupg_cv_func_ldaplber_init=no])
54       AC_MSG_RESULT([$gnupg_cv_func_ldaplber_init])
55     fi
56
57     if test "$gnupg_cv_func_ldaplber_init" = yes ; then
58        AC_DEFINE(NEED_LBER_H,1,[Define if the LDAP library requires including lber.h before ldap.h])
59     fi
60
61     if test "$gnupg_cv_func_ldap_init" = yes || \
62         test "$gnupg_cv_func_ldaplber_init" = yes ; then
63        LDAPLIBS=$MY_LDAPLIBS
64        GPGKEYS_LDAP="gpgkeys_ldap$EXEEXT"
65
66        AC_CHECK_FUNCS(ldap_get_option ldap_set_option ldap_start_tls_s)
67
68        if test "$ac_cv_func_ldap_get_option" != yes ; then
69           AC_MSG_CHECKING([whether LDAP supports ld_errno])
70           AC_TRY_LINK([#include <ldap.h>],[LDAP *ldap; ldap->ld_errno;],
71              [gnupg_cv_func_ldap_ld_errno=yes],
72              [gnupg_cv_func_ldap_ld_errno=no])
73           AC_MSG_RESULT([$gnupg_cv_func_ldap_ld_errno])
74
75           if test "$gnupg_cv_func_ldap_ld_errno" = yes ; then
76              AC_DEFINE(HAVE_LDAP_LD_ERRNO,1,[Define if the LDAP library supports ld_errno])
77           fi
78        fi
79     fi
80
81     LIBS=$_ldap_save_libs
82
83     if test "$GPGKEYS_LDAP" != "" ; then break; fi
84   done
85
86   AC_SUBST(GPGKEYS_LDAP)
87   AC_SUBST(LDAPLIBS)
88 ])dnl