X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=build%2Fopenldap.m4;h=c69f1246f2704574ba59fecdeadbb791b3917510;hb=931d7f4a952d456b79717e317a83d27072d9f73d;hp=1172210fefbaed2be1463018ded37b1ae52cb628;hpb=aab546e567a7a084e5926fc2ae59b63df529908f;p=openldap diff --git a/build/openldap.m4 b/build/openldap.m4 index 1172210fef..c69f1246f2 100644 --- a/build/openldap.m4 +++ b/build/openldap.m4 @@ -1,9 +1,17 @@ +dnl OpenLDAP Autoconf Macros dnl $OpenLDAP$ +dnl This work is part of OpenLDAP Software . dnl -dnl Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. -dnl COPYING RESTRICTIONS APPLY, See COPYRIGHT file +dnl Copyright 1998-2005 The OpenLDAP Foundation. +dnl All rights reserved. dnl -dnl OpenLDAP Autoconf Macros +dnl Redistribution and use in source and binary forms, with or without +dnl modification, are permitted only as authorized by the OpenLDAP +dnl Public License. +dnl +dnl A copy of this license is available in the file LICENSE in the +dnl top-level directory of the distribution or, alternatively, at +dnl . dnl dnl -------------------------------------------------------------------- dnl Restricted form of AC_ARG_ENABLE that limits user options @@ -13,7 +21,7 @@ dnl $2 = help-string dnl $3 = default value (auto) dnl $4 = allowed values (auto yes no) AC_DEFUN([OL_ARG_ENABLE], [# OpenLDAP --enable-$1 - AC_ARG_ENABLE($1,[$2 (]ifelse($3,,auto,$3)[)],[ + AC_ARG_ENABLE($1,changequote(<,>)<$2 [>ifelse($3,,auto,$3)<]>changequote([,]),[ ol_arg=invalid for ol_val in ifelse($4,,[auto yes no],[$4]) ; do if test "$enableval" = "$ol_val" ; then @@ -38,7 +46,7 @@ dnl $2 = help-string dnl $3 = default value (no) dnl $4 = allowed values (yes or no) AC_DEFUN([OL_ARG_WITH], [# OpenLDAP --with-$1 - AC_ARG_WITH($1,[$2 (]ifelse($3,,yes,$3)[)],[ + AC_ARG_WITH($1,changequote(<,>)<$2 [>ifelse($3,,yes,$3)<]>changequote([,]),[ ol_arg=invalid for ol_val in ifelse($4,,[yes no],[$4]) ; do if test "$withval" = "$ol_val" ; then @@ -56,6 +64,34 @@ dnl AC_VERBOSE(OpenLDAP --with-$1 $ol_with_$1) ])dnl dnl dnl ==================================================================== +dnl +AC_DEFUN(AC_COMPILE_CHECK_SIZEOF, +[changequote(<<, >>)dnl +dnl The name to #define. +define(<>, translit(sizeof_$1, [a-z *], [A-Z_P]))dnl +dnl The cache variable name. +define(<>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl +changequote([, ])dnl +AC_MSG_CHECKING(size of $1) +AC_CACHE_VAL(AC_CV_NAME, +[for ac_size in 4 8 1 2 16 $2 ; do # List sizes in rough order of prevalence. + AC_TRY_COMPILE([#include "confdefs.h" +#include +#include +$2 +], [switch (0) case 0: case (sizeof ($1) == $ac_size):;], AC_CV_NAME=$ac_size) + if test x$AC_CV_NAME != x ; then break; fi +done +]) +if test x$AC_CV_NAME = x ; then + AC_MSG_ERROR([cannot determine a size for $1]) +fi +AC_MSG_RESULT($AC_CV_NAME) +AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [The number of bytes in type $1]) +undefine([AC_TYPE_NAME])dnl +undefine([AC_CV_NAME])dnl +]) +dnl ==================================================================== dnl check if hard links are supported. dnl AC_DEFUN([OL_PROG_LN_H], [# test for ln hardlink support @@ -211,92 +247,281 @@ fi ]) dnl dnl ==================================================================== -dnl Check if db.h is Berkeley DB2 -dnl -dnl defines ol_cv_header_db2 to 'yes' or 'no' -dnl -dnl uses: -dnl AC_CHECK_HEADERS(db.h) -dnl -AC_DEFUN([OL_HEADER_BERKELEY_DB2], -[AC_CHECK_HEADERS(db.h) -if test $ac_cv_header_db_h = yes ; then - AC_CACHE_CHECK([if db.h is DB2], [ol_cv_header_db2],[ - AC_EGREP_CPP(__db_version_2,[ -# include - /* this check could be improved */ -# ifdef DB_VERSION_MAJOR -# if DB_VERSION_MAJOR == 2 - __db_version_2; -# endif -# endif - ], ol_cv_header_db2=yes, ol_cv_header_db2=no)]) -else - ol_cv_header_db2=no +dnl DNS resolver macros +AC_DEFUN([OL_RESOLVER_TRY], +[if test $ol_cv_lib_resolver = no ; then + AC_CACHE_CHECK([for resolver link (]ifelse($2,,default,$2)[)],[$1], +[ + ol_RESOLVER_LIB=ifelse($2,,,$2) + ol_LIBS=$LIBS + LIBS="$ol_RESOLVER_LIB $LIBS" + + AC_TRY_LINK([ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#include +#ifdef HAVE_ARPA_NAMESER_H +# include +#endif +#ifdef HAVE_RESOLV_H +# include +#endif +],[{ + int len, status; + char *request = NULL; + unsigned char reply[64*1024]; + unsigned char host[64*1024]; + unsigned char *p; + +#ifdef NS_HFIXEDSZ + /* Bind 8/9 interface */ + len = res_query(request, ns_c_in, ns_t_srv, reply, sizeof(reply)); +#else + /* Bind 4 interface */ +# ifndef T_SRV +# define T_SRV 33 +# endif + len = res_query(request, C_IN, T_SRV, reply, sizeof(reply)); +#endif + p = reply; +#ifdef NS_HFIXEDSZ + /* Bind 8/9 interface */ + p += NS_HFIXEDSZ; +#elif defined(HFIXEDSZ) + /* Bind 4 interface w/ HFIXEDSZ */ + p += HFIXEDSZ; +#else + /* Bind 4 interface w/o HFIXEDSZ */ + p += sizeof(HEADER); +#endif + status = dn_expand( reply, reply+len, p, host, sizeof(host)); +}],[$1=yes],[$1=no]) + + LIBS="$ol_LIBS" +]) + + if test $$1 = yes ; then + ol_cv_lib_resolver=ifelse($2,,yes,$2) + fi fi -])dnl +]) dnl -------------------------------------------------------------------- -dnl Check if Berkeley DB2 library exists -dnl Check for dbopen in standard libraries or -ldb -dnl -dnl defines ol_cv_lib_db2 to '-ldb' or 'no' +dnl Try to locate appropriate library +AC_DEFUN([OL_RESOLVER_LINK], +[ol_cv_lib_resolver=no +OL_RESOLVER_TRY(ol_cv_resolver_none) +OL_RESOLVER_TRY(ol_cv_resolver_resolv,[-lresolv]) +OL_RESOLVER_TRY(ol_cv_resolver_bind,[-lbind]) +]) dnl -dnl uses: -dnl AC_CHECK_LIB(db,db_appexit) +dnl ==================================================================== +dnl Berkeley DB macros dnl -AC_DEFUN([OL_LIB_BERKELEY_DB2], -[AC_CACHE_CHECK([for DB2 library], [ol_cv_lib_db2], -[ ol_LIBS="$LIBS" - AC_CHECK_LIB(db,db_appexit,[ol_cv_lib_db2=-ldb],[ol_cv_lib_db2=no]) +dnl -------------------------------------------------------------------- +dnl Try to link +AC_DEFUN([OL_BERKELEY_DB_TRY], +[if test $ol_cv_lib_db = no ; then + AC_CACHE_CHECK([for Berkeley DB link (]ifelse($2,,default,$2)[)],[$1], +[ + ol_DB_LIB=ifelse($2,,,$2) + ol_LIBS=$LIBS + LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS" + + AC_TRY_LINK([ +#ifdef HAVE_DB_185_H +# include +#else +# include +#endif + +#ifndef DB_VERSION_MAJOR +# define DB_VERSION_MAJOR 1 +#endif + +#ifndef NULL +#define NULL ((void*)0) +#endif +],[ +#if DB_VERSION_MAJOR > 1 + { + char *version; + int major, minor, patch; + + version = db_version( &major, &minor, &patch ); + + if( major != DB_VERSION_MAJOR || + minor < DB_VERSION_MINOR ) + { + printf("Berkeley DB version mismatch\n" + "\theader: %s\n\tlibrary: %s\n", + DB_VERSION_STRING, version); + return 1; + } + } +#endif + +#if DB_VERSION_MAJOR > 2 + db_env_create( NULL, 0 ); +#elif DB_VERSION_MAJOR > 1 + db_appexit( NULL ); +#else + (void) dbopen( NULL, 0, 0, 0, NULL); +#endif +],[$1=yes],[$1=no]) + LIBS="$ol_LIBS" ]) -])dnl + + if test $$1 = yes ; then + ol_cv_lib_db=ifelse($2,,yes,$2) + fi +fi +]) dnl dnl -------------------------------------------------------------------- -dnl Check if Berkeley db2 exists +dnl Try to locate appropriate library +AC_DEFUN([OL_BERKELEY_DB_LINK], +[ol_cv_lib_db=no +OL_BERKELEY_DB_TRY(ol_cv_db_none) +OL_BERKELEY_DB_TRY(ol_cv_db_db43,[-ldb43]) +OL_BERKELEY_DB_TRY(ol_cv_db_db_43,[-ldb-43]) +OL_BERKELEY_DB_TRY(ol_cv_db_db_4_dot_3,[-ldb-4.3]) +OL_BERKELEY_DB_TRY(ol_cv_db_db_4_3,[-ldb-4-3]) +OL_BERKELEY_DB_TRY(ol_cv_db_db42,[-ldb42]) +OL_BERKELEY_DB_TRY(ol_cv_db_db_42,[-ldb-42]) +OL_BERKELEY_DB_TRY(ol_cv_db_db_4_dot_2,[-ldb-4.2]) +OL_BERKELEY_DB_TRY(ol_cv_db_db_4_2,[-ldb-4-2]) +OL_BERKELEY_DB_TRY(ol_cv_db_db_4,[-ldb-4]) +OL_BERKELEY_DB_TRY(ol_cv_db_db4,[-ldb4]) +OL_BERKELEY_DB_TRY(ol_cv_db_db,[-ldb]) +OL_BERKELEY_DB_TRY(ol_cv_db_db41,[-ldb41]) +OL_BERKELEY_DB_TRY(ol_cv_db_db_41,[-ldb-41]) +OL_BERKELEY_DB_TRY(ol_cv_db_db_4_dot_1,[-ldb-4.1]) +OL_BERKELEY_DB_TRY(ol_cv_db_db_4_1,[-ldb-4-1]) +OL_BERKELEY_DB_TRY(ol_cv_db_db3,[-ldb3]) +OL_BERKELEY_DB_TRY(ol_cv_db_db_3,[-ldb-3]) +OL_BERKELEY_DB_TRY(ol_cv_db_db2,[-ldb2]) +OL_BERKELEY_DB_TRY(ol_cv_db_db_2,[-ldb-2]) +OL_BERKELEY_DB_TRY(ol_cv_db_db1,[-ldb1]) +OL_BERKELEY_DB_TRY(ol_cv_db_db_1,[-ldb-1]) +]) dnl -dnl defines ol_cv_berkeley_db2 to 'yes' or 'no' -dnl -dnl uses: -dnl OL_LIB_BERKELEY_DB2 -dnl OL_HEADER_BERKELEY_DB2 -dnl -AC_DEFUN([OL_BERKELEY_DB2], -[AC_REQUIRE([OL_LIB_BERKELEY_DB2]) - AC_REQUIRE([OL_HEADER_BERKELEY_DB2]) - AC_CACHE_CHECK([for Berkeley DB2], [ol_cv_berkeley_db2], [ - if test "$ol_cv_lib_db2" = no -o "$ol_cv_header_db2" = no ; then - ol_cv_berkeley_db2=no - else - ol_cv_berkeley_db2=yes +dnl -------------------------------------------------------------------- +dnl Check if Berkeley DB version +AC_DEFUN([OL_BERKELEY_DB_VERSION], +[AC_CACHE_CHECK([for Berkeley DB version match], [ol_cv_berkeley_db_version], [ + ol_LIBS="$LIBS" + LIBS="$LTHREAD_LIBS $LIBS" + if test $ol_cv_lib_db != yes ; then + LIBS="$ol_cv_lib_db $LIBS" fi + + AC_TRY_RUN([ +#ifdef HAVE_DB_185_H + choke me; +#else +#include +#endif +#ifndef DB_VERSION_MAJOR +# define DB_VERSION_MAJOR 1 +#endif +#ifndef NULL +#define NULL ((void *)0) +#endif +main() +{ +#if DB_VERSION_MAJOR > 1 + char *version; + int major, minor, patch; + + version = db_version( &major, &minor, &patch ); + + if( major != DB_VERSION_MAJOR || + minor != DB_VERSION_MINOR || + patch != DB_VERSION_PATCH ) + { + printf("Berkeley DB version mismatch\n" + "\theader: %s\n\tlibrary: %s\n", + DB_VERSION_STRING, version); + return 1; + } +#endif + + return 0; +}], + [ol_cv_berkeley_db_version=yes], + [ol_cv_berkeley_db_version=no], + [ol_cv_berkeley_db_version=cross]) + + LIBS="$ol_LIBS" ]) - if test $ol_cv_berkeley_db2 = yes ; then - AC_DEFINE(HAVE_BERKELEY_DB2,1, [define if Berkeley DBv2 is available]) - fi + + if test $ol_cv_berkeley_db_version = no ; then + AC_MSG_ERROR([Berkeley DB version mismatch]) + fi ])dnl dnl -dnl dnl -------------------------------------------------------------------- -dnl Check if Berkeley db2 supports DB_THREAD -AC_DEFUN([OL_BERKELEY_DB2_DB_THREAD], -[AC_CACHE_CHECK([for DB_THREAD support], [ol_cv_berkeley_db2_db_thread], [ +dnl Check if Berkeley DB supports DB_THREAD +AC_DEFUN([OL_BERKELEY_DB_THREAD], +[AC_CACHE_CHECK([for Berkeley DB thread support], [ol_cv_berkeley_db_thread], [ ol_LIBS="$LIBS" - if test $ol_cv_lib_db2 != yes ; then - LIBS="$ol_cv_lib_db2" + LIBS="$LTHREAD_LIBS $LIBS" + if test $ol_cv_lib_db != yes ; then + LIBS="$ol_cv_lib_db $LIBS" fi AC_TRY_RUN([ +#ifdef HAVE_DB_185_H + choke me; +#else #include +#endif #ifndef NULL #define NULL ((void *)0) #endif main() { int rc; - DB_ENV env; - u_int32_t flags = DB_CREATE | DB_THREAD; + u_int32_t flags = DB_CREATE | +#ifdef DB_PRIVATE + DB_PRIVATE | +#endif + DB_THREAD; + +#if DB_VERSION_MAJOR > 2 + DB_ENV *env = NULL; + + rc = db_env_create( &env, 0 ); + + flags |= DB_INIT_MPOOL; +#ifdef DB_MPOOL_PRIVATE + flags |= DB_MPOOL_PRIVATE; +#endif + + if( rc ) { + printf("BerkeleyDB: %s\n", db_strerror(rc) ); + return rc; + } + +#if (DB_VERSION_MAJOR > 3) || (DB_VERSION_MINOR >= 1) + rc = env->open( env, NULL, flags, 0 ); +#else + rc = env->open( env, NULL, NULL, flags, 0 ); +#endif + + if ( rc == 0 ) { + rc = env->close( env, 0 ); + } + if( rc ) { + printf("BerkeleyDB: %s\n", db_strerror(rc) ); + return rc; + } + +#else + DB_ENV env; memset( &env, '\0', sizeof(env) ); rc = db_appinit( NULL, NULL, &env, flags ); @@ -305,89 +530,92 @@ main() db_appexit( &env ); } + unlink("__db_mpool.share"); + unlink("__db_lock.share"); +#endif + return rc; }], - [ol_cv_berkeley_db2_db_thread=yes], - [ol_cv_berkeley_db2_db_thread=no], - [ol_cv_berkeley_db2_db_thread=cross]) + [ol_cv_berkeley_db_thread=yes], + [ol_cv_berkeley_db_thread=no], + [ol_cv_berkeley_db_thread=cross]) LIBS="$ol_LIBS" +]) - if test $ol_cv_berkeley_db2_db_thread != no ; then - AC_DEFINE(HAVE_BERKELEY_DB2_DB_THREAD, 1, - [define if BerkeleyDB2 has DB_THREAD support]) + if test $ol_cv_berkeley_db_thread != no ; then + AC_DEFINE(HAVE_BERKELEY_DB_THREAD, 1, + [define if Berkeley DB has DB_THREAD support]) fi -])])dnl -dnl ==================================================================== -dnl Check for db.h/db_185.h is Berkeley DB -dnl -dnl defines ol_cv_header_db to 'yes' or 'no' -dnl -dnl uses: -dnl OL_HEADER_BERKELEY_DB2 -dnl AC_CHECK_HEADERS(db_185.h) -dnl -AC_DEFUN([OL_HEADER_BERKELEY_DB], -[AC_REQUIRE([OL_HEADER_BERKELEY_DB2]) -AC_CHECK_HEADERS(db_185.h) -if test "$ol_cv_header_db2" = yes ; then - dnl db.h is db2! - - ol_cv_header_db=$ac_cv_header_db_185_h -else - ol_cv_header_db=$ac_cv_header_db_h -fi ])dnl dnl dnl -------------------------------------------------------------------- -dnl Check if Berkeley DB library exists -dnl Check for dbopen in standard libraries or -ldb -dnl -dnl defines ol_cv_lib_db to 'yes' or '-ldb' or 'no' -dnl 'yes' implies dbopen is in $LIBS -dnl -dnl uses: -dnl AC_CHECK_FUNC(dbopen) -dnl AC_CHECK_LIB(db,dbopen) -dnl -AC_DEFUN([OL_LIB_BERKELEY_DB], -[AC_CACHE_CHECK([for Berkeley DB library], [ol_cv_lib_db], -[ - AC_CHECK_HEADERS(db1/db.h) - ol_LIBS="$LIBS" - AC_CHECK_FUNC(dbopen,[ol_cv_lib_db=yes], [ - AC_CHECK_LIB(db1,dbopen,[ol_cv_lib_db=-ldb1],[ - AC_CHECK_LIB(db,dbopen,[ol_cv_lib_db=-ldb], - [ol_cv_lib_db=no]) - ]) - ]) - LIBS="$ol_LIBS" -]) -])dnl -dnl -dnl -------------------------------------------------------------------- -dnl Check if Berkeley DB exists -dnl -dnl defines ol_cv_berkeley_db to 'yes' or 'no' -dnl -dnl uses: -dnl OL_LIB_BERKELEY_DB -dnl OL_HEADER_BERKELEY_DB -dnl +dnl Find any DB AC_DEFUN([OL_BERKELEY_DB], -[AC_REQUIRE([OL_LIB_BERKELEY_DB]) - AC_REQUIRE([OL_HEADER_BERKELEY_DB]) - AC_CACHE_CHECK([for Berkeley DB], [ol_cv_berkeley_db], [ - if test "$ol_cv_lib_db" = no -o "$ol_cv_header_db" = no ; then - ol_cv_berkeley_db=no - else +[ol_cv_berkeley_db=no +AC_CHECK_HEADERS(db.h) +if test $ac_cv_header_db_h = yes; then + OL_BERKELEY_DB_LINK + if test "$ol_cv_lib_db" != no ; then ol_cv_berkeley_db=yes + OL_BERKELEY_DB_VERSION + OL_BERKELEY_DB_THREAD fi +fi +]) +dnl -------------------------------------------------------------------- +dnl Check for version compatility with back-bdb +AC_DEFUN([OL_BDB_COMPAT], +[AC_CACHE_CHECK([Berkeley DB version for BDB backend], [ol_cv_bdb_compat],[ + AC_EGREP_CPP(__db_version_compat,[ +#include + + /* this check could be improved */ +#ifndef DB_VERSION_MAJOR +# define DB_VERSION_MAJOR 1 +#endif +#ifndef DB_VERSION_MINOR +# define DB_VERSION_MINOR 0 +#endif + +/* require 4.2 or later */ +#if (DB_VERSION_MAJOR >= 4) && (DB_VERSION_MINOR >= 2) + __db_version_compat +#endif + ], [ol_cv_bdb_compat=yes], [ol_cv_bdb_compat=no])]) +]) + +dnl -------------------------------------------------------------------- +dnl Find old Berkeley DB 1.85/1.86 +AC_DEFUN([OL_BERKELEY_COMPAT_DB], +[AC_CHECK_HEADERS(db_185.h db.h) +if test $ac_cv_header_db_185_h = yes -o $ac_cv_header_db_h = yes; then + AC_CACHE_CHECK([if Berkeley DB header compatibility], [ol_cv_header_db1],[ + AC_EGREP_CPP(__db_version_1,[ +#if HAVE_DB_185_H +# include +#else +# include +#endif + + /* this check could be improved */ +#ifndef DB_VERSION_MAJOR +# define DB_VERSION_MAJOR 1 +#endif + +#if DB_VERSION_MAJOR == 1 + __db_version_1 +#endif +], [ol_cv_header_db1=yes], [ol_cv_header_db1=no])]) + + if test $ol_cv_header_db1 = yes ; then + OL_BERKELEY_DB_LINK + if test "$ol_cv_lib_db" != no ; then + ol_cv_berkeley_db=yes + fi + fi +fi ]) - if test $ol_cv_berkeley_db = yes ; then - AC_DEFINE(HAVE_BERKELEY_DB,1, [define if Berkeley DB is available]) - fi -])dnl dnl dnl ==================================================================== dnl Check if GDBM library exists @@ -538,36 +766,48 @@ dnl dnl ==================================================================== dnl Check POSIX Thread version dnl -dnl defines ol_cv_posix_version to 'final' or 'draft' or 'unknown' -dnl 'unknown' implies that the version could not be detected -dnl or that pthreads.h does exist. Existance of pthreads.h -dnl should be tested separately. +dnl defines ol_cv_pthread_version to 4, 5, 6, 7, 8, 10, depending on the +dnl version of the POSIX.4a Draft that is implemented. +dnl 10 == POSIX.4a Final == POSIX.1c-1996 for our purposes. +dnl Existence of pthread.h should be tested separately. +dnl +dnl tests: +dnl pthread_detach() was dropped in Draft 8, it is present +dnl in every other version +dnl PTHREAD_CREATE_UNDETACHED is only in Draft 7, it was called +dnl PTHREAD_CREATE_JOINABLE after that +dnl pthread_attr_create was renamed to pthread_attr_init in Draft 6. +dnl Draft 6-10 has _init, Draft 4-5 has _create. +dnl pthread_attr_default was dropped in Draft 6, only 4 and 5 have it +dnl PTHREAD_MUTEX_INITIALIZER was introduced in Draft 5. It's not +dnl interesting to us because we don't try to statically +dnl initialize mutexes. 5-10 has it. +dnl +dnl Draft 9 and 10 are equivalent for our purposes. dnl AC_DEFUN([OL_POSIX_THREAD_VERSION], [AC_CACHE_CHECK([POSIX thread version],[ol_cv_pthread_version],[ - AC_EGREP_CPP(pthread_version_final,[ + AC_TRY_COMPILE([ # include - /* this check could be improved */ -# ifdef PTHREAD_ONCE_INIT - pthread_version_final; -# endif - ], ol_pthread_final=yes, ol_pthread_final=no) - - AC_EGREP_CPP(pthread_version_draft4,[ + ],[ + int i = PTHREAD_CREATE_JOINABLE; + ],[ + AC_EGREP_HEADER(pthread_detach,pthread.h, + ol_cv_pthread_version=10, ol_cv_pthread_version=8)],[ + AC_EGREP_CPP(draft7,[ # include - /* this check could be improved */ -# ifdef pthread_once_init - pthread_version_draft4; +# ifdef PTHREAD_CREATE_UNDETACHED + draft7 # endif - ], ol_pthread_draft4=yes, ol_pthread_draft4=no) - - if test $ol_pthread_final = yes -a $ol_pthread_draft4 = no; then - ol_cv_pthread_version=final - elif test $ol_pthread_final = no -a $ol_pthread_draft4 = yes; then - ol_cv_pthread_version=draft4 - else - ol_cv_pthread_version=unknown - fi + ], ol_cv_pthread_version=7, [ + AC_EGREP_HEADER(pthread_attr_init,pthread.h, + ol_cv_pthread_version=6, [ + AC_EGREP_CPP(draft5,[ +# include +#ifdef PTHREAD_MUTEX_INITIALIZER + draft5 +#endif + ], ol_cv_pthread_version=5, ol_cv_pthread_version=4) ]) ]) ]) ]) ])dnl dnl @@ -575,6 +815,9 @@ dnl -------------------------------------------------------------------- AC_DEFUN([OL_PTHREAD_TEST_INCLUDES], [/* pthread test headers */ #include +#if HAVE_PTHREADS < 7 +#include +#endif #ifndef NULL #define NULL (void*)0 #endif @@ -587,30 +830,50 @@ static void *task(p) ]) AC_DEFUN([OL_PTHREAD_TEST_FUNCTION],[ /* pthread test function */ +#ifndef PTHREAD_CREATE_DETACHED +#define PTHREAD_CREATE_DETACHED 1 +#endif pthread_t t; int status; + int detach = PTHREAD_CREATE_DETACHED; + +#if HAVE_PTHREADS > 4 + /* Final pthreads */ + pthread_attr_t attr; + + status = pthread_attr_init(&attr); + if( status ) return status; - /* make sure pthread_create() isn't just a stub */ -#if HAVE_PTHREADS_D4 - status = pthread_create(&t, pthread_attr_default, task, NULL); +#if HAVE_PTHREADS < 7 + status = pthread_attr_setdetachstate(&attr, &detach); + if( status < 0 ) status = errno; #else - status = pthread_create(&t, NULL, task, NULL); + status = pthread_attr_setdetachstate(&attr, detach); #endif + if( status ) return status; + status = pthread_create( &t, &attr, task, NULL ); +#if HAVE_PTHREADS < 7 + if( status < 0 ) status = errno; +#endif + if( status ) return status; +#else + /* Draft 4 pthreads */ + status = pthread_create( &t, pthread_attr_default, task, NULL ); + if( status ) return errno; - if( status ) exit( status ); + /* give thread a chance to complete */ + /* it should remain joinable and hence detachable */ + sleep( 1 ); - /* make sure pthread_detach() isn't just a stub */ -#if HAVE_PTHREADS_D4 status = pthread_detach( &t ); -#else - status = pthread_detach( t ); + if( status ) return errno; #endif #ifdef HAVE_LINUX_THREADS pthread_kill_other_threads_np(); #endif - exit( status ); + return 0; ]) AC_DEFUN([OL_PTHREAD_TEST_PROGRAM], @@ -670,6 +933,16 @@ AC_DEFUN([OL_HEADER_GNU_PTH_PTHREAD_H], [ ]) ])dnl dnl ==================================================================== +dnl Check for NT Threads +AC_DEFUN([OL_NT_THREADS], [ + AC_CHECK_FUNC(_beginthread) + + if test $ac_cv_func__beginthread = yes ; then + AC_DEFINE(HAVE_NT_THREADS,1,[if you have NT Threads]) + ol_cv_nt_threads=yes + fi +]) +dnl ==================================================================== dnl Check LinuxThreads Header dnl dnl defines ol_cv_header linux_threads to 'yes' or 'no' @@ -696,7 +969,7 @@ dnl defines ol_cv_sys_linux_threads to 'yes' or 'no' dnl 'no' implies pthreads implementation is not LinuxThreads. dnl AC_DEFUN([OL_SYS_LINUX_THREADS], [ - AC_CHECK_FUNC(pthread_kill_other_threads_np) + AC_CHECK_FUNCS(pthread_kill_other_threads_np) AC_CACHE_CHECK([for LinuxThreads implementation], [ol_cv_sys_linux_threads], [ol_cv_sys_linux_threads=$ac_cv_func_pthread_kill_other_threads_np]) @@ -774,6 +1047,8 @@ fi ]) dnl dnl ==================================================================== +dnl Error string checks +dnl dnl Check for declaration of sys_errlist in one of stdio.h and errno.h. dnl Declaration of sys_errlist on BSD4.4 interferes with our declaration. dnl Reported by Keith Bostic. @@ -807,7 +1082,45 @@ if test $ol_cv_have_sys_errlist = yes ; then [define if you actually have sys_errlist in your libs]) fi ])dnl +AC_DEFUN([OL_NONPOSIX_STRERROR_R], +[AC_CACHE_CHECK([non-posix strerror_r],ol_cv_nonposix_strerror_r,[ + AC_EGREP_CPP(strerror_r,[#include ], + ol_decl_strerror_r=yes, ol_decl_strerror_r=no)dnl + + if test $ol_decl_strerror_r = yes ; then + AC_TRY_COMPILE([#include ], + [ /* from autoconf 2.59 */ + char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + char *p = strerror_r (0, buf, sizeof buf); + ], ol_cv_nonposix_strerror_r=yes, ol_cv_nonposix_strerror_r=no) + else + AC_TRY_RUN([ + main() { + char buf[100]; + buf[0] = 0; + strerror_r( 1, buf, sizeof buf ); + exit( buf[0] == 0 ); + } + ], ol_cv_nonposix_strerror_r=yes, ol_cv_nonposix_strerror=no, ol_cv_nonposix_strerror=no) + fi + ]) +if test $ol_cv_nonposix_strerror_r = yes ; then + AC_DEFINE(HAVE_NONPOSIX_STRERROR_R,1, + [define if strerror_r returns char* instead of int]) +fi +])dnl dnl +AC_DEFUN([OL_STRERROR], +[OL_SYS_ERRLIST dnl TEMPORARY +AC_CHECK_FUNCS(strerror strerror_r) +ol_cv_func_strerror_r=no +if test "${ac_cv_func_strerror_r}" = yes ; then + OL_NONPOSIX_STRERROR_R +elif test "${ac_cv_func_strerror}" = no ; then + OL_SYS_ERRLIST +fi +])dnl dnl ==================================================================== dnl Early MIPS compilers (used in Ultrix 4.2) don't like dnl "int x; int *volatile a = &x; *a = 0;" @@ -828,7 +1141,7 @@ dnl dnl ==================================================================== dnl Look for fetch(3) AC_DEFUN([OL_LIB_FETCH], -[ol=$LIBS +[ol_LIBS=$LIBS LIBS="-lfetch -lcom_err $LIBS" AC_CACHE_CHECK([fetch(3) library],ol_cv_lib_fetch,[ AC_TRY_LINK([ @@ -1039,7 +1352,7 @@ AC_DEFUN(OL_FUNC_GETHOSTBYADDR_R_NARGS, if test $ol_cv_func_gethostbyaddr_r_nargs7 = yes -a \ $ol_cv_func_gethostbyaddr_r_nargs8 = no ; then - ol_cv_func_gethostbyname_r_nargs=7 + ol_cv_func_gethostbyaddr_r_nargs=7 elif test $ol_cv_func_gethostbyaddr_r_nargs7 = no -a \ $ol_cv_func_gethostbyaddr_r_nargs8 = yes ; then @@ -1057,3 +1370,64 @@ AC_DEFUN(OL_FUNC_GETHOSTBYADDR_R_NARGS, fi ])dnl dnl +dnl -------------------------------------------------------------------- +dnl Check for Cyrus SASL version compatility +AC_DEFUN([OL_SASL_COMPAT], +[AC_CACHE_CHECK([Cyrus SASL library version], [ol_cv_sasl_compat],[ + AC_EGREP_CPP(__sasl_compat,[ +#ifdef HAVE_SASL_SASL_H +#include +#else +#include +#endif + +/* Require 2.1.15+ */ +#if SASL_VERSION_MAJOR == 2 && SASL_VERSION_MINOR > 1 + char *__sasl_compat = "2.2+ or better okay (we guess)"; +#elif SASL_VERSION_MAJOR == 2 && SASL_VERSION_MINOR == 1 \ + && SASL_VERSION_STEP >=15 + char *__sasl_compat = "2.1.15+ or better okay"; +#endif + ], [ol_cv_sasl_compat=yes], [ol_cv_sasl_compat=no])]) +]) +dnl ==================================================================== +dnl check for msg_accrights in msghdr +AC_DEFUN(OL_MSGHDR_MSG_ACCRIGHTS, + [AC_CACHE_CHECK(for msg_accrights in msghdr, ol_cv_msghdr_msg_accrights, + [AC_TRY_COMPILE([#include ], + [struct msghdr m; m.msg_accrightslen=0], + ol_cv_msghdr_msg_accrights=yes, ol_cv_msghdr_msg_accrights=no) + ]) + if test $ol_cv_msghdr_msg_accrights = "yes" ; then + AC_DEFINE(HAVE_MSGHDR_MSG_ACCRIGHTS,1, + [define if struct msghdr has msg_accrights]) + fi +])dnl +dnl ==================================================================== +dnl check for cmsghdr +AC_DEFUN(OL_MSGHDR_MSG_CONTROL, + [AC_CACHE_CHECK(for msg_control in msghdr, ol_cv_msghdr_msg_control, + [AC_TRY_COMPILE([#include ], + [struct msghdr m; m.msg_control=(struct cmsghdr *)0], + ol_cv_msghdr_msg_control=yes, ol_cv_msghdr_msg_control=no) + ]) + if test $ol_cv_msghdr_msg_control = "yes" ; then + AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1, + [define if struct msghdr has msg_control]) + fi +])dnl +AC_DEFUN([OL_SSL_COMPAT], +[AC_CACHE_CHECK([OpenSSL library version (CRL checking capability)], [ol_cv_ssl_crl_compat],[ + AC_EGREP_CPP(__ssl_compat,[ +#ifdef HAVE_OPENSSL_SSL_H +#include +#else +#include +#endif + +/* Require 0.9.7d+ */ +#if OPENSSL_VERSION_NUMBER >= 0x0090704fL + char *__ssl_compat = "0.9.7d"; +#endif + ], [ol_cv_ssl_crl_compat=yes], [ol_cv_ssl_crl_compat=no])]) +])