dnl $OpenLDAP$
dnl
-dnl Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
-dnl COPYING RESTRICTIONS APPLY, See COPYRIGHT file
+dnl Copyright 1998-2002 The OpenLDAP Foundation, Redwood City, California, USA
+dnl All rights reserved.
+dnl
+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. A copy of this license is available at
+dnl http://www.OpenLDAP.org/license.html or in file LICENSE in the
+dnl top-level directory of the distribution.
dnl
dnl OpenLDAP Autoconf Macros
dnl
#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"
+ "\texpected: %s\n\tgot: %s\n",
+ DB_VERSION_STRING, version);
+ return 1;
+ }
+ }
+#endif
+
#if DB_VERSION_MAJOR > 2
db_env_create( NULL, 0 );
#elif DB_VERSION_MAJOR > 1
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_db4,[-ldb4])
OL_BERKELEY_DB_TRY(ol_cv_db_db,[-ldb])
OL_BERKELEY_DB_TRY(ol_cv_db_db3,[-ldb3])
OL_BERKELEY_DB_TRY(ol_cv_db_db2,[-ldb2])
main()
{
int rc;
- 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 );
- if( rc == 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 );
+ rc = env->open( env, NULL, flags, 0 );
#else
- rc = env->open( env, NULL, NULL, flags, 0 );
+ 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
if( rc == 0 ) {
db_appexit( &env );
}
-#endif
-#if DB_VERSION_MAJOR > 2
-#if (DB_VERSION_MAJOR > 3) || (DB_VERSION_MINOR >= 1)
- env->remove( env, NULL, DB_FORCE);
-#else
- env->remove( env, NULL, NULL, DB_FORCE);
-#endif
+
+ unlink("__db_mpool.share");
+ unlink("__db_lock.share");
#endif
return rc;
fi
fi
])
-dnl
+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 <db.h>
+
+ /* this check could be improved */
+#ifndef DB_VERSION_MAJOR
+# define DB_VERSION_MAJOR 1
+#endif
+
+/* require 4.0 or later */
+#if DB_VERSION_MAJOR >= 4
+ __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],
-[ol_cv_berkeley_db=no
-AC_CHECK_HEADERS(db_185.h db.h)
+[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,[
#endif
], [ol_cv_header_db1=yes], [ol_cv_header_db1=no])])
- if test ol_cv_header_db1=yes ; then
+ 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
/* pthread test function */
pthread_t t;
int status;
-#if HAVE_PTHREADS_FINAL && defined(PTHREAD_CREATE_UNDETACHED)
- /* This system (e.g. AIX) defaults detached; must override */
+ int detach = 1;
+
+#ifdef HAVE_PTHREADS_FINAL
+ /* Final pthreads */
pthread_attr_t attr;
status = pthread_attr_init(&attr);
- if( status ) exit( status );
-
- status = pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_UNDETACHED);
- if( status ) exit( status );
+ if( status ) return status;
-# define ATTR &attr
-#elif defined( HAVE_PTHREADS_D4 )
-# define ATTR pthread_attr_default
+#if defined( PTHREAD_CREATE_JOINABLE ) || defined( PTHREAD_UNDETACHED )
+ if( !detach ) {
+#if defined( PTHREAD_CREATE_JOINABLE )
+ status = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
#else
-# define ATTR NULL
+ status = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_UNDETACHED);
#endif
- /* make sure pthread_create() isn't just a stub */
- status = pthread_create(&t, ATTR, task, NULL);
- if( status ) exit( status );
+#ifdef PTHREAD_CREATE_DETACHED
+ } else {
+ status = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+#endif
+ }
+ if( status ) return status;
+#endif
- /* give the thread a chance to complete...
- * it should remain joinable and hence detachable
- */
- sleep( 1 );
+ status = pthread_create( &t, &attr, task, NULL );
+ if( status ) return status;
+
+#if !defined( PTHREAD_CREATE_JOINABLE ) && !defined( PTHREAD_UNDETACHED )
+ if( detach ) {
+ /* give thread a chance to complete */
+ /* it should remain joinable and hence detachable */
+ sleep( 1 );
+
+ status = pthread_detach( t );
+ if( status ) return status;
+ }
+#endif
- /* make sure pthread_detach() isn't just a stub */
-#if HAVE_PTHREADS_D4
- status = pthread_detach( &t );
#else
- status = pthread_detach( t );
+ /* Draft 4 pthreads */
+ status = pthread_create( &t, pthread_attr_default, task, NULL );
+ if( status ) return status;
+
+ if( detach ) {
+ /* give thread a chance to complete */
+ /* it should remain joinable and hence detachable */
+ sleep( 1 );
+
+ status = pthread_detach( &t );
+ if( status ) return status;
+ }
#endif
#ifdef HAVE_LINUX_THREADS
pthread_kill_other_threads_np();
#endif
- exit( status );
+ return 0;
])
AC_DEFUN([OL_PTHREAD_TEST_PROGRAM],
dnl ====================================================================
dnl Check for NT Threads
AC_DEFUN([OL_NT_THREADS], [
- AC_CACHE_CHECK([for NT Threads], [ol_cv_nt_threads], [
- AC_CHECK_FUNC(_beginthread,
- [ol_cv_nt_threads=yes],
- [ol_cv_nt_threads=no])
- ])
+ AC_CHECK_FUNC(_beginthread)
- if test $ol_cv_nt_threads = yes ; then
+ 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 ====================================================================
fi
])dnl
dnl
+dnl --------------------------------------------------------------------
+dnl Check for Cyrus SASL version compatility, need 2.1.3 or newer
+AC_DEFUN([OL_SASL2_COMPAT],
+[AC_CACHE_CHECK([Cyrus SASL 2 library version], [ol_cv_sasl2_compat],[
+ AC_EGREP_CPP(__sasl2_version_compat,[
+#include <sasl/sasl.h>
+
+/* require 2.1.3 or later */
+#if SASL_VERSION_MAJOR >= 2 && (SASL_VERSION_MINOR > 1 || SASL_VERSION_STEP > 2)
+ __sasl2_version_compat
+#endif
+ ], [ol_cv_sasl2_compat=yes], [ol_cv_sasl2_compat=no])])
+])