]> git.sur5r.net Git - openldap/blob - configure.in
return to releng
[openldap] / configure.in
1 dnl $OpenLDAP$
2 dnl This work is part of OpenLDAP Software <http://www.openldap.org/>.
3 dnl
4 dnl Copyright 1998-2005 The OpenLDAP Foundation.
5 dnl All rights reserved.
6 dnl
7 dnl Redistribution and use in source and binary forms, with or without
8 dnl modification, are permitted only as authorized by the OpenLDAP
9 dnl Public License.
10 dnl
11 dnl A copy of this license is available in the file LICENSE in the
12 dnl top-level directory of the distribution or, alternatively, at
13 dnl <http://www.OpenLDAP.org/license.html>.
14 dnl
15 dnl ----------------------------------------------------------------
16 dnl
17 dnl Redefine AC_INIT_BINSH to provide RCS IDs and copyright notice
18 dnl at top of generated configure script.  Prints simple copyright.
19 define([AC_INIT_BINSH],
20 [[#! /bin/sh
21 # $]OpenLDAP[$
22 # from] translit([$OpenLDAP$], $")] [
23
24 # This work is part of OpenLDAP Software <http://www.openldap.org/>.
25 #
26 # Copyright 1998-2005 The OpenLDAP Foundation.
27 # All rights reserved.
28 #
29 # Redistribution and use in source and binary forms, with or without
30 # modification, are permitted only as authorized by the OpenLDAP
31 # Public License.
32 #
33 # A copy of this license is available in the file LICENSE in the
34 # top-level directory of the distribution or, alternatively, at
35 # <http://www.OpenLDAP.org/license.html>.
36
37 echo "Copyright 1998-2005 The OpenLDAP Foundation. All rights reserved."
38 echo "  Restrictions apply, see COPYRIGHT and LICENSE files."
39 ])dnl
40 dnl ----------------------------------------------------------------
41 dnl Disable config.cache!
42 define([AC_CACHE_LOAD], )dnl
43 define([AC_CACHE_SAVE], )dnl
44 dnl ================================================================
45 dnl Configure.in for OpenLDAP
46 AC_INIT(build/version.sh)dnl
47
48 # set unset (borrowed from autoconf 2.49c)
49 if (OL_FOO=OL_FOO; unset OL_FOO) >/dev/null 2>&1; then
50   ol_unset=unset
51 else
52   ol_unset=false
53 fi
54 # unset CDPATH
55 $ol_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
56
57 AC_CONFIG_AUX_DIR(build)dnl
58
59 eval `$ac_aux_dir/version.sh`
60 if test -z "$OL_STRING"; then
61         AC_MSG_ERROR([could not determine version])
62 fi
63
64 if test -f "$ac_aux_dir/shtool" -a ! -d $ac_aux_dir/shtool; then
65         ac_cv_shtool="$ac_aux_dir/shtool"
66 else
67         AC_MSG_ERROR([no shtool found in $ac_aux_dir])
68 fi
69
70 SHTOOL="$ac_cv_shtool"
71 dnl AC_SUBST(SHTOOL)dnl
72
73 TB="`$SHTOOL echo -e '%B' 2>/dev/null`"
74 TN="`$SHTOOL echo -e '%b' 2>/dev/null`"
75
76 OPENLDAP_CVS=""
77 if test -d $ac_aux_dir/CVS; then
78         OPENLDAP_CVS="(from CVS sources) "
79 fi
80
81 echo "Configuring ${TB}${OL_STRING}${TN} ${OPENLDAP_CVS}..."
82
83 dnl Determine host platform
84 dnl             we try not to use this for much
85 AC_CANONICAL_SYSTEM
86
87 AM_INIT_AUTOMAKE([$OL_PACKAGE],[$OL_VERSION], [no defines])dnl
88 AC_SUBST(PACKAGE)dnl
89 AC_SUBST(VERSION)dnl
90 AC_DEFINE_UNQUOTED(OPENLDAP_PACKAGE,"$PACKAGE",Package)
91 AC_DEFINE_UNQUOTED(OPENLDAP_VERSION,"$VERSION",Version)
92
93 AC_DEFINE_UNQUOTED(LDAP_VENDOR_VERSION,$OL_API_INC,Version)
94 AC_DEFINE_UNQUOTED(LDAP_VENDOR_VERSION_MAJOR,$OL_MAJOR,Major)
95 AC_DEFINE_UNQUOTED(LDAP_VENDOR_VERSION_MINOR,$OL_MINOR,Minor)
96 AC_DEFINE_UNQUOTED(LDAP_VENDOR_VERSION_PATCH,$OL_PATCH,Patch)
97
98 OPENLDAP_LIBRELEASE=$OL_API_LIB_RELEASE
99 AC_SUBST(OPENLDAP_LIBRELEASE)dnl
100
101 OPENLDAP_LIBVERSION=$OL_API_LIB_VERSION
102 AC_SUBST(OPENLDAP_LIBVERSION)dnl
103
104 OPENLDAP_RELEASE_DATE="$OL_RELEASE_DATE"
105 AC_SUBST(OPENLDAP_RELEASE_DATE)dnl
106
107 dnl We use autoconf features new to 2.13.  Later versions like won't work.
108 dnl aclocal.m4 should be built using aclocal from automake 1.4
109 dnl libtool 1.4.3 should be installed.
110 AC_PREREQ(2.13)dnl Required Autoconf version
111
112 AC_CONFIG_HEADER(include/portable.h include/ldap_features.h include/lber_types.h)dnl
113
114 dnl ================================================================
115 dnl Start Args
116 AC_MSG_CHECKING(configure arguments)
117 AC_PREFIX_DEFAULT(/usr/local)
118
119 top_builddir=`pwd`
120 AC_SUBST(top_builddir)dnl
121
122 dnl ----------------------------------------------------------------
123 dnl --with-subdir
124 ldap_subdir="/openldap"
125
126 AC_ARG_WITH(subdir,
127 [  --with-subdir=DIR       change default subdirectory used for installs],
128 [case "$withval" in
129         no) ldap_subdir=""
130                 ;;
131         yes)
132                 ;;
133         /*|\\*)
134                 ldap_subdir="$withval"
135                 ;;
136         *)
137                 ldap_subdir="/$withval"
138                 ;;
139 esac
140 ])dnl
141
142 AC_SUBST(ldap_subdir)dnl
143
144 dnl ----------------------------------------------------------------
145 dnl General "enable" options
146 OL_ARG_ENABLE(debug,[  --enable-debug     enable debugging], yes)dnl
147 OL_ARG_ENABLE(dynamic,[  --enable-dynamic         enable linking built binaries with dynamic libs], no)dnl
148 OL_ARG_ENABLE(syslog,[  --enable-syslog   enable syslog support], auto)dnl
149 OL_ARG_ENABLE(proctitle,[  --enable-proctitle     enable proctitle support], yes)dnl
150 dnl OL_ARG_ENABLE(referrals,[  --enable-referrals         enable LDAPv2+ Referrals (experimental)], no)dnl
151 ol_enable_referrals=${ol_enable_referrals-no}
152 dnl OL_ARG_ENABLE(kbind,[  --enable-kbind         enable LDAPv2+ Kerberos IV bind (deprecated)], no)dnl
153 ol_enable_kbind=${ol_enable_kbind-no}
154 OL_ARG_ENABLE(ipv6,[  --enable-ipv6       enable IPv6 support], auto)dnl
155 OL_ARG_ENABLE(local,[  --enable-local     enable AF_LOCAL (AF_UNIX) socket support], auto)dnl
156
157 dnl ----------------------------------------------------------------
158 dnl General "with" options
159 dnl OL_ARG_ENABLE(dmalloc,[  --enable-dmalloc     enable debug malloc support], no)dnl
160
161 OL_ARG_WITH(cyrus_sasl,[  --with-cyrus-sasl       with Cyrus SASL support],
162         auto, [auto yes no] )
163 OL_ARG_WITH(fetch,[  --with-fetch                 with fetch(3) URL support],
164         auto, [auto yes no] )
165 dnl     OL_ARG_WITH(kerberos,[  --with-kerberos   with Kerberos support],
166 dnl             auto, [auto k5 k5only k425 kth k4 afs yes no])
167 ol_with_kerberos=${ol_with_kerberos-auto}
168 OL_ARG_WITH(threads,[  --with-threads     with threads],
169         auto, [auto nt posix mach pth lwp yes no manual] )
170 OL_ARG_WITH(tls,[  --with-tls             with TLS/SSL support],
171         auto, [auto ssleay openssl yes no] )
172 OL_ARG_WITH(yielding_select,[  --with-yielding-select  with implicitly yielding select],
173         auto, [auto yes no manual] )
174
175 dnl ----------------------------------------------------------------
176 dnl Server options
177 dnl ----------------------------------------------------------------
178
179 dnl ----------------------------------------------------------------
180 dnl SLAPD OPTIONS
181 AC_ARG_WITH(xxslapdoptions,[
182 SLAPD (Standalone LDAP Daemon) Options:])
183 OL_ARG_ENABLE(slapd,[  --enable-slapd     enable building slapd], yes)dnl
184 OL_ARG_ENABLE(aci,[    --enable-aci       enable per-object ACIs (experimental)], no)dnl
185 OL_ARG_ENABLE(cleartext,[    --enable-cleartext   enable cleartext passwords], yes)dnl
186 OL_ARG_ENABLE(crypt,[    --enable-crypt   enable crypt(3) passwords], no)dnl
187 OL_ARG_ENABLE(lmpasswd,[    --enable-lmpasswd     enable LAN Manager passwords], no)dnl
188 OL_ARG_ENABLE(spasswd,[    --enable-spasswd       enable (Cyrus) SASL password verification], no)dnl
189 OL_ARG_ENABLE(modules,[    --enable-modules       enable dynamic module support], no)dnl
190 dnl OL_ARG_ENABLE(multimaster,[    --enable-multimaster  enable multimaster replication], no)dnl
191 ol_enable_multimaster=${ol_enable_multimaster-no}
192 OL_ARG_ENABLE(rewrite,[    --enable-rewrite       enable DN rewriting in back-ldap and the rwm overlay], auto)dnl
193 OL_ARG_ENABLE(rlookups,[    --enable-rlookups     enable reverse lookups of client hostnames], no)dnl
194 OL_ARG_ENABLE(slapi,[    --enable-slapi        enable SLAPI support (experimental)], no)dnl
195 OL_ARG_ENABLE(slp,[    --enable-slp          enable SLPv2 support], no)dnl     
196 OL_ARG_ENABLE(wrappers,[    --enable-wrappers     enable tcp wrapper support], no)dnl
197
198 dnl ----------------------------------------------------------------
199 dnl SLAPD Backend Options
200 Backends="bdb dnssrv hdb ldap ldbm meta monitor null \
201         passwd perl shell sql"
202
203 AC_ARG_WITH(xxslapoverlays,[
204 SLAPD Backend Options:])
205
206 OL_ARG_ENABLE(bdb,[    --enable-bdb       enable Berkeley DB backend no|yes|mod], yes, [no yes mod])dnl
207 OL_ARG_ENABLE(dnssrv,[    --enable-dnssrv         enable dnssrv backend no|yes|mod], no, [no yes mod])dnl
208 OL_ARG_ENABLE(hdb,[    --enable-hdb       enable Hierarchical DB backend no|yes|mod], no, [no yes mod])dnl
209 OL_ARG_ENABLE(ldap,[    --enable-ldap     enable ldap backend no|yes|mod], no, [no yes mod])dnl
210 OL_ARG_ENABLE(ldbm,[    --enable-ldbm     enable ldbm backend no|yes|mod], no, [no yes mod])dnl
211 OL_ARG_WITH(ldbm_api,[      --with-ldbm-api     with LDBM API auto|berkeley|bcompat|mdbm|gdbm], auto,
212         [auto berkeley bcompat mdbm gdbm])
213 OL_ARG_WITH(ldbm_type,[      --with-ldbm-type     use LDBM type auto|btree|hash], auto,
214         [auto btree hash])
215 OL_ARG_ENABLE(meta,[    --enable-meta     enable metadirectory backend no|yes|mod], no, [no yes mod])dnl
216 OL_ARG_ENABLE(monitor,[    --enable-monitor       enable monitor backend no|yes|mod], yes, [no yes mod])dnl
217 OL_ARG_ENABLE(null,[    --enable-null     enable null backend no|yes|mod], no, [no yes mod])dnl
218 OL_ARG_ENABLE(passwd,[    --enable-passwd         enable passwd backend no|yes|mod], no, [no yes mod])dnl
219 OL_ARG_ENABLE(perl,[    --enable-perl     enable perl backend no|yes|mod], no, [no yes mod])dnl
220 OL_ARG_ENABLE(shell,[    --enable-shell   enable shell backend no|yes|mod], no, [no yes mod])dnl
221 OL_ARG_ENABLE(sql,[    --enable-sql       enable sql backend no|yes|mod], no, [no yes mod])dnl
222
223 dnl ----------------------------------------------------------------
224 dnl SLAPD Overlay Options
225 Overlays="dyngroup proxycache"
226
227 AC_ARG_WITH(xxslapoverlays,[
228 SLAPD Overlay Options:])
229
230 OL_ARG_ENABLE(dyngroup,[    --enable-dyngroup     Dynamic Group overlay no|yes|mod], no,
231         [no yes mod])
232 OL_ARG_ENABLE(proxycache,[    --enable-proxycache         Proxy Cache overlay no|yes|mod], no,
233         [no yes mod])
234
235 dnl ----------------------------------------------------------------
236 dnl SLURPD OPTIONS
237 AC_ARG_WITH(xxslurpdoptions,[
238 SLURPD (Replication Daemon) Options:])
239 OL_ARG_ENABLE(slurpd,[  --enable-slurpd   enable building slurpd], auto)dnl
240
241 dnl ----------------------------------------------------------------
242 AC_ARG_WITH(xxliboptions,[
243 Library Generation & Linking Options])
244 AC_ENABLE_STATIC
245 AC_ENABLE_SHARED
246
247 dnl ----------------------------------------------------------------
248
249 dnl General "enable" options
250 # validate options
251 if test $ol_enable_slapd = no ; then
252         dnl SLAPD was specificallly disabled
253         if test $ol_enable_slapi = yes ; then
254                 AC_MSG_WARN([slapd disabled, ignoring --enable-slapi argument])
255         fi
256         for i in $Backends; do
257                 eval "ol_tmp=\$ol_enable_$i"
258                 if test $ol_tmp != no ; then
259                         AC_MSG_WARN([slapd disabled, ignoring --enable-$i argument])
260                         eval "ol_enable_$i=no"
261                 fi
262         done
263         if test $ol_enable_modules = yes ; then
264                 AC_MSG_WARN([slapd disabled, ignoring --enable-modules argument])
265         fi
266         if test $ol_enable_multimaster = yes ; then
267                 AC_MSG_WARN([slapd disabled, ignoring --enable-multimaster argument])
268         fi
269         if test $ol_enable_wrappers = yes ; then
270                 AC_MSG_WARN([slapd disabled, ignoring --enable-wrappers argument])
271         fi
272         if test $ol_enable_rlookups = yes ; then
273                 AC_MSG_WARN([slapd disabled, ignoring --enable-rlookups argument])
274         fi
275         if test $ol_enable_aci = yes ; then
276                 AC_MSG_WARN([slapd disabled, ignoring --enable-aci argument])
277         fi
278         if test $ol_with_ldbm_api != auto ; then
279                 AC_MSG_WARN([slapd disabled, ignoring --with-ldbm-api argument])
280         fi
281         if test $ol_with_ldbm_type != auto ; then
282                 AC_MSG_WARN([slapd disabled, ignoring --with-ldbm-type argument])
283         fi
284         if test $ol_enable_slurpd = yes ; then
285                 AC_MSG_ERROR([slurpd requires slapd])
286         fi
287         if test $ol_enable_rewrite = yes ; then
288                 AC_MSG_WARN([slapd disabled, ignoring --enable-rewrite argument])
289         fi
290         dnl overlays
291         for i in $Overlays; do
292                 eval "ol_tmp=\$ol_enable_$i"
293                 if test $ol_tmp != no ; then
294                         AC_MSG_WARN([slapd disabled, ignoring --enable-$i argument])
295                         eval "ol_enable_$i=no"
296                 fi
297         done
298
299         # force settings to no
300         ol_enable_slapi=no
301
302         ol_enable_modules=no
303         ol_enable_multimaster=no
304         ol_enable_rlookups=no
305         ol_enable_aci=no
306         ol_enable_wrappers=no
307
308         ol_with_ldbm_api=no
309         ol_with_ldbm_type=no
310
311         ol_enable_slurpd=no
312
313         ol_enable_rewrite=no
314
315 elif test $ol_enable_ldbm = no ; then
316         dnl SLAPD without LDBM
317
318         if test $ol_with_ldbm_api != auto ; then
319                 AC_MSG_WARN([LDBM disabled, ignoring --with-ldbm-api argument])
320         fi
321
322         if test $ol_with_ldbm_type != auto ; then
323                 AC_MSG_WARN([LDBM disabled, ignoring --with-ldbm-type argument])
324         fi
325
326         if test $ol_enable_modules != yes -a \
327                 $ol_enable_bdb = no -a \
328                 $ol_enable_dnssrv = no -a \
329                 $ol_enable_hdb = no -a \
330                 $ol_enable_ldap = no -a \
331                 $ol_enable_meta = no -a \
332                 $ol_enable_monitor = no -a \
333                 $ol_enable_null = no -a \
334                 $ol_enable_passwd = no -a \
335                 $ol_enable_perl = no -a \
336                 $ol_enable_shell = no -a \
337                 $ol_enable_sql = no ; then
338
339                 if test $ol_enable_slapd = yes ; then
340                         AC_MSG_ERROR([slapd requires a backend])
341                 else
342                         AC_MSG_WARN([skipping slapd, no backend specified])
343                         ol_enable_slapd=no
344                 fi
345         fi
346
347         ol_with_ldbm_api=no
348         ol_with_ldbm_type=no
349
350         if test $ol_enable_bdb != no -o $ol_enable_hdb != no; then
351                 ol_with_ldbm_api=berkeley
352         fi
353
354 else
355         dnl SLAPD with LDBM
356         if test $ol_with_ldbm_api = gdbm -a \
357                 $ol_with_ldbm_type = btree ; then
358                 AC_MSG_ERROR([GDBM only supports LDBM type hash])
359         fi
360         if test $ol_with_ldbm_api = mdbm -a \
361                 $ol_with_ldbm_type = btree ; then
362                 AC_MSG_ERROR([MDBM only supports LDBM type hash])
363         fi
364         if test $ol_with_ldbm_api = ndbm -a \
365                 $ol_with_ldbm_type = btree ; then
366                 AC_MSG_ERROR([NDBM only supports LDBM type hash])
367         fi
368
369         if test $ol_enable_bdb != no -o $ol_enable_hdb != no ; then
370                 if test $ol_with_ldbm_api = auto ; then
371                         ol_with_ldbm_api=berkeley
372                 elif test $ol_with_ldbm_api != berkeley ; then
373                         AC_MSG_ERROR([LDBM API not compatible with BDB/HDB])
374                 fi
375         fi
376 fi
377
378 if test $ol_enable_meta = yes -a $ol_enable_ldap = no ; then
379         AC_MSG_ERROR([--enable-meta requires --enable-ldap])
380 fi
381
382 if test $ol_enable_slurpd = yes ; then
383         dnl SLURPD was specifically enabled
384         if test $ol_with_threads = no ; then
385                 AC_MSG_ERROR([slurpd requires threads])
386         fi
387 fi
388
389 if test $ol_enable_lmpasswd = yes ; then
390         if test $ol_with_tls = no ; then
391                 AC_MSG_ERROR([LAN Manager passwords require OpenSSL])
392         fi
393 fi
394
395 if test $ol_enable_kbind = yes ; then
396         if test $ol_with_kerberos = no ; then
397                 AC_MSG_ERROR([options require --with-kerberos])
398         elif test $ol_with_kerberos = auto ; then
399                 ol_with_kerberos=yes
400         fi
401
402 elif test $ol_enable_kbind = no ; then
403         if test $ol_with_kerberos = auto ; then
404                 ol_with_kerberos=no
405         elif test $ol_with_kerberos != no ; then
406                 AC_MSG_WARN([Kerberos detection enabled unnecessarily]);
407                 ol_with_kerberos=no
408         fi
409 fi
410
411 if test $ol_enable_spasswd = yes ; then
412         if test $ol_with_cyrus_sasl = no ; then
413                 AC_MSG_ERROR([options require --with-cyrus-sasl])
414         fi
415         ol_with_cyrus_sasl=yes
416 fi
417
418 AC_MSG_RESULT(done)
419
420 dnl ----------------------------------------------------------------
421 dnl Initialize vars
422 LDAP_LIBS=
423 LDBM_LIBS=
424 LTHREAD_LIBS=
425 LUTIL_LIBS=
426
427 SLAPD_LIBS=
428 SLURPD_LIBS=
429
430 BUILD_SLAPD=no
431 BUILD_SLURPD=no
432
433 BUILD_THREAD=no
434
435 BUILD_SLAPI=no
436 SLAPD_SLAPI_DEPEND=
437
438 BUILD_BDB=no
439 BUILD_DNSSRV=no
440 BUILD_HDB=no
441 BUILD_LDAP=no
442 BUILD_LDBM=no
443 BUILD_META=no
444 BUILD_MONITOR=no
445 BUILD_NULL=no
446 BUILD_PASSWD=no
447 BUILD_PERL=no
448 BUILD_SHELL=no
449 BUILD_SQL=no
450
451 BUILD_DYNGROUP=no
452 BUILD_PROXYCACHE=no
453
454 SLAPD_DYNAMIC_OVERLAYS=
455
456 SLAPD_MODULES_LDFLAGS=
457 SLAPD_MODULES_CPPFLAGS=
458
459 SLAPD_STATIC_BACKENDS=
460 SLAPD_DYNAMIC_BACKENDS=
461
462 SLAPD_PERL_LDFLAGS=
463 MOD_PERL_LDFLAGS=
464 PERL_CPPFLAGS=
465
466 SLAPD_SQL_LDFLAGS=
467 SLAPD_SQL_LIBS=
468 SLAPD_SQL_INCLUDES=
469
470 KRB4_LIBS=
471 KRB5_LIBS=
472 SASL_LIBS=
473 TLS_LIBS=
474 MODULES_LIBS=
475 SLAPI_LIBS=
476 LIBSLAPI=
477 LIBSLAPITOOLS=
478 AUTH_LIBS=
479
480 SLAPD_SLP_LIBS=
481
482 dnl ================================================================
483 dnl Checks for programs
484
485 AC_PROG_INSTALL
486
487 AC_DEFINE(HAVE_MKVERSION, 1, [define this if you have mkversion])
488
489 dnl ----------------------------------------------------------------
490 dnl
491 dnl Determine which C translator to use
492 dnl
493
494 dnl AIX Thread requires we use cc_r or xlc_r.
495 dnl But only do this IF AIX and CC is not set
496 dnl and threads are auto|yes|posix.
497 dnl
498 dnl If we find cc_r|xlc_r, force pthreads and assume
499 dnl             pthread_create is in $LIBS (ie: don't bring in
500 dnl             any additional thread libraries)
501 dnl If we do not find cc_r|xlc_r, disable threads
502
503 ol_aix_threads=no
504 case "$target" in
505 *-*-aix*) dnl all AIX is not a good idea.
506         if test -z "$CC" ; then
507                 case "$ol_with_threads" in
508                 auto | yes |  posix) ol_aix_threads=yes ;;
509                 esac
510         fi
511 ;;
512 esac
513
514 if test $ol_aix_threads = yes ; then
515         if test -z "${CC}" ; then
516                 AC_CHECK_PROGS(CC,cc_r xlc_r cc)
517
518                 if test "$CC" = cc ; then
519                         dnl no CC! don't allow --with-threads
520                         if test $ol_with_threads != auto ; then
521                                 AC_MSG_ERROR([--with-threads requires cc_r (or other suitable compiler) on AIX])
522                         else
523                                 AC_MSG_WARN([disabling threads, no cc_r on AIX])
524                         fi
525                         ol_with_threads=no
526                 fi
527         fi
528
529         if test "${CC}" = "cc_r" -o "${CC}" = "xlc_r" ; then
530                 ol_with_threads=posix
531                 ol_cv_pthread_create=yes
532         fi
533 fi
534
535 if test -z "${CC}"; then
536         AC_CHECK_PROGS(CC,cc gcc,missing)
537
538         if test "${CC}" = "missing" ; then
539                 AC_MSG_ERROR([Unable to locate cc(1) or suitable replacement.  Check PATH or set CC.])
540         fi
541 fi
542
543 if test -z "${AR}"; then
544         AC_CHECK_PROGS(AR,ar gar,missing)
545
546         if test "${AR}" = "missing" ; then
547                 AC_MSG_ERROR([Unable to locate ar(1) or suitable replacement.  Check PATH or set AR.])
548         fi
549 fi
550
551 AC_LIBTOOL_WIN32_DLL
552 AC_LIBTOOL_DLOPEN
553 AC_PROG_LIBTOOL
554
555 OL_PROG_LN_H
556 AC_PROG_LN_S
557
558 dnl ----------------------------------------------------------------
559 dnl Perl
560 ol_link_perl=no
561 if test $ol_enable_perl != no ; then
562         AC_PATH_PROG(PERLBIN, perl, /usr/bin/perl)
563
564         if test "no$PERLBIN" = "no" ; then
565                 if test $ol_enable_perl = yes ; then
566                         AC_MSG_ERROR([could not locate perl])
567                 fi
568
569         else
570                 PERL_CPPFLAGS="`$PERLBIN -MExtUtils::Embed -e ccopts`"
571                 PERL_LDFLAGS="`$PERLBIN -MExtUtils::Embed -e ldopts|sed -e 's/ -lc / /' -e 's/ -lc$//'`"
572
573                 if test x"$ol_enable_perl" = "xyes" ; then
574                         SLAPD_PERL_LDFLAGS="$PERL_LDFLAGS"
575                 else
576                         MOD_PERL_LDFLAGS="$PERL_LDFLAGS"
577                 fi
578                 dnl should check perl version
579                 ol_link_perl=yes
580         fi
581 fi
582
583 AC_PROG_CPP
584
585 dnl ----------------------------------------------------------------
586 dnl Checks for UNIX Variants
587 dnl AC_AIX
588 dnl AC_ISC_POSIX
589 dnl AC_MINIX
590
591 dnl ----------------------------------------------------------------
592 dnl Checks for system services
593 AC_CYGWIN
594 AC_MINGW32
595 AC_EXEEXT
596 AC_OBJEXT
597
598 AC_DEFINE_UNQUOTED(EXEEXT, "${EXEEXT}", [defined to be the EXE extension])
599
600 dnl ----------------------------------------------------------------
601 dnl BeOS requires -lbe -lroot -lnet
602 AC_CHECK_LIB(be, be_app, [LIBS="$LIBS -lbe -lroot -lnet"], :, [-lroot -lnet])
603
604 dnl ----------------------------------------------------------------
605 dnl OpenLDAP requires STDC features
606 AM_PROG_CC_STDC
607 if test "X${am_cv_prog_cc_stdc}" = "Xno" ; then
608         AC_MSG_ERROR([OpenLDAP requires compiler to support STDC constructs.])
609 fi
610
611 dnl ----------------------------------------------------------------
612 dnl Check cc depend flags
613 OL_MKDEPEND
614 if test "${ol_cv_mkdep}" = no ; then
615         # this will soon become an error
616         AC_MSG_WARN([do not know how to generate dependencies])
617 fi
618
619 dnl ----------------------------------------------------------------
620 dnl Check for AIX security library
621 AC_CHECK_LIB(s, afopen, [
622         AUTH_LIBS=-ls
623         AC_DEFINE(HAVE_AIX_SECURITY,1,[define if you have AIX security lib])
624 ])
625
626 dnl ----------------------------------------------------------------
627 dnl Check for IBM OS/390
628 case "$target" in
629 *-ibm-openedition)
630         ac_cv_func_getopt=no
631         AC_DEFINE(BOTH_STRINGS_H,1,[define to use both <string.h> and <strings.h>])
632         ;;
633 esac
634
635 dnl ----------------------------------------------------------------
636 dnl Check for module support
637 ol_link_modules=no
638 if test $ol_enable_modules != no ; then
639         AC_CHECK_HEADERS(ltdl.h)
640
641         if test $ac_cv_header_ltdl_h = no ; then
642                 AC_MSG_ERROR([could not locate libtool ltdl.h])
643         fi
644
645         AC_CHECK_LIB(ltdl, lt_dlinit, [
646                 MODULES_LIBS=-lltdl
647                 AC_DEFINE(HAVE_LIBLTDL,1,[define if you have libtool -ltdl])
648         ])
649
650         if test "$ac_cv_lib_ltdl_lt_dlinit" = no ; then
651                 AC_MSG_ERROR([could not locate libtool -lltdl])
652         fi
653         ol_link_modules=yes
654
655 else
656         for i in $Backends; do
657                 eval "ol_tmp=\$ol_enable_$i"
658                 if test $ol_tmp = mod ; then
659                         AC_MSG_WARN([building static $i backend])
660                         eval "ol_enable_$i=yes"
661                 fi
662         done
663         for i in $Overlays; do
664                 eval "ol_tmp=\$ol_enable_$i"
665                 if test $ol_tmp = mod ; then
666                         AC_MSG_WARN([building static $i overlay])
667                         eval "ol_enable_$i=yes"
668                 fi
669         done
670 fi
671
672 dnl ----------------------------------------------------------------
673 dnl Checks for header files.
674 OL_HEADER_STDC
675
676 if test $ol_cv_header_stdc != yes; then
677         AC_MSG_WARN([could not locate Standard C compliant headers])
678 fi
679
680 AC_HEADER_DIRENT
681 AC_HEADER_SYS_WAIT
682 AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL
683 if test $am_cv_sys_posix_termios = yes ; then
684         AC_DEFINE(HAVE_POSIX_TERMIOS,1,
685                 [define if you have POSIX termios])
686 fi
687
688 AC_CHECK_HEADERS(       \
689         arpa/inet.h             \
690         arpa/nameser.h  \
691         assert.h                \
692         bits/types.h    \
693         conio.h                 \
694         crypt.h                 \
695         direct.h                \
696         errno.h                 \
697         fcntl.h                 \
698         filio.h                 \
699         getopt.h                \
700         grp.h                   \
701         io.h                    \
702         libutil.h               \
703         limits.h                \
704         locale.h                \
705         netinet/tcp.h   \
706         malloc.h                \
707         memory.h                \
708         psap.h                  \
709         pwd.h                   \
710         process.h               \
711         resolv.h                \
712         sgtty.h                 \
713         shadow.h                \
714         stddef.h                \
715         string.h                \
716         strings.h               \
717         sysexits.h              \
718         sys/file.h              \
719         sys/filio.h             \
720         sys/errno.h             \
721         sys/ioctl.h             \
722         sys/param.h             \
723         sys/resource.h  \
724         sys/select.h    \
725         sys/socket.h    \
726         sys/stat.h              \
727         sys/syslog.h    \
728         sys/time.h              \
729         sys/types.h             \
730         sys/ucred.h             \
731         sys/uio.h               \
732         syslog.h                \
733         termios.h               \
734         unistd.h                \
735         winsock.h               \
736         winsock2.h              \
737 )
738
739
740 dnl ----------------------------------------------------------------
741 dnl Checks for libraries
742
743 AC_CHECK_FUNCS( sigaction sigset )
744
745 dnl HP-UX requires -lV3
746 dnl this is not needed on newer versions of HP-UX
747 if test $ac_cv_func_sigaction = no && test $ac_cv_func_sigaction = no ; then
748         AC_CHECK_LIB(V3, sigset)
749 fi
750
751 dnl The following is INTENTIONALLY scripted out because shell does not
752 dnl support variable names with the '@' character, which is what
753 dnl autoconf would try to generate if one merely used AC_SEARCH_LIBS
754 if test "$ac_cv_header_winsock_h" = yes; then
755 AC_CACHE_CHECK([for winsock], [ol_cv_winsock],
756 save_LIBS="$LIBS"
757 for curlib in ws2_32 wsock32; do
758         LIBS="$LIBS -l$curlib"
759         AC_TRY_LINK([#include <winsock.h>
760                         ],
761                         [
762                         socket(0,0,0);
763                         select(0,NULL,NULL,NULL,NULL);
764                         closesocket(0);
765                         gethostname(NULL,0);
766                         ],
767                         ol_cv_winsock=yes, ol_cv_winsock=no)
768
769         if test $ol_cv_winsock = yes; then
770                 AC_DEFINE(HAVE_WINSOCK, 1, [define if you have winsock])
771                 ac_cv_func_socket=yes
772                 ac_cv_func_select=yes
773                 ac_cv_func_closesocket=yes
774                 ac_cv_func_gethostname=yes
775                 if test $curlib = ws2_32; then
776                         ol_cv_winsock=winsock2
777                         AC_DEFINE(HAVE_WINSOCK2, 1,
778                                   [define if you have winsock2])
779                 fi
780                 break
781         fi
782         LIBS="$save_LIBS"
783 done)
784 fi
785
786 dnl Find socket()
787 dnl Likely combinations:
788 dnl             -lsocket [ -lnsl_s | -lnsl ]
789 dnl             -linet
790
791 AC_CHECK_FUNC(socket, :, [      
792 dnl hopefully we won't include too many libraries
793         AC_CHECK_LIB(socket, main)
794         AC_CHECK_LIB(net, main)
795         AC_CHECK_LIB(nsl_s, main)
796         AC_CHECK_LIB(nsl, main)
797         AC_CHECK_LIB(inet, socket)
798         AC_CHECK_LIB(gen, main)
799 ])
800
801 dnl require select
802 AC_CHECK_FUNC(select, :, AC_MSG_ERROR([select() required.]))
803
804 if test "${ac_cv_header_winsock_h}" != yes; then
805         dnl Select arg types
806         dnl (if this detection becomes permenent, it and the select() detection
807         dnl should be done before the yielding select test) 
808         AC_FUNC_SELECT_ARGTYPES
809 fi
810
811 dnl check to see if system call automatically restart
812 dnl AC_SYS_RESTARTABLE_SYSCALLS
813
814 dnl ----------------------------------------------------------------
815 dnl require POSIX regex
816 AC_CHECK_HEADERS( regex.h )
817 if test "$ac_cv_header_regex_h" != yes ; then
818         AC_MSG_ERROR([POSIX regex.h required.])
819 fi
820 AC_SEARCH_LIBS(regfree, [regex gnuregex],
821         :, AC_MSG_ERROR([POSIX regex required.]))
822
823 OL_POSIX_REGEX
824 if test "$ol_cv_c_posix_regex" = no ; then
825         AC_MSG_ERROR([broken POSIX regex!])
826 fi
827
828 dnl ----------------------------------------------------------------
829 dnl UUID Support
830
831 have_uuid=no
832 AC_CHECK_HEADERS(sys/uuid.h)
833 if test $ac_cv_header_sys_uuid_h = yes ; then
834         save_LIBS="$LIBS"
835         AC_SEARCH_LIBS(uuid_to_str, uuid, [have_uuid=yes], :)
836         LIBS="$save_LIBS"
837
838         if test have_uuid = yes ; then
839                 AC_DEFINE(HAVE_UUID_TO_STR,1,
840                         [define if you have uuid_to_str()])
841
842                 test "$ac_cv_search_uuid_to_str" = "none required" || \
843                         SLAPD_LIBS="$SLAPD_LIBS $ac_cv_search_uuid_to_str"
844         fi
845 fi
846
847 dnl For windows, check for the need of RPCRT for UUID function support
848 if test $have_uuid = no ; then
849         AC_MSG_CHECKING(to see if -lrpcrt4 is needed for win32 UUID support)
850         save_LIBS="$LIBS"
851         LIBS="$LIBS -lrpcrt4"
852         AC_TRY_LINK([
853                 int __stdcall UuidCreate(void *);
854                 int __stdcall UuidToStringA(void *,void **);
855                 ],
856                 [
857                 UuidCreate(0);
858                 UuidToStringA(0,0);
859                 ],
860                 need_rpcrt=yes, need_rpcrt=no)
861         if test $need_rpcrt = yes; then
862                 SLAPD_LIBS="$SLAPD_LIBS -lrpcrt4"
863         fi
864         LIBS="$save_LIBS"
865         AC_MSG_RESULT($need_rpcrt)
866 fi
867
868 dnl ----------------------------------------------------------------
869 dnl Check for resolver routines
870 dnl       need to check for both res_query and __res_query
871 dnl   need to check -lc, -lbind, and -lresolv
872 ol_link_dnssrv=no
873 AC_CHECK_FUNC(res_query,:)
874 if test $ac_cv_func_res_query = no ; then 
875         AC_CHECK_FUNC(__res_query,:)
876         ac_cv_func_res_query=$ac_cv_func___res_query
877 fi
878
879 if test $ac_cv_func_res_query = no ; then 
880         AC_CHECK_LIB(bind, res_query)
881         ac_cv_func_res_query=$ac_cv_lib_bind_res_query
882 fi
883
884 if test $ac_cv_func_res_query = no ; then 
885         AC_CHECK_LIB(bind, __res_query)
886         ac_cv_func_res_query=$ac_cv_lib_bind___res_query
887 fi
888
889 if test $ac_cv_func_res_query = no ; then 
890         AC_CHECK_LIB(resolv, res_query)
891         ac_cv_func_res_query=$ac_cv_lib_resolv_res_query
892 fi
893
894 if test $ac_cv_func_res_query = no ; then 
895         AC_CHECK_LIB(resolv, __res_query)
896         ac_cv_func_res_query=$ac_cv_lib_resolv___res_query
897 fi
898
899 if test $ac_cv_func_res_query = no ; then 
900         AC_CHECK_LIB(resolv, _res_9_query)
901         ac_cv_func_res_query=$ac_cv_lib_resolv_res_9_query
902 fi
903
904 if test "$ac_cv_func_res_query" = yes ; then
905         AC_DEFINE(HAVE_RES_QUERY,1,
906                 [define if you have res_query()])
907
908         if test $ol_enable_dnssrv != no ; then
909                 ol_link_dnssrv=yes
910         fi
911 fi
912
913 if test "$ol_enable_dnssrv" != no -a "$ol_link_dnssrv" = no ; then
914         AC_MSG_ERROR([DNSSRV requires res_query()])
915 fi
916
917 dnl ----------------------------------------------------------------
918 dnl PF_INET6 support requires getaddrinfo and INET6_ADDRSTRLEN
919 dnl PF_LOCAL may use getaddrinfo in available
920 AC_CHECK_FUNCS( getaddrinfo getnameinfo gai_strerror inet_ntop )
921
922 ol_link_ipv6=no
923 if test $ac_cv_func_getaddrinfo = no -o $ac_cv_func_inet_ntop = no ; then
924         if test $ol_enable_ipv6 = yes ; then
925                 AC_MSG_ERROR([IPv6 support requires getaddrinfo() and inet_ntop()])
926         fi
927 elif test $ol_enable_ipv6 != no ; then
928         AC_CACHE_CHECK([INET6_ADDRSTRLEN],[ol_cv_inet6_addrstrlen],[
929                 AC_EGREP_CPP(__has_inet6_addrstrlen__,[
930 #                       include <netinet/in.h>
931 #                       ifdef INET6_ADDRSTRLEN
932                                 __has_inet6_addrstrlen__;
933 #                       endif
934                 ], [ol_cv_inet6_addrstrlen=yes], [ol_cv_inet6_addrstrlen=no])])
935
936
937         AC_CACHE_CHECK([struct sockaddr_storage],ol_cv_struct_sockaddr_storage,[
938                 AC_TRY_COMPILE([
939 #include <sys/types.h>
940 #include <sys/socket.h>
941 ],[
942                         struct sockaddr_storage ss;
943 ],                      [ol_cv_struct_sockaddr_storage=yes],
944                         [ol_cv_struct_sockaddr_storage=no])])
945
946         if test $ol_cv_inet6_addrstrlen = yes \
947                 -a $ol_cv_struct_sockaddr_storage = yes ; then
948                 ol_link_ipv6=yes
949         elif test $ol_enable_ipv6 = yes \
950                         -a $ol_cv_inet6_addrstrlen = no ; then
951                 AC_MSG_ERROR([IPv6 support requires INET6_ADDRSTRLEN])
952         elif test $ol_enable_ipv6 = yes \
953                         -a $ol_cv_struct_sockaddr_storage = no ; then
954                 AC_MSG_ERROR([IPv6 support requires struct sockaddr_storage])
955         fi
956 fi
957
958 if test $ol_enable_local != no ; then
959         AC_CHECK_HEADERS( sys/un.h )
960
961         if test $ol_enable_local = auto ; then
962                 ol_enable_local=$ac_cv_header_sys_un_h
963         elif test $ac_cv_header_sys_un_h = no ; then
964                 AC_MSG_ERROR([AF_LOCAL domain support requires sys/un.h])
965         fi
966 fi
967
968 dnl ----------------------------------------------------------------
969 dnl Kerberos
970 ol_link_kbind=no
971 ol_link_krb5=no
972 ol_link_krb4=no
973
974 if test $ol_with_kerberos = yes -o $ol_with_kerberos = auto \
975         -o $ol_with_kerberos = k5 -o $ol_with_kerberos = k5only \
976         -o $ol_with_kerberos = k425 ; then
977
978         AC_CHECK_HEADERS(krb5.h)
979
980         if test $ac_cv_header_krb5_h = yes ; then
981                 dnl lazy check for Heimdal Kerberos
982                 AC_CHECK_HEADERS(heim_err.h)
983                 if test $ac_cv_header_heim_err_h = yes ; then
984                         krb5_impl=heimdal
985                 else
986                         krb5_impl=mit
987                 fi
988
989                 if test $krb5_impl = mit; then
990                         AC_CHECK_LIB(k5crypto, main,
991                                 [krb5crypto=k5crypto],
992                                 [krb5crypto=crypto])
993
994                         AC_CHECK_LIB(krb5, main,
995                                 [have_krb5=yes
996                                 KRB5_LIBS="-lkrb5 -l$krb5crypto -lcom_err"],
997                                 [have_krb5=no],
998                                 [-l$krb5crypto -lcom_err])
999
1000                 elif test $krb5_impl = heimdal; then
1001                         AC_CHECK_LIB(des, main,
1002                                 [krb5crypto=des],
1003                                 [krb5crypto=crypto])
1004
1005                         AC_CHECK_LIB(krb5, main,
1006                                 [have_krb5=yes
1007                                 KRB5_LIBS="-lkrb5 -l$krb5crypto -lasn1 -lroken -lcom_err"],
1008                                 [have_krb5=no],
1009                                 [-l$krb5crypto -lasn1 -lroken -lcom_err])
1010
1011                         AC_DEFINE(HAVE_HEIMDAL_KERBEROS, 1,
1012                                 [define if you have HEIMDAL Kerberos])
1013
1014                 else
1015                         have_krb5=no
1016                         AC_MSG_WARN([Unrecognized Kerberos5 Implementation])
1017                 fi
1018
1019                 if test $have_krb5 = yes ; then
1020                         ol_link_krb5=yes
1021
1022                         AC_DEFINE(HAVE_KRB5, 1,
1023                                 [define if you have Kerberos V])
1024
1025                         if test $ol_with_kerberos = k5only ; then
1026                                 ol_with_kerberos=found
1027                         fi
1028
1029                 elif test $ol_with_kerberos != auto ; then
1030                         AC_MSG_ERROR([Required Kerberos 5 support not available])
1031                 fi
1032
1033         fi
1034 fi
1035
1036 if test $ol_link_krb5 = yes -a \( $ol_with_kerberos = yes -o \
1037         $ol_with_kerberos = auto -o $ol_with_kerberos = k425 \) ; then
1038
1039         AC_CHECK_HEADERS(kerberosIV/krb.h kerberosIV/des.h)
1040
1041         if test $ac_cv_header_kerberosIV_krb_h = yes ; then
1042                 if test $krb5_impl = mit; then
1043                         AC_CHECK_LIB(krb4, main, [have_k425=yes
1044                                 KRB4_LIBS="-lkrb4 -ldes425"], [have_k425=no],
1045                                 [-ldes425 -lkrb5 -l$krb5crypto -lcom_err])
1046
1047                 elif test $krb5_impl = heimdal; then
1048                         AC_CHECK_LIB(krb4, main, [have_k425=yes
1049                                 KRB4_LIBS="-lkrb4"], [have_k425=no],
1050                                 [-lkrb5 -l$krb5crypto -lasn1 -lroken -lcom_err])
1051
1052                 else
1053                         have_425=no
1054                         AC_MSG_WARN([Unrecongized Kerberos V Implementation])
1055                 fi
1056
1057                 if test $have_k425 = yes ; then
1058                         ol_with_kerberos=found
1059                         ol_link_krb4=yes
1060
1061                         AC_DEFINE(HAVE_KRB425, 1,
1062                                 [define if you have Kerberos V with IV support])
1063                         AC_DEFINE(HAVE_KRB4, 1,
1064                                 [define if you have Kerberos IV])
1065
1066                         AC_CACHE_CHECK([for des_debug in Kerberos libraries],
1067                                 [ol_cv_var_des_debug], [
1068                                 dnl save the flags
1069                                 save_LIBS="$LIBS"
1070                                 LIBS="$KRB4_LIBS $KRB5_LIBS $LIBS"
1071                                 AC_TRY_LINK([
1072 #include <kerberosIV/krb.h>
1073 #include <kerberosIV/des.h>
1074 extern int des_debug;
1075 ],[
1076 des_debug = 1;
1077 ],                              ol_cv_var_des_debug=yes, ol_cv_var_des_debug=no)
1078                                 dnl restore the LIBS
1079                                 LIBS="$save_LIBS"
1080                         ])
1081
1082                         if test $ol_cv_var_des_debug = yes ; then
1083                                 AC_DEFINE(HAVE_DES_DEBUG,1,
1084                                         [define if you have Kerberos des_debug])
1085                         fi
1086
1087                         LIBS="$save_LIBS"
1088                 fi
1089         fi
1090 fi
1091
1092 if test $ol_link_krb5 = yes ; then
1093         ol_with_kerberos=found
1094 fi
1095
1096 if test $ol_with_kerberos = yes -o $ol_with_kerberos = auto \
1097         -o $ol_with_kerberos = k4 -o $ol_with_kerberos = kth ; then
1098
1099         AC_CHECK_HEADERS(krb.h des.h krb-archaeology.h )
1100
1101         if test $ac_cv_header_krb_h = yes ; then
1102                 AC_CHECK_LIB(krb, main, [have_k4=yes], [have_k4=no], [-ldes])
1103
1104                 if test $have_k4 = yes ; then
1105                         ol_with_kerberos=found
1106                         ol_link_krb4=yes
1107
1108                         AC_DEFINE(HAVE_KRB4, 1,
1109                                 [define if you have Kerberos IV])
1110
1111                         KRB4_LIBS="-lkrb -ldes"
1112
1113                         if test $ac_cv_header_krb_archaeology_h = yes ; then
1114                                 AC_DEFINE(HAVE_KTH_KERBEROS, 1,
1115                                         [define if you have Kth Kerberos])
1116                         fi
1117                 fi
1118         fi
1119 fi
1120
1121 if test $ol_link_krb4 = yes -a $ol_enable_kbind != no ; then
1122         ol_link_kbind=yes
1123
1124 elif test $ol_enable_kbind = yes ; then
1125         AC_MSG_ERROR([Kerberos IV detection failed])
1126 fi
1127
1128 if test $ol_link_krb4 = yes -o $ol_link_krb5 = yes ; then
1129         AC_DEFINE(HAVE_KERBEROS, 1, [define if you have Kerberos])
1130
1131 elif test $ol_with_kerberos != auto -a $ol_with_kerberos != no ; then
1132         AC_MSG_ERROR([Kerberos detection failed])
1133 fi
1134
1135 dnl ----------------------------------------------------------------
1136 dnl TLS/SSL
1137 ol_link_tls=no
1138 if test $ol_with_tls != no ; then
1139         AC_CHECK_HEADERS(openssl/ssl.h ssl.h)
1140         
1141         if test $ac_cv_header_openssl_ssl_h = yes \
1142                 -o $ac_cv_header_ssl_h = yes ; then
1143                 AC_CHECK_LIB(ssl, SSLeay_add_ssl_algorithms, 
1144                         [have_ssleay=yes
1145                         need_rsaref=no],
1146                         [have_ssleay=no],
1147                         [-lcrypto])
1148                         
1149                 if test $have_ssleay = no ; then
1150                         AC_CHECK_LIB(ssl, SSL_library_init,
1151                                 [have_ssleay=yes
1152                                 need_rsaref=no], [have_ssleay=no],
1153                                 [-lcrypto])
1154                 fi
1155
1156                 if test $have_ssleay = no ; then
1157                         AC_CHECK_LIB(ssl, ssl3_accept, 
1158                                 [have_ssleay=yes
1159                                 need_rsaref=yes], [have_ssleay=no],
1160                                 [-lcrypto -lRSAglue -lrsaref])
1161                 fi
1162
1163                 if test $have_ssleay = yes ; then
1164                         ol_with_tls=found
1165                         ol_link_tls=yes
1166
1167                         AC_DEFINE(HAVE_SSLEAY, 1, 
1168                                 [define if you have SSLeay or OpenSSL])
1169
1170                         if test $need_rsaref = yes; then
1171                                 AC_DEFINE(HAVE_RSAREF, 1, 
1172                                         [define if you have RSAref])
1173
1174                                 TLS_LIBS="-lssl -lcrypto -lRSAglue -lrsaref"
1175                         else
1176                                 TLS_LIBS="-lssl -lcrypto"
1177                         fi
1178                 fi
1179         fi
1180
1181 else
1182         AC_WARN([TLS data protection not supported!])
1183 fi
1184
1185 WITH_TLS=no
1186 if test $ol_link_tls = yes ; then
1187         AC_DEFINE(HAVE_TLS, 1, [define if you have TLS])
1188         WITH_TLS=yes
1189
1190 elif test $ol_with_tls = auto ; then
1191         AC_WARN([Could not locate TLS/SSL package])
1192         AC_WARN([TLS data protection not supported!])
1193
1194 elif test $ol_with_tls != no ; then
1195         AC_ERROR([Could not locate TLS/SSL package])
1196 fi
1197
1198 dnl ----------------------------------------------------------------
1199 dnl LAN Manger password checking requires DES from OpenSSL
1200 if test $ol_enable_lmpasswd != no; then
1201         if test $ol_link_tls != yes ; then
1202                 AC_ERROR([LAN Manager passwords require OpenSSL])
1203         fi
1204
1205         AC_DEFINE(SLAPD_LMHASH, 1, [define to support LAN Manager passwords])
1206 fi
1207
1208 dnl ----------------------------------------------------------------
1209 dnl Threads?
1210 ol_link_threads=no
1211
1212 if test $ol_with_threads = auto -o $ol_with_threads = yes \
1213         -o $ol_with_threads = nt ; then
1214
1215         OL_NT_THREADS
1216
1217         if test "$ol_cv_nt_threads" = yes ; then
1218                 ol_link_threads=nt
1219                 ol_with_threads=found
1220                 ol_with_yielding_select=yes
1221
1222                 AC_DEFINE(HAVE_NT_SERVICE_MANAGER,1,[if you have NT Service Manager])
1223                 AC_DEFINE(HAVE_NT_EVENT_LOG,1,[if you have NT Event Log])
1224         fi
1225
1226         if test $ol_with_threads = nt ; then
1227                 AC_MSG_ERROR([could not locate NT Threads])
1228         fi
1229 fi
1230
1231 if test $ol_with_threads = auto -o $ol_with_threads = yes \
1232         -o $ol_with_threads = posix ; then
1233
1234         AC_CHECK_HEADERS(pthread.h)
1235
1236         if test $ac_cv_header_pthread_h = yes ; then
1237                 OL_POSIX_THREAD_VERSION
1238
1239                 if test $ol_cv_pthread_version != 0 ; then
1240                         AC_DEFINE_UNQUOTED(HAVE_PTHREADS,$ol_cv_pthread_version,
1241                                 [define to pthreads API spec revision])
1242                 else
1243                         AC_MSG_ERROR([unknown pthread version])
1244                 fi
1245
1246                 # consider threads found
1247                 ol_with_threads=found
1248
1249                 OL_HEADER_LINUX_THREADS
1250                 OL_HEADER_GNU_PTH_PTHREAD_H
1251
1252                 if test $ol_cv_header_gnu_pth_pthread_h = no ; then
1253                         AC_CHECK_HEADERS(sched.h)
1254                 fi
1255
1256                 dnl Now the hard part, how to link?
1257                 dnl
1258                 dnl currently supported checks:
1259                 dnl
1260                 dnl Check for no flags 
1261                 dnl     pthread_create() in $LIBS
1262                 dnl
1263                 dnl Check special pthread (final) flags
1264                 dnl     [skipped] pthread_create() with -mt (Solaris) [disabled]
1265                 dnl     pthread_create() with -kthread (FreeBSD)
1266                 dnl     pthread_create() with -pthread (FreeBSD/Digital Unix)
1267                 dnl     pthread_create() with -pthreads (?)
1268                 dnl     pthread_create() with -mthreads (AIX)
1269                 dnl     pthread_create() with -thread (?)
1270                 dnl
1271                 dnl Check pthread (final) libraries
1272                 dnl     pthread_mutex_unlock() in -lpthread -lmach -lexc -lc_r (OSF/1)
1273                 dnl     pthread_mutex_lock() in -lpthread -lmach -lexc (OSF/1)
1274                 dnl     [skipped] pthread_mutex_trylock() in -lpthread -lexc (OSF/1)
1275                 dnl     pthread_join() -Wl,-woff,85 -lpthread (IRIX)
1276                 dnl     pthread_create() in -lpthread (many)
1277                 dnl     pthread_create() in -lc_r (FreeBSD)
1278                 dnl
1279                 dnl Check pthread (draft4) flags (depreciated)
1280                 dnl     pthread_create() with -threads (OSF/1)
1281                 dnl
1282                 dnl Check pthread (draft4) libraries (depreciated)
1283                 dnl     pthread_mutex_unlock() in -lpthreads -lmach -lexc -lc_r (OSF/1)
1284                 dnl     pthread_mutex_lock() in -lpthreads -lmach -lexc (OSF/1)
1285                 dnl     pthread_mutex_trylock() in -lpthreads -lexc (OSF/1)
1286                 dnl     pthread_create() in -lpthreads (many)
1287                 dnl
1288
1289                 dnl pthread_create in $LIBS
1290                 AC_CACHE_CHECK([for pthread_create in default libraries],
1291                         ol_cv_pthread_create,[
1292                 AC_TRY_RUN(OL_PTHREAD_TEST_PROGRAM,
1293                         [ol_cv_pthread_create=yes],
1294                         [ol_cv_pthread_create=no],
1295                         [AC_TRY_LINK(OL_PTHREAD_TEST_INCLUDES,OL_PTHREAD_TEST_FUNCTION,
1296                                 [ol_cv_pthread_create=yes],
1297                                 [ol_cv_pthread_create=no])])])
1298
1299                 if test $ol_cv_pthread_create != no ; then
1300                         ol_link_threads=posix
1301                         ol_link_pthreads=""
1302                 fi
1303                 
1304 dnl             OL_PTHREAD_TRY([-mt],           [ol_cv_pthread_mt])
1305                 OL_PTHREAD_TRY([-kthread],      [ol_cv_pthread_kthread])
1306                 OL_PTHREAD_TRY([-pthread],      [ol_cv_pthread_pthread])
1307                 OL_PTHREAD_TRY([-pthreads],     [ol_cv_pthread_pthreads])
1308                 OL_PTHREAD_TRY([-mthreads],     [ol_cv_pthread_mthreads])
1309                 OL_PTHREAD_TRY([-thread],       [ol_cv_pthread_thread])
1310
1311                 OL_PTHREAD_TRY([-lpthread -lmach -lexc -lc_r],
1312                         [ol_cv_pthread_lpthread_lmach_lexc_lc_r])
1313                 OL_PTHREAD_TRY([-lpthread -lmach -lexc],
1314                         [ol_cv_pthread_lpthread_lmach_lexc])
1315 dnl             OL_PTHREAD_TRY([-lpthread -lexc],
1316 dnl                     [ol_cv_pthread_lpthread_lexc])
1317
1318                 OL_PTHREAD_TRY([-lpthread -Wl,-woff,85],
1319                         [ol_cv_pthread_lib_lpthread_woff])
1320
1321                 OL_PTHREAD_TRY([-lpthread],     [ol_cv_pthread_lpthread])
1322                 OL_PTHREAD_TRY([-lc_r],         [ol_cv_pthread_lc_r])
1323
1324                 OL_PTHREAD_TRY([-threads],      [ol_cv_pthread_threads])
1325
1326                 OL_PTHREAD_TRY([-lpthreads -lmach -lexc -lc_r],
1327                         [ol_cv_pthread_lpthreads_lmach_lexc_lc_r])
1328                 OL_PTHREAD_TRY([-lpthreads -lmach -lexc],
1329                         [ol_cv_pthread_lpthreads_lmach_lexc])
1330                 OL_PTHREAD_TRY([-lpthreads -lexc],
1331                         [ol_cv_pthread_lpthreads_lexc])
1332
1333                 OL_PTHREAD_TRY([-lpthreads],[ol_cv_pthread_lib_lpthreads])
1334
1335                 if test $ol_link_threads != no ; then
1336                         LTHREAD_LIBS="$LTHREAD_LIBS $ol_link_pthreads"
1337
1338                         dnl save flags
1339                         save_CPPFLAGS="$CPPFLAGS"
1340                         save_LIBS="$LIBS"
1341                         LIBS="$LTHREAD_LIBS $LIBS"
1342
1343                         dnl All POSIX Thread (final) implementations should have
1344                         dnl sched_yield instead of pthread yield.
1345                         dnl check for both, and thr_yield for Solaris
1346                         AC_CHECK_FUNCS(sched_yield pthread_yield thr_yield)
1347
1348                         if test $ac_cv_func_sched_yield = no -a \
1349                                 $ac_cv_func_pthread_yield = no -a \
1350                                 $ac_cv_func_thr_yield = no ; then
1351                                 dnl Digital UNIX has sched_yield() in -lrt
1352                                 AC_CHECK_LIB(rt, sched_yield,
1353                                         [LTHREAD_LIBS="$LTHREAD_LIBS -lrt"
1354                                         AC_DEFINE(HAVE_SCHED_YIELD,1,
1355                                                 [Define if you have the sched_yield function.])
1356                                         ac_cv_func_sched_yield=yes],
1357                                         [ac_cv_func_sched_yield=no])
1358                         fi
1359                         if test $ac_cv_func_sched_yield = no -a \
1360                                 $ac_cv_func_pthread_yield = no -a \
1361                                 "$ac_cv_func_thr_yield" = no ; then
1362                                 AC_MSG_WARN([could not locate sched_yield() or pthread_yield()])
1363                         fi
1364
1365                         dnl Check functions for compatibility
1366                         AC_CHECK_FUNCS(pthread_kill pthread_rwlock_destroy)
1367
1368                         dnl Check for pthread_detach with <pthread.h> inclusion
1369                         dnl as it's symbol may have been mangled.
1370                         AC_CACHE_CHECK([for pthread_detach with <pthread.h>],
1371                                 [ol_cv_func_pthread_detach], [
1372                                 dnl save the flags
1373                                 AC_TRY_LINK([
1374 #include <pthread.h>
1375 #ifndef NULL
1376 #define NULL (void*)0
1377 #endif
1378 ],
1379                                         [pthread_detach(NULL);],
1380                                         [ol_cv_func_pthread_detach=yes],
1381                                         [ol_cv_func_pthread_detach=no])
1382                         ])
1383
1384                         if test $ol_cv_func_pthread_detach = no ; then
1385                                 AC_MSG_ERROR([could not locate pthread_detach()])
1386                         fi
1387
1388                         AC_DEFINE(HAVE_PTHREAD_DETACH,1,
1389                                 [define if you have pthread_detach function])
1390
1391                         dnl Check for setconcurreny functions
1392                         AC_CHECK_FUNCS( \
1393                                 pthread_setconcurrency \
1394                                 pthread_getconcurrency \
1395                                 thr_setconcurrency \
1396                                 thr_getconcurrency \
1397                         )
1398
1399                         OL_SYS_LINUX_THREADS
1400                         OL_LINUX_THREADS
1401
1402                         if test $ol_cv_linux_threads = error; then
1403                                 AC_MSG_ERROR([LinuxThreads header/library mismatch]);
1404                         fi
1405
1406                         AC_CACHE_CHECK([if pthread_create() works],
1407                                 ol_cv_pthread_create_works,[
1408                         AC_TRY_RUN(OL_PTHREAD_TEST_PROGRAM,
1409                                 [ol_cv_pthread_create_works=yes],
1410                                 [ol_cv_pthread_create_works=no],
1411                                 [dnl assume yes
1412                                 ol_cv_pthread_create_works=yes])])
1413
1414                         if test $ol_cv_pthread_create_works = no ; then
1415                                 AC_MSG_ERROR([pthread_create is not usable, check environment settings])
1416                         fi
1417
1418                         dnl Check if select causes an yield
1419                         if test $ol_with_yielding_select = auto ; then
1420                                 AC_CACHE_CHECK([if select yields when using pthreads],
1421                                         ol_cv_pthread_select_yields,[
1422                                 AC_TRY_RUN([
1423 #include <sys/types.h>
1424 #include <sys/time.h>
1425 #include <unistd.h>
1426 #include <pthread.h>
1427 #ifndef NULL
1428 #define NULL (void*) 0
1429 #endif
1430
1431 static int fildes[2];
1432
1433 static void *task(p)
1434         void *p;
1435 {
1436         int i;
1437         struct timeval tv;
1438
1439         fd_set rfds;
1440
1441         tv.tv_sec=10;
1442         tv.tv_usec=0;
1443
1444         FD_ZERO(&rfds);
1445         FD_SET(fildes[0], &rfds);
1446
1447         /* we're not interested in any fds */
1448         i = select(FD_SETSIZE, &rfds, NULL, NULL, &tv);
1449
1450         if(i < 0) {
1451                 perror("select");
1452                 exit(10);
1453         }
1454
1455         exit(0); /* if we exit here, the select blocked the whole process */
1456 }
1457
1458 int main(argc, argv)
1459         int argc;
1460         char **argv;
1461 {
1462         pthread_t t;
1463
1464         /* create a pipe to select */
1465         if(pipe(&fildes[0])) {
1466                 perror("select");
1467                 exit(1);
1468         }
1469
1470 #ifdef HAVE_PTHREAD_SETCONCURRENCY
1471         (void) pthread_setconcurrency(2);
1472 #else
1473 #ifdef HAVE_THR_SETCONCURRENCY
1474         /* Set Solaris LWP concurrency to 2 */
1475         thr_setconcurrency(2);
1476 #endif
1477 #endif
1478
1479 #if HAVE_PTHREADS < 6
1480         pthread_create(&t, pthread_attr_default, task, NULL);
1481 #else
1482         pthread_create(&t, NULL, task, NULL);
1483 #endif
1484
1485         /* make sure task runs first */
1486 #if HAVE_THR_YIELD
1487         thr_yield();
1488 #elif defined( HAVE_SCHED_YIELD )
1489         sched_yield();
1490 #elif defined( HAVE_PTHREAD_YIELD )
1491         pthread_yield();
1492 #endif
1493
1494         exit(2);
1495 }],
1496                                 [ol_cv_pthread_select_yields=no],
1497                                 [ol_cv_pthread_select_yields=yes],
1498                                 [ol_cv_pthread_select_yields=cross])])
1499
1500                                 if test $ol_cv_pthread_select_yields = cross ; then
1501                                         AC_MSG_ERROR([crossing compiling: use --with-yielding_select=yes|no|manual])
1502                                 fi
1503
1504                                 if test $ol_cv_pthread_select_yields = yes ; then
1505                                         ol_with_yielding_select=yes
1506                                 fi
1507                         fi
1508
1509                         dnl restore flags
1510                         CPPFLAGS="$save_CPPFLAGS"
1511                         LIBS="$save_LIBS"
1512                 else
1513                         AC_MSG_ERROR([could not locate usable POSIX Threads])
1514                 fi
1515         fi
1516
1517         if test $ol_with_threads = posix ; then
1518                 AC_MSG_ERROR([could not locate POSIX Threads])
1519         fi
1520 fi
1521
1522 if test $ol_with_threads = auto -o $ol_with_threads = yes \
1523         -o $ol_with_threads = mach ; then
1524
1525         dnl check for Mach CThreads
1526         AC_CHECK_HEADERS(mach/cthreads.h cthreads.h)
1527         if test $ac_cv_header_mach_cthreads_h = yes ; then
1528                 ol_with_threads=found
1529
1530                 dnl check for cthreads support in current $LIBS
1531                 AC_CHECK_FUNC(cthread_fork,[ol_link_threads=yes])
1532
1533                 if test $ol_link_threads = no ; then
1534                         dnl try -all_load
1535                         dnl this test needs work
1536                         AC_CACHE_CHECK([for cthread_fork with -all_load],
1537                                 [ol_cv_cthread_all_load], [
1538                                 dnl save the flags
1539                                 save_LIBS="$LIBS"
1540                                 LIBS="-all_load $LIBS"
1541                                 AC_TRY_LINK([#include <mach/cthreads.h>],[
1542                                         cthread_fork((void *)0, (void *)0);
1543                                         ], ol_cv_cthread_all_load=yes, ol_cv_cthread_all_load=no)
1544                                 dnl restore the LIBS
1545                                 LIBS="$save_LIBS"
1546                         ])
1547
1548                         if test $ol_cv_cthread_all_load = yes ; then
1549                                 LTHREAD_LIBS="$LTHREAD_LIBS -all_load"
1550                                 ol_link_threads=mach
1551                                 ol_with_threads=found
1552                         fi
1553                 fi
1554
1555         elif test $ac_cv_header_cthreads_h = yes ; then
1556                 dnl Hurd variant of Mach Cthreads
1557                 dnl uses <cthreads.h> and -lthreads
1558
1559                 ol_with_threads=found
1560  
1561                 dnl save the flags
1562                 save_LIBS="$LIBS"
1563                 LIBS="$LIBS -lthreads"
1564                 AC_CHECK_FUNC(cthread_fork,[ol_link_threads=yes])
1565                 LIBS="$save_LIBS"
1566
1567                 if test $ol_link_threads = yes ; then
1568                         LTHREAD_LIBS="-lthreads"
1569                         ol_link_threads=mach
1570                         ol_with_threads=found
1571                 else
1572                         AC_MSG_ERROR([could not link with Mach CThreads])
1573                 fi
1574
1575         elif test $ol_with_threads = mach ; then
1576                 AC_MSG_ERROR([could not locate Mach CThreads])
1577         fi
1578
1579         if test $ol_link_threads = mach ; then
1580                 AC_DEFINE(HAVE_MACH_CTHREADS,1,
1581                         [define if you have Mach Cthreads])
1582         elif test $ol_with_threads = found ; then
1583                 AC_MSG_ERROR([could not link with Mach CThreads])
1584         fi
1585 fi
1586
1587 if test $ol_with_threads = auto -o $ol_with_threads = yes \
1588         -o $ol_with_threads = pth ; then
1589
1590         AC_CHECK_HEADERS(pth.h)
1591
1592         if test $ac_cv_header_pth_h = yes ; then
1593                 AC_CHECK_LIB(pth, pth_version, [have_pth=yes], [have_pth=no])
1594
1595                 if test $have_pth = yes ; then
1596                         AC_DEFINE(HAVE_GNU_PTH,1,[if you have GNU Pth])
1597                         LTHREAD_LIBS="$LTHREAD_LIBS -lpth"
1598                         ol_link_threads=pth
1599                         ol_with_threads=found
1600
1601                         if test $ol_with_yielding_select = auto ; then
1602                                 ol_with_yielding_select=yes
1603                         fi
1604                 fi
1605         fi
1606 fi
1607
1608 if test $ol_with_threads = auto -o $ol_with_threads = yes \
1609         -o $ol_with_threads = lwp ; then
1610
1611         dnl check for SunOS5 LWP
1612         AC_CHECK_HEADERS(thread.h synch.h)
1613         if test $ac_cv_header_thread_h = yes -a $ac_cv_header_synch_h = yes ; then
1614                 AC_CHECK_LIB(thread, thr_create, [have_thr=yes], [have_thr=no])
1615
1616                 if test $have_thr = yes ; then
1617                         AC_DEFINE(HAVE_THR,1,
1618                                 [if you have Solaris LWP (thr) package])
1619                         LTHREAD_LIBS="$LTHREAD_LIBS -lthread"
1620                         ol_link_threads=thr
1621
1622                         if test $ol_with_yielding_select = auto ; then
1623                                 ol_with_yielding_select=yes
1624                         fi
1625
1626                         dnl Check for setconcurreny functions
1627                         AC_CHECK_FUNCS( \
1628                                 thr_setconcurrency \
1629                                 thr_getconcurrency \
1630                         )
1631                 fi
1632         fi
1633
1634         dnl check for SunOS4 LWP
1635         AC_CHECK_HEADERS(lwp/lwp.h)
1636         if test $ac_cv_header_lwp_lwp_h = yes ; then
1637                 AC_CHECK_LIB(lwp, lwp_create, [have_lwp=yes], [have_lwp=no])
1638
1639                 if test $have_lwp = yes ; then
1640                         AC_DEFINE(HAVE_LWP,1,
1641                                 [if you have SunOS LWP package])
1642                         LTHREAD_LIBS="$LTHREAD_LIBS -llwp"
1643                         ol_link_threads=lwp
1644
1645                         if test $ol_with_yielding_select = auto ; then
1646                                 ol_with_yielding_select=no
1647                         fi
1648                 fi
1649         fi
1650 fi
1651
1652 if test $ol_with_yielding_select = yes ; then
1653         AC_DEFINE(HAVE_YIELDING_SELECT,1,
1654                 [define if select implicitly yields])
1655 fi
1656
1657 if test $ol_with_threads = manual ; then
1658         dnl User thinks he can manually configure threads.
1659         ol_link_threads=yes
1660
1661         AC_MSG_WARN([thread defines and link options must be set manually])
1662
1663         AC_CHECK_HEADERS(pthread.h sched.h)
1664         AC_CHECK_FUNCS(sched_yield pthread_yield)
1665         OL_HEADER_LINUX_THREADS
1666
1667         AC_CHECK_HEADERS(mach/cthreads.h)
1668         AC_CHECK_HEADERS(lwp/lwp.h)
1669         AC_CHECK_HEADERS(thread.h synch.h)
1670 fi
1671
1672 if test $ol_link_threads != no -a $ol_link_threads != nt ; then  
1673         dnl needed to get reentrant/threadsafe versions
1674         dnl
1675         AC_DEFINE(REENTRANT,1)
1676         AC_DEFINE(_REENTRANT,1)
1677         AC_DEFINE(THREAD_SAFE,1)
1678         AC_DEFINE(_THREAD_SAFE,1)
1679         AC_DEFINE(THREADSAFE,1)
1680         AC_DEFINE(_THREADSAFE,1)
1681         AC_DEFINE(_SGI_MP_SOURCE,1)
1682
1683         dnl The errno declaration may dependent upon _REENTRANT.
1684         dnl If it does, we must link with thread support.
1685         AC_CACHE_CHECK([for thread specific errno],
1686                 [ol_cv_errno_thread_specific], [
1687                 AC_TRY_LINK([#include <errno.h>], [errno = 0;],
1688                         [ol_cv_errno_thread_specific=yes],
1689                         [ol_cv_errno_thread_specific=no])
1690         ])
1691
1692         dnl The h_errno declaration may dependent upon _REENTRANT.
1693         dnl If it does, we must link with thread support.
1694         AC_CACHE_CHECK([for thread specific h_errno],
1695                 [ol_cv_h_errno_thread_specific], [
1696                 AC_TRY_LINK([#include <netdb.h>], [h_errno = 0;],
1697                         [ol_cv_h_errno_thread_specific=yes],
1698                         [ol_cv_h_errno_thread_specific=no])
1699         ])
1700
1701         if test $ol_cv_errno_thread_specific != yes \
1702                 -o $ol_cv_h_errno_thread_specific != yes ; then
1703                 LIBS="$LTHREAD_LIBS $LIBS"
1704                 LTHREAD_LIBS=""
1705         fi
1706
1707 dnl When in thread environment, use 
1708 dnl             #if defined( HAVE_REENTRANT_FUNCTIONS ) || defined( HAVE_FUNC_R )
1709 dnl                     func_r(...);
1710 dnl             #else
1711 dnl             #       if defined( HAVE_THREADS ) 
1712 dnl                             /* lock */
1713 dnl             #       endif
1714 dnl                             func(...);
1715 dnl             #       if defined( HAVE_THREADS ) 
1716 dnl                             /* unlock */
1717 dnl             #       endif
1718 dnl             #endif
1719 dnl
1720 dnl HAVE_REENTRANT_FUNCTIONS is derived from:
1721 dnl             _POSIX_REENTRANT_FUNCTIONS
1722 dnl             _POSIX_THREAD_SAFE_FUNCTIONS
1723 dnl             _POSIX_THREADSAFE_FUNCTIONS
1724 dnl
1725 dnl             and is currently defined in <ldap_pvt_thread.h>
1726 dnl
1727 dnl HAVE_THREADS is defined by <ldap_pvt_thread.h> iff -UNO_THREADS
1728 dnl 
1729 dnl libldap/*.c should only include <ldap_pvt_thread.h> iff
1730 dnl LDAP_R_COMPILE is defined.  ie:
1731 dnl             #ifdef LDAP_R_COMPILE
1732 dnl             #       include <ldap_pvt_thread.h>
1733 dnl             #endif
1734 dnl
1735 dnl LDAP_R_COMPILE is defined by libldap_r/Makefile.in
1736 dnl specifically for compiling the threadsafe version of
1737 dnl     the ldap library (-lldap_r).
1738 dnl             
1739 dnl     dnl check for reentrant/threadsafe functions
1740 dnl     dnl
1741 dnl     dnl note: these should only be used when linking
1742 dnl     dnl             with $LTHREAD_LIBS
1743 dnl     dnl
1744 dnl     save_CPPFLAGS="$CPPFLAGS"
1745 dnl     save_LIBS="$LIBS"
1746 dnl     LIBS="$LTHREAD_LIBS $LIBS"
1747 dnl     AC_CHECK_FUNCS( \
1748 dnl             gmtime_r \
1749 dnl             gethostbyaddr_r gethostbyname_r \
1750 dnl             feof_unlocked unlocked_feof \
1751 dnl             putc_unlocked unlocked_putc \
1752 dnl             flockfile ftrylockfile \
1753 dnl     )
1754 dnl     CPPFLAGS="$save_CPPFLAGS"
1755 dnl     LIBS="$save_LIBS"
1756 fi  
1757
1758 if test $ol_link_threads = no ; then
1759         if test $ol_with_threads = yes ; then
1760                 AC_MSG_ERROR([no suitable thread support])
1761         fi
1762
1763         if test $ol_with_threads = auto ; then
1764                 AC_MSG_WARN([no suitable thread support, disabling threads])
1765                 ol_with_threads=no
1766         fi
1767
1768         AC_DEFINE(NO_THREADS,1,
1769                 [define if you have (or want) no threads])
1770         LTHREAD_LIBS=""
1771 fi
1772
1773 if test $ol_link_threads != no ; then
1774         AC_DEFINE(LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE,1)
1775 fi
1776
1777 dnl ----------------------------------------------------------------
1778 dnl Tests for reentrant functions necessary to build -lldap_r
1779 AC_CHECK_FUNCS(         \
1780         ctime_r                 \
1781         gethostbyname_r gethostbyaddr_r \
1782 )
1783
1784 if test "$ac_cv_func_ctime_r" = no ; then
1785         ol_cv_func_ctime_r_nargs=0
1786 else
1787         OL_FUNC_CTIME_R_NARGS
1788 dnl     OL_FUNC_CTIME_R_TYPE
1789 fi
1790
1791 if test "$ac_cv_func_gethostbyname_r" = yes ; then
1792         OL_FUNC_GETHOSTBYNAME_R_NARGS
1793 else
1794         ol_cv_func_gethostbyname_r_nargs=0
1795 fi
1796  
1797 if test "$ac_cv_func_gethostbyaddr_r" = yes ; then
1798         OL_FUNC_GETHOSTBYADDR_R_NARGS
1799 else
1800         ol_cv_func_gethostbyaddr_r_nargs=0
1801 fi
1802
1803 dnl ----------------------------------------------------------------
1804 ol_link_ldbm=no 
1805
1806 if test $ol_with_ldbm_api = auto \
1807         -o $ol_with_ldbm_api = berkeley \
1808         -o $ol_with_ldbm_api = bcompat ; then
1809
1810         if test $ol_with_ldbm_api = bcompat; then \
1811                 OL_BERKELEY_COMPAT_DB
1812         else
1813                 OL_BERKELEY_DB
1814         fi
1815
1816         if test $ol_cv_berkeley_db != no ; then
1817                 AC_DEFINE(HAVE_BERKELEY_DB,1,
1818                         [define this if Berkeley DB is available])
1819
1820                 ol_link_ldbm=berkeley
1821                 ol_with_ldbm_api=berkeley
1822
1823                 if test $ol_with_ldbm_type = hash ; then
1824                         AC_DEFINE(LDBM_USE_DBHASH,1,
1825                                 [define this to use DBHASH w/ LDBM backend])
1826                 else
1827                         AC_DEFINE(LDBM_USE_DBBTREE,1,
1828                                 [define this to use DBBTREE w/ LDBM backend])
1829                 fi
1830
1831                 dnl $ol_cv_lib_db should be yes or -ldb
1832                 dnl (it could be no, but that would be an error
1833                 if test $ol_cv_lib_db != yes ; then
1834                         LDBM_LIBS="$LDBM_LIBS $ol_cv_lib_db"
1835                 fi
1836         fi
1837 fi
1838
1839 if test $ol_enable_bdb != no -o $ol_enable_hdb != no; then
1840         if test $ol_link_ldbm != berkeley ; then
1841                 AC_MSG_ERROR(BDB/HDB: BerkeleyDB not available)
1842         else
1843                 OL_BDB_COMPAT
1844
1845                 if test $ol_cv_bdb_compat != yes ; then
1846                         AC_MSG_ERROR([BDB/HDB: BerkeleyDB version incompatible])
1847                 fi
1848         fi
1849 fi
1850
1851 if test $ol_link_ldbm = no -a $ol_with_ldbm_type = btree ; then
1852         AC_MSG_WARN([Could not find LDBM with BTREE support])
1853         ol_with_ldbm_api=none
1854 fi
1855
1856 if test $ol_with_ldbm_api = auto -o $ol_with_ldbm_api = mdbm ; then
1857         OL_MDBM
1858
1859         if test $ol_cv_mdbm = yes ; then
1860                 ol_link_ldbm=mdbm
1861                 ol_with_ldbm_api=mdbm
1862                 if test $ol_cv_lib_mdbm != yes ; then
1863                         LDBM_LIBS="$LDBM_LIBS $ol_cv_lib_mdbm"
1864                 fi
1865         fi
1866 fi
1867
1868 if test $ol_with_ldbm_api = auto -o $ol_with_ldbm_api = gdbm ; then
1869         OL_GDBM
1870
1871         if test $ol_cv_gdbm = yes ; then
1872                 ol_link_ldbm=gdbm
1873                 ol_with_ldbm_api=gdbm
1874
1875                 if test $ol_cv_lib_gdbm != yes ; then
1876                         LDBM_LIBS="$LDBM_LIBS $ol_cv_lib_gdbm"
1877                 fi
1878         fi
1879 fi
1880
1881 if test $ol_with_ldbm_api = ndbm ; then
1882         OL_NDBM
1883
1884         if test $ol_cv_ndbm = yes ; then
1885                 ol_link_ldbm=ndbm
1886                 ol_with_ldbm_api=ndbm
1887
1888                 if test $ol_cv_lib_ndbm != yes ; then
1889                         LDBM_LIBS="$LDBM_LIBS $ol_cv_lib_ndbm"
1890                 fi
1891         fi
1892 fi
1893
1894 if test $ol_link_ldbm = no -a $ol_enable_ldbm != no ; then
1895         AC_MSG_WARN([could not find suitable LDBM backend])
1896         if test $ol_enable_ldbm = yes ; then
1897                 AC_MSG_ERROR([select appropriate LDBM options or disable])
1898         fi
1899
1900         AC_MSG_WARN(disabling LDBM)
1901         ol_enable_ldbm=no
1902 fi
1903
1904 if test $ol_enable_bdb = yes -o \
1905         $ol_enable_hdb = yes -o \
1906         $ol_enable_ldbm = yes ; then
1907         SLAPD_LIBS="$SLAPD_LIBS \$(LDBM_LIBS)"
1908 fi
1909
1910 dnl ----------------------------------------------------------------
1911
1912 if test $ol_enable_dynamic = yes -a $enable_shared = yes ; then
1913         BUILD_LIBS_DYNAMIC=shared
1914         AC_DEFINE(LDAP_LIBS_DYNAMIC, 1, [define if LDAP libs are dynamic])
1915         LTSTATIC=""
1916 else
1917         BUILD_LIBS_DYNAMIC=static
1918         LTSTATIC="-static"
1919 fi
1920 AC_SUBST(LTSTATIC)dnl
1921
1922 dnl ----------------------------------------------------------------
1923 if test $ol_enable_wrappers != no ; then
1924         AC_CHECK_HEADERS(tcpd.h,[
1925                 AC_MSG_CHECKING([for TCP wrappers library])
1926                 save_LIBS="$LIBS"
1927                 LIBS="$LIBS -lwrap"
1928                 AC_TRY_LINK([
1929 #include <tcpd.h>
1930 int allow_severity = 0;
1931 int deny_severity  = 0;
1932
1933 struct request_info *req;
1934                 ],[
1935 hosts_access(req)
1936                 ],[AC_MSG_RESULT([-lwrap])
1937                 have_wrappers=yes
1938                 LIBS="$save_LIBS"],[
1939                 dnl try with -lnsl
1940                 LIBS="$LIBS -lnsl"
1941                 AC_TRY_LINK([
1942 #include <tcpd.h>
1943 int allow_severity = 0;
1944 int deny_severity  = 0;
1945
1946 struct request_info *req;
1947                 ],[
1948 hosts_access(req)
1949                 ],[AC_MSG_RESULT([-lwrap -lnsl])
1950                 have_wrappers=yes
1951                 LIBS="$save_LIBS -lnsl"],[
1952                 AC_MSG_RESULT(no)
1953                 have_wrappers=no
1954                 LIBS=$save_LIBS])],[
1955                 have_wrappers=no])],[have_wrappers=no])
1956
1957         if test $have_wrappers = yes ; then
1958                 AC_DEFINE(HAVE_TCPD,1, [define if you have -lwrap])
1959                 WRAP_LIBS="-lwrap"
1960         elif test $ol_enable_wrappers = yes ; then
1961                 AC_MSG_ERROR([could not find TCP wrappers, select apppropriate options or disable])
1962         else
1963                 AC_MSG_WARN([could not find TCP wrappers, support disabled])
1964                 WRAP_LIBS=""
1965         fi
1966 fi
1967
1968 dnl ----------------------------------------------------------------
1969 if test $ol_enable_syslog != no ; then
1970         AC_CHECK_FUNC(openlog)
1971         if test $ac_cv_func_openlog = no -a $ol_enable_syslog = yes; then
1972                 AC_MSG_ERROR(could not find syslog, select appropriate options or disable)
1973         fi
1974         ol_enable_syslog=$ac_cv_func_openlog
1975 fi
1976
1977 dnl ----------------------------------------------------------------
1978 dnl dmalloc support (deprecated in favor of -DCSRIMALLOC support)
1979 dnl if test $ol_enable_dmalloc != no ; then
1980 dnl     AC_CHECK_HEADERS(dmalloc.h)
1981 dnl     AC_CHECK_LIB(dmalloc, dmalloc_shutdown)
1982 dnl fi
1983
1984 dnl ----------------------------------------------------------------
1985 dnl SQL
1986 ol_link_sql=no
1987 if test $ol_enable_sql != no ; then
1988         AC_CHECK_HEADERS(sql.h sqlext.h,[],[
1989                 AC_MSG_ERROR([could not locate SQL headers])
1990         ])
1991
1992         AC_CHECK_LIB(iodbc,SQLDriverConnect,[have_iodbc=yes],[have_iodbc=no])
1993         if test $have_iodbc = yes ; then
1994                 ol_link_sql="-liodbc"
1995         else
1996                 AC_CHECK_LIB(odbc,SQLDriverConnect,[have_odbc=yes],[have_odbc=no])
1997                 if test $have_odbc = yes ; then
1998                         ol_link_sql="-lodbc"
1999                 fi
2000         fi
2001
2002         if test $ol_link_sql != no ; then
2003                 SLAPD_SQL_LIBS="$ol_link_sql"
2004
2005         elif test $ol_enable_sql != auto ; then
2006                 AC_MSG_ERROR([could not locate suitable ODBC library])
2007         fi
2008 fi
2009
2010 dnl ----------------------------------------------------------------
2011 dnl
2012 dnl Check for Cyrus SASL
2013 dnl
2014 ol_link_sasl=no
2015 ol_link_spasswd=no
2016 if test $ol_with_cyrus_sasl != no ; then
2017         AC_CHECK_HEADERS(sasl/sasl.h sasl.h)
2018
2019         if test $ac_cv_header_sasl_sasl_h = yes -o $ac_cv_header_sasl_h = yes; then
2020                 AC_CHECK_LIB(sasl2, sasl_client_init,
2021                         [ol_link_sasl="-lsasl2"],
2022                         [AC_CHECK_LIB(sasl, sasl_client_init,
2023                                 [ol_link_sasl="-lsasl"])])
2024         fi
2025
2026         if test $ol_link_sasl = no ; then
2027                 if test $ol_with_cyrus_sasl != auto ; then
2028                         AC_MSG_ERROR([Could not locate Cyrus SASL])
2029                 else
2030                         AC_MSG_WARN([Could not locate Cyrus SASL])
2031                         AC_MSG_WARN([SASL authentication not supported!])
2032                         if test $ol_link_tls = no ; then
2033                                 AC_MSG_WARN([Strong authentication not supported!])
2034                         fi
2035                 fi
2036         else
2037                 OL_SASL_COMPAT
2038                 if test $ol_cv_sasl_compat = no ; then
2039                         ol_link_sasl=no
2040                         AC_MSG_ERROR([Cyrus SASL library located but is incompatible])
2041                 fi
2042
2043                 AC_DEFINE(HAVE_CYRUS_SASL,1,[define if you have Cyrus SASL])
2044                 SASL_LIBS="$ol_link_sasl"
2045                 if test $ol_enable_spasswd != no ; then
2046                         ol_link_spasswd=yes
2047                 fi
2048
2049                 ac_save_LIBS="$LIBS"
2050                 LIBS="$LIBS $ol_link_sasl"
2051                 AC_CHECK_FUNC(sasl_version, [AC_DEFINE(HAVE_SASL_VERSION,1,
2052                         [define if your SASL library has sasl_version()])])
2053                 LIBS="$ac_save_LIBS"
2054         fi
2055
2056 else
2057         AC_MSG_WARN([SASL authentication not supported!])
2058         if test $ol_link_tls = no ; then
2059                 AC_MSG_WARN([Strong authentication not supported!])
2060         fi
2061 fi
2062
2063 dnl ----------------------------------------------------------------
2064 dnl Check for entropy sources
2065 if test $cross_compiling != yes -a "$ac_cv_mingw32" != yes ; then
2066         dev=no
2067         if test -r /dev/urandom ; then
2068                 dev="/dev/urandom";
2069         elif test -r /idev/urandom ; then
2070                 dev="/idev/urandom";
2071         elif test -r /dev/srandom ; then
2072                 dev="/dev/srandom";
2073         elif test -r /dev/random ; then
2074                 dev="/dev/random";
2075         elif test -r /idev/random ; then
2076                 dev="/idev/random";
2077         fi
2078
2079         if test $dev != no ; then
2080                 AC_DEFINE_UNQUOTED(URANDOM_DEVICE,"$dev",[set to urandom device])
2081         fi
2082 fi
2083
2084 dnl ----------------------------------------------------------------
2085 dnl
2086 dnl Check for fetch URL support
2087 dnl             should be extended to support other fetch URL APIs
2088 dnl
2089 ol_link_fetch=no
2090 if test $ol_with_fetch != no ; then
2091         OL_LIB_FETCH
2092
2093         if test $ol_cv_lib_fetch != no ; then
2094                 LUTIL_LIBS="$LUTIL_LIBS $ol_link_fetch"
2095                 ol_link_fetch=freebsd
2096
2097         elif test $ol_with_fetch != auto ; then
2098                 AC_MSG_ERROR(no suitable API for --with-fetch=$ol_with_fetch)
2099         fi 
2100 fi
2101
2102 dnl ----------------------------------------------------------------
2103 dnl FreeBSD (and others) have crypt(3) in -lcrypt
2104 if test $ol_enable_crypt != no ; then
2105         save_LIBS="$LIBS"
2106         LIBS="$TLS_LIBS $LIBS"
2107
2108         AC_CHECK_FUNC(crypt, [have_crypt=yes], [
2109                 LIBS="$save_LIBS"
2110                 AC_CHECK_LIB(crypt, crypt, [LUTIL_LIBS="$LUTIL_LIBS -lcrypt"
2111                         have_crypt=yes], [have_crypt=no])])
2112
2113         LIBS="$save_LIBS"
2114
2115         if test $have_crypt = yes ; then
2116                 AC_DEFINE(HAVE_CRYPT,1, [define if crypt(3) is available])
2117         else
2118                 AC_MSG_WARN([could not find crypt])
2119                 if test $ol_enable_crypt = yes ; then
2120                         AC_MSG_ERROR([could not find crypt, select appropriate options or disable])
2121                 fi
2122
2123                 AC_MSG_WARN([disabling crypt support])
2124                 ol_enable_crypt=no
2125         fi
2126 fi
2127
2128 dnl ----------------------------------------------------------------
2129 dnl FreeBSD (and others) have setproctitle(3) in -lutil
2130 if test $ol_enable_proctitle != no ; then
2131         AC_CHECK_FUNC(setproctitle,     [have_setproctitle=yes], [
2132                 AC_CHECK_LIB(util, setproctitle,
2133                         [have_setproctitle=yes
2134                         LUTIL_LIBS="$LUTIL_LIBS -lutil"],
2135                         [have_setproctitle=no
2136                         LIBOBJS="$LIBOBJS setproctitle.o"
2137                         LIBSRCS="$LIBSRCS setproctitle.c"])])
2138
2139         if test $have_setproctitle = yes ; then
2140                 AC_DEFINE(HAVE_SETPROCTITLE,1,
2141                         [define if setproctitle(3) is available])
2142         fi
2143 fi
2144
2145 dnl ----------------------------------------------------------------
2146 dnl Check for SLPv2 Compliant API Library
2147 if test $ol_enable_slp != no ; then
2148         AC_CHECK_HEADERS( slp.h )
2149
2150         if test $ac_cv_header_slp_h = yes ; then
2151                 AC_CHECK_LIB(slp, SLPOpen, [have_slp=yes], [have_slp=no])
2152                 if test $have_slp = yes ; then
2153                         AC_DEFINE(HAVE_SLP, 1, [define if you have -lslp])
2154                         SLAPD_SLP_LIBS=-lslp
2155                 fi
2156
2157         elif test $ol_enable_slp = yes ; then
2158                 AC_MSG_ERROR([SLP not found])
2159         fi
2160 fi
2161
2162 dnl ----------------------------------------------------------------
2163 dnl Checks for typedefs, structures, and compiler characteristics.
2164
2165 dnl Checks for long long
2166 AC_CACHE_CHECK([long long], ol_cv_type_long_long, [
2167         AC_TRY_COMPILE([], [long long x;],
2168                 [ol_cv_type_long_long=yes],
2169                 [ol_cv_type_long_long=no])])
2170 if test $ol_cv_type_long_long = yes; then
2171         AC_DEFINE(HAVE_LONG_LONG, 1, [define if you have 'long long'])
2172 fi
2173
2174 AC_TYPE_MODE_T
2175 AC_TYPE_OFF_T
2176 AC_TYPE_PID_T
2177 AM_TYPE_PTRDIFF_T
2178 AC_TYPE_SIGNAL
2179 AC_TYPE_SIZE_T
2180
2181 AC_CHECK_TYPE(ssize_t, [signed int])
2182 AC_CHECK_TYPE(caddr_t,  [char *])
2183
2184 OL_TYPE_SOCKLEN_T
2185 AC_STRUCT_ST_BLKSIZE
2186 AC_HEADER_TIME
2187 AC_STRUCT_TM
2188 AC_TYPE_UID_T
2189 OL_TYPE_SIG_ATOMIC_T
2190
2191 dnl AC_TYPE_GETGROUPS
2192
2193 OL_STRUCT_PASSWD_PW_GECOS
2194 OL_STRUCT_PASSWD_PW_PASSWD
2195
2196 OL_C_UPPER_LOWER
2197 AC_C_CONST
2198 OL_C_VOLATILE
2199
2200 if test $cross_compiling = yes ; then
2201         AC_MSG_WARN([Crossing compiling... all bets are off!])
2202         AC_DEFINE(CROSS_COMPILING, 1, [define if cross compiling])
2203 else
2204         AC_C_BIGENDIAN
2205 fi
2206
2207 AC_COMPILE_CHECK_SIZEOF(short) 
2208 AC_COMPILE_CHECK_SIZEOF(int) 
2209 AC_COMPILE_CHECK_SIZEOF(long)
2210 AC_COMPILE_CHECK_SIZEOF(wchar_t)
2211
2212 if test "$ac_cv_sizeof_int" -lt 4 ; then
2213         AC_MSG_WARN([OpenLDAP requires 'int' to be 32 bits or greater.])
2214
2215         AC_DEFINE(LBER_INT_T,long)
2216 else
2217         AC_DEFINE(LBER_INT_T,int)
2218 fi
2219
2220 AC_DEFINE(LBER_LEN_T,long)
2221 AC_DEFINE(LBER_SOCKET_T,int)
2222 AC_DEFINE(LBER_TAG_T,long)
2223
2224 dnl ----------------------------------------------------------------
2225 dnl Checks for library functions.
2226 AC_FUNC_MEMCMP
2227
2228 if test $ac_cv_func_memcmp_clean = no ; then
2229         AC_DEFINE(NEED_MEMCMP_REPLACEMENT,1,
2230                 [define if memcmp is not 8-bit clean or is otherwise broken])
2231 fi
2232
2233 dnl AM_FUNC_MKTIME dnl checks for sys/time.h and unistd.h
2234 AC_FUNC_STRFTIME
2235 dnl AM_FUNC_STRTOD
2236
2237 OL_FUNC_INET_ATON
2238
2239 dnl Check for NT specific routines
2240 AC_CHECK_FUNC(_spawnlp, AC_DEFINE(HAVE_SPAWNLP,1,[if you have spawnlp()]))
2241
2242 AC_CHECK_FUNC(_snprintf, [ac_cv_func_snprintf=yes
2243         AC_DEFINE(snprintf, _snprintf, [define to snprintf routine])
2244 ])
2245
2246 AC_CHECK_FUNC(_vsnprintf, [ac_cv_func_vsnprintf=yes
2247         AC_DEFINE(vsnprintf, _vsnprintf, [define to vsnprintf routine])
2248 ])
2249
2250 AC_FUNC_VPRINTF
2251
2252 if test $ac_cv_func_vprintf = yes ; then
2253         dnl check for vsnprintf
2254         AC_CHECK_FUNCS(snprintf vsnprintf)
2255 fi
2256
2257 AC_CHECK_FUNCS(         \
2258         bcopy                   \
2259         closesocket             \
2260         chroot                  \
2261         endgrent                \
2262         endpwent                \
2263         fcntl                   \
2264         flock                   \
2265         fstat                   \
2266         getdtablesize   \
2267         getgrgid                \
2268         gethostname             \
2269         getpass                 \
2270         getpassphrase   \
2271         getpwuid                \
2272         getpwnam                \
2273         getspnam                \
2274         gettimeofday    \
2275         initgroups              \
2276         lockf                   \
2277         memcpy                  \
2278         memmove                 \
2279         mkstemp                 \
2280         mktemp                  \
2281         pipe                    \
2282         read                    \
2283         recv                    \
2284         recvfrom                \
2285         setpwfile               \
2286         setgid                  \
2287         setegid                 \
2288         setsid                  \
2289         setuid                  \
2290         seteuid                 \
2291         signal                  \
2292         strdup                  \
2293         strerror                \
2294         strpbrk                 \
2295         strrchr                 \
2296         strsep                  \
2297         strstr                  \
2298         strtol                  \
2299         strtoul                 \
2300         strtoq                  \
2301         strtouq                 \
2302         strtoll                 \
2303         strspn                  \
2304         sysconf                 \
2305         usleep                  \
2306         waitpid                 \
2307         wait4                   \
2308         write                   \
2309         send                    \
2310         sendmsg                 \
2311         sendto                  \
2312 )
2313
2314 dnl We actually may need to replace more than this.
2315 AC_REPLACE_FUNCS(getopt getpeereid)
2316
2317 if test "$ac_cv_func_getopt" != yes; then
2318         LIBSRCS="$LIBSRCS getopt.c"
2319 fi
2320 if test "$ac_cv_func_getpeereid" != yes; then
2321         OL_MSGHDR_MSG_ACCRIGHTS
2322         LIBSRCS="$LIBSRCS getpeereid.c"
2323 fi
2324 if test "$ac_cv_func_snprintf" != yes -o "$ac_cv_func_vsnprintf" != yes; then
2325         if test "$ac_cv_func_snprintf" != yes; then
2326                 AC_DEFINE(snprintf, ber_pvt_snprintf, [define to snprintf routine])
2327         fi
2328         if test "$ac_cv_func_vsnprintf" != yes; then
2329                 AC_DEFINE(vsnprintf, ber_pvt_vsnprintf, [define to snprintf routine])
2330         fi
2331 fi
2332
2333 dnl ----------------------------------------------------------------
2334 # Check Configuration
2335 OL_SYS_ERRLIST
2336
2337 dnl ----------------------------------------------------------------
2338 dnl Sort out defines
2339
2340 if test "$ol_enable_slapi" != no ; then
2341         dnl This check is done also if --enable-modules is used;
2342         dnl it is duplicated here, 'cause it'd be cached anyway
2343         AC_CHECK_HEADERS(ltdl.h)
2344
2345         if test $ac_cv_header_ltdl_h != yes ; then
2346                 AC_MSG_ERROR([could not locate <ltdl.h>])
2347         fi
2348         AC_CHECK_LIB(ltdl, lt_dlinit, [
2349                 SLAPI_LIBS=-lltdl
2350                 LIBSLAPI=libslapi.a
2351                 LIBSLAPITOOLS=../libslapi.a
2352                 AC_DEFINE(HAVE_LIBLTDL,1,[define if you have libtool -ltdl])
2353         ],[AC_MSG_ERROR([could not locate libtool -lltdl])])
2354
2355         AC_DEFINE(LDAP_SLAPI,1, [define this to add SLAPI code])
2356 fi
2357
2358 if test "$ol_enable_debug" != no ; then
2359         AC_DEFINE(LDAP_DEBUG,1,
2360                 [define this to add debugging code])
2361 fi
2362 if test "$ol_enable_syslog" = yes ; then
2363         AC_DEFINE(LDAP_SYSLOG,1,
2364                 [define this to add syslog code])
2365 fi
2366 if test "$ol_link_kbind" != no ; then
2367         AC_DEFINE(LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND,LDAP_VENDOR_VERSION)
2368 fi
2369 if test "$ol_enable_proctitle" != no ; then
2370         AC_DEFINE(LDAP_PROCTITLE,1,
2371                 [define this for LDAP process title support])
2372 fi
2373 if test "$ol_enable_referrals" != no ; then
2374         AC_DEFINE(LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS,LDAP_VENDOR_VERSION)
2375 fi
2376 if test "$ol_enable_local" != no; then
2377         AC_DEFINE(LDAP_PF_LOCAL,1,[define to support PF_LOCAL])
2378 fi
2379 if test "$ol_link_ipv6" != no; then
2380         AC_DEFINE(LDAP_PF_INET6,1,[define to support PF_INET6])
2381 fi
2382 if test "$ol_enable_cleartext" != no ; then
2383         AC_DEFINE(SLAPD_CLEARTEXT,1,[define to support cleartext passwords])
2384 fi
2385 if test "$ol_enable_crypt" != no ; then
2386         AC_DEFINE(SLAPD_CRYPT,1,[define to support crypt(3) passwords])
2387 fi
2388 if test "$ol_link_spasswd" != no ; then
2389         AC_DEFINE(SLAPD_SPASSWD,1,[define to support SASL passwords])
2390 fi
2391 if test "$ol_enable_multimaster" != no ; then
2392         AC_DEFINE(SLAPD_MULTIMASTER,1,[define to support multimaster replication])
2393 fi
2394 if test "$ol_enable_rlookups" != no ; then
2395         AC_DEFINE(SLAPD_RLOOKUPS,1,[define to support reverse lookups])
2396 fi
2397 if test "$ol_enable_aci" != no ; then
2398         AC_DEFINE(SLAPD_ACI_ENABLED,1,[define to support per-object ACIs])
2399 fi
2400
2401 if test "$ol_link_modules" != no ; then
2402         AC_DEFINE(SLAPD_MODULES,1,[define to support modules])
2403         BUILD_SLAPD=yes
2404         SLAPD_MODULES_LDFLAGS="-dlopen self"
2405 fi
2406
2407 AC_DEFINE(SLAPD_MOD_STATIC,1,[statically linked module])
2408 AC_DEFINE(SLAPD_MOD_DYNAMIC,2,[dynamically linked module])
2409
2410 if test "$ol_enable_bdb" != no ; then
2411         BUILD_SLAPD=yes
2412         BUILD_BDB=$ol_enable_bdb
2413         if test "$ol_enable_bdb" = mod ; then
2414                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-bdb"
2415                 MFLAG=SLAPD_MOD_DYNAMIC
2416         else
2417                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-bdb"
2418                 MFLAG=SLAPD_MOD_STATIC
2419         fi
2420         AC_DEFINE_UNQUOTED(SLAPD_BDB,$MFLAG,[define to support BDB backend])
2421 fi
2422
2423 if test "$ol_enable_dnssrv" != no ; then
2424         BUILD_SLAPD=yes
2425         BUILD_DNSSRV=$ol_enable_dnssrv
2426         if test "$ol_enable_dnssrv" = mod ; then
2427                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-dnssrv"
2428                 MFLAG=SLAPD_MOD_DYNAMIC
2429         else
2430                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-dnssrv"
2431                 MFLAG=SLAPD_MOD_STATIC
2432         fi
2433         AC_DEFINE_UNQUOTED(SLAPD_DNSSRV,$MFLAG,[define to support DNS SRV backend])
2434 fi
2435
2436 if test "$ol_enable_hdb" != no ; then
2437         BUILD_SLAPD=yes
2438         BUILD_HDB=$ol_enable_hdb
2439         if test "$ol_enable_hdb" = mod ; then
2440                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-hdb"
2441                 MFLAG=SLAPD_MOD_DYNAMIC
2442         else
2443                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-hdb"
2444                 MFLAG=SLAPD_MOD_STATIC
2445         fi
2446         AC_DEFINE_UNQUOTED(SLAPD_HDB,$MFLAG,[define to support HDB backend])
2447 fi
2448
2449 if test "$ol_enable_ldap" != no ; then
2450         BUILD_SLAPD=yes
2451         BUILD_LDAP=$ol_enable_ldap
2452         if test "$ol_enable_ldap" = mod ; then
2453                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-ldap"
2454                 MFLAG=SLAPD_MOD_DYNAMIC
2455         else
2456                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-ldap"
2457                 MFLAG=SLAPD_MOD_STATIC
2458         fi
2459         AC_DEFINE_UNQUOTED(SLAPD_LDAP,$MFLAG,[define to support LDAP backend])
2460 fi
2461
2462 if test "$ol_link_ldbm" != no -a $ol_enable_ldbm != no; then
2463         BUILD_SLAPD=yes
2464         BUILD_LDBM=$ol_enable_ldbm
2465         if test "$ol_enable_ldbm" = mod ; then
2466                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-ldbm"
2467                 MFLAG=SLAPD_MOD_DYNAMIC
2468         else
2469                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-ldbm"
2470                 MFLAG=SLAPD_MOD_STATIC
2471         fi
2472         AC_DEFINE_UNQUOTED(SLAPD_LDBM,$MFLAG,[define to support LDBM backend])
2473 fi
2474
2475 if test "$ol_enable_meta" != no ; then
2476         BUILD_SLAPD=yes
2477         BUILD_META=$ol_enable_meta
2478         BUILD_REWRITE=yes
2479         if test "$ol_enable_meta" = mod ; then
2480                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-meta"
2481                 MFLAG=SLAPD_MOD_DYNAMIC
2482         else
2483                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-meta"
2484                 MFLAG=SLAPD_MOD_STATIC
2485         fi
2486         AC_DEFINE_UNQUOTED(SLAPD_META,$MFLAG,[define to support LDAP Metadirectory backend])
2487 fi
2488
2489 if test "$ol_enable_monitor" != no ; then
2490         BUILD_SLAPD=yes
2491         BUILD_MONITOR=$ol_enable_monitor
2492         if test "$ol_enable_monitor" = mod ; then
2493                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-monitor"
2494                 MFLAG=SLAPD_MOD_DYNAMIC
2495         else
2496                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-monitor"
2497                 MFLAG=SLAPD_MOD_STATIC
2498         fi
2499         AC_DEFINE_UNQUOTED(SLAPD_MONITOR,$MFLAG,[define to support cn=Monitor backend])
2500 fi
2501
2502 if test "$ol_enable_null" != no ; then
2503         BUILD_SLAPD=yes
2504         BUILD_NULL=$ol_enable_null
2505         if test "$ol_enable_null" = mod ; then
2506                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-null"
2507                 MFLAG=SLAPD_MOD_DYNAMIC
2508         else
2509                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-null"
2510                 MFLAG=SLAPD_MOD_STATIC
2511         fi
2512         AC_DEFINE_UNQUOTED(SLAPD_NULL,$MFLAG,[define to support NULL backend])
2513 fi
2514
2515 if test "$ol_enable_passwd" != no ; then
2516         BUILD_SLAPD=yes
2517         BUILD_PASSWD=$ol_enable_passwd
2518         if test "$ol_enable_passwd" = mod ; then
2519                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-passwd"
2520                 MFLAG=SLAPD_MOD_DYNAMIC
2521         else
2522                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-passwd"
2523                 MFLAG=SLAPD_MOD_STATIC
2524         fi
2525         AC_DEFINE_UNQUOTED(SLAPD_PASSWD,$MFLAG,[define to support PASSWD backend])
2526 fi
2527
2528 if test "$ol_link_perl" != no ; then
2529         BUILD_SLAPD=yes
2530         BUILD_PERL=$ol_enable_perl
2531         if test "$ol_enable_perl" = mod ; then
2532                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-perl"
2533                 MFLAG=SLAPD_MOD_DYNAMIC
2534         else
2535                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-perl"
2536                 MFLAG=SLAPD_MOD_STATIC
2537         fi
2538         AC_DEFINE_UNQUOTED(SLAPD_PERL,$MFLAG,[define to support PERL backend])
2539 fi
2540
2541 if test "$ol_enable_shell" != no ; then
2542         if test "$ol_link_thread" != no ; then
2543                 AC_MSG_WARN([Use of --without-threads is recommended with back-shell])
2544         fi
2545         BUILD_SLAPD=yes
2546         BUILD_SHELL=$ol_enable_shell
2547         if test "$ol_enable_shell" = mod ; then
2548                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-shell"
2549                 MFLAG=SLAPD_MOD_DYNAMIC
2550         else
2551                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-shell"
2552                 MFLAG=SLAPD_MOD_STATIC
2553         fi
2554         AC_DEFINE_UNQUOTED(SLAPD_SHELL,$MFLAG,[define to support SHELL backend])
2555 fi
2556
2557 if test "$ol_link_sql" != no ; then
2558         BUILD_SLAPD=yes
2559         BUILD_SQL=$ol_enable_sql
2560         if test "$ol_enable_sql" = mod; then
2561                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-sql"
2562                 MFLAG=SLAPD_MOD_DYNAMIC
2563         else
2564                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-sql"
2565                 MFLAG=SLAPD_MOD_STATIC
2566         fi
2567         AC_DEFINE_UNQUOTED(SLAPD_SQL,$MFLAG,[define to support SQL backend])
2568 fi
2569
2570 if test "$ol_enable_dyngroup" != no ; then
2571         BUILD_DYNGROUP=$ol_enable_dyngroup
2572         if test "$ol_enable_dyngroup" = mod ; then
2573                 MFLAG=SLAPD_MOD_DYNAMIC
2574                 SLAPD_DYNAMIC_OVERLAYS="$SLAPD_DYNAMIC_OVERLAYS dyngroup.la"
2575         else
2576                 MFLAG=SLAPD_MOD_STATIC
2577         fi
2578         AC_DEFINE_UNQUOTED(SLAPD_OVER_DYNGROUP,$MFLAG,[define for Dynamic Group overlay])
2579 fi
2580
2581 if test "$ol_enable_proxycache" != no ; then
2582         BUILD_PROXYCACHE=$ol_enable_proxycache
2583         if test "$ol_enable_proxycache" = mod ; then
2584                 MFLAG=SLAPD_MOD_DYNAMIC
2585                 SLAPD_DYNAMIC_OVERLAYS="$SLAPD_DYNAMIC_OVERLAYS pcache.la"
2586         else
2587                 MFLAG=SLAPD_MOD_STATIC
2588         fi
2589         AC_DEFINE_UNQUOTED(SLAPD_OVER_PROXYCACHE,$MFLAG,[define for Proxy Cache overlay])
2590 fi
2591
2592 if test "$ol_enable_slurpd" != no -a "$ol_link_threads" != no -a \
2593         $BUILD_SLAPD = yes ; then
2594         BUILD_SLURPD=yes
2595 fi
2596
2597 if test "$ol_enable_rewrite" != no ; then
2598         AC_DEFINE(ENABLE_REWRITE,1,[define to enable rewriting in back-ldap and back-meta])
2599         BUILD_REWRITE=yes
2600 fi
2601
2602 if test "$ol_enable_slapi" != no ; then
2603         AC_DEFINE(ENABLE_SLAPI,1,[define to enable slapi library])
2604         BUILD_SLAPI=yes
2605         SLAPD_SLAPI_DEPEND=libslapi.a
2606 fi
2607
2608 dnl ----------------------------------------------------------------
2609
2610 dnl
2611 dnl For Windows build, we don't want to include -dlopen flags.
2612 dnl They hurt more than they help.
2613 dnl
2614
2615 if test "$ac_cv_mingw32" = yes ; then
2616         PLAT=NT
2617         SLAPD_MODULES_LDFLAGS=
2618 else
2619         PLAT=UNIX
2620 fi
2621
2622 if test -z "$SLAPD_STATIC_BACKENDS"; then
2623         SLAPD_NO_STATIC='#'
2624 else
2625         SLAPD_NO_STATIC=
2626 fi
2627
2628 AC_SUBST(LIBSRCS)
2629 AC_SUBST(PLAT)
2630 AC_SUBST(WITH_TLS)
2631 AC_SUBST(BUILD_LIBS_DYNAMIC)
2632
2633 AC_SUBST(BUILD_SLAPD)
2634 dnl slapi
2635   AC_SUBST(BUILD_SLAPI)
2636   AC_SUBST(SLAPD_SLAPI_DEPEND)
2637 dnl backends
2638   AC_SUBST(BUILD_BDB)
2639   AC_SUBST(BUILD_DNSSRV)
2640   AC_SUBST(BUILD_HDB)
2641   AC_SUBST(BUILD_LDAP)
2642   AC_SUBST(BUILD_LDBM)
2643   AC_SUBST(BUILD_META)
2644   AC_SUBST(BUILD_MONITOR)
2645   AC_SUBST(BUILD_NULL)
2646   AC_SUBST(BUILD_PASSWD)
2647   AC_SUBST(BUILD_PERL)
2648   AC_SUBST(BUILD_SHELL)
2649   AC_SUBST(BUILD_SQL)
2650 dnl overlays
2651   AC_SUBST(BUILD_DYNGROUP)
2652   AC_SUBST(BUILD_PROXYCACHE)
2653 AC_SUBST(BUILD_SLURPD)
2654
2655 AC_SUBST(LDAP_LIBS)
2656 AC_SUBST(SLAPD_LIBS)
2657 AC_SUBST(SLURPD_LIBS)
2658 AC_SUBST(LDBM_LIBS)
2659 AC_SUBST(LTHREAD_LIBS)
2660 AC_SUBST(LUTIL_LIBS)
2661 AC_SUBST(WRAP_LIBS)
2662
2663 AC_SUBST(SLAPD_MODULES_CPPFLAGS)
2664 AC_SUBST(SLAPD_MODULES_LDFLAGS)
2665
2666 AC_SUBST(SLAPD_NO_STATIC)
2667 AC_SUBST(SLAPD_STATIC_BACKENDS)
2668 AC_SUBST(SLAPD_DYNAMIC_BACKENDS)
2669 AC_SUBST(SLAPD_DYNAMIC_OVERLAYS)
2670
2671 AC_SUBST(PERL_CPPFLAGS)
2672 AC_SUBST(SLAPD_PERL_LDFLAGS)
2673 AC_SUBST(MOD_PERL_LDFLAGS)
2674
2675 AC_SUBST(KRB4_LIBS)
2676 AC_SUBST(KRB5_LIBS)
2677 AC_SUBST(SASL_LIBS)
2678 AC_SUBST(TLS_LIBS)
2679 AC_SUBST(MODULES_LIBS)
2680 AC_SUBST(SLAPI_LIBS)
2681 AC_SUBST(LIBSLAPI)
2682 AC_SUBST(LIBSLAPITOOLS)
2683 AC_SUBST(AUTH_LIBS)
2684
2685 AC_SUBST(SLAPD_SLP_LIBS)
2686
2687 AC_SUBST(SLAPD_SQL_LDFLAGS)
2688 AC_SUBST(SLAPD_SQL_LIBS)
2689 AC_SUBST(SLAPD_SQL_INCLUDES)
2690
2691 dnl ----------------------------------------------------------------
2692 dnl final help output
2693 AC_ARG_WITH(xxinstall,[
2694 See INSTALL file for further details.])
2695
2696 dnl ----------------------------------------------------------------
2697 dnl final output
2698 dnl
2699
2700 AC_OUTPUT( \
2701 Makefile:build/top.mk:Makefile.in:build/dir.mk \
2702 doc/Makefile:build/top.mk:doc/Makefile.in:build/dir.mk \
2703 doc/man/Makefile:build/top.mk:doc/man/Makefile.in:build/dir.mk \
2704 doc/man/man1/Makefile:build/top.mk:doc/man/man1/Makefile.in:build/man.mk \
2705 doc/man/man3/Makefile:build/top.mk:doc/man/man3/Makefile.in:build/man.mk \
2706 doc/man/man5/Makefile:build/top.mk:doc/man/man5/Makefile.in:build/man.mk \
2707 doc/man/man8/Makefile:build/top.mk:doc/man/man8/Makefile.in:build/man.mk \
2708 clients/Makefile:build/top.mk:clients/Makefile.in:build/dir.mk \
2709 clients/tools/Makefile:build/top.mk:clients/tools/Makefile.in:build/rules.mk \
2710 include/Makefile:build/top.mk:include/Makefile.in \
2711 libraries/Makefile:build/top.mk:libraries/Makefile.in:build/dir.mk      \
2712 libraries/liblber/Makefile:build/top.mk:libraries/liblber/Makefile.in:build/lib.mk:build/lib-shared.mk  \
2713 libraries/libldap/Makefile:build/top.mk:libraries/libldap/Makefile.in:build/lib.mk:build/lib-shared.mk  \
2714 libraries/libldap_r/Makefile:build/top.mk:libraries/libldap_r/Makefile.in:build/lib.mk:build/lib-shared.mk      \
2715 libraries/liblunicode/Makefile:build/top.mk:libraries/liblunicode/Makefile.in:build/lib.mk:build/lib-static.mk  \
2716 libraries/liblutil/Makefile:build/top.mk:libraries/liblutil/Makefile.in:build/lib.mk:build/lib-static.mk        \
2717 libraries/librewrite/Makefile:build/top.mk:libraries/librewrite/Makefile.in:build/lib.mk:build/lib-static.mk \
2718 servers/Makefile:build/top.mk:servers/Makefile.in:build/dir.mk \
2719 servers/slapd/Makefile:build/top.mk:servers/slapd/Makefile.in:build/srv.mk \
2720 servers/slapd/back-bdb/Makefile:build/top.mk:servers/slapd/back-bdb/Makefile.in:build/mod.mk \
2721 servers/slapd/back-dnssrv/Makefile:build/top.mk:servers/slapd/back-dnssrv/Makefile.in:build/mod.mk \
2722 servers/slapd/back-hdb/Makefile:build/top.mk:servers/slapd/back-hdb/Makefile.in:build/mod.mk \
2723 servers/slapd/back-ldap/Makefile:build/top.mk:servers/slapd/back-ldap/Makefile.in:build/mod.mk \
2724 servers/slapd/back-ldbm/Makefile:build/top.mk:servers/slapd/back-ldbm/Makefile.in:build/mod.mk \
2725 servers/slapd/back-meta/Makefile:build/top.mk:servers/slapd/back-meta/Makefile.in:build/mod.mk \
2726 servers/slapd/back-monitor/Makefile:build/top.mk:servers/slapd/back-monitor/Makefile.in:build/mod.mk \
2727 servers/slapd/back-null/Makefile:build/top.mk:servers/slapd/back-null/Makefile.in:build/mod.mk \
2728 servers/slapd/back-passwd/Makefile:build/top.mk:servers/slapd/back-passwd/Makefile.in:build/mod.mk \
2729 servers/slapd/back-perl/Makefile:build/top.mk:servers/slapd/back-perl/Makefile.in:build/mod.mk \
2730 servers/slapd/back-shell/Makefile:build/top.mk:servers/slapd/back-shell/Makefile.in:build/mod.mk \
2731 servers/slapd/back-sql/Makefile:build/top.mk:servers/slapd/back-sql/Makefile.in:build/mod.mk \
2732 servers/slapd/shell-backends/Makefile:build/top.mk:servers/slapd/shell-backends/Makefile.in:build/srv.mk \
2733 servers/slapd/slapi/Makefile:build/top.mk:servers/slapd/slapi/Makefile.in:build/lib.mk:build/lib-shared.mk  \
2734 servers/slapd/overlays/Makefile:build/top.mk:servers/slapd/overlays/Makefile.in:build/lib.mk \
2735 servers/slurpd/Makefile:build/top.mk:servers/slurpd/Makefile.in:build/srv.mk \
2736 tests/Makefile:build/top.mk:tests/Makefile.in:build/dir.mk \
2737 tests/run \
2738 tests/progs/Makefile:build/top.mk:tests/progs/Makefile.in:build/rules.mk \
2739 ,[
2740 chmod +x tests/run
2741 date > stamp-h
2742 echo Please run \"make depend\" to build dependencies
2743 ])