1 dnl Copyright 1998 The OpenLDAP Foundation, All Rights Reserved.
2 dnl COPYING RESTRICTIONS APPLY, See COPYRIGHT file
4 dnl OpenLDAP Autoconf Macros
6 dnl builtin(include, build/libtool.m4)dnl
7 dnl --------------------------------------------------------------------
8 dnl Restricted form of AC_ARG_ENABLE that limits user options
12 dnl $3 = default value (auto)
13 dnl $4 = allowed values (auto yes no)
14 AC_DEFUN([OL_ARG_ENABLE], [# OpenLDAP --enable-$1
15 AC_ARG_ENABLE($1,[$2 (]ifelse($3,,auto,$3)[)],[
17 for ol_val in ifelse($4,,[auto yes no],[$4]) ; do
18 if test "$enableval" = "$ol_val" ; then
22 if test "$ol_arg" = "invalid" ; then
23 AC_MSG_ERROR(bad value $enableval for --enable-$1)
25 ol_enable_$1="$ol_arg"
27 [ ol_enable_$1=ifelse($3,,"auto","$3")])dnl
28 dnl AC_VERBOSE(OpenLDAP -enable-$1 $ol_enable_$1)
32 dnl --------------------------------------------------------------------
33 dnl Restricted form of AC_ARG_WITH that limits user options
37 dnl $3 = default value (no)
38 dnl $4 = allowed values (yes or no)
39 AC_DEFUN([OL_ARG_WITH], [# OpenLDAP --with-$1
40 AC_ARG_WITH($1,[$2 (]ifelse($3,,yes,$3)[)],[
42 for ol_val in ifelse($4,,[yes no],[$4]) ; do
43 if test "$withval" = "$ol_val" ; then
47 if test "$ol_arg" = "invalid" ; then
48 AC_MSG_ERROR(bad value $withval for --with-$1)
52 [ ol_with_$1=ifelse($3,,"no","$3")])dnl
53 dnl AC_VERBOSE(OpenLDAP --with-$1 $ol_with_$1)
57 dnl ====================================================================
58 dnl Check if db.h is Berkeley DB2
60 dnl defines ol_cv_header_db2 to 'yes' or 'no'
63 dnl AC_CHECK_HEADERS(db.h)
65 AC_DEFUN([OL_HEADER_BERKELEY_DB2],
66 [AC_CHECK_HEADERS(db.h)
67 if test $ac_cv_header_db_h = yes ; then
68 AC_CACHE_CHECK([if db.h is DB2], [ol_cv_header_db2],[
69 AC_EGREP_CPP(__db_version_2,[
71 /* this check could be improved */
72 # ifdef DB_VERSION_MAJOR
73 # if DB_VERSION_MAJOR == 2
77 ], ol_cv_header_db2=yes, ol_cv_header_db2=no)])
82 dnl --------------------------------------------------------------------
83 dnl Check if Berkeley DB2 library exists
84 dnl Check for dbopen in standard libraries or -ldb
86 dnl defines ol_cv_lib_db2 to '-ldb' or 'no'
89 dnl AC_CHECK_LIB(db,db_open)
91 AC_DEFUN([OL_LIB_BERKELEY_DB2],
92 [AC_CACHE_CHECK([for DB2 library], [ol_cv_lib_db2],
94 AC_CHECK_LIB(db,db_open,[ol_cv_lib_db2=-ldb],[ol_cv_lib_db2=no])
99 dnl --------------------------------------------------------------------
100 dnl Check if Berkeley db2 exists
102 dnl defines ol_cv_berkeley_db2 to 'yes' or 'no'
105 dnl OL_LIB_BERKELEY_DB2
106 dnl OL_HEADER_BERKELEY_DB2
108 AC_DEFUN([OL_BERKELEY_DB2],
109 [AC_REQUIRE([OL_LIB_BERKELEY_DB2])
110 AC_REQUIRE([OL_HEADER_BERKELEY_DB2])
111 AC_CACHE_CHECK([for Berkeley DB2], [ol_cv_berkeley_db2], [
112 if test "$ol_cv_lib_db2" = no -o "$ol_cv_header_db2" = no ; then
113 ol_cv_berkeley_db2=no
115 ol_cv_berkeley_db2=yes
118 if test $ol_cv_berkeley_db2 = yes ; then
119 AC_DEFINE(HAVE_BERKELEY_DB2,1, [define if Berkeley DBv2 is available])
123 dnl ====================================================================
124 dnl Check for db.h/db_185.h is Berkeley DB
126 dnl defines ol_cv_header_db to 'yes' or 'no'
129 dnl OL_HEADER_BERKELEY_DB2
130 dnl AC_CHECK_HEADERS(db_185.h)
132 AC_DEFUN([OL_HEADER_BERKELEY_DB],
133 [AC_REQUIRE([OL_HEADER_BERKELEY_DB2])
134 AC_CHECK_HEADERS(db_185.h)
135 if test "$ol_cv_header_db2" = yes ; then
138 ol_cv_header_db=$ac_cv_header_db_185_h
140 ol_cv_header_db=$ac_cv_header_db_h
144 dnl --------------------------------------------------------------------
145 dnl Check if Berkeley DB library exists
146 dnl Check for dbopen in standard libraries or -ldb
148 dnl defines ol_cv_lib_db to 'yes' or '-ldb' or 'no'
149 dnl 'yes' implies dbopen is in $LIBS
152 dnl AC_CHECK_FUNC(dbopen)
153 dnl AC_CHECK_LIB(db,dbopen)
155 AC_DEFUN([OL_LIB_BERKELEY_DB],
156 [AC_CACHE_CHECK([for Berkeley DB library], [ol_cv_lib_db],
158 AC_CHECK_FUNC(dbopen,[ol_cv_lib_db=yes], [
159 AC_CHECK_LIB(db,dbopen,[ol_cv_lib_db=-ldb],[ol_cv_lib_db=no])
165 dnl --------------------------------------------------------------------
166 dnl Check if Berkeley DB exists
168 dnl defines ol_cv_berkeley_db to 'yes' or 'no'
171 dnl OL_LIB_BERKELEY_DB
172 dnl OL_HEADER_BERKELEY_DB
174 AC_DEFUN([OL_BERKELEY_DB],
175 [AC_REQUIRE([OL_LIB_BERKELEY_DB])
176 AC_REQUIRE([OL_HEADER_BERKELEY_DB])
177 AC_CACHE_CHECK([for Berkeley DB], [ol_cv_berkeley_db], [
178 if test "$ol_cv_lib_db" = no -o "$ol_cv_header_db" = no ; then
181 ol_cv_berkeley_db=yes
184 if test $ol_cv_berkeley_db = yes ; then
185 AC_DEFINE(HAVE_BERKELEY_DB,1, [define if Berkeley DB is available])
189 dnl ====================================================================
190 dnl Check if GDBM library exists
191 dnl Check for gdbm_open in standard libraries or -lgdbm
193 dnl defines ol_cv_lib_gdbm to 'yes' or '-lgdbm' or 'no'
194 dnl 'yes' implies gdbm_open is in $LIBS
197 dnl AC_CHECK_FUNC(gdbm_open)
198 dnl AC_CHECK_LIB(gdbm,gdbm_open)
200 AC_DEFUN([OL_LIB_GDBM],
201 [AC_CACHE_CHECK(for GDBM library, [ol_cv_lib_gdbm],
203 AC_CHECK_FUNC(gdbm_open,[ol_cv_lib_gdbm=yes], [
204 AC_CHECK_LIB(gdbm,gdbm_open,[ol_cv_lib_gdbm=-lgdbm],[ol_cv_lib_gdbm=no])
210 dnl --------------------------------------------------------------------
211 dnl Check if GDBM exists
213 dnl defines ol_cv_gdbm to 'yes' or 'no'
217 dnl AC_CHECK_HEADERS(gdbm.h)
220 [AC_REQUIRE([OL_LIB_GDBM])
221 AC_CHECK_HEADERS(gdbm.h)
222 AC_CACHE_CHECK(for db, [ol_cv_gdbm], [
223 if test $ol_cv_lib_gdbm = no -o $ac_cv_header_gdbm_h = no ; then
229 if test $ol_cv_gdbm = yes ; then
230 AC_DEFINE(HAVE_GDBM,1, [define if GNU DBM is available])
234 dnl ====================================================================
235 dnl Check if NDBM library exists
236 dnl Check for dbm_open in standard libraries or -lndbm or -ldbm
238 dnl defines ol_cv_lib_ndbm to 'yes' or '-lndbm' or -ldbm or 'no'
239 dnl 'yes' implies ndbm_open is in $LIBS
242 dnl AC_CHECK_FUNC(dbm_open)
243 dnl AC_CHECK_LIB(ndbm,dbm_open)
244 dnl AC_CHECK_LIB(dbm,dbm_open)
247 dnl should also check SVR4 case: dbm_open() in -lucb but that
248 dnl would requiring dealing with -L/usr/ucblib
250 AC_DEFUN([OL_LIB_NDBM],
251 [AC_CACHE_CHECK(for NDBM library, [ol_cv_lib_ndbm],
253 AC_CHECK_FUNC(dbm_open,[ol_cv_lib_ndbm=yes], [
254 AC_CHECK_LIB(ndbm,dbm_open,[ol_cv_lib_ndbm=-lndbm], [
255 AC_CHECK_LIB(dbm,dbm_open,[ol_cv_lib_ndbm=-ldbm],
256 [ol_cv_lib_ndbm=no])dnl
263 dnl --------------------------------------------------------------------
264 dnl Check if NDBM exists
266 dnl defines ol_cv_ndbm to 'yes' or 'no'
270 dnl AC_CHECK_HEADERS(ndbm.h)
273 dnl Doesn't handle SVR4 case (see above)
276 [AC_REQUIRE([OL_LIB_NDBM])
277 AC_CHECK_HEADERS(ndbm.h)
278 AC_CACHE_CHECK(for db, [ol_cv_ndbm], [
279 if test $ol_cv_lib_ndbm = no -o $ac_cv_header_ndbm_h = no ; then
285 if test $ol_cv_ndbm = yes ; then
286 AC_DEFINE(HAVE_NDBM,1, [define if NDBM is available])
290 dnl ====================================================================
291 dnl Check POSIX Thread version
293 dnl defines ol_cv_posix_version to 'final' or 'draft' or 'unknown'
294 dnl 'unknown' implies that the version could not be detected
295 dnl or that pthreads.h does exist. Existance of pthreads.h
296 dnl should be tested separately.
298 AC_DEFUN([OL_POSIX_THREAD_VERSION],
299 [AC_CACHE_CHECK([POSIX thread version],[ol_cv_pthread_version],[
300 AC_EGREP_CPP(pthread_version_final,[
301 # include <pthread.h>
302 /* this check could be improved */
303 # ifdef PTHREAD_ONCE_INIT
304 pthread_version_final
306 ], ol_pthread_final=yes, ol_pthread_final=no)
308 AC_EGREP_CPP(pthread_version_draft4,[
309 # include <pthread.h>
310 /* this check could be improved */
311 # ifdef pthread_once_init
312 pthread_version_draft4
314 ], ol_pthread_draft4=yes, ol_pthread_draft4=no)
316 if test $ol_pthread_final = yes -a $ol_pthread_draft4 = no; then
317 ol_cv_pthread_version=final
318 elif test $ol_pthread_final = no -a $ol_pthread_draft4 = yes; then
319 ol_cv_pthread_version=draft4
321 ol_cv_pthread_version=unknown
326 dnl --------------------------------------------------------------------
327 dnl Check LinuxThread
329 dnl defines ol_cv_linux_threads to 'yes' or 'no'
330 dnl 'no' implies pthreads.h is not LinuxThreads or pthreads.h
331 dnl doesn't exists. Existance of pthread.h should separately
334 AC_DEFUN([OL_LINUX_THREADS],
336 AC_CACHE_CHECK([for LinuxThreads], [ol_cv_linux_threads], [
337 res=`grep Linuxthreads /usr/include/pthread.h 2>/dev/null | wc -l`
338 if test "$res" -gt 0 ; then
339 ol_cv_linux_threads=yes
341 ol_cv_linux_threads=no
346 dnl ====================================================================
347 dnl Check if toupper() requires islower() to be called first
348 AC_DEFUN([OL_C_UPPER_LOWER],
350 AC_MSG_CHECKING([if toupper() requires islower()])
351 AC_CACHE_VAL(ol_cv_c_upper_lower,[
356 if ('C' == toupper('C'))
361 [ol_cv_c_upper_lower=no],
362 [ol_cv_c_upper_lower=yes],
363 [ol_cv_c_upper_lower=safe])])
364 AC_MSG_RESULT($ol_cv_c_upper_lower)
365 if test $ol_cv_c_upper_lower != no ; then
366 AC_DEFINE(C_UPPER_LOWER,1, [define if toupper() requires islower()])
370 dnl ====================================================================
371 dnl Check for declaration of sys_errlist in one of stdio.h and errno.h.
372 dnl Declaration of sys_errlist on BSD4.4 interferes with our declaration.
373 dnl Reported by Keith Bostic.
374 AC_DEFUN([OL_SYS_ERRLIST],
376 AC_MSG_CHECKING([declaration of sys_errlist])
377 AC_CACHE_VAL(ol_cv_dcl_sys_errlist,[
380 #include <sys/types.h>
381 #include <errno.h> ],
382 [char *c = (char *) *sys_errlist],
383 [ol_cv_dcl_sys_errlist=yes],
384 [ol_cv_dcl_sys_errlist=no])])
385 AC_MSG_RESULT($ol_cv_dcl_sys_errlist)
386 # It's possible (for near-UNIX clones) that sys_errlist doesn't exist
387 if test $ol_cv_dcl_sys_errlist = no ; then
388 AC_DEFINE(DECL_SYS_ERRLIST,1,
389 [define if sys_errlist is declared in stdio.h or errno.h])
390 AC_MSG_CHECKING([existence of sys_errlist])
391 AC_CACHE_VAL(ol_cv_have_sys_errlist,[
392 AC_TRY_LINK([#include <errno.h>],
393 [char *c = (char *) *sys_errlist],
394 [ol_cv_have_sys_errlist=yes],
395 [ol_cv_have_sys_errlist=no])])
396 AC_MSG_RESULT($ol_cv_have_sys_errlist)
398 if test $ol_cv_have_sys_errlist = yes ; then
399 AC_DEFINE(HAVE_SYS_ERRLIST,1,
400 [define if you actually have sys_errlist in your libs])
404 dnl ====================================================================
405 dnl Early MIPS compilers (used in Ultrix 4.2) don't like
406 dnl "int x; int *volatile a = &x; *a = 0;"
407 dnl -- borrowed from PDKSH
408 AC_DEFUN(OL_C_VOLATILE,
409 [AC_CACHE_CHECK(if compiler understands volatile, ol_cv_c_volatile,
410 [AC_TRY_COMPILE([int x, y, z;],
411 [volatile int a; int * volatile b = x ? &y : &z;
412 /* Older MIPS compilers (eg., in Ultrix 4.2) don't like *b = 0 */
413 *b = 0;], ol_cv_c_volatile=yes, ol_cv_c_volatile=no)])
414 if test $ol_cv_c_volatile = yes; then
421 dnl ====================================================================
422 dnl Define sig_atomic_t if not defined in signal.h
423 AC_DEFUN(OL_TYPE_SIG_ATOMIC_T,
424 [AC_CACHE_CHECK(for sig_atomic_t, ol_cv_type_sig_atomic_t,
425 [AC_TRY_COMPILE([#include <signal.h>], [sig_atomic_t atomic;],
426 ol_cv_type_sig_atomic_t=yes, ol_cv_type_sig_atomic_t=no)])
427 if test $ol_cv_type_sig_atomic_t = no; then
428 AC_DEFINE(sig_atomic_t, int)
432 dnl ====================================================================
433 dnl check no of arguments for ctime_r
434 AC_DEFUN(OL_FUNC_CTIME_R_NARGS,
435 [AC_CACHE_CHECK(number of arguments of ctime_r, ol_cv_func_ctime_r_nargs,
436 [AC_TRY_COMPILE([#include <time.h>],
437 [time_t ti; char *buffer; ctime_r(&ti,buffer,32);],
438 ol_cv_func_ctime_r_nargs=3,
439 [AC_TRY_COMPILE([#include <time.h>],
440 [time_t ti; char *buffer; ctime_r(&ti,buffer);],
441 ol_cv_func_ctime_r_nargs=2,
442 ol_cv_func_ctime_r_nargs=0)])])
443 if test $ol_cv_func_ctime_r_nargs -gt 1 ; then
444 AC_DEFINE_UNQUOTED(CTIME_R_NARGS, $ol_cv_func_ctime_r_nargs,
445 [set to the number of arguments ctime_r() expects])
449 dnl --------------------------------------------------------------------
450 dnl check return type of ctime_r()
451 AC_DEFUN(OL_FUNC_CTIME_R_TYPE,
452 [AC_CACHE_CHECK(return type of ctime_r, ol_cv_func_ctime_r_type,
453 [AC_TRY_COMPILE([#include <time.h>],
455 ol_cv_func_ctime_r_type="int", ol_cv_func_ctime_r_type="charp")
457 if test $ol_cv_func_ctime_r_type = "int" ; then
458 AC_DEFINE(CTIME_R_RETURNS_INT,1, [define if ctime_r() returns int])
461 dnl ====================================================================
462 dnl check no of arguments for gethostbyname_r
463 AC_DEFUN(OL_FUNC_GETHOSTBYNAME_R_NARGS,
464 [AC_CACHE_CHECK(number of arguments of gethostbyname_r,
465 ol_cv_func_gethostbyname_r_nargs,
466 [AC_TRY_COMPILE([#include <sys/types.h>
467 #include <sys/socket.h>
468 #include <netinet/in.h>
470 #define BUFSIZE (sizeof(struct hostent)+10)],
471 [struct hostent hent; char buffer[BUFSIZE];
472 int bufsize=BUFSIZE;int h_errno;
473 (void)gethostbyname_r("segovia.cs.purdue.edu", &hent,
474 buffer, bufsize, &h_errno);],
475 ol_cv_func_gethostbyname_r_nargs=5,
476 [AC_TRY_COMPILE([#include <sys/types.h>
477 #include <sys/socket.h>
478 #include <netinet/in.h>
480 #define BUFSIZE (sizeof(struct hostent)+10)],
481 [struct hostent hent;struct hostent *rhent;
482 char buffer[BUFSIZE];
483 int bufsize=BUFSIZE;int h_errno;
484 (void)gethostbyname_r("localhost", &hent, buffer, bufsize,
486 ol_cv_func_gethostbyname_r_nargs=6,
487 ol_cv_func_gethostbyname_r_nargs=0)])])
488 if test $ol_cv_func_gethostbyname_r_nargs -gt 1 ; then
489 AC_DEFINE_UNQUOTED(GETHOSTBYNAME_R_NARGS,
490 $ol_cv_func_gethostbyname_r_nargs,
491 [set to the number of arguments gethostbyname_r() expects])
495 dnl check no of arguments for gethostbyaddr_r
496 AC_DEFUN(OL_FUNC_GETHOSTBYADDR_R_NARGS,
497 [AC_CACHE_CHECK(number of arguments of gethostbyaddr_r,
498 [ol_cv_func_gethostbyaddr_r_nargs],
499 [AC_TRY_COMPILE([#include <sys/types.h>
500 #include <sys/socket.h>
501 #include <netinet/in.h>
503 #define BUFSIZE (sizeof(struct hostent)+10)],
504 [struct hostent hent; char buffer[BUFSIZE];
506 size_t alen=sizeof(struct in_addr);
507 int bufsize=BUFSIZE;int h_errno;
508 (void)gethostbyaddr_r( (void *)&(add.s_addr),
509 alen, AF_INET, &hent, buffer, bufsize, &h_errno);],
510 ol_cv_func_gethostbyaddr_r_nargs=7,
511 [AC_TRY_COMPILE([#include <sys/types.h>
512 #include <sys/socket.h>
513 #include <netinet/in.h>
515 #define BUFSIZE (sizeof(struct hostent)+10)],
516 [struct hostent hent;
517 struct hostent *rhent; char buffer[BUFSIZE];
519 size_t alen=sizeof(struct in_addr);
520 int bufsize=BUFSIZE;int h_errno;
521 (void)gethostbyaddr_r( (void *)&(add.s_addr),
522 alen, AF_INET, &hent, buffer, bufsize,
524 ol_cv_func_gethostbyaddr_r_nargs=8,
525 ol_cv_func_gethostbyaddr_r_nargs=0)])])
526 if test $ol_cv_func_gethostbyaddr_r_nargs -gt 1 ; then
527 AC_DEFINE_UNQUOTED(GETHOSTBYADDR_R_NARGS,
528 $ol_cv_func_gethostbyaddr_r_nargs,
529 [set to the number of arguments gethostbyaddr_r() expects])