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 ====================================================================
59 dnl check if hard links are supported.
61 AC_DEFUN([OL_PROG_LN_H], [# test for ln hardlink support
62 AC_MSG_CHECKING(whether ln works)
63 AC_CACHE_VAL(ol_cv_prog_LN_H,
64 [rm -f conftest.src conftest.dst
65 echo "conftest" > conftest.src
66 if ln conftest.src conftest.dst 2>/dev/null
72 rm -f conftest.src conftest.dst
74 LN_H="$ol_cv_prog_LN_H"
75 if test "$ol_cv_prog_LN_H" = "ln"; then
83 dnl ====================================================================
84 dnl Check if db.h is Berkeley DB2
86 dnl defines ol_cv_header_db2 to 'yes' or 'no'
89 dnl AC_CHECK_HEADERS(db.h)
91 AC_DEFUN([OL_HEADER_BERKELEY_DB2],
92 [AC_CHECK_HEADERS(db.h)
93 if test $ac_cv_header_db_h = yes ; then
94 AC_CACHE_CHECK([if db.h is DB2], [ol_cv_header_db2],[
95 AC_EGREP_CPP(__db_version_2,[
97 /* this check could be improved */
98 # ifdef DB_VERSION_MAJOR
99 # if DB_VERSION_MAJOR == 2
103 ], ol_cv_header_db2=yes, ol_cv_header_db2=no)])
108 dnl --------------------------------------------------------------------
109 dnl Check if Berkeley DB2 library exists
110 dnl Check for dbopen in standard libraries or -ldb
112 dnl defines ol_cv_lib_db2 to '-ldb' or 'no'
115 dnl AC_CHECK_LIB(db,db_open)
117 AC_DEFUN([OL_LIB_BERKELEY_DB2],
118 [AC_CACHE_CHECK([for DB2 library], [ol_cv_lib_db2],
120 AC_CHECK_LIB(db,db_open,[ol_cv_lib_db2=-ldb],[ol_cv_lib_db2=no])
125 dnl --------------------------------------------------------------------
126 dnl Check if Berkeley db2 exists
128 dnl defines ol_cv_berkeley_db2 to 'yes' or 'no'
131 dnl OL_LIB_BERKELEY_DB2
132 dnl OL_HEADER_BERKELEY_DB2
134 AC_DEFUN([OL_BERKELEY_DB2],
135 [AC_REQUIRE([OL_LIB_BERKELEY_DB2])
136 AC_REQUIRE([OL_HEADER_BERKELEY_DB2])
137 AC_CACHE_CHECK([for Berkeley DB2], [ol_cv_berkeley_db2], [
138 if test "$ol_cv_lib_db2" = no -o "$ol_cv_header_db2" = no ; then
139 ol_cv_berkeley_db2=no
141 ol_cv_berkeley_db2=yes
144 if test $ol_cv_berkeley_db2 = yes ; then
145 AC_DEFINE(HAVE_BERKELEY_DB2,1, [define if Berkeley DBv2 is available])
149 dnl ====================================================================
150 dnl Check for db.h/db_185.h is Berkeley DB
152 dnl defines ol_cv_header_db to 'yes' or 'no'
155 dnl OL_HEADER_BERKELEY_DB2
156 dnl AC_CHECK_HEADERS(db_185.h)
158 AC_DEFUN([OL_HEADER_BERKELEY_DB],
159 [AC_REQUIRE([OL_HEADER_BERKELEY_DB2])
160 AC_CHECK_HEADERS(db_185.h)
161 if test "$ol_cv_header_db2" = yes ; then
164 ol_cv_header_db=$ac_cv_header_db_185_h
166 ol_cv_header_db=$ac_cv_header_db_h
170 dnl --------------------------------------------------------------------
171 dnl Check if Berkeley DB library exists
172 dnl Check for dbopen in standard libraries or -ldb
174 dnl defines ol_cv_lib_db to 'yes' or '-ldb' or 'no'
175 dnl 'yes' implies dbopen is in $LIBS
178 dnl AC_CHECK_FUNC(dbopen)
179 dnl AC_CHECK_LIB(db,dbopen)
181 AC_DEFUN([OL_LIB_BERKELEY_DB],
182 [AC_CACHE_CHECK([for Berkeley DB library], [ol_cv_lib_db],
184 AC_CHECK_FUNC(dbopen,[ol_cv_lib_db=yes], [
185 AC_CHECK_LIB(db,dbopen,[ol_cv_lib_db=-ldb],[ol_cv_lib_db=no])
191 dnl --------------------------------------------------------------------
192 dnl Check if Berkeley DB exists
194 dnl defines ol_cv_berkeley_db to 'yes' or 'no'
197 dnl OL_LIB_BERKELEY_DB
198 dnl OL_HEADER_BERKELEY_DB
200 AC_DEFUN([OL_BERKELEY_DB],
201 [AC_REQUIRE([OL_LIB_BERKELEY_DB])
202 AC_REQUIRE([OL_HEADER_BERKELEY_DB])
203 AC_CACHE_CHECK([for Berkeley DB], [ol_cv_berkeley_db], [
204 if test "$ol_cv_lib_db" = no -o "$ol_cv_header_db" = no ; then
207 ol_cv_berkeley_db=yes
210 if test $ol_cv_berkeley_db = yes ; then
211 AC_DEFINE(HAVE_BERKELEY_DB,1, [define if Berkeley DB is available])
215 dnl ====================================================================
216 dnl Check if GDBM library exists
217 dnl Check for gdbm_open in standard libraries or -lgdbm
219 dnl defines ol_cv_lib_gdbm to 'yes' or '-lgdbm' or 'no'
220 dnl 'yes' implies gdbm_open is in $LIBS
223 dnl AC_CHECK_FUNC(gdbm_open)
224 dnl AC_CHECK_LIB(gdbm,gdbm_open)
226 AC_DEFUN([OL_LIB_GDBM],
227 [AC_CACHE_CHECK(for GDBM library, [ol_cv_lib_gdbm],
229 AC_CHECK_FUNC(gdbm_open,[ol_cv_lib_gdbm=yes], [
230 AC_CHECK_LIB(gdbm,gdbm_open,[ol_cv_lib_gdbm=-lgdbm],[ol_cv_lib_gdbm=no])
236 dnl --------------------------------------------------------------------
237 dnl Check if GDBM exists
239 dnl defines ol_cv_gdbm to 'yes' or 'no'
243 dnl AC_CHECK_HEADERS(gdbm.h)
246 [AC_REQUIRE([OL_LIB_GDBM])
247 AC_CHECK_HEADERS(gdbm.h)
248 AC_CACHE_CHECK(for db, [ol_cv_gdbm], [
249 if test $ol_cv_lib_gdbm = no -o $ac_cv_header_gdbm_h = no ; then
255 if test $ol_cv_gdbm = yes ; then
256 AC_DEFINE(HAVE_GDBM,1, [define if GNU DBM is available])
260 dnl ====================================================================
261 dnl Check if NDBM library exists
262 dnl Check for dbm_open in standard libraries or -lndbm or -ldbm
264 dnl defines ol_cv_lib_ndbm to 'yes' or '-lndbm' or -ldbm or 'no'
265 dnl 'yes' implies ndbm_open is in $LIBS
268 dnl AC_CHECK_FUNC(dbm_open)
269 dnl AC_CHECK_LIB(ndbm,dbm_open)
270 dnl AC_CHECK_LIB(dbm,dbm_open)
273 dnl should also check SVR4 case: dbm_open() in -lucb but that
274 dnl would requiring dealing with -L/usr/ucblib
276 AC_DEFUN([OL_LIB_NDBM],
277 [AC_CACHE_CHECK(for NDBM library, [ol_cv_lib_ndbm],
279 AC_CHECK_FUNC(dbm_open,[ol_cv_lib_ndbm=yes], [
280 AC_CHECK_LIB(ndbm,dbm_open,[ol_cv_lib_ndbm=-lndbm], [
281 AC_CHECK_LIB(dbm,dbm_open,[ol_cv_lib_ndbm=-ldbm],
282 [ol_cv_lib_ndbm=no])dnl
289 dnl --------------------------------------------------------------------
290 dnl Check if NDBM exists
292 dnl defines ol_cv_ndbm to 'yes' or 'no'
296 dnl AC_CHECK_HEADERS(ndbm.h)
299 dnl Doesn't handle SVR4 case (see above)
302 [AC_REQUIRE([OL_LIB_NDBM])
303 AC_CHECK_HEADERS(ndbm.h)
304 AC_CACHE_CHECK(for db, [ol_cv_ndbm], [
305 if test $ol_cv_lib_ndbm = no -o $ac_cv_header_ndbm_h = no ; then
311 if test $ol_cv_ndbm = yes ; then
312 AC_DEFINE(HAVE_NDBM,1, [define if NDBM is available])
316 dnl ====================================================================
317 dnl Check POSIX Thread version
319 dnl defines ol_cv_posix_version to 'final' or 'draft' or 'unknown'
320 dnl 'unknown' implies that the version could not be detected
321 dnl or that pthreads.h does exist. Existance of pthreads.h
322 dnl should be tested separately.
324 AC_DEFUN([OL_POSIX_THREAD_VERSION],
325 [AC_CACHE_CHECK([POSIX thread version],[ol_cv_pthread_version],[
326 AC_EGREP_CPP(pthread_version_final,[
327 # include <pthread.h>
328 /* this check could be improved */
329 # ifdef PTHREAD_ONCE_INIT
330 pthread_version_final
332 ], ol_pthread_final=yes, ol_pthread_final=no)
334 AC_EGREP_CPP(pthread_version_draft4,[
335 # include <pthread.h>
336 /* this check could be improved */
337 # ifdef pthread_once_init
338 pthread_version_draft4
340 ], ol_pthread_draft4=yes, ol_pthread_draft4=no)
342 if test $ol_pthread_final = yes -a $ol_pthread_draft4 = no; then
343 ol_cv_pthread_version=final
344 elif test $ol_pthread_final = no -a $ol_pthread_draft4 = yes; then
345 ol_cv_pthread_version=draft4
347 ol_cv_pthread_version=unknown
352 dnl --------------------------------------------------------------------
353 dnl Check LinuxThread
355 dnl defines ol_cv_linux_threads to 'yes' or 'no'
356 dnl 'no' implies pthreads.h is not LinuxThreads or pthreads.h
357 dnl doesn't exists. Existance of pthread.h should separately
360 AC_DEFUN([OL_LINUX_THREADS],
362 AC_CACHE_CHECK([for LinuxThreads], [ol_cv_linux_threads], [
363 res=`grep Linuxthreads /usr/include/pthread.h 2>/dev/null | wc -l`
364 if test "$res" -gt 0 ; then
365 ol_cv_linux_threads=yes
367 ol_cv_linux_threads=no
372 dnl ====================================================================
373 dnl Check if toupper() requires islower() to be called first
374 AC_DEFUN([OL_C_UPPER_LOWER],
376 AC_MSG_CHECKING([if toupper() requires islower()])
377 AC_CACHE_VAL(ol_cv_c_upper_lower,[
382 if ('C' == toupper('C'))
387 [ol_cv_c_upper_lower=no],
388 [ol_cv_c_upper_lower=yes],
389 [ol_cv_c_upper_lower=safe])])
390 AC_MSG_RESULT($ol_cv_c_upper_lower)
391 if test $ol_cv_c_upper_lower != no ; then
392 AC_DEFINE(C_UPPER_LOWER,1, [define if toupper() requires islower()])
396 dnl ====================================================================
397 dnl Check for declaration of sys_errlist in one of stdio.h and errno.h.
398 dnl Declaration of sys_errlist on BSD4.4 interferes with our declaration.
399 dnl Reported by Keith Bostic.
400 AC_DEFUN([OL_SYS_ERRLIST],
402 AC_MSG_CHECKING([declaration of sys_errlist])
403 AC_CACHE_VAL(ol_cv_dcl_sys_errlist,[
406 #include <sys/types.h>
407 #include <errno.h> ],
408 [char *c = (char *) *sys_errlist],
409 [ol_cv_dcl_sys_errlist=yes],
410 [ol_cv_dcl_sys_errlist=no])])
411 AC_MSG_RESULT($ol_cv_dcl_sys_errlist)
412 # It's possible (for near-UNIX clones) that sys_errlist doesn't exist
413 if test $ol_cv_dcl_sys_errlist = no ; then
414 AC_DEFINE(DECL_SYS_ERRLIST,1,
415 [define if sys_errlist is not declared in stdio.h or errno.h])
416 AC_MSG_CHECKING([existence of sys_errlist])
417 AC_CACHE_VAL(ol_cv_have_sys_errlist,[
418 AC_TRY_LINK([#include <errno.h>],
419 [char *c = (char *) *sys_errlist],
420 [ol_cv_have_sys_errlist=yes],
421 [ol_cv_have_sys_errlist=no])])
422 AC_MSG_RESULT($ol_cv_have_sys_errlist)
423 if test $ol_cv_have_sys_errlist = yes ; then
424 AC_DEFINE(HAVE_SYS_ERRLIST,1,
425 [define if you actually have sys_errlist in your libs])
430 dnl ====================================================================
431 dnl Check to see if we should not declare strdup if we have it
433 AC_DEFUN([OL_DECL_STRDUP],
435 AC_MSG_CHECKING([strdup declaration])
436 AC_CACHE_VAL(ol_cv_dcl_strdup,[
438 #include <string.h> ],
439 [extern char *strdup();],
440 [ol_cv_dcl_strdup=yes],
441 [ol_cv_dcl_strdup=no])])
442 AC_MSG_RESULT($ol_cv_dcl_strdup)
443 if test $ol_cv_dcl_strdup = yes ; then
444 AC_DEFINE(DECL_STRDUP,1,
445 [define if you have strdup() but it's not declared])
449 dnl ====================================================================
450 dnl Early MIPS compilers (used in Ultrix 4.2) don't like
451 dnl "int x; int *volatile a = &x; *a = 0;"
452 dnl -- borrowed from PDKSH
453 AC_DEFUN(OL_C_VOLATILE,
454 [AC_CACHE_CHECK(if compiler understands volatile, ol_cv_c_volatile,
455 [AC_TRY_COMPILE([int x, y, z;],
456 [volatile int a; int * volatile b = x ? &y : &z;
457 /* Older MIPS compilers (eg., in Ultrix 4.2) don't like *b = 0 */
458 *b = 0;], ol_cv_c_volatile=yes, ol_cv_c_volatile=no)])
459 if test $ol_cv_c_volatile = yes; then
466 dnl ====================================================================
467 dnl Define sig_atomic_t if not defined in signal.h
468 AC_DEFUN(OL_TYPE_SIG_ATOMIC_T,
469 [AC_CACHE_CHECK(for sig_atomic_t, ol_cv_type_sig_atomic_t,
470 [AC_TRY_COMPILE([#include <signal.h>], [sig_atomic_t atomic;],
471 ol_cv_type_sig_atomic_t=yes, ol_cv_type_sig_atomic_t=no)])
472 if test $ol_cv_type_sig_atomic_t = no; then
473 AC_DEFINE(sig_atomic_t, int)
477 dnl ====================================================================
478 dnl check no of arguments for ctime_r
479 AC_DEFUN(OL_FUNC_CTIME_R_NARGS,
480 [AC_CACHE_CHECK(number of arguments of ctime_r, ol_cv_func_ctime_r_nargs,
481 [AC_TRY_COMPILE([#include <time.h>],
482 [time_t ti; char *buffer; ctime_r(&ti,buffer,32);],
483 ol_cv_func_ctime_r_nargs=3,
484 [AC_TRY_COMPILE([#include <time.h>],
485 [time_t ti; char *buffer; ctime_r(&ti,buffer);],
486 ol_cv_func_ctime_r_nargs=2,
487 ol_cv_func_ctime_r_nargs=0)])])
488 if test $ol_cv_func_ctime_r_nargs -gt 1 ; then
489 AC_DEFINE_UNQUOTED(CTIME_R_NARGS, $ol_cv_func_ctime_r_nargs,
490 [set to the number of arguments ctime_r() expects])
494 dnl --------------------------------------------------------------------
495 dnl check return type of ctime_r()
496 AC_DEFUN(OL_FUNC_CTIME_R_TYPE,
497 [AC_CACHE_CHECK(return type of ctime_r, ol_cv_func_ctime_r_type,
498 [AC_TRY_COMPILE([#include <time.h>],
500 ol_cv_func_ctime_r_type="int", ol_cv_func_ctime_r_type="charp")
502 if test $ol_cv_func_ctime_r_type = "int" ; then
503 AC_DEFINE(CTIME_R_RETURNS_INT,1, [define if ctime_r() returns int])
506 dnl ====================================================================
507 dnl check no of arguments for gethostbyname_r
508 AC_DEFUN(OL_FUNC_GETHOSTBYNAME_R_NARGS,
509 [AC_CACHE_CHECK(number of arguments of gethostbyname_r,
510 ol_cv_func_gethostbyname_r_nargs,
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; char buffer[BUFSIZE];
517 int bufsize=BUFSIZE;int h_errno;
518 (void)gethostbyname_r("segovia.cs.purdue.edu", &hent,
519 buffer, bufsize, &h_errno);],
520 ol_cv_func_gethostbyname_r_nargs=5,
521 [AC_TRY_COMPILE([#include <sys/types.h>
522 #include <sys/socket.h>
523 #include <netinet/in.h>
525 #define BUFSIZE (sizeof(struct hostent)+10)],
526 [struct hostent hent;struct hostent *rhent;
527 char buffer[BUFSIZE];
528 int bufsize=BUFSIZE;int h_errno;
529 (void)gethostbyname_r("localhost", &hent, buffer, bufsize,
531 ol_cv_func_gethostbyname_r_nargs=6,
532 ol_cv_func_gethostbyname_r_nargs=0)])])
533 if test $ol_cv_func_gethostbyname_r_nargs -gt 1 ; then
534 AC_DEFINE_UNQUOTED(GETHOSTBYNAME_R_NARGS,
535 $ol_cv_func_gethostbyname_r_nargs,
536 [set to the number of arguments gethostbyname_r() expects])
540 dnl check no of arguments for gethostbyaddr_r
541 AC_DEFUN(OL_FUNC_GETHOSTBYADDR_R_NARGS,
542 [AC_CACHE_CHECK(number of arguments of gethostbyaddr_r,
543 [ol_cv_func_gethostbyaddr_r_nargs],
544 [AC_TRY_COMPILE([#include <sys/types.h>
545 #include <sys/socket.h>
546 #include <netinet/in.h>
548 #define BUFSIZE (sizeof(struct hostent)+10)],
549 [struct hostent hent; char buffer[BUFSIZE];
551 size_t alen=sizeof(struct in_addr);
552 int bufsize=BUFSIZE;int h_errno;
553 (void)gethostbyaddr_r( (void *)&(add.s_addr),
554 alen, AF_INET, &hent, buffer, bufsize, &h_errno);],
555 ol_cv_func_gethostbyaddr_r_nargs=7,
556 [AC_TRY_COMPILE([#include <sys/types.h>
557 #include <sys/socket.h>
558 #include <netinet/in.h>
560 #define BUFSIZE (sizeof(struct hostent)+10)],
561 [struct hostent hent;
562 struct hostent *rhent; char buffer[BUFSIZE];
564 size_t alen=sizeof(struct in_addr);
565 int bufsize=BUFSIZE;int h_errno;
566 (void)gethostbyaddr_r( (void *)&(add.s_addr),
567 alen, AF_INET, &hent, buffer, bufsize,
569 ol_cv_func_gethostbyaddr_r_nargs=8,
570 ol_cv_func_gethostbyaddr_r_nargs=0)])])
571 if test $ol_cv_func_gethostbyaddr_r_nargs -gt 1 ; then
572 AC_DEFINE_UNQUOTED(GETHOSTBYADDR_R_NARGS,
573 $ol_cv_func_gethostbyaddr_r_nargs,
574 [set to the number of arguments gethostbyaddr_r() expects])