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