]> git.sur5r.net Git - openldap/blobdiff - configure.in
Add special check for pthreads under HP-UX (as last resort).
[openldap] / configure.in
index c82a0dc02c426ccfaf972598841749b269455700..349b82b08a08d322ef2ace2fab9292f8d9d5d675 100644 (file)
@@ -1,10 +1,11 @@
-dnl Copyright 1998 The OpenLDAP Foundation.  All Rights Reserved.
+dnl
+dnl Copyright 1998,1999 The OpenLDAP Foundation.  All Rights Reserved.
 dnl 
 dnl Redistribution and use in source and binary forms are permitted only
 dnl as authorized by the OpenLDAP Public License.  A copy of this
 dnl license is available at http://www.OpenLDAP.org/license.html or
 dnl in file LICENSE in the top-level directory of the distribution.
-dnl ----
+dnl
 
 dnl Configure.in for OpenLDAP
 AC_INIT(include/ldap.h)dnl
@@ -39,9 +40,9 @@ AC_ARG_WITH(subdir, [  --with-subdir=DIR change default subdirectory used for in
 AC_SUBST(ldap_subdir)dnl
 
 OL_ARG_ENABLE(debug,[  --enable-debug  enable debugging], yes)dnl
+ol_enable_syslog=no
 dnl OL_ARG_ENABLE(syslog,[  --enable-syslog    enable syslog support], auto)dnl
 OL_ARG_ENABLE(proctitle,[  --enable-proctitle  enable proctitle support], yes)dnl
-OL_ARG_ENABLE(libui,[  --enable-libui  enable library user interface], yes)dnl
 OL_ARG_ENABLE(cache,[  --enable-cache  enable caching], yes)dnl
 OL_ARG_ENABLE(dns,[  --enable-dns              enable V2 DNS  extension], no)dnl
 OL_ARG_ENABLE(referrals,[  --enable-referrals  enable V2 Referrals extension], yes)dnl
@@ -49,7 +50,10 @@ OL_ARG_ENABLE(cldap,[  --enable-cldap        enable connectionless ldap], no)dnl
 OL_ARG_ENABLE(x_compile,[  --enable-x-compile  enable cross compiling],
        no, [yes no])dnl
 
+
 dnl General "with" options
+OL_ARG_ENABLE(dmalloc,[  --enable-dmalloc      enable debug malloc support], no)dnl
+
 OL_ARG_WITH(kerberos,[  --with-kerberos        use Kerberos],
        auto, [auto k5 k4 afs yes no])
 OL_ARG_WITH(threads,[  --with-threads  use threads],
@@ -343,12 +347,12 @@ if test $ol_with_kerberos = auto -o $ol_with_kerberos = k4 ; then
        fi
 fi
 
-if test $ol_link_kerberos = yes ; then
-       save_LIBS=$LIBS
-       $LIBS="$KRB_LIBS $LIBS"
-       AC_CHECK_FUNCS(des_string_to_key)
-       LIBS=$save_LIBS
-fi
+dnl    if test $ol_link_kerberos = yes ; then
+dnl            save_LIBS=$LIBS
+dnl            LIBS="$KRB_LIBS $LIBS"
+dnl            AC_CHECK_FUNCS(des_string_to_key)
+dnl            LIBS=$save_LIBS
+dnl fi
 
 ol_link_threads=no
 if test $ol_with_threads = auto -o $ol_with_threads = yes \
@@ -485,6 +489,46 @@ if test $ol_with_threads = auto -o $ol_with_threads = yes \
                        LIBS="$save_LIBS"
                fi
 
+               if test $ol_link_threads = no ; then
+                       dnl try -lpthreads
+                       save_LIBS="$LIBS"
+                       AC_CHECK_LIB(pthreads, pthread_create, [
+                               ol_link_threads=posix
+                               LTHREAD_LIBS="$LTHREAD_LIBS -lpthreads"])
+                       LIBS="$save_LIBS"
+               fi
+
+               dnl HP-UX 11 check
+               if test $ol_link_threads = no; then
+                       save_LIBS="$LIBS"
+                       LIBS="$LIBS -lpthread"
+                       AC_MSG_CHECKING([for pthread_create() in HP-UX -lpthread])
+                       ol_try_pthread_hpux_11=no
+                       AC_CACHE_VAL(ol_cv_pthread_hpux_11,[
+                               AC_TRY_LINK([
+#include <pthread.h>
+#include <elf.h>
+#ifndef ELFABI_HPUX_REL11
+       die horribly
+#endif
+                               ], [pthread_create(NULL, NULL, NULL, NULL);],
+                                       ol_try_pthread_hpux_11=yes
+                                       ol_cv_pthread_hpux_11=yes,
+                                       ol_cv_pthread_hpux_11=no)])
+                       AC_MSG_RESULT(yes)
+                       LIBS="$save_LIBS"
+
+                       if test $ol_cv_pthread_hpux_11=yes ; then
+                               ol_link_threads=posix
+                               LTHREAD_LIBS="$LTHREAD_LIBS -lpthread"
+                               if test $ol_try_pthread_hpux_11=yes ; then
+                                       dnl Some tests below may fail, cause we aint including
+                                       dnl pthread.h. Force appropriate ones to yes
+                                       ac_cv_func_pthread_attr_init=yes
+                               fi
+                       fi
+               fi
+
                if test $ol_link_threads != no ; then
                        AC_DEFINE(HAVE_PTHREADS)
 
@@ -602,10 +646,10 @@ static void *task(p)
 
        if(i < 0) {
                perror("select");
-               exit(0);
+               exit(10);
        }
 
-       exit(1); /* if we exit here, the select blocked the whole process */
+       exit(0); /* if we exit here, the select blocked the whole process */
 }
 
 int main(argc, argv)
@@ -617,7 +661,7 @@ int main(argc, argv)
        /* create a pipe to select */
        if(pipe(&fildes[0])) {
                perror("select");
-               exit(0);
+               exit(1);
        }
 
 #ifdef HAVE_PTHREAD_SETCONCURRENCY
@@ -638,10 +682,11 @@ int main(argc, argv)
        pthread_yield();        /* make sure task runs first */
 #endif
 #endif
-       exit(0);
+
+       exit(2);
 }],
-                               [ol_cv_pthread_select_yields=yes],
-                               [ol_cv_pthread_select_yields=no], [
+                               [ol_cv_pthread_select_yields=no],
+                               [ol_cv_pthread_select_yields=yes], [
                                AC_MSG_ERROR([crossing compiling: use --with-yielding_select=yes|no|manual])])])
                                AC_MSG_RESULT($ol_cv_pthread_select_yields)
 
@@ -650,20 +695,6 @@ int main(argc, argv)
                                fi
                        fi
 
-                       dnl check for reentrant/threadsafe functions
-                       dnl
-                       dnl note: these should only be used when linking
-                       dnl       with $LTHREAD_LIBS
-                       dnl
-                       AC_CHECK_FUNCS( \
-                               strtok_r \
-                               gmtime_r \
-                               gethostbyaddr_r gethostbyname_r \
-                               feof_unlocked unlocked_feof \
-                               putc_unlocked unlocked_putc \
-                               flockfile ftrylockfile \
-                       )
-
                        dnl restore flags
                        CPPFLAGS="$save_CPPFLAGS"
                        LIBS="$save_LIBS"
@@ -806,6 +837,58 @@ int x = errno;
                LIBS="$LTHREAD_LIBS $LIBS"
                LTHREAD_LIBS=""
        fi
+
+dnl When in thread environment, use 
+dnl            #if defined( HAVE_REENTRANT_FUNCTIONS ) \ 
+dnl                    || defined( HAVE_FUNC_R )
+dnl                    func_r(...);
+dnl            #else
+dnl            #       if defined( HAVE_THREADS ) 
+dnl                            /* lock */
+dnl            #       endif
+dnl                            func(...);
+dnl            #       if defined( HAVE_THREADS ) 
+dnl                            /* unlock */
+dnl            #       endif
+dnl            #endif
+dnl
+dnl HAVE_REENTRANT_FUNCTIONS is derived from:
+dnl            _POSIX_REENTRANT_FUNCTIONS
+dnl            _POSIX_THREAD_SAFE_FUNCTIONS
+dnl            _POSIX_THREADSAFE_FUNCTIONS
+dnl
+dnl            and is currently defined in lthread.h
+dnl
+dnl HAVE_THREADS is defined by lthread.h iff -UNO_THREADS
+dnl 
+dnl libldap/*.c should only include <lthread.h> iff
+dnl LDAP_R_COMPILE is defined.  ie:
+dnl            #ifdef LDAP_R_COMPILE
+dnl            #       include LDAP_R_COMPILE
+dnl            #endif
+dnl
+dnl LDAP_R_COMIPLE is defined by libldap_r/Makefile.in
+dnl specifically for compiling the threadsafe version of
+dnl    the ldap library (-lldap_r).
+dnl            
+dnl    dnl check for reentrant/threadsafe functions
+dnl    dnl
+dnl    dnl note: these should only be used when linking
+dnl    dnl       with $LTHREAD_LIBS
+dnl    dnl
+dnl    save_CPPFLAGS="$CPPFLAGS"
+dnl    save_LIBS="$LIBS"
+dnl    LIBS="$LTHREAD_LIBS $LIBS"
+dnl    AC_CHECK_FUNCS( \
+dnl            strtok_r \
+dnl            gmtime_r \
+dnl            gethostbyaddr_r gethostbyname_r \
+dnl            feof_unlocked unlocked_feof \
+dnl            putc_unlocked unlocked_putc \
+dnl            flockfile ftrylockfile \
+dnl    )
+dnl    CPPFLAGS="$save_CPPFLAGS"
+dnl    LIBS="$save_LIBS"
 fi  
 
 dnl ----------------------------------------------------------------
@@ -919,8 +1002,8 @@ if test $ol_link_ldbm = no -a $ol_enable_ldbm != no ; then
        ol_enable_ldbm=no
 fi
 
-if test $ol_enable_wrappers = yes ; then
-       AC_CHECK_LIB(wrap, hosts_access,
+if test $ol_enable_wrappers != no ; then
+       AC_CHECK_LIB(wrap, main,
                [have_wrappers=yes], [have_wrappers=no])
 
        if test $have_wrappers = yes ; then
@@ -938,6 +1021,19 @@ if test $ol_enable_wrappers = yes ; then
 
 fi
 
+if test $ol_enable_syslog != no ; then
+       AC_CHECK_FUNC(openlog)
+       if test $ac_cv_func_openlog = no -a $ol_enable_syslog = yes; then
+               AC_MSG_ERROR(could not find syslog, select appropriate options or disable)
+       fi
+       ol_enable_syslog=$ac_cv_func_openlog
+fi
+
+if test $ol_enable_dmalloc != no ; then
+       AC_CHECK_HEADERS(dmalloc.h)
+       AC_CHECK_LIB(dmalloc, dmalloc_shutdown)
+fi
+
 # ud needs termcap (should insert check here)
 ol_link_termcap=no
 AC_CHECK_HEADERS(termcap.h ncurses.h)
@@ -1054,6 +1150,7 @@ AC_TYPE_OFF_T
 AC_TYPE_PID_T
 AM_TYPE_PTRDIFF_T
 AC_TYPE_SIGNAL
+OL_TYPE_SIG_ATOMIC_T
 AC_TYPE_SIZE_T
 AC_STRUCT_ST_BLKSIZE
 AC_HEADER_TIME
@@ -1061,6 +1158,7 @@ AC_STRUCT_TM
 
 OL_C_UPPER_LOWER
 AC_C_CONST
+OL_C_VOLATILE
 
 if test $cross_compiling = yes ; then
        AC_DEFINE(CROSS_COMPILING, 1)
@@ -1081,7 +1179,7 @@ AC_FUNC_VPRINTF
 
 if test $ac_cv_func_vprintf = yes ; then
        dnl check for vsnprintf
-       AC_CHECK_FUNCS(vsnprintf)
+       AC_CHECK_FUNCS(vsnprintf vsprintf)
 fi
 
 AC_FUNC_WAIT3
@@ -1117,6 +1215,27 @@ AC_CHECK_FUNCS(          \
        waitpid                 \
 )
 
+# these functions are required to build a thread_safe -lldap
+AC_CHECK_FUNCS(                \
+       strtok_r                \
+       ctime_r                 \
+       gethostbyaddr_r \
+       gethostbyname_r \
+)
+
+if test $ac_cv_func_strtok_r = yes \
+       -a $ac_cv_func_ctime_r = yes \
+       -a $ac_cv_func_gethostbyaddr_r = yes \
+       -a $ac_cv_func_gethostbyname_r = yes \
+       ; then
+
+       AC_DEFINE(LDAP_API_FEATURE_X_OPENLDAP_REENTRANT, 1)
+fi
+
+if test $ol_link_threads != no ; then
+       AC_DEFINE(LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE, 1)
+fi
+
 dnl We actually may need to replace more than this.
 AC_REPLACE_FUNCS(getopt strdup tempnam)
 
@@ -1127,71 +1246,71 @@ OL_SYS_ERRLIST
 dnl ----------------------------------------------------------------
 dnl Sort out defines
 
-if test $ol_enable_debug != no ; then
+if test "$ol_enable_debug" != no ; then
        AC_DEFINE(LDAP_DEBUG,1)
 fi
-dnl    if test $ol_enable_syslog != no ; then
-dnl            AC_DEFINE(LDAP_SYSLOG,1)
-dnl    fi
-if test $ol_enable_libui = yes ; then
+if test "$ol_enable_syslog" = yes ; then
+       AC_DEFINE(LDAP_SYSLOG,1)
+fi
+if test "$ol_enable_libui" = yes ; then
        AC_DEFINE(LDAP_LIBUI,1)
 fi
-if test $ol_enable_cache = no ; then
+if test "$ol_enable_cache" = no ; then
        AC_DEFINE(LDAP_NOCACHE,1)
 fi
-if test $ol_enable_dns != no ; then
+if test "$ol_enable_dns" != no ; then
        AC_DEFINE(LDAP_API_FEATURE_X_OPENLDAP_V2_DNS,LDAP_API_VENDOR_VERSION,1)
 fi
-if test $ol_enable_proctitle != no ; then
+if test "$ol_enable_proctitle" != no ; then
        AC_DEFINE(LDAP_PROCTITLE,1)
 fi
-if test $ol_enable_referrals != no ; then
+if test "$ol_enable_referrals" != no ; then
        AC_DEFINE(LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS,LDAP_API_VENDOR_VERSION,1)
 fi
-if test $ol_enable_cldap != no ; then
+if test "$ol_enable_cldap" != no ; then
        AC_DEFINE(LDAP_CONNECTIONLESS,1)
 fi
 
-if test $ol_enable_aclgroups != no ; then
+if test "$ol_enable_aclgroups" != no ; then
        AC_DEFINE(SLAPD_ACLGROUPS,1)
 fi
-if test $ol_enable_crypt != no ; then
+if test "$ol_enable_crypt" != no ; then
        AC_DEFINE(SLAPD_CRYPT,1)
 fi
-if test $ol_enable_cleartext != no ; then
+if test "$ol_enable_cleartext" != no ; then
        AC_DEFINE(SLAPD_CLEARTEXT,1)
 fi
-if test $ol_enable_phonetic != no ; then
+if test "$ol_enable_phonetic" != no ; then
        AC_DEFINE(SLAPD_PHONETIC,1)
 fi
-if test $ol_enable_rlookups != no ; then
+if test "$ol_enable_rlookups" != no ; then
        AC_DEFINE(SLAPD_RLOOKUPS,1)
 fi
 
-if test $ol_link_ldbm != no ; then
+if test "$ol_link_ldbm" != no ; then
        AC_DEFINE(SLAPD_LDBM,1)
        BUILD_SLAPD=yes
        BUILD_LDBM=yes
 fi
 
-if test $ol_enable_passwd != no ; then
+if test "$ol_enable_passwd" != no ; then
        AC_DEFINE(SLAPD_PASSWD,1)
        BUILD_SLAPD=yes
        BUILD_PASSWD=yes
 fi
 
-if test $ol_enable_shell != no ; then
+if test "$ol_enable_shell" != no ; then
        AC_DEFINE(SLAPD_SHELL,1)
        BUILD_SLAPD=yes
        BUILD_SHELL=yes
 fi
 
-if test $ol_enable_slurpd != no -a $ol_link_threads != no -a \
+if test "$ol_enable_slurpd" != no -a "$ol_link_threads" != no -a \
        $BUILD_SLAPD = yes ; then
        BUILD_SLURPD=yes
 fi
 
-if test $ol_link_isode != no ; then
+if test "$ol_link_isode" != no ; then
        BUILD_LDAPD=yes
 fi
 
@@ -1241,6 +1360,7 @@ libraries/Makefile:build/top.mk:libraries/Makefile.in:build/dir.mk        \
 libraries/libavl/Makefile:build/top.mk:libraries/libavl/Makefile.in:build/lib.mk:build/lib-static.mk   \
 libraries/liblber/Makefile:build/top.mk:libraries/liblber/Makefile.in:build/lib.mk:build/lib-shared.mk \
 libraries/libldap/Makefile:build/top.mk:libraries/libldap/Makefile.in:build/lib.mk:build/lib-shared.mk \
+libraries/libldap_r/Makefile:build/top.mk:libraries/libldap_r/Makefile.in:build/lib.mk:build/lib-shared.mk     \
 libraries/libldbm/Makefile:build/top.mk:libraries/libldbm/Makefile.in:build/lib.mk:build/lib-static.mk \
 libraries/libldif/Makefile:build/top.mk:libraries/libldif/Makefile.in:build/lib.mk:build/lib-static.mk \
 libraries/liblthread/Makefile:build/top.mk:libraries/liblthread/Makefile.in:build/lib.mk:build/lib-static.mk   \