3 dnl Copyright 1998-2002 The OpenLDAP Foundation, Redwood City, California, USA
4 dnl All rights reserved.
6 dnl Redistribution and use in source and binary forms, with or without
7 dnl modification, are permitted only as authorized by the OpenLDAP
8 dnl Public License. A copy of this license is available at
9 dnl http://www.OpenLDAP.org/license.html or in file LICENSE in the
10 dnl top-level directory of the distribution.
12 dnl OpenLDAP Autoconf Macros
14 dnl --------------------------------------------------------------------
15 dnl Restricted form of AC_ARG_ENABLE that limits user options
19 dnl $3 = default value (auto)
20 dnl $4 = allowed values (auto yes no)
21 AC_DEFUN([OL_ARG_ENABLE], [# OpenLDAP --enable-$1
22 AC_ARG_ENABLE($1,changequote(<,>)<$2 [>ifelse($3,,auto,$3)<]>changequote([,]),[
24 for ol_val in ifelse($4,,[auto yes no],[$4]) ; do
25 if test "$enableval" = "$ol_val" ; then
29 if test "$ol_arg" = "invalid" ; then
30 AC_MSG_ERROR(bad value $enableval for --enable-$1)
32 ol_enable_$1="$ol_arg"
34 [ ol_enable_$1=ifelse($3,,"auto","$3")])dnl
35 dnl AC_VERBOSE(OpenLDAP -enable-$1 $ol_enable_$1)
39 dnl --------------------------------------------------------------------
40 dnl Restricted form of AC_ARG_WITH that limits user options
44 dnl $3 = default value (no)
45 dnl $4 = allowed values (yes or no)
46 AC_DEFUN([OL_ARG_WITH], [# OpenLDAP --with-$1
47 AC_ARG_WITH($1,changequote(<,>)<$2 [>ifelse($3,,yes,$3)<]>changequote([,]),[
49 for ol_val in ifelse($4,,[yes no],[$4]) ; do
50 if test "$withval" = "$ol_val" ; then
54 if test "$ol_arg" = "invalid" ; then
55 AC_MSG_ERROR(bad value $withval for --with-$1)
59 [ ol_with_$1=ifelse($3,,"no","$3")])dnl
60 dnl AC_VERBOSE(OpenLDAP --with-$1 $ol_with_$1)
64 dnl ====================================================================
66 AC_DEFUN(AC_COMPILE_CHECK_SIZEOF,
67 [changequote(<<, >>)dnl
68 dnl The name to #define.
69 define(<<AC_TYPE_NAME>>, translit(sizeof_$1, [a-z *], [A-Z_P]))dnl
70 dnl The cache variable name.
71 define(<<AC_CV_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
73 AC_MSG_CHECKING(size of $1)
74 AC_CACHE_VAL(AC_CV_NAME,
75 [for ac_size in 4 8 1 2 16 $2 ; do # List sizes in rough order of prevalence.
76 AC_TRY_COMPILE([#include "confdefs.h"
77 #include <sys/types.h>
79 ], [switch (0) case 0: case (sizeof ($1) == $ac_size):;], AC_CV_NAME=$ac_size)
80 if test x$AC_CV_NAME != x ; then break; fi
83 if test x$AC_CV_NAME = x ; then
84 AC_MSG_ERROR([cannot determine a size for $1])
86 AC_MSG_RESULT($AC_CV_NAME)
87 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [The number of bytes in type $1])
88 undefine([AC_TYPE_NAME])dnl
89 undefine([AC_CV_NAME])dnl
91 dnl ====================================================================
92 dnl check if hard links are supported.
94 AC_DEFUN([OL_PROG_LN_H], [# test for ln hardlink support
95 AC_MSG_CHECKING(whether ln works)
96 AC_CACHE_VAL(ol_cv_prog_LN_H,
97 [rm -f conftest.src conftest.dst
98 echo "conftest" > conftest.src
99 if ln conftest.src conftest.dst 2>/dev/null
105 rm -f conftest.src conftest.dst
107 LN_H="$ol_cv_prog_LN_H"
108 if test "$ol_cv_prog_LN_H" = "ln"; then
116 dnl ====================================================================
117 dnl Check for dependency generation flag
118 AC_DEFUN([OL_MKDEPEND], [# test for make depend flag
121 if test -z "${MKDEP}"; then
123 if test -z "${MKDEP_FLAGS}"; then
124 AC_CACHE_CHECK([for ${OL_MKDEP} depend flag], ol_cv_mkdep, [
126 for flag in "-M" "-xM"; do
127 cat > conftest.c <<EOF
130 if AC_TRY_COMMAND($OL_MKDEP $flag conftest.c) \
131 | egrep '^conftest\.'"${ac_objext}" >/dev/null 2>&1
133 if test ! -f conftest."${ac_object}" ; then
135 OL_MKDEP_FLAGS="$flag"
144 OL_MKDEP_FLAGS="${MKDEP_FLAGS}"
149 OL_MKDEP_FLAGS="${MKDEP_FLAGS}"
152 AC_SUBST(OL_MKDEP_FLAGS)
155 dnl ====================================================================
156 dnl Check if system uses EBCDIC instead of ASCII
157 AC_DEFUN([OL_CPP_EBCDIC], [# test for EBCDIC
158 AC_CACHE_CHECK([for EBCDIC],ol_cv_cpp_ebcdic,[
161 #include <__ASCII__/generate_error.h>
164 [ol_cv_cpp_ebcdic=yes],
165 [ol_cv_cpp_ebcdic=no])])
166 if test $ol_cv_cpp_ebcdic = yes ; then
167 AC_DEFINE(HAVE_EBCDIC,1, [define if system uses EBCDIC instead of ASCII])
171 dnl --------------------------------------------------------------------
172 dnl OpenLDAP version of STDC header check w/ EBCDIC support
173 AC_DEFUN(OL_HEADER_STDC,
175 AC_REQUIRE([OL_CPP_EBCDIC])dnl
176 AC_CACHE_CHECK([for ANSI C header files], ol_cv_header_stdc,
177 [AC_TRY_CPP([#include <stdlib.h>
180 #include <float.h>], ol_cv_header_stdc=yes, ol_cv_header_stdc=no)
182 if test $ol_cv_header_stdc = yes; then
183 # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
184 AC_EGREP_HEADER(memchr, string.h, , ol_cv_header_stdc=no)
187 if test $ol_cv_header_stdc = yes; then
188 # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
189 AC_EGREP_HEADER(free, stdlib.h, , ol_cv_header_stdc=no)
192 if test $ol_cv_header_stdc = yes; then
193 # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
194 AC_TRY_RUN([#include <ctype.h>
196 # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
197 # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
199 # define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
200 || ('j' <= (c) && (c) <= 'r') \
201 || ('s' <= (c) && (c) <= 'z'))
202 # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
204 #define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
205 int main () { int i; for (i = 0; i < 256; i++)
206 if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
208 ], , ol_cv_header_stdc=no, :)
210 if test $ol_cv_header_stdc = yes; then
211 AC_DEFINE(STDC_HEADERS)
213 ac_cv_header_stdc=disable
216 dnl ====================================================================
217 dnl Check if struct passwd has pw_gecos
218 AC_DEFUN([OL_STRUCT_PASSWD_PW_GECOS], [# test for pw_gecos in struct passwd
219 AC_CACHE_CHECK([struct passwd for pw_gecos],ol_cv_struct_passwd_pw_gecos,[
220 AC_TRY_COMPILE([#include <pwd.h>],[
222 pwd.pw_gecos = pwd.pw_name;
224 [ol_cv_struct_passwd_pw_gecos=yes],
225 [ol_cv_struct_passwd_pw_gecos=no])])
226 if test $ol_cv_struct_passwd_pw_gecos = yes ; then
227 AC_DEFINE(HAVE_PW_GECOS,1, [define if struct passwd has pw_gecos])
231 dnl --------------------------------------------------------------------
232 dnl Check if struct passwd has pw_passwd
233 AC_DEFUN([OL_STRUCT_PASSWD_PW_PASSWD], [# test for pw_passwd in struct passwd
234 AC_CACHE_CHECK([struct passwd for pw_passwd],ol_cv_struct_passwd_pw_passwd,[
235 AC_TRY_COMPILE([#include <pwd.h>],[
237 pwd.pw_passwd = pwd.pw_name;
239 [ol_cv_struct_passwd_pw_passwd=yes],
240 [ol_cv_struct_passwd_pw_passwd=no])])
241 if test $ol_cv_struct_passwd_pw_passwd = yes ; then
242 AC_DEFINE(HAVE_PW_PASSWD,1, [define if struct passwd has pw_passwd])
246 dnl ====================================================================
247 dnl Berkeley DB macros
249 dnl --------------------------------------------------------------------
251 AC_DEFUN([OL_BERKELEY_DB_TRY],
252 [if test $ol_cv_lib_db = no ; then
253 AC_CACHE_CHECK([for Berkeley DB link (]ifelse($2,,default,$2)[)],[$1],
255 ol_DB_LIB=ifelse($2,,,$2)
257 LIBS="$ol_DB_LIB $LIBS"
266 #ifndef DB_VERSION_MAJOR
267 # define DB_VERSION_MAJOR 1
271 #define NULL ((void*)0)
274 #if DB_VERSION_MAJOR > 1
277 int major, minor, patch;
279 version = db_version( &major, &minor, &patch );
281 if( major != DB_VERSION_MAJOR ||
282 minor < DB_VERSION_MINOR )
284 printf("Berkeley DB version mismatch\n"
285 "\texpected: %s\n\tgot: %s\n",
286 DB_VERSION_STRING, version);
292 #if DB_VERSION_MAJOR > 2
293 db_env_create( NULL, 0 );
294 #elif DB_VERSION_MAJOR > 1
297 (void) dbopen( NULL, 0, 0, 0, NULL);
304 if test $$1 = yes ; then
305 ol_cv_lib_db=ifelse($2,,yes,$2)
310 dnl --------------------------------------------------------------------
311 dnl Try to locate appropriate library
312 AC_DEFUN([OL_BERKELEY_DB_LINK],
314 OL_BERKELEY_DB_TRY(ol_cv_db_none)
315 OL_BERKELEY_DB_TRY(ol_cv_db_db4,[-ldb4])
316 OL_BERKELEY_DB_TRY(ol_cv_db_db_4,[-ldb-4])
317 OL_BERKELEY_DB_TRY(ol_cv_db_db,[-ldb])
318 OL_BERKELEY_DB_TRY(ol_cv_db_db3,[-ldb3])
319 OL_BERKELEY_DB_TRY(ol_cv_db_db_3,[-ldb-3])
320 OL_BERKELEY_DB_TRY(ol_cv_db_db2,[-ldb2])
321 OL_BERKELEY_DB_TRY(ol_cv_db_db_2,[-ldb-2])
322 OL_BERKELEY_DB_TRY(ol_cv_db_db1,[-ldb1])
323 OL_BERKELEY_DB_TRY(ol_cv_db_db_1,[-ldb-1])
326 dnl --------------------------------------------------------------------
327 dnl Check if Berkeley DB supports DB_THREAD
328 AC_DEFUN([OL_BERKELEY_DB_THREAD],
329 [AC_CACHE_CHECK([for Berkeley DB thread support], [ol_cv_berkeley_db_thread], [
331 if test $ol_cv_lib_db != yes ; then
342 #define NULL ((void *)0)
347 u_int32_t flags = DB_CREATE |
353 #if DB_VERSION_MAJOR > 2
356 rc = db_env_create( &env, 0 );
358 flags |= DB_INIT_MPOOL;
359 #ifdef DB_MPOOL_PRIVATE
360 flags |= DB_MPOOL_PRIVATE;
364 printf("BerkeleyDB: %s\n", db_strerror(rc) );
368 #if (DB_VERSION_MAJOR > 3) || (DB_VERSION_MINOR >= 1)
369 rc = env->open( env, NULL, flags, 0 );
371 rc = env->open( env, NULL, NULL, flags, 0 );
375 rc = env->close( env, 0 );
379 printf("BerkeleyDB: %s\n", db_strerror(rc) );
385 memset( &env, '\0', sizeof(env) );
387 rc = db_appinit( NULL, NULL, &env, flags );
393 unlink("__db_mpool.share");
394 unlink("__db_lock.share");
399 [ol_cv_berkeley_db_thread=yes],
400 [ol_cv_berkeley_db_thread=no],
401 [ol_cv_berkeley_db_thread=cross])
405 if test $ol_cv_berkeley_db_thread != no ; then
406 AC_DEFINE(HAVE_BERKELEY_DB_THREAD, 1,
407 [define if Berkeley DB has DB_THREAD support])
411 dnl --------------------------------------------------------------------
413 AC_DEFUN([OL_BERKELEY_DB],
414 [ol_cv_berkeley_db=no
415 AC_CHECK_HEADERS(db.h)
416 if test $ac_cv_header_db_h = yes; then
418 if test "$ol_cv_lib_db" != no ; then
419 ol_cv_berkeley_db=yes
420 OL_BERKELEY_DB_THREAD
424 dnl --------------------------------------------------------------------
425 dnl Check for version compatility with back-bdb
426 AC_DEFUN([OL_BDB_COMPAT],
427 [AC_CACHE_CHECK([Berkeley DB version for BDB backend], [ol_cv_bdb_compat],[
428 AC_EGREP_CPP(__db_version_compat,[
431 /* this check could be improved */
432 #ifndef DB_VERSION_MAJOR
433 # define DB_VERSION_MAJOR 1
436 /* require 4.0 or later */
437 #if DB_VERSION_MAJOR >= 4
440 ], [ol_cv_bdb_compat=yes], [ol_cv_bdb_compat=no])])
443 dnl --------------------------------------------------------------------
444 dnl Find old Berkeley DB 1.85/1.86
445 AC_DEFUN([OL_BERKELEY_COMPAT_DB],
446 [AC_CHECK_HEADERS(db_185.h db.h)
447 if test $ac_cv_header_db_185_h = yes -o $ac_cv_header_db_h = yes; then
448 AC_CACHE_CHECK([if Berkeley DB header compatibility], [ol_cv_header_db1],[
449 AC_EGREP_CPP(__db_version_1,[
456 /* this check could be improved */
457 #ifndef DB_VERSION_MAJOR
458 # define DB_VERSION_MAJOR 1
461 #if DB_VERSION_MAJOR == 1
464 ], [ol_cv_header_db1=yes], [ol_cv_header_db1=no])])
466 if test $ol_cv_header_db1 = yes ; then
468 if test "$ol_cv_lib_db" != no ; then
469 ol_cv_berkeley_db=yes
475 dnl ====================================================================
476 dnl Check if GDBM library exists
477 dnl Check for gdbm_open in standard libraries or -lgdbm
479 dnl defines ol_cv_lib_gdbm to 'yes' or '-lgdbm' or 'no'
480 dnl 'yes' implies gdbm_open is in $LIBS
483 dnl AC_CHECK_FUNC(gdbm_open)
484 dnl AC_CHECK_LIB(gdbm,gdbm_open)
486 AC_DEFUN([OL_LIB_GDBM],
487 [AC_CACHE_CHECK(for GDBM library, [ol_cv_lib_gdbm],
489 AC_CHECK_FUNC(gdbm_open,[ol_cv_lib_gdbm=yes], [
490 AC_CHECK_LIB(gdbm,gdbm_open,[ol_cv_lib_gdbm=-lgdbm],[ol_cv_lib_gdbm=no])
496 dnl --------------------------------------------------------------------
497 dnl Check if GDBM exists
499 dnl defines ol_cv_gdbm to 'yes' or 'no'
503 dnl AC_CHECK_HEADERS(gdbm.h)
506 [AC_REQUIRE([OL_LIB_GDBM])
507 AC_CHECK_HEADERS(gdbm.h)
508 AC_CACHE_CHECK(for db, [ol_cv_gdbm], [
509 if test $ol_cv_lib_gdbm = no -o $ac_cv_header_gdbm_h = no ; then
515 if test $ol_cv_gdbm = yes ; then
516 AC_DEFINE(HAVE_GDBM,1, [define if GNU DBM is available])
520 dnl ====================================================================
521 dnl Check if MDBM library exists
522 dnl Check for mdbm_open in standard libraries or -lmdbm
524 dnl defines ol_cv_lib_mdbm to 'yes' or '-lmdbm' or 'no'
525 dnl 'yes' implies mdbm_open is in $LIBS
528 dnl AC_CHECK_FUNC(mdbm_set_chain)
529 dnl AC_CHECK_LIB(mdbm,mdbm_set_chain)
531 AC_DEFUN([OL_LIB_MDBM],
532 [AC_CACHE_CHECK(for MDBM library, [ol_cv_lib_mdbm],
534 AC_CHECK_FUNC(mdbm_set_chain,[ol_cv_lib_mdbm=yes], [
535 AC_CHECK_LIB(mdbm,mdbm_set_chain,[ol_cv_lib_mdbm=-lmdbm],[ol_cv_lib_mdbm=no])
541 dnl --------------------------------------------------------------------
542 dnl Check if MDBM exists
544 dnl defines ol_cv_mdbm to 'yes' or 'no'
548 dnl AC_CHECK_HEADERS(mdbm.h)
551 [AC_REQUIRE([OL_LIB_MDBM])
552 AC_CHECK_HEADERS(mdbm.h)
553 AC_CACHE_CHECK(for db, [ol_cv_mdbm], [
554 if test $ol_cv_lib_mdbm = no -o $ac_cv_header_mdbm_h = no ; then
560 if test $ol_cv_mdbm = yes ; then
561 AC_DEFINE(HAVE_MDBM,1, [define if MDBM is available])
565 dnl ====================================================================
566 dnl Check if NDBM library exists
567 dnl Check for dbm_open in standard libraries or -lndbm or -ldbm
569 dnl defines ol_cv_lib_ndbm to 'yes' or '-lndbm' or -ldbm or 'no'
570 dnl 'yes' implies ndbm_open is in $LIBS
573 dnl AC_CHECK_FUNC(dbm_open)
574 dnl AC_CHECK_LIB(ndbm,dbm_open)
575 dnl AC_CHECK_LIB(dbm,dbm_open)
578 dnl should also check SVR4 case: dbm_open() in -lucb but that
579 dnl would requiring dealing with -L/usr/ucblib
581 AC_DEFUN([OL_LIB_NDBM],
582 [AC_CACHE_CHECK(for NDBM library, [ol_cv_lib_ndbm],
584 AC_CHECK_FUNC(dbm_open,[ol_cv_lib_ndbm=yes], [
585 AC_CHECK_LIB(ndbm,dbm_open,[ol_cv_lib_ndbm=-lndbm], [
586 AC_CHECK_LIB(dbm,dbm_open,[ol_cv_lib_ndbm=-ldbm],
587 [ol_cv_lib_ndbm=no])dnl
594 dnl --------------------------------------------------------------------
595 dnl Check if NDBM exists
597 dnl defines ol_cv_ndbm to 'yes' or 'no'
601 dnl AC_CHECK_HEADERS(ndbm.h)
604 dnl Doesn't handle SVR4 case (see above)
607 [AC_REQUIRE([OL_LIB_NDBM])
608 AC_CHECK_HEADERS(ndbm.h)
609 AC_CACHE_CHECK(for db, [ol_cv_ndbm], [
610 if test $ol_cv_lib_ndbm = no -o $ac_cv_header_ndbm_h = no ; then
616 if test $ol_cv_ndbm = yes ; then
617 AC_DEFINE(HAVE_NDBM,1, [define if NDBM is available])
621 dnl ====================================================================
622 dnl Check POSIX Thread version
624 dnl defines ol_cv_posix_version to 'final' or 'draft' or 'unknown'
625 dnl 'unknown' implies that the version could not be detected
626 dnl or that pthreads.h does exist. Existance of pthreads.h
627 dnl should be tested separately.
629 AC_DEFUN([OL_POSIX_THREAD_VERSION],
630 [AC_CACHE_CHECK([POSIX thread version],[ol_cv_pthread_version],[
631 AC_EGREP_CPP(pthread_version_final,[
632 # include <pthread.h>
633 /* this check could be improved */
634 # ifdef PTHREAD_ONCE_INIT
635 pthread_version_final;
637 ], ol_pthread_final=yes, ol_pthread_final=no)
639 AC_EGREP_CPP(pthread_version_draft4,[
640 # include <pthread.h>
641 /* this check could be improved */
642 # ifdef pthread_once_init
643 pthread_version_draft4;
645 ], ol_pthread_draft4=yes, ol_pthread_draft4=no)
647 if test $ol_pthread_final = yes -a $ol_pthread_draft4 = no; then
648 ol_cv_pthread_version=final
649 elif test $ol_pthread_final = no -a $ol_pthread_draft4 = yes; then
650 ol_cv_pthread_version=draft4
652 ol_cv_pthread_version=unknown
657 dnl --------------------------------------------------------------------
658 AC_DEFUN([OL_PTHREAD_TEST_INCLUDES],
659 [/* pthread test headers */
662 #define NULL (void*)0
668 return (void *) (p == NULL);
671 AC_DEFUN([OL_PTHREAD_TEST_FUNCTION],[
672 /* pthread test function */
677 #ifdef HAVE_PTHREADS_FINAL
681 status = pthread_attr_init(&attr);
682 if( status ) return status;
684 #if defined( PTHREAD_CREATE_JOINABLE ) || defined( PTHREAD_UNDETACHED )
686 #if defined( PTHREAD_CREATE_JOINABLE )
687 status = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
689 status = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_UNDETACHED);
692 #ifdef PTHREAD_CREATE_DETACHED
694 status = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
697 if( status ) return status;
700 status = pthread_create( &t, &attr, task, NULL );
701 if( status ) return status;
703 #if !defined( PTHREAD_CREATE_JOINABLE ) && !defined( PTHREAD_UNDETACHED )
705 /* give thread a chance to complete */
706 /* it should remain joinable and hence detachable */
709 status = pthread_detach( t );
710 if( status ) return status;
715 /* Draft 4 pthreads */
716 status = pthread_create( &t, pthread_attr_default, task, NULL );
717 if( status ) return status;
720 /* give thread a chance to complete */
721 /* it should remain joinable and hence detachable */
724 status = pthread_detach( &t );
725 if( status ) return status;
729 #ifdef HAVE_LINUX_THREADS
730 pthread_kill_other_threads_np();
736 AC_DEFUN([OL_PTHREAD_TEST_PROGRAM],
737 [OL_PTHREAD_TEST_INCLUDES
743 OL_PTHREAD_TEST_FUNCTION
746 dnl --------------------------------------------------------------------
747 AC_DEFUN([OL_PTHREAD_TRY], [# Pthread try link: $1 ($2)
748 if test "$ol_link_threads" = no ; then
750 AC_CACHE_CHECK([for pthread link with $1], [$2], [
755 AC_TRY_RUN(OL_PTHREAD_TEST_PROGRAM,
757 [AC_TRY_LINK(OL_PTHREAD_TEST_INCLUDES,OL_PTHREAD_TEST_FUNCTION,
764 if test $$2 = yes ; then
765 ol_link_pthreads="$1"
766 ol_link_threads=posix
771 dnl ====================================================================
772 dnl Check GNU Pth pthread Header
774 dnl defines ol_cv_header linux_threads to 'yes' or 'no'
775 dnl 'no' implies pthreads.h is not LinuxThreads or pthreads.h
776 dnl doesn't exists. Existance of pthread.h should separately
779 AC_DEFUN([OL_HEADER_GNU_PTH_PTHREAD_H], [
780 AC_CACHE_CHECK([for GNU Pth pthread.h],
781 [ol_cv_header_gnu_pth_pthread_h],
782 [AC_EGREP_CPP(__gnu_pth__,
783 [#include <pthread.h>
784 #ifdef _POSIX_THREAD_IS_GNU_PTH
788 [ol_cv_header_gnu_pth_pthread_h=yes],
789 [ol_cv_header_gnu_pth_pthread_h=no])
792 dnl ====================================================================
793 dnl Check for NT Threads
794 AC_DEFUN([OL_NT_THREADS], [
795 AC_CHECK_FUNC(_beginthread)
797 if test $ac_cv_func__beginthread = yes ; then
798 AC_DEFINE(HAVE_NT_THREADS,1,[if you have NT Threads])
802 dnl ====================================================================
803 dnl Check LinuxThreads Header
805 dnl defines ol_cv_header linux_threads to 'yes' or 'no'
806 dnl 'no' implies pthreads.h is not LinuxThreads or pthreads.h
807 dnl doesn't exists. Existance of pthread.h should separately
810 AC_DEFUN([OL_HEADER_LINUX_THREADS], [
811 AC_CACHE_CHECK([for LinuxThreads pthread.h],
812 [ol_cv_header_linux_threads],
813 [AC_EGREP_CPP(pthread_kill_other_threads_np,
814 [#include <pthread.h>],
815 [ol_cv_header_linux_threads=yes],
816 [ol_cv_header_linux_threads=no])
818 if test $ol_cv_header_linux_threads = yes; then
819 AC_DEFINE(HAVE_LINUX_THREADS,1,[if you have LinuxThreads])
822 dnl --------------------------------------------------------------------
823 dnl Check LinuxThreads Implementation
825 dnl defines ol_cv_sys_linux_threads to 'yes' or 'no'
826 dnl 'no' implies pthreads implementation is not LinuxThreads.
828 AC_DEFUN([OL_SYS_LINUX_THREADS], [
829 AC_CHECK_FUNCS(pthread_kill_other_threads_np)
830 AC_CACHE_CHECK([for LinuxThreads implementation],
831 [ol_cv_sys_linux_threads],
832 [ol_cv_sys_linux_threads=$ac_cv_func_pthread_kill_other_threads_np])
835 dnl --------------------------------------------------------------------
836 dnl Check LinuxThreads consistency
837 AC_DEFUN([OL_LINUX_THREADS], [
838 AC_REQUIRE([OL_HEADER_LINUX_THREADS])
839 AC_REQUIRE([OL_SYS_LINUX_THREADS])
840 AC_CACHE_CHECK([for LinuxThreads consistency], [ol_cv_linux_threads], [
841 if test $ol_cv_header_linux_threads = yes -a \
842 $ol_cv_sys_linux_threads = yes; then
843 ol_cv_linux_threads=yes
844 elif test $ol_cv_header_linux_threads = no -a \
845 $ol_cv_sys_linux_threads = no; then
846 ol_cv_linux_threads=no
848 ol_cv_linux_threads=error
853 dnl ====================================================================
854 dnl Check for POSIX Regex
855 AC_DEFUN([OL_POSIX_REGEX], [
856 AC_CACHE_CHECK([for compatible POSIX regex],ol_cv_c_posix_regex,[
858 #include <sys/types.h>
860 static char *pattern, *string;
868 if(regcomp(&re, pattern, 0)) {
872 string = "ALL MATCH";
874 rc = regexec(&re, string, 0, (void*)0, 0);
880 [ol_cv_c_posix_regex=yes],
881 [ol_cv_c_posix_regex=no],
882 [ol_cv_c_posix_regex=cross])])
885 dnl ====================================================================
886 dnl Check if toupper() requires islower() to be called first
887 AC_DEFUN([OL_C_UPPER_LOWER],
888 [AC_CACHE_CHECK([if toupper() requires islower()],ol_cv_c_upper_lower,[
893 if ('C' == toupper('C'))
898 [ol_cv_c_upper_lower=no],
899 [ol_cv_c_upper_lower=yes],
900 [ol_cv_c_upper_lower=safe])])
901 if test $ol_cv_c_upper_lower != no ; then
902 AC_DEFINE(C_UPPER_LOWER,1, [define if toupper() requires islower()])
906 dnl ====================================================================
907 dnl Check for declaration of sys_errlist in one of stdio.h and errno.h.
908 dnl Declaration of sys_errlist on BSD4.4 interferes with our declaration.
909 dnl Reported by Keith Bostic.
910 AC_DEFUN([OL_SYS_ERRLIST],
911 [AC_CACHE_CHECK([declaration of sys_errlist],ol_cv_dcl_sys_errlist,[
914 #include <sys/types.h>
919 [char *c = (char *) *sys_errlist],
920 [ol_cv_dcl_sys_errlist=yes
921 ol_cv_have_sys_errlist=yes],
922 [ol_cv_dcl_sys_errlist=no])])
924 # It's possible (for near-UNIX clones) that sys_errlist doesn't exist
925 if test $ol_cv_dcl_sys_errlist = no ; then
926 AC_DEFINE(DECL_SYS_ERRLIST,1,
927 [define if sys_errlist is not declared in stdio.h or errno.h])
929 AC_CACHE_CHECK([existence of sys_errlist],ol_cv_have_sys_errlist,[
930 AC_TRY_LINK([#include <errno.h>],
931 [char *c = (char *) *sys_errlist],
932 [ol_cv_have_sys_errlist=yes],
933 [ol_cv_have_sys_errlist=no])])
935 if test $ol_cv_have_sys_errlist = yes ; then
936 AC_DEFINE(HAVE_SYS_ERRLIST,1,
937 [define if you actually have sys_errlist in your libs])
941 dnl ====================================================================
942 dnl Early MIPS compilers (used in Ultrix 4.2) don't like
943 dnl "int x; int *volatile a = &x; *a = 0;"
944 dnl -- borrowed from PDKSH
945 AC_DEFUN(OL_C_VOLATILE,
946 [AC_CACHE_CHECK(if compiler understands volatile, ol_cv_c_volatile,
947 [AC_TRY_COMPILE([int x, y, z;],
948 [volatile int a; int * volatile b = x ? &y : &z;
949 /* Older MIPS compilers (eg., in Ultrix 4.2) don't like *b = 0 */
950 *b = 0;], ol_cv_c_volatile=yes, ol_cv_c_volatile=no)])
951 if test $ol_cv_c_volatile = yes; then
954 AC_DEFINE(volatile,,[define as empty if volatile is not supported])
958 dnl ====================================================================
959 dnl Look for fetch(3)
960 AC_DEFUN([OL_LIB_FETCH],
962 LIBS="-lfetch -lcom_err $LIBS"
963 AC_CACHE_CHECK([fetch(3) library],ol_cv_lib_fetch,[
965 #include <sys/param.h>
968 [struct url *u = fetchParseURL("file:///"); ],
969 [ol_cv_lib_fetch=yes],
970 [ol_cv_lib_fetch=no])])
972 if test $ol_cv_lib_fetch != no ; then
973 ol_link_fetch="-lfetch -lcom_err"
974 AC_DEFINE(HAVE_FETCH,1,
975 [define if you actually have FreeBSD fetch(3)])
979 dnl ====================================================================
980 dnl Define sig_atomic_t if not defined in signal.h
981 AC_DEFUN(OL_TYPE_SIG_ATOMIC_T,
982 [AC_CACHE_CHECK(for sig_atomic_t, ol_cv_type_sig_atomic_t,
983 [AC_TRY_COMPILE([#include <signal.h>], [sig_atomic_t atomic;],
984 ol_cv_type_sig_atomic_t=yes, ol_cv_type_sig_atomic_t=no)])
985 if test $ol_cv_type_sig_atomic_t = no; then
986 AC_DEFINE(sig_atomic_t,int,
987 [define to atomic type if sig_atomic_t is not available])
991 dnl ====================================================================
992 dnl Define socklen_t if not defined in sys/types.h or sys/socket.h
993 AC_DEFUN(OL_TYPE_SOCKLEN_T,
994 [AC_CACHE_CHECK(for socklen_t, ol_cv_type_socklen_t,
996 #ifdef HAVE_SYS_TYPES_H
997 #include <sys/types.h>
999 #ifdef HAVE_SYS_SOCKET_H
1000 #include <sys/socket.h>
1002 ], [socklen_t len;],
1003 ol_cv_type_socklen_t=yes, ol_cv_type_socklen_t=no)])
1004 if test $ol_cv_type_socklen_t = no; then
1005 AC_DEFINE(socklen_t, int,
1006 [define to int if socklen_t is not available])
1010 dnl ====================================================================
1011 dnl Define inet_aton is available
1012 AC_DEFUN(OL_FUNC_INET_ATON,
1013 [AC_CACHE_CHECK([for inet_aton()], ol_cv_func_inet_aton,
1015 #ifdef HAVE_SYS_TYPES_H
1016 # include <sys/types.h>
1018 #ifdef HAVE_SYS_SOCKET_H
1019 # include <sys/socket.h>
1020 # ifdef HAVE_SYS_SELECT_H
1021 # include <sys/select.h>
1023 # include <netinet/in.h>
1024 # ifdef HAVE_ARPA_INET_H
1025 # include <arpa/inet.h>
1028 ], [struct in_addr in;
1029 int rc = inet_aton( "255.255.255.255", &in );],
1030 ol_cv_func_inet_aton=yes, ol_cv_func_inet_aton=no)])
1031 if test $ol_cv_func_inet_aton != no; then
1032 AC_DEFINE(HAVE_INET_ATON, 1,
1033 [define to you inet_aton(3) is available])
1037 dnl ====================================================================
1038 dnl check no of arguments for ctime_r
1039 AC_DEFUN(OL_FUNC_CTIME_R_NARGS,
1040 [AC_CACHE_CHECK(number of arguments of ctime_r, ol_cv_func_ctime_r_nargs,
1041 [AC_TRY_COMPILE([#include <time.h>],
1042 [time_t ti; char *buffer; ctime_r(&ti,buffer,32);],
1043 ol_cv_func_ctime_r_nargs3=yes,
1044 ol_cv_func_ctime_r_nargs3=no)
1046 AC_TRY_COMPILE([#include <time.h>],
1047 [time_t ti; char *buffer; ctime_r(&ti,buffer);],
1048 ol_cv_func_ctime_r_nargs2=yes,
1049 ol_cv_func_ctime_r_nargs2=no)
1051 if test $ol_cv_func_ctime_r_nargs3 = yes -a \
1052 $ol_cv_func_ctime_r_nargs2 = no ; then
1054 ol_cv_func_ctime_r_nargs=3
1056 elif test $ol_cv_func_ctime_r_nargs3 = no -a \
1057 $ol_cv_func_ctime_r_nargs2 = yes ; then
1059 ol_cv_func_ctime_r_nargs=2
1062 ol_cv_func_ctime_r_nargs=0
1066 if test $ol_cv_func_ctime_r_nargs -gt 1 ; then
1067 AC_DEFINE_UNQUOTED(CTIME_R_NARGS, $ol_cv_func_ctime_r_nargs,
1068 [set to the number of arguments ctime_r() expects])
1072 dnl --------------------------------------------------------------------
1073 dnl check return type of ctime_r()
1074 AC_DEFUN(OL_FUNC_CTIME_R_TYPE,
1075 [AC_CACHE_CHECK(return type of ctime_r, ol_cv_func_ctime_r_type,
1076 [AC_TRY_COMPILE([#include <time.h>],
1077 [extern int (ctime_r)();],
1078 ol_cv_func_ctime_r_type="int", ol_cv_func_ctime_r_type="charp")
1080 if test $ol_cv_func_ctime_r_type = "int" ; then
1081 AC_DEFINE(CTIME_R_RETURNS_INT,1, [define if ctime_r() returns int])
1084 dnl ====================================================================
1085 dnl check no of arguments for gethostbyname_r
1086 AC_DEFUN(OL_FUNC_GETHOSTBYNAME_R_NARGS,
1087 [AC_CACHE_CHECK(number of arguments of gethostbyname_r,
1088 ol_cv_func_gethostbyname_r_nargs,
1089 [AC_TRY_COMPILE([#include <sys/types.h>
1090 #include <sys/socket.h>
1091 #include <netinet/in.h>
1093 #define BUFSIZE (sizeof(struct hostent)+10)],
1094 [struct hostent hent; char buffer[BUFSIZE];
1095 int bufsize=BUFSIZE;int h_errno;
1096 (void)gethostbyname_r("segovia.cs.purdue.edu", &hent,
1097 buffer, bufsize, &h_errno);],
1098 ol_cv_func_gethostbyname_r_nargs5=yes,
1099 ol_cv_func_gethostbyname_r_nargs5=no)
1101 AC_TRY_COMPILE([#include <sys/types.h>
1102 #include <sys/socket.h>
1103 #include <netinet/in.h>
1105 #define BUFSIZE (sizeof(struct hostent)+10)],
1106 [struct hostent hent;struct hostent *rhent;
1107 char buffer[BUFSIZE];
1108 int bufsize=BUFSIZE;int h_errno;
1109 (void)gethostbyname_r("localhost", &hent, buffer, bufsize,
1110 &rhent, &h_errno);],
1111 ol_cv_func_gethostbyname_r_nargs6=yes,
1112 ol_cv_func_gethostbyname_r_nargs6=no)
1114 if test $ol_cv_func_gethostbyname_r_nargs5 = yes -a \
1115 $ol_cv_func_gethostbyname_r_nargs6 = no ; then
1117 ol_cv_func_gethostbyname_r_nargs=5
1119 elif test $ol_cv_func_gethostbyname_r_nargs5 = no -a \
1120 $ol_cv_func_gethostbyname_r_nargs6 = yes ; then
1122 ol_cv_func_gethostbyname_r_nargs=6
1125 ol_cv_func_gethostbyname_r_nargs=0
1128 if test $ol_cv_func_gethostbyname_r_nargs -gt 1 ; then
1129 AC_DEFINE_UNQUOTED(GETHOSTBYNAME_R_NARGS,
1130 $ol_cv_func_gethostbyname_r_nargs,
1131 [set to the number of arguments gethostbyname_r() expects])
1135 dnl check no of arguments for gethostbyaddr_r
1136 AC_DEFUN(OL_FUNC_GETHOSTBYADDR_R_NARGS,
1137 [AC_CACHE_CHECK(number of arguments of gethostbyaddr_r,
1138 [ol_cv_func_gethostbyaddr_r_nargs],
1139 [AC_TRY_COMPILE([#include <sys/types.h>
1140 #include <sys/socket.h>
1141 #include <netinet/in.h>
1143 #define BUFSIZE (sizeof(struct hostent)+10)],
1144 [struct hostent hent; char buffer[BUFSIZE];
1146 size_t alen=sizeof(struct in_addr);
1147 int bufsize=BUFSIZE;int h_errno;
1148 (void)gethostbyaddr_r( (void *)&(add.s_addr),
1149 alen, AF_INET, &hent, buffer, bufsize, &h_errno);],
1150 ol_cv_func_gethostbyaddr_r_nargs7=yes,
1151 ol_cv_func_gethostbyaddr_r_nargs7=no)
1153 AC_TRY_COMPILE([#include <sys/types.h>
1154 #include <sys/socket.h>
1155 #include <netinet/in.h>
1157 #define BUFSIZE (sizeof(struct hostent)+10)],
1158 [struct hostent hent;
1159 struct hostent *rhent; char buffer[BUFSIZE];
1161 size_t alen=sizeof(struct in_addr);
1162 int bufsize=BUFSIZE;int h_errno;
1163 (void)gethostbyaddr_r( (void *)&(add.s_addr),
1164 alen, AF_INET, &hent, buffer, bufsize,
1165 &rhent, &h_errno);],
1166 ol_cv_func_gethostbyaddr_r_nargs8=yes,
1167 ol_cv_func_gethostbyaddr_r_nargs8=no)
1169 if test $ol_cv_func_gethostbyaddr_r_nargs7 = yes -a \
1170 $ol_cv_func_gethostbyaddr_r_nargs8 = no ; then
1172 ol_cv_func_gethostbyaddr_r_nargs=7
1174 elif test $ol_cv_func_gethostbyaddr_r_nargs7 = no -a \
1175 $ol_cv_func_gethostbyaddr_r_nargs8 = yes ; then
1177 ol_cv_func_gethostbyaddr_r_nargs=8
1180 ol_cv_func_gethostbyaddr_r_nargs=0
1183 if test $ol_cv_func_gethostbyaddr_r_nargs -gt 1 ; then
1184 AC_DEFINE_UNQUOTED(GETHOSTBYADDR_R_NARGS,
1185 $ol_cv_func_gethostbyaddr_r_nargs,
1186 [set to the number of arguments gethostbyaddr_r() expects])
1190 dnl --------------------------------------------------------------------
1191 dnl Check for Cyrus SASL version compatility, need 2.1.3 or newer
1192 AC_DEFUN([OL_SASL_COMPAT],
1193 [AC_CACHE_CHECK([Cyrus SASL library version], [ol_cv_sasl_compat],[
1194 AC_EGREP_CPP(__sasl_compat,[
1195 #ifdef HAVE_SASL_SASL_H
1196 #include <sasl/sasl.h>
1201 /* require 2.1.3 or later */
1202 #if SASL_VERSION_MAJOR == 1 && SASL_VERSION_MINOR >= 5
1203 char *__sasl_compat = "1.5.x okay";
1204 #elif SASL_VERSION_MAJOR == 2 && SASL_VERSION_MINOR > 1
1205 __sasl_compat "2.2+ or better okay (we guess)";
1206 #elif SASL_VERSION_MAJOR == 2 && SASL_VERSION_MINOR == 1 \
1207 && SASL_VERSION_STEP >=3
1208 __sasl_compat = "2.1.3+ or better okay";
1210 ], [ol_cv_sasl_compat=yes], [ol_cv_sasl_compat=no])])