X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=build%2Fopenldap.m4;h=d160d5e7ec78ea3d3277c44feea949696b0159ce;hb=0ae19ca0a9839c9959a8eaabae87d78e4d2d85c6;hp=fbbe4f32faa5a66601bbb6ff3747845af6ea19c2;hpb=55b349099686bcddd6cae6254fcab62d50be3bf9;p=openldap diff --git a/build/openldap.m4 b/build/openldap.m4 index fbbe4f32fa..d160d5e7ec 100644 --- a/build/openldap.m4 +++ b/build/openldap.m4 @@ -1,7 +1,13 @@ 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 @@ -265,6 +271,24 @@ AC_DEFUN([OL_BERKELEY_DB_TRY], #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 @@ -289,6 +313,7 @@ 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_db,[-ldb]) +OL_BERKELEY_DB_TRY(ol_cv_db_db4,[-ldb4]) OL_BERKELEY_DB_TRY(ol_cv_db_db3,[-ldb3]) OL_BERKELEY_DB_TRY(ol_cv_db_db2,[-ldb2]) OL_BERKELEY_DB_TRY(ol_cv_db_db1,[-ldb1]) @@ -315,34 +340,41 @@ AC_DEFUN([OL_BERKELEY_DB_THREAD], main() { int rc; - u_int32_t flags = DB_CREATE | DB_THREAD | DB_INIT_CDB | DB_INIT_MPOOL; + 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 ) return rc; - -#ifdef DB_CDB_ALLDB - rc = env->set_flags( env, DB_CDB_ALLDB, 1 ); - if( rc ) goto done; + 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 -#ifdef DB_CDB_ALLDB -done: -#endif -#if (DB_VERSION_MAJOR > 3) || (DB_VERSION_MINOR >= 1) - env->remove( env, NULL, DB_FORCE); -#else - env->remove( env, NULL, NULL, DB_FORCE); -#endif + if ( rc == 0 ) { + rc = env->close( env, 0 ); + } + + if( rc ) { + printf("BerkeleyDB: %s\n", db_strerror(rc) ); + return rc; + } #else DB_ENV env; @@ -353,6 +385,9 @@ done: if( rc == 0 ) { db_appexit( &env ); } + + unlink("__db_mpool.share"); + unlink("__db_lock.share"); #endif return rc; @@ -382,12 +417,29 @@ if test $ac_cv_header_db_h = yes; then 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 + + /* 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,[ @@ -407,7 +459,7 @@ if test $ac_cv_header_db_185_h = yes -o $ac_cv_header_db_h = yes; then #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 @@ -616,44 +668,65 @@ AC_DEFUN([OL_PTHREAD_TEST_FUNCTION],[ /* 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 + + 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 ); - /* give the 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], @@ -719,6 +792,7 @@ AC_DEFUN([OL_NT_THREADS], [ 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 ====================================================================