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,[-ldb])
317 OL_BERKELEY_DB_TRY(ol_cv_db_db3,[-ldb3])
318 OL_BERKELEY_DB_TRY(ol_cv_db_db2,[-ldb2])
319 OL_BERKELEY_DB_TRY(ol_cv_db_db1,[-ldb1])
322 dnl --------------------------------------------------------------------
323 dnl Check if Berkeley DB supports DB_THREAD
324 AC_DEFUN([OL_BERKELEY_DB_THREAD],
325 [AC_CACHE_CHECK([for Berkeley DB thread support], [ol_cv_berkeley_db_thread], [
327 if test $ol_cv_lib_db != yes ; then
338 #define NULL ((void *)0)
343 u_int32_t flags = DB_CREATE |
349 #if DB_VERSION_MAJOR > 2
352 rc = db_env_create( &env, 0 );
354 flags |= DB_INIT_MPOOL;
355 #ifdef DB_MPOOL_PRIVATE
356 flags |= DB_MPOOL_PRIVATE;
360 printf("BerkeleyDB: %s\n", db_strerror(rc) );
364 #if (DB_VERSION_MAJOR > 3) || (DB_VERSION_MINOR >= 1)
365 rc = env->open( env, NULL, flags, 0 );
367 rc = env->open( env, NULL, NULL, flags, 0 );
371 rc = env->close( env, 0 );
375 printf("BerkeleyDB: %s\n", db_strerror(rc) );
381 memset( &env, '\0', sizeof(env) );
383 rc = db_appinit( NULL, NULL, &env, flags );
389 unlink("__db_mpool.share");
390 unlink("__db_lock.share");
395 [ol_cv_berkeley_db_thread=yes],
396 [ol_cv_berkeley_db_thread=no],
397 [ol_cv_berkeley_db_thread=cross])
401 if test $ol_cv_berkeley_db_thread != no ; then
402 AC_DEFINE(HAVE_BERKELEY_DB_THREAD, 1,
403 [define if Berkeley DB has DB_THREAD support])
407 dnl --------------------------------------------------------------------
409 AC_DEFUN([OL_BERKELEY_DB],
410 [ol_cv_berkeley_db=no
411 AC_CHECK_HEADERS(db.h)
412 if test $ac_cv_header_db_h = yes; then
414 if test "$ol_cv_lib_db" != no ; then
415 ol_cv_berkeley_db=yes
416 OL_BERKELEY_DB_THREAD
420 dnl --------------------------------------------------------------------
421 dnl Check for version compatility with back-bdb
422 AC_DEFUN([OL_BDB_COMPAT],
423 [AC_CACHE_CHECK([Berkeley DB version for BDB backend], [ol_cv_bdb_compat],[
424 AC_EGREP_CPP(__db_version_compat,[
427 /* this check could be improved */
428 #ifndef DB_VERSION_MAJOR
429 # define DB_VERSION_MAJOR 1
432 /* require 4.0 or later */
433 #if DB_VERSION_MAJOR >= 4
436 ], [ol_cv_bdb_compat=yes], [ol_cv_bdb_compat=no])])
439 dnl --------------------------------------------------------------------
440 dnl Find old Berkeley DB 1.85/1.86
441 AC_DEFUN([OL_BERKELEY_COMPAT_DB],
442 [AC_CHECK_HEADERS(db_185.h db.h)
443 if test $ac_cv_header_db_185_h = yes -o $ac_cv_header_db_h = yes; then
444 AC_CACHE_CHECK([if Berkeley DB header compatibility], [ol_cv_header_db1],[
445 AC_EGREP_CPP(__db_version_1,[
452 /* this check could be improved */
453 #ifndef DB_VERSION_MAJOR
454 # define DB_VERSION_MAJOR 1
457 #if DB_VERSION_MAJOR == 1
460 ], [ol_cv_header_db1=yes], [ol_cv_header_db1=no])])
462 if test $ol_cv_header_db1 = yes ; then
464 if test "$ol_cv_lib_db" != no ; then
465 ol_cv_berkeley_db=yes
471 dnl ====================================================================
472 dnl Check if GDBM library exists
473 dnl Check for gdbm_open in standard libraries or -lgdbm
475 dnl defines ol_cv_lib_gdbm to 'yes' or '-lgdbm' or 'no'
476 dnl 'yes' implies gdbm_open is in $LIBS
479 dnl AC_CHECK_FUNC(gdbm_open)
480 dnl AC_CHECK_LIB(gdbm,gdbm_open)
482 AC_DEFUN([OL_LIB_GDBM],
483 [AC_CACHE_CHECK(for GDBM library, [ol_cv_lib_gdbm],
485 AC_CHECK_FUNC(gdbm_open,[ol_cv_lib_gdbm=yes], [
486 AC_CHECK_LIB(gdbm,gdbm_open,[ol_cv_lib_gdbm=-lgdbm],[ol_cv_lib_gdbm=no])
492 dnl --------------------------------------------------------------------
493 dnl Check if GDBM exists
495 dnl defines ol_cv_gdbm to 'yes' or 'no'
499 dnl AC_CHECK_HEADERS(gdbm.h)
502 [AC_REQUIRE([OL_LIB_GDBM])
503 AC_CHECK_HEADERS(gdbm.h)
504 AC_CACHE_CHECK(for db, [ol_cv_gdbm], [
505 if test $ol_cv_lib_gdbm = no -o $ac_cv_header_gdbm_h = no ; then
511 if test $ol_cv_gdbm = yes ; then
512 AC_DEFINE(HAVE_GDBM,1, [define if GNU DBM is available])
516 dnl ====================================================================
517 dnl Check if MDBM library exists
518 dnl Check for mdbm_open in standard libraries or -lmdbm
520 dnl defines ol_cv_lib_mdbm to 'yes' or '-lmdbm' or 'no'
521 dnl 'yes' implies mdbm_open is in $LIBS
524 dnl AC_CHECK_FUNC(mdbm_set_chain)
525 dnl AC_CHECK_LIB(mdbm,mdbm_set_chain)
527 AC_DEFUN([OL_LIB_MDBM],
528 [AC_CACHE_CHECK(for MDBM library, [ol_cv_lib_mdbm],
530 AC_CHECK_FUNC(mdbm_set_chain,[ol_cv_lib_mdbm=yes], [
531 AC_CHECK_LIB(mdbm,mdbm_set_chain,[ol_cv_lib_mdbm=-lmdbm],[ol_cv_lib_mdbm=no])
537 dnl --------------------------------------------------------------------
538 dnl Check if MDBM exists
540 dnl defines ol_cv_mdbm to 'yes' or 'no'
544 dnl AC_CHECK_HEADERS(mdbm.h)
547 [AC_REQUIRE([OL_LIB_MDBM])
548 AC_CHECK_HEADERS(mdbm.h)
549 AC_CACHE_CHECK(for db, [ol_cv_mdbm], [
550 if test $ol_cv_lib_mdbm = no -o $ac_cv_header_mdbm_h = no ; then
556 if test $ol_cv_mdbm = yes ; then
557 AC_DEFINE(HAVE_MDBM,1, [define if MDBM is available])
561 dnl ====================================================================
562 dnl Check if NDBM library exists
563 dnl Check for dbm_open in standard libraries or -lndbm or -ldbm
565 dnl defines ol_cv_lib_ndbm to 'yes' or '-lndbm' or -ldbm or 'no'
566 dnl 'yes' implies ndbm_open is in $LIBS
569 dnl AC_CHECK_FUNC(dbm_open)
570 dnl AC_CHECK_LIB(ndbm,dbm_open)
571 dnl AC_CHECK_LIB(dbm,dbm_open)
574 dnl should also check SVR4 case: dbm_open() in -lucb but that
575 dnl would requiring dealing with -L/usr/ucblib
577 AC_DEFUN([OL_LIB_NDBM],
578 [AC_CACHE_CHECK(for NDBM library, [ol_cv_lib_ndbm],
580 AC_CHECK_FUNC(dbm_open,[ol_cv_lib_ndbm=yes], [
581 AC_CHECK_LIB(ndbm,dbm_open,[ol_cv_lib_ndbm=-lndbm], [
582 AC_CHECK_LIB(dbm,dbm_open,[ol_cv_lib_ndbm=-ldbm],
583 [ol_cv_lib_ndbm=no])dnl
590 dnl --------------------------------------------------------------------
591 dnl Check if NDBM exists
593 dnl defines ol_cv_ndbm to 'yes' or 'no'
597 dnl AC_CHECK_HEADERS(ndbm.h)
600 dnl Doesn't handle SVR4 case (see above)
603 [AC_REQUIRE([OL_LIB_NDBM])
604 AC_CHECK_HEADERS(ndbm.h)
605 AC_CACHE_CHECK(for db, [ol_cv_ndbm], [
606 if test $ol_cv_lib_ndbm = no -o $ac_cv_header_ndbm_h = no ; then
612 if test $ol_cv_ndbm = yes ; then
613 AC_DEFINE(HAVE_NDBM,1, [define if NDBM is available])
617 dnl ====================================================================
618 dnl Check POSIX Thread version
620 dnl defines ol_cv_posix_version to 'final' or 'draft' or 'unknown'
621 dnl 'unknown' implies that the version could not be detected
622 dnl or that pthreads.h does exist. Existance of pthreads.h
623 dnl should be tested separately.
625 AC_DEFUN([OL_POSIX_THREAD_VERSION],
626 [AC_CACHE_CHECK([POSIX thread version],[ol_cv_pthread_version],[
627 AC_EGREP_CPP(pthread_version_final,[
628 # include <pthread.h>
629 /* this check could be improved */
630 # ifdef PTHREAD_ONCE_INIT
631 pthread_version_final;
633 ], ol_pthread_final=yes, ol_pthread_final=no)
635 AC_EGREP_CPP(pthread_version_draft4,[
636 # include <pthread.h>
637 /* this check could be improved */
638 # ifdef pthread_once_init
639 pthread_version_draft4;
641 ], ol_pthread_draft4=yes, ol_pthread_draft4=no)
643 if test $ol_pthread_final = yes -a $ol_pthread_draft4 = no; then
644 ol_cv_pthread_version=final
645 elif test $ol_pthread_final = no -a $ol_pthread_draft4 = yes; then
646 ol_cv_pthread_version=draft4
648 ol_cv_pthread_version=unknown
653 dnl --------------------------------------------------------------------
654 AC_DEFUN([OL_PTHREAD_TEST_INCLUDES],
655 [/* pthread test headers */
658 #define NULL (void*)0
664 return (void *) (p == NULL);
667 AC_DEFUN([OL_PTHREAD_TEST_FUNCTION],[
668 /* pthread test function */
673 #ifdef HAVE_PTHREADS_FINAL
677 status = pthread_attr_init(&attr);
678 if( status ) return status;
680 #if defined( PTHREAD_CREATE_JOINABLE ) || defined( PTHREAD_UNDETACHED )
682 #if defined( PTHREAD_CREATE_JOINABLE )
683 status = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
685 status = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_UNDETACHED);
688 #ifdef PTHREAD_CREATE_DETACHED
690 status = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
693 if( status ) return status;
696 status = pthread_create( &t, &attr, task, NULL );
697 if( status ) return status;
699 #if !defined( PTHREAD_CREATE_JOINABLE ) && !defined( PTHREAD_UNDETACHED )
701 /* give thread a chance to complete */
702 /* it should remain joinable and hence detachable */
705 status = pthread_detach( t );
706 if( status ) return status;
711 /* Draft 4 pthreads */
712 status = pthread_create( &t, pthread_attr_default, task, NULL );
713 if( status ) return status;
716 /* give thread a chance to complete */
717 /* it should remain joinable and hence detachable */
720 status = pthread_detach( &t );
721 if( status ) return status;
725 #ifdef HAVE_LINUX_THREADS
726 pthread_kill_other_threads_np();
732 AC_DEFUN([OL_PTHREAD_TEST_PROGRAM],
733 [OL_PTHREAD_TEST_INCLUDES
739 OL_PTHREAD_TEST_FUNCTION
742 dnl --------------------------------------------------------------------
743 AC_DEFUN([OL_PTHREAD_TRY], [# Pthread try link: $1 ($2)
744 if test "$ol_link_threads" = no ; then
746 AC_CACHE_CHECK([for pthread link with $1], [$2], [
751 AC_TRY_RUN(OL_PTHREAD_TEST_PROGRAM,
753 [AC_TRY_LINK(OL_PTHREAD_TEST_INCLUDES,OL_PTHREAD_TEST_FUNCTION,
760 if test $$2 = yes ; then
761 ol_link_pthreads="$1"
762 ol_link_threads=posix
767 dnl ====================================================================
768 dnl Check GNU Pth pthread Header
770 dnl defines ol_cv_header linux_threads to 'yes' or 'no'
771 dnl 'no' implies pthreads.h is not LinuxThreads or pthreads.h
772 dnl doesn't exists. Existance of pthread.h should separately
775 AC_DEFUN([OL_HEADER_GNU_PTH_PTHREAD_H], [
776 AC_CACHE_CHECK([for GNU Pth pthread.h],
777 [ol_cv_header_gnu_pth_pthread_h],
778 [AC_EGREP_CPP(__gnu_pth__,
779 [#include <pthread.h>
780 #ifdef _POSIX_THREAD_IS_GNU_PTH
784 [ol_cv_header_gnu_pth_pthread_h=yes],
785 [ol_cv_header_gnu_pth_pthread_h=no])
788 dnl ====================================================================
789 dnl Check for NT Threads
790 AC_DEFUN([OL_NT_THREADS], [
791 AC_CHECK_FUNC(_beginthread)
793 if test $ac_cv_func__beginthread = yes ; then
794 AC_DEFINE(HAVE_NT_THREADS,1,[if you have NT Threads])
798 dnl ====================================================================
799 dnl Check LinuxThreads Header
801 dnl defines ol_cv_header linux_threads to 'yes' or 'no'
802 dnl 'no' implies pthreads.h is not LinuxThreads or pthreads.h
803 dnl doesn't exists. Existance of pthread.h should separately
806 AC_DEFUN([OL_HEADER_LINUX_THREADS], [
807 AC_CACHE_CHECK([for LinuxThreads pthread.h],
808 [ol_cv_header_linux_threads],
809 [AC_EGREP_CPP(pthread_kill_other_threads_np,
810 [#include <pthread.h>],
811 [ol_cv_header_linux_threads=yes],
812 [ol_cv_header_linux_threads=no])
814 if test $ol_cv_header_linux_threads = yes; then
815 AC_DEFINE(HAVE_LINUX_THREADS,1,[if you have LinuxThreads])
818 dnl --------------------------------------------------------------------
819 dnl Check LinuxThreads Implementation
821 dnl defines ol_cv_sys_linux_threads to 'yes' or 'no'
822 dnl 'no' implies pthreads implementation is not LinuxThreads.
824 AC_DEFUN([OL_SYS_LINUX_THREADS], [
825 AC_CHECK_FUNCS(pthread_kill_other_threads_np)
826 AC_CACHE_CHECK([for LinuxThreads implementation],
827 [ol_cv_sys_linux_threads],
828 [ol_cv_sys_linux_threads=$ac_cv_func_pthread_kill_other_threads_np])
831 dnl --------------------------------------------------------------------
832 dnl Check LinuxThreads consistency
833 AC_DEFUN([OL_LINUX_THREADS], [
834 AC_REQUIRE([OL_HEADER_LINUX_THREADS])
835 AC_REQUIRE([OL_SYS_LINUX_THREADS])
836 AC_CACHE_CHECK([for LinuxThreads consistency], [ol_cv_linux_threads], [
837 if test $ol_cv_header_linux_threads = yes -a \
838 $ol_cv_sys_linux_threads = yes; then
839 ol_cv_linux_threads=yes
840 elif test $ol_cv_header_linux_threads = no -a \
841 $ol_cv_sys_linux_threads = no; then
842 ol_cv_linux_threads=no
844 ol_cv_linux_threads=error
849 dnl ====================================================================
850 dnl Check for POSIX Regex
851 AC_DEFUN([OL_POSIX_REGEX], [
852 AC_CACHE_CHECK([for compatible POSIX regex],ol_cv_c_posix_regex,[
854 #include <sys/types.h>
856 static char *pattern, *string;
864 if(regcomp(&re, pattern, 0)) {
868 string = "ALL MATCH";
870 rc = regexec(&re, string, 0, (void*)0, 0);
876 [ol_cv_c_posix_regex=yes],
877 [ol_cv_c_posix_regex=no],
878 [ol_cv_c_posix_regex=cross])])
881 dnl ====================================================================
882 dnl Check if toupper() requires islower() to be called first
883 AC_DEFUN([OL_C_UPPER_LOWER],
884 [AC_CACHE_CHECK([if toupper() requires islower()],ol_cv_c_upper_lower,[
889 if ('C' == toupper('C'))
894 [ol_cv_c_upper_lower=no],
895 [ol_cv_c_upper_lower=yes],
896 [ol_cv_c_upper_lower=safe])])
897 if test $ol_cv_c_upper_lower != no ; then
898 AC_DEFINE(C_UPPER_LOWER,1, [define if toupper() requires islower()])
902 dnl ====================================================================
903 dnl Check for declaration of sys_errlist in one of stdio.h and errno.h.
904 dnl Declaration of sys_errlist on BSD4.4 interferes with our declaration.
905 dnl Reported by Keith Bostic.
906 AC_DEFUN([OL_SYS_ERRLIST],
907 [AC_CACHE_CHECK([declaration of sys_errlist],ol_cv_dcl_sys_errlist,[
910 #include <sys/types.h>
915 [char *c = (char *) *sys_errlist],
916 [ol_cv_dcl_sys_errlist=yes
917 ol_cv_have_sys_errlist=yes],
918 [ol_cv_dcl_sys_errlist=no])])
920 # It's possible (for near-UNIX clones) that sys_errlist doesn't exist
921 if test $ol_cv_dcl_sys_errlist = no ; then
922 AC_DEFINE(DECL_SYS_ERRLIST,1,
923 [define if sys_errlist is not declared in stdio.h or errno.h])
925 AC_CACHE_CHECK([existence of sys_errlist],ol_cv_have_sys_errlist,[
926 AC_TRY_LINK([#include <errno.h>],
927 [char *c = (char *) *sys_errlist],
928 [ol_cv_have_sys_errlist=yes],
929 [ol_cv_have_sys_errlist=no])])
931 if test $ol_cv_have_sys_errlist = yes ; then
932 AC_DEFINE(HAVE_SYS_ERRLIST,1,
933 [define if you actually have sys_errlist in your libs])
937 dnl ====================================================================
938 dnl Early MIPS compilers (used in Ultrix 4.2) don't like
939 dnl "int x; int *volatile a = &x; *a = 0;"
940 dnl -- borrowed from PDKSH
941 AC_DEFUN(OL_C_VOLATILE,
942 [AC_CACHE_CHECK(if compiler understands volatile, ol_cv_c_volatile,
943 [AC_TRY_COMPILE([int x, y, z;],
944 [volatile int a; int * volatile b = x ? &y : &z;
945 /* Older MIPS compilers (eg., in Ultrix 4.2) don't like *b = 0 */
946 *b = 0;], ol_cv_c_volatile=yes, ol_cv_c_volatile=no)])
947 if test $ol_cv_c_volatile = yes; then
950 AC_DEFINE(volatile,,[define as empty if volatile is not supported])
954 dnl ====================================================================
955 dnl Look for fetch(3)
956 AC_DEFUN([OL_LIB_FETCH],
958 LIBS="-lfetch -lcom_err $LIBS"
959 AC_CACHE_CHECK([fetch(3) library],ol_cv_lib_fetch,[
961 #include <sys/param.h>
964 [struct url *u = fetchParseURL("file:///"); ],
965 [ol_cv_lib_fetch=yes],
966 [ol_cv_lib_fetch=no])])
968 if test $ol_cv_lib_fetch != no ; then
969 ol_link_fetch="-lfetch -lcom_err"
970 AC_DEFINE(HAVE_FETCH,1,
971 [define if you actually have FreeBSD fetch(3)])
975 dnl ====================================================================
976 dnl Define sig_atomic_t if not defined in signal.h
977 AC_DEFUN(OL_TYPE_SIG_ATOMIC_T,
978 [AC_CACHE_CHECK(for sig_atomic_t, ol_cv_type_sig_atomic_t,
979 [AC_TRY_COMPILE([#include <signal.h>], [sig_atomic_t atomic;],
980 ol_cv_type_sig_atomic_t=yes, ol_cv_type_sig_atomic_t=no)])
981 if test $ol_cv_type_sig_atomic_t = no; then
982 AC_DEFINE(sig_atomic_t,int,
983 [define to atomic type if sig_atomic_t is not available])
987 dnl ====================================================================
988 dnl Define socklen_t if not defined in sys/types.h or sys/socket.h
989 AC_DEFUN(OL_TYPE_SOCKLEN_T,
990 [AC_CACHE_CHECK(for socklen_t, ol_cv_type_socklen_t,
992 #ifdef HAVE_SYS_TYPES_H
993 #include <sys/types.h>
995 #ifdef HAVE_SYS_SOCKET_H
996 #include <sys/socket.h>
999 ol_cv_type_socklen_t=yes, ol_cv_type_socklen_t=no)])
1000 if test $ol_cv_type_socklen_t = no; then
1001 AC_DEFINE(socklen_t, int,
1002 [define to int if socklen_t is not available])
1006 dnl ====================================================================
1007 dnl Define inet_aton is available
1008 AC_DEFUN(OL_FUNC_INET_ATON,
1009 [AC_CACHE_CHECK([for inet_aton()], ol_cv_func_inet_aton,
1011 #ifdef HAVE_SYS_TYPES_H
1012 # include <sys/types.h>
1014 #ifdef HAVE_SYS_SOCKET_H
1015 # include <sys/socket.h>
1016 # ifdef HAVE_SYS_SELECT_H
1017 # include <sys/select.h>
1019 # include <netinet/in.h>
1020 # ifdef HAVE_ARPA_INET_H
1021 # include <arpa/inet.h>
1024 ], [struct in_addr in;
1025 int rc = inet_aton( "255.255.255.255", &in );],
1026 ol_cv_func_inet_aton=yes, ol_cv_func_inet_aton=no)])
1027 if test $ol_cv_func_inet_aton != no; then
1028 AC_DEFINE(HAVE_INET_ATON, 1,
1029 [define to you inet_aton(3) is available])
1033 dnl ====================================================================
1034 dnl check no of arguments for ctime_r
1035 AC_DEFUN(OL_FUNC_CTIME_R_NARGS,
1036 [AC_CACHE_CHECK(number of arguments of ctime_r, ol_cv_func_ctime_r_nargs,
1037 [AC_TRY_COMPILE([#include <time.h>],
1038 [time_t ti; char *buffer; ctime_r(&ti,buffer,32);],
1039 ol_cv_func_ctime_r_nargs3=yes,
1040 ol_cv_func_ctime_r_nargs3=no)
1042 AC_TRY_COMPILE([#include <time.h>],
1043 [time_t ti; char *buffer; ctime_r(&ti,buffer);],
1044 ol_cv_func_ctime_r_nargs2=yes,
1045 ol_cv_func_ctime_r_nargs2=no)
1047 if test $ol_cv_func_ctime_r_nargs3 = yes -a \
1048 $ol_cv_func_ctime_r_nargs2 = no ; then
1050 ol_cv_func_ctime_r_nargs=3
1052 elif test $ol_cv_func_ctime_r_nargs3 = no -a \
1053 $ol_cv_func_ctime_r_nargs2 = yes ; then
1055 ol_cv_func_ctime_r_nargs=2
1058 ol_cv_func_ctime_r_nargs=0
1062 if test $ol_cv_func_ctime_r_nargs -gt 1 ; then
1063 AC_DEFINE_UNQUOTED(CTIME_R_NARGS, $ol_cv_func_ctime_r_nargs,
1064 [set to the number of arguments ctime_r() expects])
1068 dnl --------------------------------------------------------------------
1069 dnl check return type of ctime_r()
1070 AC_DEFUN(OL_FUNC_CTIME_R_TYPE,
1071 [AC_CACHE_CHECK(return type of ctime_r, ol_cv_func_ctime_r_type,
1072 [AC_TRY_COMPILE([#include <time.h>],
1073 [extern int (ctime_r)();],
1074 ol_cv_func_ctime_r_type="int", ol_cv_func_ctime_r_type="charp")
1076 if test $ol_cv_func_ctime_r_type = "int" ; then
1077 AC_DEFINE(CTIME_R_RETURNS_INT,1, [define if ctime_r() returns int])
1080 dnl ====================================================================
1081 dnl check no of arguments for gethostbyname_r
1082 AC_DEFUN(OL_FUNC_GETHOSTBYNAME_R_NARGS,
1083 [AC_CACHE_CHECK(number of arguments of gethostbyname_r,
1084 ol_cv_func_gethostbyname_r_nargs,
1085 [AC_TRY_COMPILE([#include <sys/types.h>
1086 #include <sys/socket.h>
1087 #include <netinet/in.h>
1089 #define BUFSIZE (sizeof(struct hostent)+10)],
1090 [struct hostent hent; char buffer[BUFSIZE];
1091 int bufsize=BUFSIZE;int h_errno;
1092 (void)gethostbyname_r("segovia.cs.purdue.edu", &hent,
1093 buffer, bufsize, &h_errno);],
1094 ol_cv_func_gethostbyname_r_nargs5=yes,
1095 ol_cv_func_gethostbyname_r_nargs5=no)
1097 AC_TRY_COMPILE([#include <sys/types.h>
1098 #include <sys/socket.h>
1099 #include <netinet/in.h>
1101 #define BUFSIZE (sizeof(struct hostent)+10)],
1102 [struct hostent hent;struct hostent *rhent;
1103 char buffer[BUFSIZE];
1104 int bufsize=BUFSIZE;int h_errno;
1105 (void)gethostbyname_r("localhost", &hent, buffer, bufsize,
1106 &rhent, &h_errno);],
1107 ol_cv_func_gethostbyname_r_nargs6=yes,
1108 ol_cv_func_gethostbyname_r_nargs6=no)
1110 if test $ol_cv_func_gethostbyname_r_nargs5 = yes -a \
1111 $ol_cv_func_gethostbyname_r_nargs6 = no ; then
1113 ol_cv_func_gethostbyname_r_nargs=5
1115 elif test $ol_cv_func_gethostbyname_r_nargs5 = no -a \
1116 $ol_cv_func_gethostbyname_r_nargs6 = yes ; then
1118 ol_cv_func_gethostbyname_r_nargs=6
1121 ol_cv_func_gethostbyname_r_nargs=0
1124 if test $ol_cv_func_gethostbyname_r_nargs -gt 1 ; then
1125 AC_DEFINE_UNQUOTED(GETHOSTBYNAME_R_NARGS,
1126 $ol_cv_func_gethostbyname_r_nargs,
1127 [set to the number of arguments gethostbyname_r() expects])
1131 dnl check no of arguments for gethostbyaddr_r
1132 AC_DEFUN(OL_FUNC_GETHOSTBYADDR_R_NARGS,
1133 [AC_CACHE_CHECK(number of arguments of gethostbyaddr_r,
1134 [ol_cv_func_gethostbyaddr_r_nargs],
1135 [AC_TRY_COMPILE([#include <sys/types.h>
1136 #include <sys/socket.h>
1137 #include <netinet/in.h>
1139 #define BUFSIZE (sizeof(struct hostent)+10)],
1140 [struct hostent hent; char buffer[BUFSIZE];
1142 size_t alen=sizeof(struct in_addr);
1143 int bufsize=BUFSIZE;int h_errno;
1144 (void)gethostbyaddr_r( (void *)&(add.s_addr),
1145 alen, AF_INET, &hent, buffer, bufsize, &h_errno);],
1146 ol_cv_func_gethostbyaddr_r_nargs7=yes,
1147 ol_cv_func_gethostbyaddr_r_nargs7=no)
1149 AC_TRY_COMPILE([#include <sys/types.h>
1150 #include <sys/socket.h>
1151 #include <netinet/in.h>
1153 #define BUFSIZE (sizeof(struct hostent)+10)],
1154 [struct hostent hent;
1155 struct hostent *rhent; char buffer[BUFSIZE];
1157 size_t alen=sizeof(struct in_addr);
1158 int bufsize=BUFSIZE;int h_errno;
1159 (void)gethostbyaddr_r( (void *)&(add.s_addr),
1160 alen, AF_INET, &hent, buffer, bufsize,
1161 &rhent, &h_errno);],
1162 ol_cv_func_gethostbyaddr_r_nargs8=yes,
1163 ol_cv_func_gethostbyaddr_r_nargs8=no)
1165 if test $ol_cv_func_gethostbyaddr_r_nargs7 = yes -a \
1166 $ol_cv_func_gethostbyaddr_r_nargs8 = no ; then
1168 ol_cv_func_gethostbyaddr_r_nargs=7
1170 elif test $ol_cv_func_gethostbyaddr_r_nargs7 = no -a \
1171 $ol_cv_func_gethostbyaddr_r_nargs8 = yes ; then
1173 ol_cv_func_gethostbyaddr_r_nargs=8
1176 ol_cv_func_gethostbyaddr_r_nargs=0
1179 if test $ol_cv_func_gethostbyaddr_r_nargs -gt 1 ; then
1180 AC_DEFINE_UNQUOTED(GETHOSTBYADDR_R_NARGS,
1181 $ol_cv_func_gethostbyaddr_r_nargs,
1182 [set to the number of arguments gethostbyaddr_r() expects])