]> git.sur5r.net Git - openldap/blob - configure.in
Fix typos in prev commit
[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-2004 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-2004 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-2004 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 dnl HP-UX requires -lV3
744 dnl this is not needed on newer versions of HP-UX
745 AC_CHECK_LIB(V3, sigset)
746
747 dnl The following is INTENTIONALLY scripted out because shell does not
748 dnl support variable names with the '@' character, which is what
749 dnl autoconf would try to generate if one merely used AC_SEARCH_LIBS
750 if test "$ac_cv_header_winsock_h" = yes; then
751 AC_CACHE_CHECK([for winsock], [ol_cv_winsock],
752 save_LIBS="$LIBS"
753 for curlib in ws2_32 wsock32; do
754         LIBS="$LIBS -l$curlib"
755         AC_TRY_LINK([#include <winsock.h>
756                         ],
757                         [
758                         socket(0,0,0);
759                         select(0,NULL,NULL,NULL,NULL);
760                         closesocket(0);
761                         gethostname(NULL,0);
762                         ],
763                         ol_cv_winsock=yes, ol_cv_winsock=no)
764
765         if test $ol_cv_winsock = yes; then
766                 AC_DEFINE(HAVE_WINSOCK, 1, [define if you have winsock])
767                 ac_cv_func_socket=yes
768                 ac_cv_func_select=yes
769                 ac_cv_func_closesocket=yes
770                 ac_cv_func_gethostname=yes
771                 if test $curlib = ws2_32; then
772                         ol_cv_winsock=winsock2
773                         AC_DEFINE(HAVE_WINSOCK2, 1,
774                                   [define if you have winsock2])
775                 fi
776                 break
777         fi
778         LIBS="$save_LIBS"
779 done)
780 fi
781
782 dnl Find socket()
783 dnl Likely combinations:
784 dnl             -lsocket [ -lnsl_s | -lnsl ]
785 dnl             -linet
786
787 AC_CHECK_FUNC(socket, :, [      
788 dnl hopefully we won't include too many libraries
789         AC_CHECK_LIB(socket, main)
790         AC_CHECK_LIB(net, main)
791         AC_CHECK_LIB(nsl_s, main)
792         AC_CHECK_LIB(nsl, main)
793         AC_CHECK_LIB(inet, socket)
794         AC_CHECK_LIB(gen, main)
795 ])
796
797 dnl require select
798 AC_CHECK_FUNC(select, :, AC_MSG_ERROR([select() required.]))
799
800 if test "${ac_cv_header_winsock_h}" != yes; then
801         dnl Select arg types
802         dnl (if this detection becomes permenent, it and the select() detection
803         dnl should be done before the yielding select test) 
804         AC_FUNC_SELECT_ARGTYPES
805 fi
806
807 dnl check to see if system call automatically restart
808 dnl AC_SYS_RESTARTABLE_SYSCALLS
809
810 dnl ----------------------------------------------------------------
811 dnl require POSIX regex
812 AC_CHECK_HEADERS( regex.h )
813 if test "$ac_cv_header_regex_h" != yes ; then
814         AC_MSG_ERROR([POSIX regex.h required.])
815 fi
816 AC_SEARCH_LIBS(regfree, [regex gnuregex],
817         :, AC_MSG_ERROR([POSIX regex required.]))
818
819 OL_POSIX_REGEX
820 if test "$ol_cv_c_posix_regex" = no ; then
821         AC_MSG_ERROR([broken POSIX regex!])
822 fi
823
824 dnl ----------------------------------------------------------------
825 dnl UUID Support
826
827 have_uuid=no
828 AC_CHECK_HEADERS(sys/uuid.h)
829 if test $ac_cv_header_sys_uuid_h = yes ; then
830         save_LIBS="$LIBS"
831         AC_SEARCH_LIBS(uuid_to_str, uuid, [have_uuid=yes], :)
832         LIBS="$save_LIBS"
833
834         if test have_uuid = yes ; then
835                 AC_DEFINE(HAVE_UUID_TO_STR,1,
836                         [define if you have uuid_to_str()])
837
838                 test "$ac_cv_search_uuid_to_str" = "none required" || \
839                         SLAPD_LIBS="$SLAPD_LIBS $ac_cv_search_uuid_to_str"
840         fi
841 fi
842
843 dnl For windows, check for the need of RPCRT for UUID function support
844 if test $have_uuid = no ; then
845         AC_MSG_CHECKING(to see if -lrpcrt4 is needed for win32 UUID support)
846         save_LIBS="$LIBS"
847         LIBS="$LIBS -lrpcrt4"
848         AC_TRY_LINK([
849                 int __stdcall UuidCreate(void *);
850                 int __stdcall UuidToStringA(void *,void **);
851                 ],
852                 [
853                 UuidCreate(0);
854                 UuidToStringA(0,0);
855                 ],
856                 need_rpcrt=yes, need_rpcrt=no)
857         if test $need_rpcrt = yes; then
858                 SLAPD_LIBS="$SLAPD_LIBS -lrpcrt4"
859         fi
860         LIBS="$save_LIBS"
861         AC_MSG_RESULT($need_rpcrt)
862 fi
863
864 dnl ----------------------------------------------------------------
865 dnl Check for resolver routines
866 dnl       need to check for both res_query and __res_query
867 dnl   need to check -lc, -lbind, and -lresolv
868 ol_link_dnssrv=no
869 AC_CHECK_FUNC(res_query,:)
870 if test $ac_cv_func_res_query = no ; then 
871         AC_CHECK_FUNC(__res_query,:)
872         ac_cv_func_res_query=$ac_cv_func___res_query
873 fi
874
875 if test $ac_cv_func_res_query = no ; then 
876         AC_CHECK_LIB(bind, res_query)
877         ac_cv_func_res_query=$ac_cv_lib_bind_res_query
878 fi
879
880 if test $ac_cv_func_res_query = no ; then 
881         AC_CHECK_LIB(bind, __res_query)
882         ac_cv_func_res_query=$ac_cv_lib_bind___res_query
883 fi
884
885 if test $ac_cv_func_res_query = no ; then 
886         AC_CHECK_LIB(resolv, res_query)
887         ac_cv_func_res_query=$ac_cv_lib_resolv_res_query
888 fi
889
890 if test $ac_cv_func_res_query = no ; then 
891         AC_CHECK_LIB(resolv, __res_query)
892         ac_cv_func_res_query=$ac_cv_lib_resolv___res_query
893 fi
894
895 if test $ac_cv_func_res_query = no ; then 
896         AC_CHECK_LIB(resolv, _res_9_query)
897         ac_cv_func_res_query=$ac_cv_lib_resolv_res_9_query
898 fi
899
900 if test "$ac_cv_func_res_query" = yes ; then
901         AC_DEFINE(HAVE_RES_QUERY,1,
902                 [define if you have res_query()])
903
904         if test $ol_enable_dnssrv != no ; then
905                 ol_link_dnssrv=yes
906         fi
907 fi
908
909 if test "$ol_enable_dnssrv" != no -a "$ol_link_dnssrv" = no ; then
910         AC_MSG_ERROR([DNSSRV requires res_query()])
911 fi
912
913 dnl ----------------------------------------------------------------
914 dnl PF_INET6 support requires getaddrinfo and INET6_ADDRSTRLEN
915 dnl PF_LOCAL may use getaddrinfo in available
916 AC_CHECK_FUNCS( getaddrinfo getnameinfo gai_strerror inet_ntop )
917
918 ol_link_ipv6=no
919 if test $ac_cv_func_getaddrinfo = no -o $ac_cv_func_inet_ntop = no ; then
920         if test $ol_enable_ipv6 = yes ; then
921                 AC_MSG_ERROR([IPv6 support requires getaddrinfo() and inet_ntop()])
922         fi
923 elif test $ol_enable_ipv6 != no ; then
924         AC_CACHE_CHECK([INET6_ADDRSTRLEN],[ol_cv_inet6_addrstrlen],[
925                 AC_EGREP_CPP(__has_inet6_addrstrlen__,[
926 #                       include <netinet/in.h>
927 #                       ifdef INET6_ADDRSTRLEN
928                                 __has_inet6_addrstrlen__;
929 #                       endif
930                 ], [ol_cv_inet6_addrstrlen=yes], [ol_cv_inet6_addrstrlen=no])])
931
932
933         AC_CACHE_CHECK([struct sockaddr_storage],ol_cv_struct_sockaddr_storage,[
934                 AC_TRY_COMPILE([
935 #include <sys/types.h>
936 #include <sys/socket.h>
937 ],[
938                         struct sockaddr_storage ss;
939 ],                      [ol_cv_struct_sockaddr_storage=yes],
940                         [ol_cv_struct_sockaddr_storage=no])])
941
942         if test $ol_cv_inet6_addrstrlen = yes \
943                 -a $ol_cv_struct_sockaddr_storage = yes ; then
944                 ol_link_ipv6=yes
945         elif test $ol_enable_ipv6 = yes \
946                         -a $ol_cv_inet6_addrstrlen = no ; then
947                 AC_MSG_ERROR([IPv6 support requires INET6_ADDRSTRLEN])
948         elif test $ol_enable_ipv6 = yes \
949                         -a $ol_cv_struct_sockaddr_storage = no ; then
950                 AC_MSG_ERROR([IPv6 support requires struct sockaddr_storage])
951         fi
952 fi
953
954 if test $ol_enable_local != no ; then
955         AC_CHECK_HEADERS( sys/un.h )
956
957         if test $ol_enable_local = auto ; then
958                 ol_enable_local=$ac_cv_header_sys_un_h
959         elif test $ac_cv_header_sys_un_h = no ; then
960                 AC_MSG_ERROR([AF_LOCAL domain support requires sys/un.h])
961         fi
962 fi
963
964 dnl ----------------------------------------------------------------
965 dnl Kerberos
966 ol_link_kbind=no
967 ol_link_krb5=no
968 ol_link_krb4=no
969
970 if test $ol_with_kerberos = yes -o $ol_with_kerberos = auto \
971         -o $ol_with_kerberos = k5 -o $ol_with_kerberos = k5only \
972         -o $ol_with_kerberos = k425 ; then
973
974         AC_CHECK_HEADERS(krb5.h)
975
976         if test $ac_cv_header_krb5_h = yes ; then
977                 dnl lazy check for Heimdal Kerberos
978                 AC_CHECK_HEADERS(heim_err.h)
979                 if test $ac_cv_header_heim_err_h = yes ; then
980                         krb5_impl=heimdal
981                 else
982                         krb5_impl=mit
983                 fi
984
985                 if test $krb5_impl = mit; then
986                         AC_CHECK_LIB(k5crypto, main,
987                                 [krb5crypto=k5crypto],
988                                 [krb5crypto=crypto])
989
990                         AC_CHECK_LIB(krb5, main,
991                                 [have_krb5=yes
992                                 KRB5_LIBS="-lkrb5 -l$krb5crypto -lcom_err"],
993                                 [have_krb5=no],
994                                 [-l$krb5crypto -lcom_err])
995
996                 elif test $krb5_impl = heimdal; then
997                         AC_CHECK_LIB(des, main,
998                                 [krb5crypto=des],
999                                 [krb5crypto=crypto])
1000
1001                         AC_CHECK_LIB(krb5, main,
1002                                 [have_krb5=yes
1003                                 KRB5_LIBS="-lkrb5 -l$krb5crypto -lasn1 -lroken -lcom_err"],
1004                                 [have_krb5=no],
1005                                 [-l$krb5crypto -lasn1 -lroken -lcom_err])
1006
1007                         AC_DEFINE(HAVE_HEIMDAL_KERBEROS, 1,
1008                                 [define if you have HEIMDAL Kerberos])
1009
1010                 else
1011                         have_krb5=no
1012                         AC_MSG_WARN([Unrecognized Kerberos5 Implementation])
1013                 fi
1014
1015                 if test $have_krb5 = yes ; then
1016                         ol_link_krb5=yes
1017
1018                         AC_DEFINE(HAVE_KRB5, 1,
1019                                 [define if you have Kerberos V])
1020
1021                         if test $ol_with_kerberos = k5only ; then
1022                                 ol_with_kerberos=found
1023                         fi
1024
1025                 elif test $ol_with_kerberos != auto ; then
1026                         AC_MSG_ERROR([Required Kerberos 5 support not available])
1027                 fi
1028
1029         fi
1030 fi
1031
1032 if test $ol_link_krb5 = yes -a \( $ol_with_kerberos = yes -o \
1033         $ol_with_kerberos = auto -o $ol_with_kerberos = k425 \) ; then
1034
1035         AC_CHECK_HEADERS(kerberosIV/krb.h kerberosIV/des.h)
1036
1037         if test $ac_cv_header_kerberosIV_krb_h = yes ; then
1038                 if test $krb5_impl = mit; then
1039                         AC_CHECK_LIB(krb4, main, [have_k425=yes
1040                                 KRB4_LIBS="-lkrb4 -ldes425"], [have_k425=no],
1041                                 [-ldes425 -lkrb5 -l$krb5crypto -lcom_err])
1042
1043                 elif test $krb5_impl = heimdal; then
1044                         AC_CHECK_LIB(krb4, main, [have_k425=yes
1045                                 KRB4_LIBS="-lkrb4"], [have_k425=no],
1046                                 [-lkrb5 -l$krb5crypto -lasn1 -lroken -lcom_err])
1047
1048                 else
1049                         have_425=no
1050                         AC_MSG_WARN([Unrecongized Kerberos V Implementation])
1051                 fi
1052
1053                 if test $have_k425 = yes ; then
1054                         ol_with_kerberos=found
1055                         ol_link_krb4=yes
1056
1057                         AC_DEFINE(HAVE_KRB425, 1,
1058                                 [define if you have Kerberos V with IV support])
1059                         AC_DEFINE(HAVE_KRB4, 1,
1060                                 [define if you have Kerberos IV])
1061
1062                         AC_CACHE_CHECK([for des_debug in Kerberos libraries],
1063                                 [ol_cv_var_des_debug], [
1064                                 dnl save the flags
1065                                 save_LIBS="$LIBS"
1066                                 LIBS="$KRB4_LIBS $KRB5_LIBS $LIBS"
1067                                 AC_TRY_LINK([
1068 #include <kerberosIV/krb.h>
1069 #include <kerberosIV/des.h>
1070 extern int des_debug;
1071 ],[
1072 des_debug = 1;
1073 ],                              ol_cv_var_des_debug=yes, ol_cv_var_des_debug=no)
1074                                 dnl restore the LIBS
1075                                 LIBS="$save_LIBS"
1076                         ])
1077
1078                         if test $ol_cv_var_des_debug = yes ; then
1079                                 AC_DEFINE(HAVE_DES_DEBUG,1,
1080                                         [define if you have Kerberos des_debug])
1081                         fi
1082
1083                         LIBS="$save_LIBS"
1084                 fi
1085         fi
1086 fi
1087
1088 if test $ol_link_krb5 = yes ; then
1089         ol_with_kerberos=found
1090 fi
1091
1092 if test $ol_with_kerberos = yes -o $ol_with_kerberos = auto \
1093         -o $ol_with_kerberos = k4 -o $ol_with_kerberos = kth ; then
1094
1095         AC_CHECK_HEADERS(krb.h des.h krb-archaeology.h )
1096
1097         if test $ac_cv_header_krb_h = yes ; then
1098                 AC_CHECK_LIB(krb, main, [have_k4=yes], [have_k4=no], [-ldes])
1099
1100                 if test $have_k4 = yes ; then
1101                         ol_with_kerberos=found
1102                         ol_link_krb4=yes
1103
1104                         AC_DEFINE(HAVE_KRB4, 1,
1105                                 [define if you have Kerberos IV])
1106
1107                         KRB4_LIBS="-lkrb -ldes"
1108
1109                         if test $ac_cv_header_krb_archaeology_h = yes ; then
1110                                 AC_DEFINE(HAVE_KTH_KERBEROS, 1,
1111                                         [define if you have Kth Kerberos])
1112                         fi
1113                 fi
1114         fi
1115 fi
1116
1117 if test $ol_link_krb4 = yes -a $ol_enable_kbind != no ; then
1118         ol_link_kbind=yes
1119
1120 elif test $ol_enable_kbind = yes ; then
1121         AC_MSG_ERROR([Kerberos IV detection failed])
1122 fi
1123
1124 if test $ol_link_krb4 = yes -o $ol_link_krb5 = yes ; then
1125         AC_DEFINE(HAVE_KERBEROS, 1, [define if you have Kerberos])
1126
1127 elif test $ol_with_kerberos != auto -a $ol_with_kerberos != no ; then
1128         AC_MSG_ERROR([Kerberos detection failed])
1129 fi
1130
1131 dnl ----------------------------------------------------------------
1132 dnl TLS/SSL
1133 ol_link_tls=no
1134 if test $ol_with_tls != no ; then
1135         AC_CHECK_HEADERS(openssl/ssl.h ssl.h)
1136         
1137         if test $ac_cv_header_openssl_ssl_h = yes \
1138                 -o $ac_cv_header_ssl_h = yes ; then
1139                 AC_CHECK_LIB(ssl, SSLeay_add_ssl_algorithms, 
1140                         [have_ssleay=yes
1141                         need_rsaref=no],
1142                         [have_ssleay=no],
1143                         [-lcrypto])
1144                         
1145                 if test $have_ssleay = no ; then
1146                         AC_CHECK_LIB(ssl, SSL_library_init,
1147                                 [have_ssleay=yes
1148                                 need_rsaref=no], [have_ssleay=no],
1149                                 [-lcrypto])
1150                 fi
1151
1152                 if test $have_ssleay = no ; then
1153                         AC_CHECK_LIB(ssl, ssl3_accept, 
1154                                 [have_ssleay=yes
1155                                 need_rsaref=yes], [have_ssleay=no],
1156                                 [-lcrypto -lRSAglue -lrsaref])
1157                 fi
1158
1159                 if test $have_ssleay = yes ; then
1160                         ol_with_tls=found
1161                         ol_link_tls=yes
1162
1163                         AC_DEFINE(HAVE_SSLEAY, 1, 
1164                                 [define if you have SSLeay or OpenSSL])
1165
1166                         if test $need_rsaref = yes; then
1167                                 AC_DEFINE(HAVE_RSAREF, 1, 
1168                                         [define if you have RSAref])
1169
1170                                 TLS_LIBS="-lssl -lcrypto -lRSAglue -lrsaref"
1171                         else
1172                                 TLS_LIBS="-lssl -lcrypto"
1173                         fi
1174                 fi
1175         fi
1176
1177 else
1178         AC_WARN([TLS data protection not supported!])
1179 fi
1180
1181 WITH_TLS=no
1182 if test $ol_link_tls = yes ; then
1183         AC_DEFINE(HAVE_TLS, 1, [define if you have TLS])
1184         WITH_TLS=yes
1185
1186 elif test $ol_with_tls = auto ; then
1187         AC_WARN([Could not locate TLS/SSL package])
1188         AC_WARN([TLS data protection not supported!])
1189
1190 elif test $ol_with_tls != no ; then
1191         AC_ERROR([Could not locate TLS/SSL package])
1192 fi
1193
1194 dnl ----------------------------------------------------------------
1195 dnl LAN Manger password checking requires DES from OpenSSL
1196 if test $ol_enable_lmpasswd != no; then
1197         if test $ol_link_tls != yes ; then
1198                 AC_ERROR([LAN Manager passwords require OpenSSL])
1199         fi
1200
1201         AC_DEFINE(SLAPD_LMHASH, 1, [define to support LAN Manager passwords])
1202 fi
1203
1204 dnl ----------------------------------------------------------------
1205 dnl Threads?
1206 ol_link_threads=no
1207
1208 if test $ol_with_threads = auto -o $ol_with_threads = yes \
1209         -o $ol_with_threads = nt ; then
1210
1211         OL_NT_THREADS
1212
1213         if test "$ol_cv_nt_threads" = yes ; then
1214                 ol_link_threads=nt
1215                 ol_with_threads=found
1216                 ol_with_yielding_select=yes
1217
1218                 AC_DEFINE(HAVE_NT_SERVICE_MANAGER,1,[if you have NT Service Manager])
1219                 AC_DEFINE(HAVE_NT_EVENT_LOG,1,[if you have NT Event Log])
1220         fi
1221
1222         if test $ol_with_threads = nt ; then
1223                 AC_MSG_ERROR([could not locate NT Threads])
1224         fi
1225 fi
1226
1227 if test $ol_with_threads = auto -o $ol_with_threads = yes \
1228         -o $ol_with_threads = posix ; then
1229
1230         AC_CHECK_HEADERS(pthread.h)
1231
1232         if test $ac_cv_header_pthread_h = yes ; then
1233                 OL_POSIX_THREAD_VERSION
1234
1235                 if test $ol_cv_pthread_version != 0 ; then
1236                         AC_DEFINE_UNQUOTED(HAVE_PTHREADS,$ol_cv_pthread_version,
1237                                 [define to pthreads API spec revision])
1238                 else
1239                         AC_MSG_ERROR([unknown pthread version])
1240                 fi
1241
1242                 # consider threads found
1243                 ol_with_threads=found
1244
1245                 OL_HEADER_LINUX_THREADS
1246                 OL_HEADER_GNU_PTH_PTHREAD_H
1247
1248                 if test $ol_cv_header_gnu_pth_pthread_h = no ; then
1249                         AC_CHECK_HEADERS(sched.h)
1250                 fi
1251
1252                 dnl Now the hard part, how to link?
1253                 dnl
1254                 dnl currently supported checks:
1255                 dnl
1256                 dnl Check for no flags 
1257                 dnl     pthread_create() in $LIBS
1258                 dnl
1259                 dnl Check special pthread (final) flags
1260                 dnl     [skipped] pthread_create() with -mt (Solaris) [disabled]
1261                 dnl     pthread_create() with -kthread (FreeBSD)
1262                 dnl     pthread_create() with -pthread (FreeBSD/Digital Unix)
1263                 dnl     pthread_create() with -pthreads (?)
1264                 dnl     pthread_create() with -mthreads (AIX)
1265                 dnl     pthread_create() with -thread (?)
1266                 dnl
1267                 dnl Check pthread (final) libraries
1268                 dnl     pthread_mutex_unlock() in -lpthread -lmach -lexc -lc_r (OSF/1)
1269                 dnl     pthread_mutex_lock() in -lpthread -lmach -lexc (OSF/1)
1270                 dnl     [skipped] pthread_mutex_trylock() in -lpthread -lexc (OSF/1)
1271                 dnl     pthread_join() -Wl,-woff,85 -lpthread (IRIX)
1272                 dnl     pthread_create() in -lpthread (many)
1273                 dnl     pthread_create() in -lc_r (FreeBSD)
1274                 dnl
1275                 dnl Check pthread (draft4) flags (depreciated)
1276                 dnl     pthread_create() with -threads (OSF/1)
1277                 dnl
1278                 dnl Check pthread (draft4) libraries (depreciated)
1279                 dnl     pthread_mutex_unlock() in -lpthreads -lmach -lexc -lc_r (OSF/1)
1280                 dnl     pthread_mutex_lock() in -lpthreads -lmach -lexc (OSF/1)
1281                 dnl     pthread_mutex_trylock() in -lpthreads -lexc (OSF/1)
1282                 dnl     pthread_create() in -lpthreads (many)
1283                 dnl
1284
1285                 dnl pthread_create in $LIBS
1286                 AC_CACHE_CHECK([for pthread_create in default libraries],
1287                         ol_cv_pthread_create,[
1288                 AC_TRY_RUN(OL_PTHREAD_TEST_PROGRAM,
1289                         [ol_cv_pthread_create=yes],
1290                         [ol_cv_pthread_create=no],
1291                         [AC_TRY_LINK(OL_PTHREAD_TEST_INCLUDES,OL_PTHREAD_TEST_FUNCTION,
1292                                 [ol_cv_pthread_create=yes],
1293                                 [ol_cv_pthread_create=no])])])
1294
1295                 if test $ol_cv_pthread_create != no ; then
1296                         ol_link_threads=posix
1297                         ol_link_pthreads=""
1298                 fi
1299                 
1300 dnl             OL_PTHREAD_TRY([-mt],           [ol_cv_pthread_mt])
1301                 OL_PTHREAD_TRY([-kthread],      [ol_cv_pthread_kthread])
1302                 OL_PTHREAD_TRY([-pthread],      [ol_cv_pthread_pthread])
1303                 OL_PTHREAD_TRY([-pthreads],     [ol_cv_pthread_pthreads])
1304                 OL_PTHREAD_TRY([-mthreads],     [ol_cv_pthread_mthreads])
1305                 OL_PTHREAD_TRY([-thread],       [ol_cv_pthread_thread])
1306
1307                 OL_PTHREAD_TRY([-lpthread -lmach -lexc -lc_r],
1308                         [ol_cv_pthread_lpthread_lmach_lexc_lc_r])
1309                 OL_PTHREAD_TRY([-lpthread -lmach -lexc],
1310                         [ol_cv_pthread_lpthread_lmach_lexc])
1311 dnl             OL_PTHREAD_TRY([-lpthread -lexc],
1312 dnl                     [ol_cv_pthread_lpthread_lexc])
1313
1314                 OL_PTHREAD_TRY([-lpthread -Wl,-woff,85],
1315                         [ol_cv_pthread_lib_lpthread_woff])
1316
1317                 OL_PTHREAD_TRY([-lpthread],     [ol_cv_pthread_lpthread])
1318                 OL_PTHREAD_TRY([-lc_r],         [ol_cv_pthread_lc_r])
1319
1320                 OL_PTHREAD_TRY([-threads],      [ol_cv_pthread_threads])
1321
1322                 OL_PTHREAD_TRY([-lpthreads -lmach -lexc -lc_r],
1323                         [ol_cv_pthread_lpthreads_lmach_lexc_lc_r])
1324                 OL_PTHREAD_TRY([-lpthreads -lmach -lexc],
1325                         [ol_cv_pthread_lpthreads_lmach_lexc])
1326                 OL_PTHREAD_TRY([-lpthreads -lexc],
1327                         [ol_cv_pthread_lpthreads_lexc])
1328
1329                 OL_PTHREAD_TRY([-lpthreads],[ol_cv_pthread_lib_lpthreads])
1330
1331                 if test $ol_link_threads != no ; then
1332                         LTHREAD_LIBS="$LTHREAD_LIBS $ol_link_pthreads"
1333
1334                         dnl save flags
1335                         save_CPPFLAGS="$CPPFLAGS"
1336                         save_LIBS="$LIBS"
1337                         LIBS="$LTHREAD_LIBS $LIBS"
1338
1339                         dnl All POSIX Thread (final) implementations should have
1340                         dnl sched_yield instead of pthread yield.
1341                         dnl check for both, and thr_yield for Solaris
1342                         AC_CHECK_FUNCS(sched_yield pthread_yield thr_yield)
1343
1344                         if test $ac_cv_func_sched_yield = no -a \
1345                                 $ac_cv_func_pthread_yield = no -a \
1346                                 $ac_cv_func_thr_yield = no ; then
1347                                 dnl Digital UNIX has sched_yield() in -lrt
1348                                 AC_CHECK_LIB(rt, sched_yield,
1349                                         [LTHREAD_LIBS="$LTHREAD_LIBS -lrt"
1350                                         AC_DEFINE(HAVE_SCHED_YIELD,1,
1351                                                 [Define if you have the sched_yield function.])
1352                                         ac_cv_func_sched_yield=yes],
1353                                         [ac_cv_func_sched_yield=no])
1354                         fi
1355                         if test $ac_cv_func_sched_yield = no -a \
1356                                 $ac_cv_func_pthread_yield = no -a \
1357                                 "$ac_cv_func_thr_yield" = no ; then
1358                                 AC_MSG_WARN([could not locate sched_yield() or pthread_yield()])
1359                         fi
1360
1361                         dnl Check functions for compatibility
1362                         AC_CHECK_FUNCS(pthread_kill pthread_rwlock_destroy)
1363
1364                         dnl Check for pthread_detach with <pthread.h> inclusion
1365                         dnl as it's symbol may have been mangled.
1366                         AC_CACHE_CHECK([for pthread_detach with <pthread.h>],
1367                                 [ol_cv_func_pthread_detach], [
1368                                 dnl save the flags
1369                                 AC_TRY_LINK([
1370 #include <pthread.h>
1371 #ifndef NULL
1372 #define NULL (void*)0
1373 #endif
1374 ],
1375                                         [pthread_detach(NULL);],
1376                                         [ol_cv_func_pthread_detach=yes],
1377                                         [ol_cv_func_pthread_detach=no])
1378                         ])
1379
1380                         if test $ol_cv_func_pthread_detach = no ; then
1381                                 AC_MSG_ERROR([could not locate pthread_detach()])
1382                         fi
1383
1384                         AC_DEFINE(HAVE_PTHREAD_DETACH,1,
1385                                 [define if you have pthread_detach function])
1386
1387                         dnl Check for setconcurreny functions
1388                         AC_CHECK_FUNCS( \
1389                                 pthread_setconcurrency \
1390                                 pthread_getconcurrency \
1391                                 thr_setconcurrency \
1392                                 thr_getconcurrency \
1393                         )
1394
1395                         OL_SYS_LINUX_THREADS
1396                         OL_LINUX_THREADS
1397
1398                         if test $ol_cv_linux_threads = error; then
1399                                 AC_MSG_ERROR([LinuxThreads header/library mismatch]);
1400                         fi
1401
1402                         AC_CACHE_CHECK([if pthread_create() works],
1403                                 ol_cv_pthread_create_works,[
1404                         AC_TRY_RUN(OL_PTHREAD_TEST_PROGRAM,
1405                                 [ol_cv_pthread_create_works=yes],
1406                                 [ol_cv_pthread_create_works=no],
1407                                 [dnl assume yes
1408                                 ol_cv_pthread_create_works=yes])])
1409
1410                         if test $ol_cv_pthread_create_works = no ; then
1411                                 AC_MSG_ERROR([pthread_create is not usable, check environment settings])
1412                         fi
1413
1414                         dnl Check if select causes an yield
1415                         if test $ol_with_yielding_select = auto ; then
1416                                 AC_CACHE_CHECK([if select yields when using pthreads],
1417                                         ol_cv_pthread_select_yields,[
1418                                 AC_TRY_RUN([
1419 #include <sys/types.h>
1420 #include <sys/time.h>
1421 #include <unistd.h>
1422 #include <pthread.h>
1423 #ifndef NULL
1424 #define NULL (void*) 0
1425 #endif
1426
1427 static int fildes[2];
1428
1429 static void *task(p)
1430         void *p;
1431 {
1432         int i;
1433         struct timeval tv;
1434
1435         fd_set rfds;
1436
1437         tv.tv_sec=10;
1438         tv.tv_usec=0;
1439
1440         FD_ZERO(&rfds);
1441         FD_SET(fildes[0], &rfds);
1442
1443         /* we're not interested in any fds */
1444         i = select(FD_SETSIZE, &rfds, NULL, NULL, &tv);
1445
1446         if(i < 0) {
1447                 perror("select");
1448                 exit(10);
1449         }
1450
1451         exit(0); /* if we exit here, the select blocked the whole process */
1452 }
1453
1454 int main(argc, argv)
1455         int argc;
1456         char **argv;
1457 {
1458         pthread_t t;
1459
1460         /* create a pipe to select */
1461         if(pipe(&fildes[0])) {
1462                 perror("select");
1463                 exit(1);
1464         }
1465
1466 #ifdef HAVE_PTHREAD_SETCONCURRENCY
1467         (void) pthread_setconcurrency(2);
1468 #else
1469 #ifdef HAVE_THR_SETCONCURRENCY
1470         /* Set Solaris LWP concurrency to 2 */
1471         thr_setconcurrency(2);
1472 #endif
1473 #endif
1474
1475 #if HAVE_PTHREADS < 6
1476         pthread_create(&t, pthread_attr_default, task, NULL);
1477 #else
1478         pthread_create(&t, NULL, task, NULL);
1479 #endif
1480
1481         /* make sure task runs first */
1482 #if HAVE_THR_YIELD
1483         thr_yield();
1484 #elif defined( HAVE_SCHED_YIELD )
1485         sched_yield();
1486 #elif defined( HAVE_PTHREAD_YIELD )
1487         pthread_yield();
1488 #endif
1489
1490         exit(2);
1491 }],
1492                                 [ol_cv_pthread_select_yields=no],
1493                                 [ol_cv_pthread_select_yields=yes],
1494                                 [ol_cv_pthread_select_yields=cross])])
1495
1496                                 if test $ol_cv_pthread_select_yields = cross ; then
1497                                         AC_MSG_ERROR([crossing compiling: use --with-yielding_select=yes|no|manual])
1498                                 fi
1499
1500                                 if test $ol_cv_pthread_select_yields = yes ; then
1501                                         ol_with_yielding_select=yes
1502                                 fi
1503                         fi
1504
1505                         dnl restore flags
1506                         CPPFLAGS="$save_CPPFLAGS"
1507                         LIBS="$save_LIBS"
1508                 else
1509                         AC_MSG_ERROR([could not locate usable POSIX Threads])
1510                 fi
1511         fi
1512
1513         if test $ol_with_threads = posix ; then
1514                 AC_MSG_ERROR([could not locate POSIX Threads])
1515         fi
1516 fi
1517
1518 if test $ol_with_threads = auto -o $ol_with_threads = yes \
1519         -o $ol_with_threads = mach ; then
1520
1521         dnl check for Mach CThreads
1522         AC_CHECK_HEADERS(mach/cthreads.h cthreads.h)
1523         if test $ac_cv_header_mach_cthreads_h = yes ; then
1524                 ol_with_threads=found
1525
1526                 dnl check for cthreads support in current $LIBS
1527                 AC_CHECK_FUNC(cthread_fork,[ol_link_threads=yes])
1528
1529                 if test $ol_link_threads = no ; then
1530                         dnl try -all_load
1531                         dnl this test needs work
1532                         AC_CACHE_CHECK([for cthread_fork with -all_load],
1533                                 [ol_cv_cthread_all_load], [
1534                                 dnl save the flags
1535                                 save_LIBS="$LIBS"
1536                                 LIBS="-all_load $LIBS"
1537                                 AC_TRY_LINK([#include <mach/cthreads.h>],[
1538                                         cthread_fork((void *)0, (void *)0);
1539                                         ], ol_cv_cthread_all_load=yes, ol_cv_cthread_all_load=no)
1540                                 dnl restore the LIBS
1541                                 LIBS="$save_LIBS"
1542                         ])
1543
1544                         if test $ol_cv_cthread_all_load = yes ; then
1545                                 LTHREAD_LIBS="$LTHREAD_LIBS -all_load"
1546                                 ol_link_threads=mach
1547                                 ol_with_threads=found
1548                         fi
1549                 fi
1550
1551         elif test $ac_cv_header_cthreads_h = yes ; then
1552                 dnl Hurd variant of Mach Cthreads
1553                 dnl uses <cthreads.h> and -lthreads
1554
1555                 ol_with_threads=found
1556  
1557                 dnl save the flags
1558                 save_LIBS="$LIBS"
1559                 LIBS="$LIBS -lthreads"
1560                 AC_CHECK_FUNC(cthread_fork,[ol_link_threads=yes])
1561                 LIBS="$save_LIBS"
1562
1563                 if test $ol_link_threads = yes ; then
1564                         LTHREAD_LIBS="-lthreads"
1565                         ol_link_threads=mach
1566                         ol_with_threads=found
1567                 else
1568                         AC_MSG_ERROR([could not link with Mach CThreads])
1569                 fi
1570
1571         elif test $ol_with_threads = mach ; then
1572                 AC_MSG_ERROR([could not locate Mach CThreads])
1573         fi
1574
1575         if test $ol_link_threads = mach ; then
1576                 AC_DEFINE(HAVE_MACH_CTHREADS,1,
1577                         [define if you have Mach Cthreads])
1578         elif test $ol_with_threads = found ; then
1579                 AC_MSG_ERROR([could not link with Mach CThreads])
1580         fi
1581 fi
1582
1583 if test $ol_with_threads = auto -o $ol_with_threads = yes \
1584         -o $ol_with_threads = pth ; then
1585
1586         AC_CHECK_HEADERS(pth.h)
1587
1588         if test $ac_cv_header_pth_h = yes ; then
1589                 AC_CHECK_LIB(pth, pth_version, [have_pth=yes], [have_pth=no])
1590
1591                 if test $have_pth = yes ; then
1592                         AC_DEFINE(HAVE_GNU_PTH,1,[if you have GNU Pth])
1593                         LTHREAD_LIBS="$LTHREAD_LIBS -lpth"
1594                         ol_link_threads=pth
1595                         ol_with_threads=found
1596
1597                         if test $ol_with_yielding_select = auto ; then
1598                                 ol_with_yielding_select=yes
1599                         fi
1600                 fi
1601         fi
1602 fi
1603
1604 if test $ol_with_threads = auto -o $ol_with_threads = yes \
1605         -o $ol_with_threads = lwp ; then
1606
1607         dnl check for SunOS5 LWP
1608         AC_CHECK_HEADERS(thread.h synch.h)
1609         if test $ac_cv_header_thread_h = yes -a $ac_cv_header_synch_h = yes ; then
1610                 AC_CHECK_LIB(thread, thr_create, [have_thr=yes], [have_thr=no])
1611
1612                 if test $have_thr = yes ; then
1613                         AC_DEFINE(HAVE_THR,1,
1614                                 [if you have Solaris LWP (thr) package])
1615                         LTHREAD_LIBS="$LTHREAD_LIBS -lthread"
1616                         ol_link_threads=thr
1617
1618                         if test $ol_with_yielding_select = auto ; then
1619                                 ol_with_yielding_select=yes
1620                         fi
1621
1622                         dnl Check for setconcurreny functions
1623                         AC_CHECK_FUNCS( \
1624                                 thr_setconcurrency \
1625                                 thr_getconcurrency \
1626                         )
1627                 fi
1628         fi
1629
1630         dnl check for SunOS4 LWP
1631         AC_CHECK_HEADERS(lwp/lwp.h)
1632         if test $ac_cv_header_lwp_lwp_h = yes ; then
1633                 AC_CHECK_LIB(lwp, lwp_create, [have_lwp=yes], [have_lwp=no])
1634
1635                 if test $have_lwp = yes ; then
1636                         AC_DEFINE(HAVE_LWP,1,
1637                                 [if you have SunOS LWP package])
1638                         LTHREAD_LIBS="$LTHREAD_LIBS -llwp"
1639                         ol_link_threads=lwp
1640
1641                         if test $ol_with_yielding_select = auto ; then
1642                                 ol_with_yielding_select=no
1643                         fi
1644                 fi
1645         fi
1646 fi
1647
1648 if test $ol_with_yielding_select = yes ; then
1649         AC_DEFINE(HAVE_YIELDING_SELECT,1,
1650                 [define if select implicitly yields])
1651 fi
1652
1653 if test $ol_with_threads = manual ; then
1654         dnl User thinks he can manually configure threads.
1655         ol_link_threads=yes
1656
1657         AC_MSG_WARN([thread defines and link options must be set manually])
1658
1659         AC_CHECK_HEADERS(pthread.h sched.h)
1660         AC_CHECK_FUNCS(sched_yield pthread_yield)
1661         OL_HEADER_LINUX_THREADS
1662
1663         AC_CHECK_HEADERS(mach/cthreads.h)
1664         AC_CHECK_HEADERS(lwp/lwp.h)
1665         AC_CHECK_HEADERS(thread.h synch.h)
1666 fi
1667
1668 if test $ol_link_threads != no -a $ol_link_threads != nt ; then  
1669         dnl needed to get reentrant/threadsafe versions
1670         dnl
1671         AC_DEFINE(REENTRANT,1)
1672         AC_DEFINE(_REENTRANT,1)
1673         AC_DEFINE(THREAD_SAFE,1)
1674         AC_DEFINE(_THREAD_SAFE,1)
1675         AC_DEFINE(THREADSAFE,1)
1676         AC_DEFINE(_THREADSAFE,1)
1677         AC_DEFINE(_SGI_MP_SOURCE,1)
1678
1679         dnl The errno declaration may dependent upon _REENTRANT.
1680         dnl If it does, we must link with thread support.
1681         AC_CACHE_CHECK([for thread specific errno],
1682                 [ol_cv_errno_thread_specific], [
1683                 AC_TRY_LINK([#include <errno.h>], [errno = 0;],
1684                         [ol_cv_errno_thread_specific=yes],
1685                         [ol_cv_errno_thread_specific=no])
1686         ])
1687
1688         dnl The h_errno declaration may dependent upon _REENTRANT.
1689         dnl If it does, we must link with thread support.
1690         AC_CACHE_CHECK([for thread specific h_errno],
1691                 [ol_cv_h_errno_thread_specific], [
1692                 AC_TRY_LINK([#include <netdb.h>], [h_errno = 0;],
1693                         [ol_cv_h_errno_thread_specific=yes],
1694                         [ol_cv_h_errno_thread_specific=no])
1695         ])
1696
1697         if test $ol_cv_errno_thread_specific != yes \
1698                 -o $ol_cv_h_errno_thread_specific != yes ; then
1699                 LIBS="$LTHREAD_LIBS $LIBS"
1700                 LTHREAD_LIBS=""
1701         fi
1702
1703 dnl When in thread environment, use 
1704 dnl             #if defined( HAVE_REENTRANT_FUNCTIONS ) || defined( HAVE_FUNC_R )
1705 dnl                     func_r(...);
1706 dnl             #else
1707 dnl             #       if defined( HAVE_THREADS ) 
1708 dnl                             /* lock */
1709 dnl             #       endif
1710 dnl                             func(...);
1711 dnl             #       if defined( HAVE_THREADS ) 
1712 dnl                             /* unlock */
1713 dnl             #       endif
1714 dnl             #endif
1715 dnl
1716 dnl HAVE_REENTRANT_FUNCTIONS is derived from:
1717 dnl             _POSIX_REENTRANT_FUNCTIONS
1718 dnl             _POSIX_THREAD_SAFE_FUNCTIONS
1719 dnl             _POSIX_THREADSAFE_FUNCTIONS
1720 dnl
1721 dnl             and is currently defined in <ldap_pvt_thread.h>
1722 dnl
1723 dnl HAVE_THREADS is defined by <ldap_pvt_thread.h> iff -UNO_THREADS
1724 dnl 
1725 dnl libldap/*.c should only include <ldap_pvt_thread.h> iff
1726 dnl LDAP_R_COMPILE is defined.  ie:
1727 dnl             #ifdef LDAP_R_COMPILE
1728 dnl             #       include <ldap_pvt_thread.h>
1729 dnl             #endif
1730 dnl
1731 dnl LDAP_R_COMPILE is defined by libldap_r/Makefile.in
1732 dnl specifically for compiling the threadsafe version of
1733 dnl     the ldap library (-lldap_r).
1734 dnl             
1735 dnl     dnl check for reentrant/threadsafe functions
1736 dnl     dnl
1737 dnl     dnl note: these should only be used when linking
1738 dnl     dnl             with $LTHREAD_LIBS
1739 dnl     dnl
1740 dnl     save_CPPFLAGS="$CPPFLAGS"
1741 dnl     save_LIBS="$LIBS"
1742 dnl     LIBS="$LTHREAD_LIBS $LIBS"
1743 dnl     AC_CHECK_FUNCS( \
1744 dnl             gmtime_r \
1745 dnl             gethostbyaddr_r gethostbyname_r \
1746 dnl             feof_unlocked unlocked_feof \
1747 dnl             putc_unlocked unlocked_putc \
1748 dnl             flockfile ftrylockfile \
1749 dnl     )
1750 dnl     CPPFLAGS="$save_CPPFLAGS"
1751 dnl     LIBS="$save_LIBS"
1752 fi  
1753
1754 if test $ol_link_threads = no ; then
1755         if test $ol_with_threads = yes ; then
1756                 AC_MSG_ERROR([no suitable thread support])
1757         fi
1758
1759         if test $ol_with_threads = auto ; then
1760                 AC_MSG_WARN([no suitable thread support, disabling threads])
1761                 ol_with_threads=no
1762         fi
1763
1764         AC_DEFINE(NO_THREADS,1,
1765                 [define if you have (or want) no threads])
1766         LTHREAD_LIBS=""
1767 fi
1768
1769 if test $ol_link_threads != no ; then
1770         AC_DEFINE(LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE,1)
1771 fi
1772
1773 dnl ----------------------------------------------------------------
1774 dnl Tests for reentrant functions necessary to build -lldap_r
1775 AC_CHECK_FUNCS(         \
1776         ctime_r                 \
1777         gethostbyname_r gethostbyaddr_r \
1778 )
1779
1780 if test "$ac_cv_func_ctime_r" = no ; then
1781         ol_cv_func_ctime_r_nargs=0
1782 else
1783         OL_FUNC_CTIME_R_NARGS
1784 dnl     OL_FUNC_CTIME_R_TYPE
1785 fi
1786
1787 if test "$ac_cv_func_gethostbyname_r" = yes ; then
1788         OL_FUNC_GETHOSTBYNAME_R_NARGS
1789 else
1790         ol_cv_func_gethostbyname_r_nargs=0
1791 fi
1792  
1793 if test "$ac_cv_func_gethostbyaddr_r" = yes ; then
1794         OL_FUNC_GETHOSTBYADDR_R_NARGS
1795 else
1796         ol_cv_func_gethostbyaddr_r_nargs=0
1797 fi
1798
1799 dnl ----------------------------------------------------------------
1800 ol_link_ldbm=no 
1801
1802 if test $ol_with_ldbm_api = auto \
1803         -o $ol_with_ldbm_api = berkeley \
1804         -o $ol_with_ldbm_api = bcompat ; then
1805
1806         if test $ol_with_ldbm_api = bcompat; then \
1807                 OL_BERKELEY_COMPAT_DB
1808         else
1809                 OL_BERKELEY_DB
1810         fi
1811
1812         if test $ol_cv_berkeley_db != no ; then
1813                 AC_DEFINE(HAVE_BERKELEY_DB,1,
1814                         [define this if Berkeley DB is available])
1815
1816                 ol_link_ldbm=berkeley
1817                 ol_with_ldbm_api=berkeley
1818
1819                 if test $ol_with_ldbm_type = hash ; then
1820                         AC_DEFINE(LDBM_USE_DBHASH,1,
1821                                 [define this to use DBHASH w/ LDBM backend])
1822                 else
1823                         AC_DEFINE(LDBM_USE_DBBTREE,1,
1824                                 [define this to use DBBTREE w/ LDBM backend])
1825                 fi
1826
1827                 dnl $ol_cv_lib_db should be yes or -ldb
1828                 dnl (it could be no, but that would be an error
1829                 if test $ol_cv_lib_db != yes ; then
1830                         LDBM_LIBS="$LDBM_LIBS $ol_cv_lib_db"
1831                 fi
1832         fi
1833 fi
1834
1835 if test $ol_enable_bdb != no -o $ol_enable_hdb != no; then
1836         if test $ol_link_ldbm != berkeley ; then
1837                 AC_MSG_ERROR(BDB/HDB: BerkeleyDB not available)
1838         else
1839                 OL_BDB_COMPAT
1840
1841                 if test $ol_cv_bdb_compat != yes ; then
1842                         AC_MSG_ERROR([BDB/HDB: BerkeleyDB version incompatible])
1843                 fi
1844         fi
1845 fi
1846
1847 if test $ol_link_ldbm = no -a $ol_with_ldbm_type = btree ; then
1848         AC_MSG_WARN([Could not find LDBM with BTREE support])
1849         ol_with_ldbm_api=none
1850 fi
1851
1852 if test $ol_with_ldbm_api = auto -o $ol_with_ldbm_api = mdbm ; then
1853         OL_MDBM
1854
1855         if test $ol_cv_mdbm = yes ; then
1856                 ol_link_ldbm=mdbm
1857                 ol_with_ldbm_api=mdbm
1858                 if test $ol_cv_lib_mdbm != yes ; then
1859                         LDBM_LIBS="$LDBM_LIBS $ol_cv_lib_mdbm"
1860                 fi
1861         fi
1862 fi
1863
1864 if test $ol_with_ldbm_api = auto -o $ol_with_ldbm_api = gdbm ; then
1865         OL_GDBM
1866
1867         if test $ol_cv_gdbm = yes ; then
1868                 ol_link_ldbm=gdbm
1869                 ol_with_ldbm_api=gdbm
1870
1871                 if test $ol_cv_lib_gdbm != yes ; then
1872                         LDBM_LIBS="$LDBM_LIBS $ol_cv_lib_gdbm"
1873                 fi
1874         fi
1875 fi
1876
1877 if test $ol_with_ldbm_api = ndbm ; then
1878         OL_NDBM
1879
1880         if test $ol_cv_ndbm = yes ; then
1881                 ol_link_ldbm=ndbm
1882                 ol_with_ldbm_api=ndbm
1883
1884                 if test $ol_cv_lib_ndbm != yes ; then
1885                         LDBM_LIBS="$LDBM_LIBS $ol_cv_lib_ndbm"
1886                 fi
1887         fi
1888 fi
1889
1890 if test $ol_link_ldbm = no -a $ol_enable_ldbm != no ; then
1891         AC_MSG_WARN([could not find suitable LDBM backend])
1892         if test $ol_enable_ldbm = yes ; then
1893                 AC_MSG_ERROR([select appropriate LDBM options or disable])
1894         fi
1895
1896         AC_MSG_WARN(disabling LDBM)
1897         ol_enable_ldbm=no
1898 fi
1899
1900 if test $ol_enable_bdb = yes -o \
1901         $ol_enable_hdb = yes -o \
1902         $ol_enable_ldbm = yes ; then
1903         SLAPD_LIBS="$SLAPD_LIBS \$(LDBM_LIBS)"
1904 fi
1905
1906 dnl ----------------------------------------------------------------
1907
1908 if test $ol_enable_dynamic = yes -a $enable_shared = yes ; then
1909         BUILD_LIBS_DYNAMIC=shared
1910         AC_DEFINE(LDAP_LIBS_DYNAMIC, 1, [define if LDAP libs are dynamic])
1911         LTSTATIC=""
1912 else
1913         BUILD_LIBS_DYNAMIC=static
1914         LTSTATIC="-static"
1915 fi
1916 AC_SUBST(LTSTATIC)dnl
1917
1918 dnl ----------------------------------------------------------------
1919 if test $ol_enable_wrappers != no ; then
1920         AC_CHECK_HEADERS(tcpd.h,[
1921                 AC_MSG_CHECKING([for TCP wrappers library])
1922                 save_LIBS="$LIBS"
1923                 LIBS="$LIBS -lwrap"
1924                 AC_TRY_LINK([
1925 #include <tcpd.h>
1926 int allow_severity = 0;
1927 int deny_severity  = 0;
1928
1929 struct request_info *req;
1930                 ],[
1931 hosts_access(req)
1932                 ],[AC_MSG_RESULT([-lwrap])
1933                 have_wrappers=yes
1934                 LIBS="$save_LIBS"],[
1935                 dnl try with -lnsl
1936                 LIBS="$LIBS -lnsl"
1937                 AC_TRY_LINK([
1938 #include <tcpd.h>
1939 int allow_severity = 0;
1940 int deny_severity  = 0;
1941
1942 struct request_info *req;
1943                 ],[
1944 hosts_access(req)
1945                 ],[AC_MSG_RESULT([-lwrap -lnsl])
1946                 have_wrappers=yes
1947                 LIBS="$save_LIBS -lnsl"],[
1948                 AC_MSG_RESULT(no)
1949                 have_wrappers=no
1950                 LIBS=$save_LIBS])],[
1951                 have_wrappers=no])],[have_wrappers=no])
1952
1953         if test $have_wrappers = yes ; then
1954                 AC_DEFINE(HAVE_TCPD,1, [define if you have -lwrap])
1955                 WRAP_LIBS="-lwrap"
1956         elif test $ol_enable_wrappers = yes ; then
1957                 AC_MSG_ERROR([could not find TCP wrappers, select apppropriate options or disable])
1958         else
1959                 AC_MSG_WARN([could not find TCP wrappers, support disabled])
1960                 WRAP_LIBS=""
1961         fi
1962 fi
1963
1964 dnl ----------------------------------------------------------------
1965 if test $ol_enable_syslog != no ; then
1966         AC_CHECK_FUNC(openlog)
1967         if test $ac_cv_func_openlog = no -a $ol_enable_syslog = yes; then
1968                 AC_MSG_ERROR(could not find syslog, select appropriate options or disable)
1969         fi
1970         ol_enable_syslog=$ac_cv_func_openlog
1971 fi
1972
1973 dnl ----------------------------------------------------------------
1974 dnl dmalloc support (deprecated in favor of -DCSRIMALLOC support)
1975 dnl if test $ol_enable_dmalloc != no ; then
1976 dnl     AC_CHECK_HEADERS(dmalloc.h)
1977 dnl     AC_CHECK_LIB(dmalloc, dmalloc_shutdown)
1978 dnl fi
1979
1980 dnl ----------------------------------------------------------------
1981 dnl SQL
1982 ol_link_sql=no
1983 if test $ol_enable_sql != no ; then
1984         AC_CHECK_HEADERS(sql.h sqlext.h,[],[
1985                 AC_MSG_ERROR([could not locate SQL headers])
1986         ])
1987
1988         AC_CHECK_LIB(iodbc,SQLDriverConnect,[have_iodbc=yes],[have_iodbc=no])
1989         if test $have_iodbc = yes ; then
1990                 ol_link_sql="-liodbc"
1991         else
1992                 AC_CHECK_LIB(odbc,SQLDriverConnect,[have_odbc=yes],[have_odbc=no])
1993                 if test $have_odbc = yes ; then
1994                         ol_link_sql="-lodbc"
1995                 fi
1996         fi
1997
1998         if test $ol_link_sql != no ; then
1999                 SLAPD_SQL_LIBS="$ol_link_sql"
2000
2001         elif test $ol_enable_sql != auto ; then
2002                 AC_MSG_ERROR([could not locate suitable ODBC library])
2003         fi
2004 fi
2005
2006 dnl ----------------------------------------------------------------
2007 dnl
2008 dnl Check for Cyrus SASL
2009 dnl
2010 ol_link_sasl=no
2011 ol_link_spasswd=no
2012 if test $ol_with_cyrus_sasl != no ; then
2013         AC_CHECK_HEADERS(sasl/sasl.h sasl.h)
2014
2015         if test $ac_cv_header_sasl_sasl_h = yes -o $ac_cv_header_sasl_h = yes; then
2016                 AC_CHECK_LIB(sasl2, sasl_client_init,
2017                         [ol_link_sasl="-lsasl2"],
2018                         [AC_CHECK_LIB(sasl, sasl_client_init,
2019                                 [ol_link_sasl="-lsasl"])])
2020         fi
2021
2022         if test $ol_link_sasl = no ; then
2023                 if test $ol_with_cyrus_sasl != auto ; then
2024                         AC_MSG_ERROR([Could not locate Cyrus SASL])
2025                 else
2026                         AC_MSG_WARN([Could not locate Cyrus SASL])
2027                         AC_MSG_WARN([SASL authentication not supported!])
2028                         if test $ol_link_tls = no ; then
2029                                 AC_MSG_WARN([Strong authentication not supported!])
2030                         fi
2031                 fi
2032         else
2033                 OL_SASL_COMPAT
2034                 if test $ol_cv_sasl_compat = no ; then
2035                         ol_link_sasl=no
2036                         AC_MSG_ERROR([Cyrus SASL library located but is incompatible])
2037                 fi
2038
2039                 AC_DEFINE(HAVE_CYRUS_SASL,1,[define if you have Cyrus SASL])
2040                 SASL_LIBS="$ol_link_sasl"
2041                 if test $ol_enable_spasswd != no ; then
2042                         ol_link_spasswd=yes
2043                 fi
2044
2045                 ac_save_LIBS="$LIBS"
2046                 LIBS="$LIBS $ol_link_sasl"
2047                 AC_CHECK_FUNC(sasl_version, [AC_DEFINE(HAVE_SASL_VERSION,1,
2048                         [define if your SASL library has sasl_version()])])
2049                 LIBS="$ac_save_LIBS"
2050         fi
2051
2052 else
2053         AC_MSG_WARN([SASL authentication not supported!])
2054         if test $ol_link_tls = no ; then
2055                 AC_MSG_WARN([Strong authentication not supported!])
2056         fi
2057 fi
2058
2059 dnl ----------------------------------------------------------------
2060 dnl Check for entropy sources
2061 if test $cross_compiling != yes -a "$ac_cv_mingw32" != yes ; then
2062         dev=no
2063         if test -r /dev/urandom ; then
2064                 dev="/dev/urandom";
2065         elif test -r /idev/urandom ; then
2066                 dev="/idev/urandom";
2067         elif test -r /dev/srandom ; then
2068                 dev="/dev/srandom";
2069         elif test -r /dev/random ; then
2070                 dev="/dev/random";
2071         elif test -r /idev/random ; then
2072                 dev="/idev/random";
2073         fi
2074
2075         if test $dev != no ; then
2076                 AC_DEFINE_UNQUOTED(URANDOM_DEVICE,"$dev",[set to urandom device])
2077         fi
2078 fi
2079
2080 dnl ----------------------------------------------------------------
2081 dnl
2082 dnl Check for fetch URL support
2083 dnl             should be extended to support other fetch URL APIs
2084 dnl
2085 ol_link_fetch=no
2086 if test $ol_with_fetch != no ; then
2087         OL_LIB_FETCH
2088
2089         if test $ol_cv_lib_fetch != no ; then
2090                 LUTIL_LIBS="$LUTIL_LIBS $ol_link_fetch"
2091                 ol_link_fetch=freebsd
2092
2093         elif test $ol_with_fetch != auto ; then
2094                 AC_MSG_ERROR(no suitable API for --with-fetch=$ol_with_fetch)
2095         fi 
2096 fi
2097
2098 dnl ----------------------------------------------------------------
2099 dnl FreeBSD (and others) have crypt(3) in -lcrypt
2100 if test $ol_enable_crypt != no ; then
2101         save_LIBS="$LIBS"
2102         LIBS="$TLS_LIBS $LIBS"
2103
2104         AC_CHECK_FUNC(crypt, [have_crypt=yes], [
2105                 LIBS="$save_LIBS"
2106                 AC_CHECK_LIB(crypt, crypt, [LUTIL_LIBS="$LUTIL_LIBS -lcrypt"
2107                         have_crypt=yes], [have_crypt=no])])
2108
2109         LIBS="$save_LIBS"
2110
2111         if test $have_crypt = yes ; then
2112                 AC_DEFINE(HAVE_CRYPT,1, [define if crypt(3) is available])
2113         else
2114                 AC_MSG_WARN([could not find crypt])
2115                 if test $ol_enable_crypt = yes ; then
2116                         AC_MSG_ERROR([could not find crypt, select appropriate options or disable])
2117                 fi
2118
2119                 AC_MSG_WARN([disabling crypt support])
2120                 ol_enable_crypt=no
2121         fi
2122 fi
2123
2124 dnl ----------------------------------------------------------------
2125 dnl FreeBSD (and others) have setproctitle(3) in -lutil
2126 if test $ol_enable_proctitle != no ; then
2127         AC_CHECK_FUNC(setproctitle,     [have_setproctitle=yes], [
2128                 AC_CHECK_LIB(util, setproctitle,
2129                         [have_setproctitle=yes
2130                         LUTIL_LIBS="$LUTIL_LIBS -lutil"],
2131                         [have_setproctitle=no
2132                         LIBOBJS="$LIBOBJS setproctitle.o"
2133                         LIBSRCS="$LIBSRCS setproctitle.c"])])
2134
2135         if test $have_setproctitle = yes ; then
2136                 AC_DEFINE(HAVE_SETPROCTITLE,1,
2137                         [define if setproctitle(3) is available])
2138         fi
2139 fi
2140
2141 dnl ----------------------------------------------------------------
2142 dnl Check for SLPv2 Compliant API Library
2143 if test $ol_enable_slp != no ; then
2144         AC_CHECK_HEADERS( slp.h )
2145
2146         if test $ac_cv_header_slp_h = yes ; then
2147                 AC_CHECK_LIB(slp, SLPOpen, [have_slp=yes], [have_slp=no])
2148                 if test $have_slp = yes ; then
2149                         AC_DEFINE(HAVE_SLP, 1, [define if you have -lslp])
2150                         SLAPD_SLP_LIBS=-lslp
2151                 fi
2152
2153         elif test $ol_enable_slp = yes ; then
2154                 AC_MSG_ERROR([SLP not found])
2155         fi
2156 fi
2157
2158 dnl ----------------------------------------------------------------
2159 dnl Checks for typedefs, structures, and compiler characteristics.
2160
2161 dnl Checks for long long
2162 AC_CACHE_CHECK([long long], ol_cv_type_long_long, [
2163         AC_TRY_COMPILE([], [long long x;],
2164                 [ol_cv_type_long_long=yes],
2165                 [ol_cv_type_long_long=no])])
2166 if test $ol_cv_type_long_long = yes; then
2167         AC_DEFINE(HAVE_LONG_LONG, 1, [define if you have 'long long'])
2168 fi
2169
2170 AC_TYPE_MODE_T
2171 AC_TYPE_OFF_T
2172 AC_TYPE_PID_T
2173 AM_TYPE_PTRDIFF_T
2174 AC_TYPE_SIGNAL
2175 AC_TYPE_SIZE_T
2176
2177 AC_CHECK_TYPE(ssize_t, [signed int])
2178 AC_CHECK_TYPE(caddr_t,  [char *])
2179
2180 OL_TYPE_SOCKLEN_T
2181 AC_STRUCT_ST_BLKSIZE
2182 AC_HEADER_TIME
2183 AC_STRUCT_TM
2184 AC_TYPE_UID_T
2185 OL_TYPE_SIG_ATOMIC_T
2186
2187 dnl AC_TYPE_GETGROUPS
2188
2189 OL_STRUCT_PASSWD_PW_GECOS
2190 OL_STRUCT_PASSWD_PW_PASSWD
2191
2192 OL_C_UPPER_LOWER
2193 AC_C_CONST
2194 OL_C_VOLATILE
2195
2196 if test $cross_compiling = yes ; then
2197         AC_MSG_WARN([Crossing compiling... all bets are off!])
2198         AC_DEFINE(CROSS_COMPILING, 1, [define if cross compiling])
2199 else
2200         AC_C_BIGENDIAN
2201 fi
2202
2203 AC_COMPILE_CHECK_SIZEOF(short) 
2204 AC_COMPILE_CHECK_SIZEOF(int) 
2205 AC_COMPILE_CHECK_SIZEOF(long)
2206 AC_COMPILE_CHECK_SIZEOF(wchar_t)
2207
2208 if test "$ac_cv_sizeof_int" -lt 4 ; then
2209         AC_MSG_WARN([OpenLDAP requires 'int' to be 32 bits or greater.])
2210
2211         AC_DEFINE(LBER_INT_T,long)
2212 else
2213         AC_DEFINE(LBER_INT_T,int)
2214 fi
2215
2216 AC_DEFINE(LBER_LEN_T,long)
2217 AC_DEFINE(LBER_SOCKET_T,int)
2218 AC_DEFINE(LBER_TAG_T,long)
2219
2220 dnl ----------------------------------------------------------------
2221 dnl Checks for library functions.
2222 AC_FUNC_MEMCMP
2223 dnl AM_FUNC_MKTIME dnl checks for sys/time.h and unistd.h
2224 AC_FUNC_STRFTIME
2225 dnl AM_FUNC_STRTOD
2226
2227 OL_FUNC_INET_ATON
2228
2229 dnl Check for NT specific routines
2230 AC_CHECK_FUNC(_spawnlp, AC_DEFINE(HAVE_SPAWNLP,1,[if you have spawnlp()]))
2231
2232 AC_CHECK_FUNC(_snprintf, [ac_cv_func_snprintf=yes
2233         AC_DEFINE(snprintf, _snprintf, [define to snprintf routine])
2234 ])
2235
2236 AC_CHECK_FUNC(_vsnprintf, [ac_cv_func_vsnprintf=yes
2237         AC_DEFINE(vsnprintf, _vsnprintf, [define to vsnprintf routine])
2238 ])
2239
2240 AC_FUNC_VPRINTF
2241
2242 if test $ac_cv_func_vprintf = yes ; then
2243         dnl check for vsnprintf
2244         AC_CHECK_FUNCS(snprintf vsnprintf)
2245 fi
2246
2247 AC_CHECK_FUNCS(         \
2248         bcopy                   \
2249         closesocket             \
2250         chroot                  \
2251         endgrent                \
2252         endpwent                \
2253         fcntl                   \
2254         flock                   \
2255         fstat                   \
2256         getdtablesize   \
2257         getgrgid                \
2258         gethostname             \
2259         getpass                 \
2260         getpassphrase   \
2261         getpwuid                \
2262         getpwnam                \
2263         getspnam                \
2264         gettimeofday    \
2265         initgroups              \
2266         lockf                   \
2267         memcpy                  \
2268         memmove                 \
2269         mkstemp                 \
2270         mktemp                  \
2271         pipe                    \
2272         read                    \
2273         recv                    \
2274         recvfrom                \
2275         setpwfile               \
2276         setgid                  \
2277         setegid                 \
2278         setsid                  \
2279         setuid                  \
2280         seteuid                 \
2281         sigaction               \
2282         signal                  \
2283         sigset                  \
2284         strdup                  \
2285         strerror                \
2286         strpbrk                 \
2287         strrchr                 \
2288         strsep                  \
2289         strstr                  \
2290         strtol                  \
2291         strtoul                 \
2292         strtoq                  \
2293         strtouq                 \
2294         strtoll                 \
2295         strspn                  \
2296         sysconf                 \
2297         usleep                  \
2298         waitpid                 \
2299         wait4                   \
2300         write                   \
2301         send                    \
2302         sendmsg                 \
2303         sendto                  \
2304 )
2305
2306 dnl We actually may need to replace more than this.
2307 AC_REPLACE_FUNCS(getopt getpeereid)
2308
2309 if test "$ac_cv_func_getopt" != yes; then
2310         LIBSRCS="$LIBSRCS getopt.c"
2311 fi
2312 if test "$ac_cv_func_getpeereid" != yes; then
2313         OL_MSGHDR_MSG_ACCRIGHTS
2314         LIBSRCS="$LIBSRCS getpeereid.c"
2315 fi
2316 if test "$ac_cv_func_snprintf" != yes -o "$ac_cv_func_vsnprintf" != yes; then
2317         if test "$ac_cv_func_snprintf" != yes; then
2318                 AC_DEFINE(snprintf, ber_pvt_snprintf, [define to snprintf routine])
2319         fi
2320         if test "$ac_cv_func_vsnprintf" != yes; then
2321                 AC_DEFINE(vsnprintf, ber_pvt_vsnprintf, [define to snprintf routine])
2322         fi
2323 fi
2324
2325 dnl ----------------------------------------------------------------
2326 # Check Configuration
2327 OL_SYS_ERRLIST
2328
2329 dnl ----------------------------------------------------------------
2330 dnl Sort out defines
2331
2332 if test "$ol_enable_slapi" != no ; then
2333         dnl This check is done also if --enable-modules is used;
2334         dnl it is duplicated here, 'cause it'd be cached anyway
2335         AC_CHECK_HEADERS(ltdl.h)
2336
2337         if test $ac_cv_header_ltdl_h != yes ; then
2338                 AC_MSG_ERROR([could not locate <ltdl.h>])
2339         fi
2340         AC_CHECK_LIB(ltdl, lt_dlinit, [
2341                 SLAPI_LIBS=-lltdl
2342                 LIBSLAPI=libslapi.a
2343                 LIBSLAPITOOLS=../libslapi.a
2344                 AC_DEFINE(HAVE_LIBLTDL,1,[define if you have libtool -ltdl])
2345         ],[AC_MSG_ERROR([could not locate libtool -lltdl])])
2346
2347         AC_DEFINE(LDAP_SLAPI,1, [define this to add SLAPI code])
2348 fi
2349
2350 if test "$ol_enable_debug" != no ; then
2351         AC_DEFINE(LDAP_DEBUG,1,
2352                 [define this to add debugging code])
2353 fi
2354 if test "$ol_enable_syslog" = yes ; then
2355         AC_DEFINE(LDAP_SYSLOG,1,
2356                 [define this to add syslog code])
2357 fi
2358 if test "$ol_link_kbind" != no ; then
2359         AC_DEFINE(LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND,LDAP_VENDOR_VERSION)
2360 fi
2361 if test "$ol_enable_proctitle" != no ; then
2362         AC_DEFINE(LDAP_PROCTITLE,1,
2363                 [define this for LDAP process title support])
2364 fi
2365 if test "$ol_enable_referrals" != no ; then
2366         AC_DEFINE(LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS,LDAP_VENDOR_VERSION)
2367 fi
2368 if test "$ol_enable_local" != no; then
2369         AC_DEFINE(LDAP_PF_LOCAL,1,[define to support PF_LOCAL])
2370 fi
2371 if test "$ol_link_ipv6" != no; then
2372         AC_DEFINE(LDAP_PF_INET6,1,[define to support PF_INET6])
2373 fi
2374 if test "$ol_enable_cleartext" != no ; then
2375         AC_DEFINE(SLAPD_CLEARTEXT,1,[define to support cleartext passwords])
2376 fi
2377 if test "$ol_enable_crypt" != no ; then
2378         AC_DEFINE(SLAPD_CRYPT,1,[define to support crypt(3) passwords])
2379 fi
2380 if test "$ol_link_spasswd" != no ; then
2381         AC_DEFINE(SLAPD_SPASSWD,1,[define to support SASL passwords])
2382 fi
2383 if test "$ol_enable_multimaster" != no ; then
2384         AC_DEFINE(SLAPD_MULTIMASTER,1,[define to support multimaster replication])
2385 fi
2386 if test "$ol_enable_rlookups" != no ; then
2387         AC_DEFINE(SLAPD_RLOOKUPS,1,[define to support reverse lookups])
2388 fi
2389 if test "$ol_enable_aci" != no ; then
2390         AC_DEFINE(SLAPD_ACI_ENABLED,1,[define to support per-object ACIs])
2391 fi
2392
2393 if test "$ol_link_modules" != no ; then
2394         AC_DEFINE(SLAPD_MODULES,1,[define to support modules])
2395         BUILD_SLAPD=yes
2396         SLAPD_MODULES_LDFLAGS="-dlopen self"
2397 fi
2398
2399 AC_DEFINE(SLAPD_MOD_STATIC,1,[statically linked module])
2400 AC_DEFINE(SLAPD_MOD_DYNAMIC,2,[dynamically linked module])
2401
2402 if test "$ol_enable_bdb" != no ; then
2403         BUILD_SLAPD=yes
2404         BUILD_BDB=$ol_enable_bdb
2405         if test "$ol_enable_bdb" = mod ; then
2406                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-bdb"
2407                 MFLAG=SLAPD_MOD_DYNAMIC
2408         else
2409                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-bdb"
2410                 MFLAG=SLAPD_MOD_STATIC
2411         fi
2412         AC_DEFINE_UNQUOTED(SLAPD_BDB,$MFLAG,[define to support BDB backend])
2413 fi
2414
2415 if test "$ol_enable_dnssrv" != no ; then
2416         BUILD_SLAPD=yes
2417         BUILD_DNSSRV=$ol_enable_dnssrv
2418         if test "$ol_enable_dnssrv" = mod ; then
2419                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-dnssrv"
2420                 MFLAG=SLAPD_MOD_DYNAMIC
2421         else
2422                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-dnssrv"
2423                 MFLAG=SLAPD_MOD_STATIC
2424         fi
2425         AC_DEFINE_UNQUOTED(SLAPD_DNSSRV,$MFLAG,[define to support DNS SRV backend])
2426 fi
2427
2428 if test "$ol_enable_hdb" != no ; then
2429         BUILD_SLAPD=yes
2430         BUILD_HDB=$ol_enable_hdb
2431         if test "$ol_enable_hdb" = mod ; then
2432                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-hdb"
2433                 MFLAG=SLAPD_MOD_DYNAMIC
2434         else
2435                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-hdb"
2436                 MFLAG=SLAPD_MOD_STATIC
2437         fi
2438         AC_DEFINE_UNQUOTED(SLAPD_HDB,$MFLAG,[define to support HDB backend])
2439 fi
2440
2441 if test "$ol_enable_ldap" != no ; then
2442         BUILD_SLAPD=yes
2443         BUILD_LDAP=$ol_enable_ldap
2444         if test "$ol_enable_ldap" = mod ; then
2445                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-ldap"
2446                 MFLAG=SLAPD_MOD_DYNAMIC
2447         else
2448                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-ldap"
2449                 MFLAG=SLAPD_MOD_STATIC
2450         fi
2451         AC_DEFINE_UNQUOTED(SLAPD_LDAP,$MFLAG,[define to support LDAP backend])
2452 fi
2453
2454 if test "$ol_link_ldbm" != no -a $ol_enable_ldbm != no; then
2455         BUILD_SLAPD=yes
2456         BUILD_LDBM=$ol_enable_ldbm
2457         if test "$ol_enable_ldbm" = mod ; then
2458                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-ldbm"
2459                 MFLAG=SLAPD_MOD_DYNAMIC
2460         else
2461                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-ldbm"
2462                 MFLAG=SLAPD_MOD_STATIC
2463         fi
2464         AC_DEFINE_UNQUOTED(SLAPD_LDBM,$MFLAG,[define to support LDBM backend])
2465 fi
2466
2467 if test "$ol_enable_meta" != no ; then
2468         BUILD_SLAPD=yes
2469         BUILD_META=$ol_enable_meta
2470         BUILD_REWRITE=yes
2471         if test "$ol_enable_meta" = mod ; then
2472                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-meta"
2473                 MFLAG=SLAPD_MOD_DYNAMIC
2474         else
2475                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-meta"
2476                 MFLAG=SLAPD_MOD_STATIC
2477         fi
2478         AC_DEFINE_UNQUOTED(SLAPD_META,$MFLAG,[define to support LDAP Metadirectory backend])
2479 fi
2480
2481 if test "$ol_enable_monitor" != no ; then
2482         BUILD_SLAPD=yes
2483         BUILD_MONITOR=$ol_enable_monitor
2484         if test "$ol_enable_monitor" = mod ; then
2485                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-monitor"
2486                 MFLAG=SLAPD_MOD_DYNAMIC
2487         else
2488                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-monitor"
2489                 MFLAG=SLAPD_MOD_STATIC
2490         fi
2491         AC_DEFINE_UNQUOTED(SLAPD_MONITOR,$MFLAG,[define to support cn=Monitor backend])
2492 fi
2493
2494 if test "$ol_enable_null" != no ; then
2495         BUILD_SLAPD=yes
2496         BUILD_NULL=$ol_enable_null
2497         if test "$ol_enable_null" = mod ; then
2498                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-null"
2499                 MFLAG=SLAPD_MOD_DYNAMIC
2500         else
2501                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-null"
2502                 MFLAG=SLAPD_MOD_STATIC
2503         fi
2504         AC_DEFINE_UNQUOTED(SLAPD_NULL,$MFLAG,[define to support NULL backend])
2505 fi
2506
2507 if test "$ol_enable_passwd" != no ; then
2508         BUILD_SLAPD=yes
2509         BUILD_PASSWD=$ol_enable_passwd
2510         if test "$ol_enable_passwd" = mod ; then
2511                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-passwd"
2512                 MFLAG=SLAPD_MOD_DYNAMIC
2513         else
2514                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-passwd"
2515                 MFLAG=SLAPD_MOD_STATIC
2516         fi
2517         AC_DEFINE_UNQUOTED(SLAPD_PASSWD,$MFLAG,[define to support PASSWD backend])
2518 fi
2519
2520 if test "$ol_link_perl" != no ; then
2521         BUILD_SLAPD=yes
2522         BUILD_PERL=$ol_enable_perl
2523         if test "$ol_enable_perl" = mod ; then
2524                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-perl"
2525                 MFLAG=SLAPD_MOD_DYNAMIC
2526         else
2527                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-perl"
2528                 MFLAG=SLAPD_MOD_STATIC
2529         fi
2530         AC_DEFINE_UNQUOTED(SLAPD_PERL,$MFLAG,[define to support PERL backend])
2531 fi
2532
2533 if test "$ol_enable_shell" != no ; then
2534         if test "$ol_link_thread" != no ; then
2535                 AC_MSG_WARN([Use of --without-threads is recommended with back-shell])
2536         fi
2537         BUILD_SLAPD=yes
2538         BUILD_SHELL=$ol_enable_shell
2539         if test "$ol_enable_shell" = mod ; then
2540                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-shell"
2541                 MFLAG=SLAPD_MOD_DYNAMIC
2542         else
2543                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-shell"
2544                 MFLAG=SLAPD_MOD_STATIC
2545         fi
2546         AC_DEFINE_UNQUOTED(SLAPD_SHELL,$MFLAG,[define to support SHELL backend])
2547 fi
2548
2549 if test "$ol_link_sql" != no ; then
2550         BUILD_SLAPD=yes
2551         BUILD_SQL=$ol_enable_sql
2552         if test "$ol_enable_sql" = mod; then
2553                 SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-sql"
2554                 MFLAG=SLAPD_MOD_DYNAMIC
2555         else
2556                 SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-sql"
2557                 MFLAG=SLAPD_MOD_STATIC
2558         fi
2559         AC_DEFINE_UNQUOTED(SLAPD_SQL,$MFLAG,[define to support SQL backend])
2560 fi
2561
2562 if test "$ol_enable_dyngroup" != no ; then
2563         BUILD_DYNGROUP=$ol_enable_dyngroup
2564         if test "$ol_enable_dyngroup" = mod ; then
2565                 MFLAG=SLAPD_MOD_DYNAMIC
2566                 SLAPD_DYNAMIC_OVERLAYS="$SLAPD_DYNAMIC_OVERLAYS dyngroup.la"
2567         else
2568                 MFLAG=SLAPD_MOD_STATIC
2569         fi
2570         AC_DEFINE_UNQUOTED(SLAPD_OVER_DYNGROUP,$MFLAG,[define for Dynamic Group overlay])
2571 fi
2572
2573 if test "$ol_enable_proxycache" != no ; then
2574         BUILD_PROXYCACHE=$ol_enable_proxycache
2575         if test "$ol_enable_proxycache" = mod ; then
2576                 MFLAG=SLAPD_MOD_DYNAMIC
2577                 SLAPD_DYNAMIC_OVERLAYS="$SLAPD_DYNAMIC_OVERLAYS pcache.la"
2578         else
2579                 MFLAG=SLAPD_MOD_STATIC
2580         fi
2581         AC_DEFINE_UNQUOTED(SLAPD_OVER_PROXYCACHE,$MFLAG,[define for Proxy Cache overlay])
2582 fi
2583
2584 if test "$ol_enable_slurpd" != no -a "$ol_link_threads" != no -a \
2585         $BUILD_SLAPD = yes ; then
2586         BUILD_SLURPD=yes
2587 fi
2588
2589 if test "$ol_enable_rewrite" != no ; then
2590         AC_DEFINE(ENABLE_REWRITE,1,[define to enable rewriting in back-ldap and back-meta])
2591         BUILD_REWRITE=yes
2592 fi
2593
2594 if test "$ol_enable_slapi" != no ; then
2595         AC_DEFINE(ENABLE_SLAPI,1,[define to enable slapi library])
2596         BUILD_SLAPI=yes
2597         SLAPD_SLAPI_DEPEND=libslapi.a
2598 fi
2599
2600 dnl ----------------------------------------------------------------
2601
2602 dnl
2603 dnl For Windows build, we don't want to include -dlopen flags.
2604 dnl They hurt more than they help.
2605 dnl
2606
2607 if test "$ac_cv_mingw32" = yes ; then
2608         PLAT=NT
2609         SLAPD_MODULES_LDFLAGS=
2610 else
2611         PLAT=UNIX
2612 fi
2613
2614 if test -z "$SLAPD_STATIC_BACKENDS"; then
2615         SLAPD_NO_STATIC='#'
2616 else
2617         SLAPD_NO_STATIC=
2618 fi
2619
2620 AC_SUBST(LIBSRCS)
2621 AC_SUBST(PLAT)
2622 AC_SUBST(WITH_TLS)
2623 AC_SUBST(BUILD_LIBS_DYNAMIC)
2624
2625 AC_SUBST(BUILD_SLAPD)
2626 dnl slapi
2627   AC_SUBST(BUILD_SLAPI)
2628   AC_SUBST(SLAPD_SLAPI_DEPEND)
2629 dnl backends
2630   AC_SUBST(BUILD_BDB)
2631   AC_SUBST(BUILD_DNSSRV)
2632   AC_SUBST(BUILD_HDB)
2633   AC_SUBST(BUILD_LDAP)
2634   AC_SUBST(BUILD_LDBM)
2635   AC_SUBST(BUILD_META)
2636   AC_SUBST(BUILD_MONITOR)
2637   AC_SUBST(BUILD_NULL)
2638   AC_SUBST(BUILD_PASSWD)
2639   AC_SUBST(BUILD_PERL)
2640   AC_SUBST(BUILD_SHELL)
2641   AC_SUBST(BUILD_SQL)
2642 dnl overlays
2643   AC_SUBST(BUILD_DYNGROUP)
2644   AC_SUBST(BUILD_PROXYCACHE)
2645 AC_SUBST(BUILD_SLURPD)
2646
2647 AC_SUBST(LDAP_LIBS)
2648 AC_SUBST(SLAPD_LIBS)
2649 AC_SUBST(SLURPD_LIBS)
2650 AC_SUBST(LDBM_LIBS)
2651 AC_SUBST(LTHREAD_LIBS)
2652 AC_SUBST(LUTIL_LIBS)
2653 AC_SUBST(WRAP_LIBS)
2654
2655 AC_SUBST(SLAPD_MODULES_CPPFLAGS)
2656 AC_SUBST(SLAPD_MODULES_LDFLAGS)
2657
2658 AC_SUBST(SLAPD_NO_STATIC)
2659 AC_SUBST(SLAPD_STATIC_BACKENDS)
2660 AC_SUBST(SLAPD_DYNAMIC_BACKENDS)
2661 AC_SUBST(SLAPD_DYNAMIC_OVERLAYS)
2662
2663 AC_SUBST(PERL_CPPFLAGS)
2664 AC_SUBST(SLAPD_PERL_LDFLAGS)
2665 AC_SUBST(MOD_PERL_LDFLAGS)
2666
2667 AC_SUBST(KRB4_LIBS)
2668 AC_SUBST(KRB5_LIBS)
2669 AC_SUBST(SASL_LIBS)
2670 AC_SUBST(TLS_LIBS)
2671 AC_SUBST(MODULES_LIBS)
2672 AC_SUBST(SLAPI_LIBS)
2673 AC_SUBST(LIBSLAPI)
2674 AC_SUBST(LIBSLAPITOOLS)
2675 AC_SUBST(AUTH_LIBS)
2676
2677 AC_SUBST(SLAPD_SLP_LIBS)
2678
2679 AC_SUBST(SLAPD_SQL_LDFLAGS)
2680 AC_SUBST(SLAPD_SQL_LIBS)
2681 AC_SUBST(SLAPD_SQL_INCLUDES)
2682
2683 dnl ----------------------------------------------------------------
2684 dnl final help output
2685 AC_ARG_WITH(xxinstall,[
2686 See INSTALL file for further details.])
2687
2688 dnl ----------------------------------------------------------------
2689 dnl final output
2690 dnl
2691
2692 AC_OUTPUT( \
2693 Makefile:build/top.mk:Makefile.in:build/dir.mk \
2694 doc/Makefile:build/top.mk:doc/Makefile.in:build/dir.mk \
2695 doc/man/Makefile:build/top.mk:doc/man/Makefile.in:build/dir.mk \
2696 doc/man/man1/Makefile:build/top.mk:doc/man/man1/Makefile.in:build/man.mk \
2697 doc/man/man3/Makefile:build/top.mk:doc/man/man3/Makefile.in:build/man.mk \
2698 doc/man/man5/Makefile:build/top.mk:doc/man/man5/Makefile.in:build/man.mk \
2699 doc/man/man8/Makefile:build/top.mk:doc/man/man8/Makefile.in:build/man.mk \
2700 clients/Makefile:build/top.mk:clients/Makefile.in:build/dir.mk \
2701 clients/tools/Makefile:build/top.mk:clients/tools/Makefile.in:build/rules.mk \
2702 include/Makefile:build/top.mk:include/Makefile.in \
2703 libraries/Makefile:build/top.mk:libraries/Makefile.in:build/dir.mk      \
2704 libraries/liblber/Makefile:build/top.mk:libraries/liblber/Makefile.in:build/lib.mk:build/lib-shared.mk  \
2705 libraries/libldap/Makefile:build/top.mk:libraries/libldap/Makefile.in:build/lib.mk:build/lib-shared.mk  \
2706 libraries/libldap_r/Makefile:build/top.mk:libraries/libldap_r/Makefile.in:build/lib.mk:build/lib-shared.mk      \
2707 libraries/liblunicode/Makefile:build/top.mk:libraries/liblunicode/Makefile.in:build/lib.mk:build/lib-static.mk  \
2708 libraries/liblutil/Makefile:build/top.mk:libraries/liblutil/Makefile.in:build/lib.mk:build/lib-static.mk        \
2709 libraries/librewrite/Makefile:build/top.mk:libraries/librewrite/Makefile.in:build/lib.mk:build/lib-static.mk \
2710 servers/Makefile:build/top.mk:servers/Makefile.in:build/dir.mk \
2711 servers/slapd/Makefile:build/top.mk:servers/slapd/Makefile.in:build/srv.mk \
2712 servers/slapd/back-bdb/Makefile:build/top.mk:servers/slapd/back-bdb/Makefile.in:build/mod.mk \
2713 servers/slapd/back-dnssrv/Makefile:build/top.mk:servers/slapd/back-dnssrv/Makefile.in:build/mod.mk \
2714 servers/slapd/back-hdb/Makefile:build/top.mk:servers/slapd/back-hdb/Makefile.in:build/mod.mk \
2715 servers/slapd/back-ldap/Makefile:build/top.mk:servers/slapd/back-ldap/Makefile.in:build/mod.mk \
2716 servers/slapd/back-ldbm/Makefile:build/top.mk:servers/slapd/back-ldbm/Makefile.in:build/mod.mk \
2717 servers/slapd/back-meta/Makefile:build/top.mk:servers/slapd/back-meta/Makefile.in:build/mod.mk \
2718 servers/slapd/back-monitor/Makefile:build/top.mk:servers/slapd/back-monitor/Makefile.in:build/mod.mk \
2719 servers/slapd/back-null/Makefile:build/top.mk:servers/slapd/back-null/Makefile.in:build/mod.mk \
2720 servers/slapd/back-passwd/Makefile:build/top.mk:servers/slapd/back-passwd/Makefile.in:build/mod.mk \
2721 servers/slapd/back-perl/Makefile:build/top.mk:servers/slapd/back-perl/Makefile.in:build/mod.mk \
2722 servers/slapd/back-shell/Makefile:build/top.mk:servers/slapd/back-shell/Makefile.in:build/mod.mk \
2723 servers/slapd/back-sql/Makefile:build/top.mk:servers/slapd/back-sql/Makefile.in:build/mod.mk \
2724 servers/slapd/shell-backends/Makefile:build/top.mk:servers/slapd/shell-backends/Makefile.in:build/srv.mk \
2725 servers/slapd/slapi/Makefile:build/top.mk:servers/slapd/slapi/Makefile.in:build/lib.mk:build/lib-shared.mk  \
2726 servers/slapd/overlays/Makefile:build/top.mk:servers/slapd/overlays/Makefile.in:build/lib.mk \
2727 servers/slurpd/Makefile:build/top.mk:servers/slurpd/Makefile.in:build/srv.mk \
2728 tests/Makefile:build/top.mk:tests/Makefile.in:build/dir.mk \
2729 tests/run \
2730 tests/progs/Makefile:build/top.mk:tests/progs/Makefile.in:build/rules.mk \
2731 ,[
2732 chmod +x tests/run
2733 date > stamp-h
2734 echo Please run \"make depend\" to build dependencies
2735 ])