]> git.sur5r.net Git - openldap/blobdiff - build/openldap.m4
Require 2.1.3 or higher for Cyrus SASL 2
[openldap] / build / openldap.m4
index 1ebdc19f18ac53d24e66607e60ddffb50a4cbd4b..0fd68466f86d2c387f419d80208b83622c7c54c6 100644 (file)
@@ -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
@@ -288,6 +312,7 @@ 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_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])
@@ -315,12 +340,9 @@ AC_DEFUN([OL_BERKELEY_DB_THREAD],
 main()
 {
        int rc;
-       u_int32_t flags = DB_CREATE | DB_INIT_CDB | DB_INIT_MPOOL |
+       u_int32_t flags = DB_CREATE |
 #ifdef DB_PRIVATE
                DB_PRIVATE |
-#endif
-#ifdef DB_MPOOL_PRIVATE
-               DB_MPOOL_PRIVATE |
 #endif
                DB_THREAD;
 
@@ -329,27 +351,30 @@ main()
 
        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;
@@ -392,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 <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,[
@@ -417,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
@@ -626,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
+
+#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;
 
-       /* make sure pthread_create() isn't just a stub */
-       status = pthread_create(&t, ATTR, task, NULL);
-       if( status ) exit( 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],
@@ -729,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 ====================================================================
@@ -1119,3 +1183,16 @@ AC_DEFUN(OL_FUNC_GETHOSTBYADDR_R_NARGS,
   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])])
+])