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