Skip to content
Snippets Groups Projects
configure.in 81.6 KiB
Newer Older
  • Learn to ignore specific revisions
  • 	ac_cv_func_res_query=$ac_cv_func___res_query
    fi
    
    
    if test $ac_cv_func_res_query = no ; then 
    	AC_CHECK_LIB(bind, res_query)
    	ac_cv_func_res_query=$ac_cv_lib_bind_res_query
    
    if test $ac_cv_func_res_query = no ; then 
    	AC_CHECK_LIB(bind, __res_query)
    	ac_cv_func_res_query=$ac_cv_lib_bind___res_query
    
    if test $ac_cv_func_res_query = no ; then 
    	AC_CHECK_LIB(resolv, res_query)
    	ac_cv_func_res_query=$ac_cv_lib_resolv_res_query
    
    if test $ac_cv_func_res_query = no ; then 
    	AC_CHECK_LIB(resolv, __res_query)
    	ac_cv_func_res_query=$ac_cv_lib_resolv___res_query
    fi
    
    
    if test "$ac_cv_func_res_query" = yes ; then
    	AC_DEFINE(HAVE_RES_QUERY,1,
    		[define if you have res_query()])
    
    	if test $ol_enable_dnssrv != no ; then
    		ol_link_dnssrv=yes
    	fi
    
    if test "$ol_enable_dnssrv" = yes -a "$ol_link_dnssrv" = no ; then
    	AC_MSG_ERROR([DNSSRV requires res_query()])
    fi
    
    dnl ----------------------------------------------------------------
    dnl PF_INET6 support requires getaddrinfo and INET6_ADDRSTRLEN
    dnl PF_LOCAL may use getaddrinfo in available
    
    AC_CHECK_FUNCS( getaddrinfo getnameinfo gai_strerror inet_ntop )
    
    
    ol_link_ipv6=no
    
    if test $ac_cv_func_getaddrinfo = no -o $ac_cv_func_inet_ntop = no ; then
    
    	if test $ol_enable_ipv6 = yes ; then
    
    		AC_MSG_ERROR([IPv6 support requires getaddrinfo() and inet_ntop()])
    
    elif test $ol_enable_ipv6 != no ; then
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	AC_CACHE_CHECK([INET6_ADDRSTRLEN],[ol_cv_inet6_addrstrlen],[
    		AC_EGREP_CPP(__has_inet6_addrstrlen__,[
    
    #			include <netinet/in.h>
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    #			ifdef INET6_ADDRSTRLEN
    				__has_inet6_addrstrlen__;
    
    #			endif
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		], [ol_cv_inet6_addrstrlen=yes], [ol_cv_inet6_addrstrlen=no])])
    
    
    	AC_CACHE_CHECK([struct sockaddr_storage],ol_cv_struct_sockaddr_storage,[
    		AC_TRY_COMPILE([
    #include <sys/types.h>
    #include <sys/socket.h>
    ],[
    			struct sockaddr_storage ss;
    ],			[ol_cv_struct_sockaddr_storage=yes],
    			[ol_cv_struct_sockaddr_storage=no])])
    
    	if test $ol_cv_inet6_addrstrlen = yes \
    		-a $ol_cv_struct_sockaddr_storage = yes ; then
    
    		ol_link_ipv6=yes
    
    	elif test $ol_enable_ipv6 = yes \
    			-a $ol_cv_inet6_addrstrlen = no ; then
    
    		AC_MSG_ERROR([IPv6 support requires INET6_ADDRSTRLEN])
    
    	elif test $ol_enable_ipv6 = yes \
    			-a $ol_cv_struct_sockaddr_storage = no ; then
    		AC_MSG_ERROR([IPv6 support requires struct sockaddr_storage])
    
    	fi
    fi
    
    if test $ol_enable_local != no ; then
    	AC_CHECK_HEADERS( sys/un.h )
    
    	if test $ol_enable_local = auto ; then
    		ol_enable_local=$ac_cv_header_sys_un_h
    	elif test $ac_cv_header_sys_un_h = no ; then
    		AC_MSG_ERROR([AF_LOCAL domain support requires sys/un.h])
    	fi
    fi
    
    
    dnl ----------------------------------------------------------------
    dnl Kerberos
    
    ol_link_kbind=no
    ol_link_kpasswd=no
    
    if test $ol_with_kerberos = yes -o $ol_with_kerberos = auto \
    	-o $ol_with_kerberos = k5 -o $ol_with_kerberos = k5only \
    	-o $ol_with_kerberos = k425 ; then
    
    
    	AC_CHECK_HEADERS(krb5.h)
    
    	if test $ac_cv_header_krb5_h = yes ; then
    		dnl lazy check for Heimdal Kerberos
    		AC_CHECK_HEADERS(heim_err.h)
    		if test $ac_cv_header_heim_err_h = yes ; then
    			krb5_impl=heimdal
    		else
    			krb5_impl=mit
    		fi
    
    		if test $krb5_impl = mit; then
    
    			AC_CHECK_LIB(k5crypto, main,
    				[krb5crypto=k5crypto],
    				[krb5crypto=crypto])
    
    
    			AC_CHECK_LIB(krb5, main,
    				[have_krb5=yes
    
    				KRB5_LIBS="-lkrb5 -l$krb5crypto -lcom_err"],
    
    				[-l$krb5crypto -lcom_err])
    
    
    		elif test $krb5_impl = heimdal; then
    
    			AC_CHECK_LIB(des, main,
    				[krb5crypto=des],
    				[krb5crypto=crypto])
    
    
    			AC_CHECK_LIB(krb5, main,
    				[have_krb5=yes
    
    				KRB5_LIBS="-lkrb5 -l$krb5crypto -lasn1 -lroken -lcom_err"],
    
    				[-l$krb5crypto -lasn1 -lroken -lcom_err])
    
    
    			AC_DEFINE(HAVE_HEIMDAL_KERBEROS, 1,
    				[define if you have HEIMDAL Kerberos])
    
    Pierangelo Masarati's avatar
    Pierangelo Masarati committed
    			AC_MSG_WARN([Unrecognized Kerberos5 Implementation])
    
    		fi
    
    		if test $have_krb5 = yes ; then
    			ol_link_krb5=yes
    
    			AC_DEFINE(HAVE_KRB5, 1,
    				[define if you have Kerberos V])
    
    
    			if test $ol_enable_kpasswd != no ; then
    				ol_link_kpasswd=yes;
    			fi
    
    
    			if test $ol_with_kerberos = k5only ; then
    				ol_with_kerberos=found
    			fi
    
    		elif test $ol_with_kerberos != auto ; then
    			AC_MSG_ERROR([Required Kerberos 5 support not available])
    		fi
    
    	fi
    fi
    
    
    if test $ol_link_krb5 = yes -a \( $ol_with_kerberos = yes -o \
    	$ol_with_kerberos = auto -o $ol_with_kerberos = k425 \) ; then
    
    	AC_CHECK_HEADERS(kerberosIV/krb.h kerberosIV/des.h)
    
    	if test $ac_cv_header_kerberosIV_krb_h = yes ; then
    
    		if test $krb5_impl = mit; then
    			AC_CHECK_LIB(krb4, main, [have_k425=yes
    				KRB4_LIBS="-lkrb4 -ldes425"], [have_k425=no],
    
    				[-ldes425 -lkrb5 -l$krb5crypto -lcom_err])
    
    		elif test $krb5_impl = heimdal; then
    			AC_CHECK_LIB(krb4, main, [have_k425=yes
    				KRB4_LIBS="-lkrb4"], [have_k425=no],
    
    				[-lkrb5 -l$krb5crypto -lasn1 -lroken -lcom_err])
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    			AC_MSG_WARN([Unrecongized Kerberos V Implementation])
    
    		fi
    
    		if test $have_k425 = yes ; then
    			ol_with_kerberos=found
    			ol_link_krb4=yes
    
    			AC_DEFINE(HAVE_KRB425, 1,
    				[define if you have Kerberos V with IV support])
    			AC_DEFINE(HAVE_KRB4, 1,
    				[define if you have Kerberos IV])
    
    
    			AC_CACHE_CHECK([for des_debug in Kerberos libraries],
    				[ol_cv_var_des_debug], [
    				dnl save the flags
    				save_LIBS="$LIBS"
    
    				LIBS="$KRB4_LIBS $KRB5_LIBS $LIBS"
    
    				AC_TRY_LINK([
    #include <kerberosIV/krb.h>
    #include <kerberosIV/des.h>
    extern int des_debug;
    ],[
    des_debug = 1;
    ],				ol_cv_var_des_debug=yes, ol_cv_var_des_debug=no)
    				dnl restore the LIBS
    				LIBS="$save_LIBS"
    			])
    
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    			if test $ol_cv_var_des_debug = yes ; then
    
    				AC_DEFINE(HAVE_DES_DEBUG,1,
    					[define if you have Kerberos des_debug])
    			fi
    
    			LIBS="$save_LIBS"
    
    if test $ol_link_krb5 = yes ; then
    	ol_with_kerberos=found
    fi
    
    
    if test $ol_with_kerberos = yes -o $ol_with_kerberos = auto \
    	-o $ol_with_kerberos = k4 -o $ol_with_kerberos = kth ; then
    
    
    	AC_CHECK_HEADERS(krb.h des.h krb-archaeology.h )
    
    
    	if test $ac_cv_header_krb_h = yes ; then
    		AC_CHECK_LIB(krb, main, [have_k4=yes], [have_k4=no], [-ldes])
    
    		if test $have_k4 = yes ; then
    			ol_with_kerberos=found
    
    			ol_link_krb4=yes
    
    			AC_DEFINE(HAVE_KRB4, 1,
    				[define if you have Kerberos IV])
    
    
    			if test $ac_cv_header_krb_archaeology_h = yes ; then
    				AC_DEFINE(HAVE_KTH_KERBEROS, 1,
    					[define if you have Kth Kerberos])
    			fi
    
    if test $ol_link_krb4 = yes -a $ol_enable_kpasswd != no ; then
    
    	ol_link_kpasswd=yes
    fi
    
    if test $ol_link_krb4 = yes -a $ol_enable_kbind != no ; then
    	ol_link_kbind=yes
    
    elif test $ol_enable_kbind = yes ; then
    	AC_MSG_ERROR([Kerberos IV detection failed])
    
    if test $ol_link_krb4 = yes -o $ol_link_krb5 = yes ; then
    
    	AC_DEFINE(HAVE_KERBEROS, 1, [define if you have Kerberos])
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    elif test $ol_with_kerberos != auto -a $ol_with_kerberos != no ; then
    
    	AC_MSG_ERROR([Kerberos detection failed])
    
    dnl ----------------------------------------------------------------
    dnl TLS/SSL
    
    Bart Hartgers's avatar
     
    Bart Hartgers committed
    ol_link_tls=no
    
    if test $ol_with_tls != no ; then
    
    	AC_CHECK_HEADERS(openssl/ssl.h ssl.h)
    
    Bart Hartgers's avatar
     
    Bart Hartgers committed
    	
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	if test $ac_cv_header_openssl_ssl_h = yes \
    		-o $ac_cv_header_ssl_h = yes ; then
    
    		AC_CHECK_LIB(ssl, SSLeay_add_ssl_algorithms, 
    			[have_ssleay=yes
    			need_rsaref=no],
    			[have_ssleay=no],
    			[-lcrypto])
    
    Bart Hartgers's avatar
     
    Bart Hartgers committed
    			
    
    Julio Sánchez Fernández's avatar
     
    Julio Sánchez Fernández committed
    		if test $have_ssleay = no ; then
    			AC_CHECK_LIB(ssl, SSL_library_init,
    				[have_ssleay=yes
    				need_rsaref=no], [have_ssleay=no],
    				[-lcrypto])
    		fi
    
    
    		if test $have_ssleay = no ; then
    
    			AC_CHECK_LIB(ssl, ssl3_accept, 
    				[have_ssleay=yes
    				need_rsaref=yes], [have_ssleay=no],
    				[-lcrypto -lRSAglue -lrsaref])
    
    Bart Hartgers's avatar
     
    Bart Hartgers committed
    		if test $have_ssleay = yes ; then
    			ol_with_tls=found
    			ol_link_tls=yes
    
    
    			AC_DEFINE(HAVE_SSLEAY, 1, 
    				[define if you have SSLeay or OpenSSL])
    
    Bart Hartgers's avatar
     
    Bart Hartgers committed
    
    
    			if test $need_rsaref = yes; then
    
    				AC_DEFINE(HAVE_RSAREF, 1, 
    					[define if you have RSAref])
    
    
    				TLS_LIBS="-lssl -lcrypto -lRSAglue -lrsaref"
    			else
    				TLS_LIBS="-lssl -lcrypto"
    			fi
    
    Bart Hartgers's avatar
     
    Bart Hartgers committed
    		fi
    	fi
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	AC_WARN([TLS data protection not supported!])
    
    Bart Hartgers's avatar
     
    Bart Hartgers committed
    fi
    
    if test $ol_link_tls = yes ; then
    
    	AC_DEFINE(HAVE_TLS, 1, [define if you have TLS])
    
    
    elif test $ol_with_tls = auto ; then
    	AC_WARN([Could not locate TLS/SSL package])
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	AC_WARN([TLS data protection not supported!])
    
    
    elif test $ol_with_tls != no ; then
    	AC_ERROR([Could not locate TLS/SSL package])
    fi
    
    Bart Hartgers's avatar
     
    Bart Hartgers committed
    
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    dnl ----------------------------------------------------------------
    dnl LAN Manger password checking requires DES from OpenSSL
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    if test $ol_enable_lmpasswd != no; then
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	if test $ol_link_tls != yes ; then
    		AC_ERROR([LAN Manager passwords require OpenSSL])
    	fi
    
    	AC_DEFINE(SLAPD_LMHASH, 1, [define to support LAN Manager passwords])
    fi
    
    
    dnl ----------------------------------------------------------------
    dnl Threads?
    
    ol_link_threads=no
    
    if test $ol_with_threads = auto -o $ol_with_threads = yes \
    	-o $ol_with_threads = nt ; then
    
    
    	OL_NT_THREADS
    
    	if test "$ol_cv_nt_threads" = yes ; then
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		ol_link_threads=nt
    		ol_with_threads=found
    		ol_with_yielding_select=yes
    
    
    		AC_DEFINE(HAVE_NT_SERVICE_MANAGER,1,[if you have NT Service Manager])
    		AC_DEFINE(HAVE_NT_EVENT_LOG,1,[if you have NT Event Log])
    
    
    	if test $ol_with_threads = nt ; then
    		AC_MSG_ERROR([could not locate NT Threads])
    	fi
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    if test $ol_with_threads = auto -o $ol_with_threads = yes \
    	-o $ol_with_threads = posix ; then
    
    
    
    	if test $ac_cv_header_pthread_h = yes ; then
    		OL_POSIX_THREAD_VERSION
    
    
    		if test $ol_cv_pthread_version != 0 ; then
    			AC_DEFINE_UNQUOTED(HAVE_PTHREADS,$ol_cv_pthread_version,
    				[define to pthreads API spec revision])
    
    		else
    			AC_MSG_ERROR([unknown pthread version])
    		fi
    
    		# consider threads found
    		ol_with_threads=found
    
    
    		OL_HEADER_GNU_PTH_PTHREAD_H
    
    		if test $ol_cv_header_gnu_pth_pthread_h = no ; then
    			AC_CHECK_HEADERS(sched.h)
    		fi
    
    		dnl Now the hard part, how to link?
    		dnl
    		dnl currently supported checks:
    		dnl
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		dnl Check for no flags 
    		dnl 	pthread_create() in $LIBS
    
    		dnl
    		dnl Check special pthread (final) flags
    
    		dnl 	[skipped] pthread_create() with -mt (Solaris) [disabled]
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		dnl 	pthread_create() with -kthread (FreeBSD)
    
    		dnl 	pthread_create() with -pthread (FreeBSD/Digital Unix)
    		dnl 	pthread_create() with -pthreads (?)
    
    		dnl 	pthread_create() with -mthreads (AIX)
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		dnl 	pthread_create() with -thread (?)
    
    		dnl
    		dnl Check pthread (final) libraries
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		dnl 	pthread_mutex_unlock() in -lpthread -lmach -lexc -lc_r (OSF/1)
    		dnl 	pthread_mutex_lock() in -lpthread -lmach -lexc (OSF/1)
    
    		dnl 	[skipped] pthread_mutex_trylock() in -lpthread -lexc (OSF/1)
    
    		dnl 	pthread_join() -Wl,-woff,85 -lpthread (IRIX)
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		dnl 	pthread_create() in -lpthread (many)
    		dnl 	pthread_create() in -lc_r (FreeBSD)
    
    		dnl Check pthread (draft4) flags (depreciated)
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		dnl 	pthread_create() with -threads (OSF/1)
    
    		dnl Check pthread (draft4) libraries (depreciated)
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		dnl 	pthread_mutex_unlock() in -lpthreads -lmach -lexc -lc_r (OSF/1)
    		dnl 	pthread_mutex_lock() in -lpthreads -lmach -lexc (OSF/1)
    		dnl 	pthread_mutex_trylock() in -lpthreads -lexc (OSF/1)
    
    		dnl 	pthread_create() in -lpthreads (many)
    
    		AC_CACHE_CHECK([for pthread_create in default libraries],
    			ol_cv_pthread_create,[
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		AC_TRY_RUN(OL_PTHREAD_TEST_PROGRAM,
    
    			[ol_cv_pthread_create=yes],
    			[ol_cv_pthread_create=no],
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    			[AC_TRY_LINK(OL_PTHREAD_TEST_INCLUDES,OL_PTHREAD_TEST_FUNCTION,
    				[ol_cv_pthread_create=yes],
    				[ol_cv_pthread_create=no])])])
    
    
    		if test $ol_cv_pthread_create != no ; then
    			ol_link_threads=posix
    
    dnl		OL_PTHREAD_TRY([-mt],		[ol_cv_pthread_mt])
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		OL_PTHREAD_TRY([-kthread],	[ol_cv_pthread_kthread])
    		OL_PTHREAD_TRY([-pthread],	[ol_cv_pthread_pthread])
    		OL_PTHREAD_TRY([-pthreads],	[ol_cv_pthread_pthreads])
    		OL_PTHREAD_TRY([-mthreads],	[ol_cv_pthread_mthreads])
    		OL_PTHREAD_TRY([-thread],	[ol_cv_pthread_thread])
    
    		OL_PTHREAD_TRY([-lpthread -lmach -lexc -lc_r],
    
    			[ol_cv_pthread_lpthread_lmach_lexc_lc_r])
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		OL_PTHREAD_TRY([-lpthread -lmach -lexc],
    
    			[ol_cv_pthread_lpthread_lmach_lexc])
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    dnl		OL_PTHREAD_TRY([-lpthread -lexc],
    
    dnl			[ol_cv_pthread_lpthread_lexc])
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		OL_PTHREAD_TRY([-lpthread -Wl,-woff,85],
    
    			[ol_cv_pthread_lib_lpthread_woff])
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		OL_PTHREAD_TRY([-lpthread],	[ol_cv_pthread_lpthread])
    		OL_PTHREAD_TRY([-lc_r],		[ol_cv_pthread_lc_r])
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		OL_PTHREAD_TRY([-threads],	[ol_cv_pthread_threads])
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		OL_PTHREAD_TRY([-lpthreads -lmach -lexc -lc_r],
    
    			[ol_cv_pthread_lpthreads_lmach_lexc_lc_r])
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		OL_PTHREAD_TRY([-lpthreads -lmach -lexc],
    
    			[ol_cv_pthread_lpthreads_lmach_lexc])
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		OL_PTHREAD_TRY([-lpthreads -lexc],
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		OL_PTHREAD_TRY([-lpthreads],[ol_cv_pthread_lib_lpthreads])
    
    		if test $ol_link_threads != no ; then
    
    			LTHREAD_LIBS="$LTHREAD_LIBS $ol_link_pthreads"
    
    
    			save_CPPFLAGS="$CPPFLAGS"
    			save_LIBS="$LIBS"
    			LIBS="$LTHREAD_LIBS $LIBS"
    
    			dnl All POSIX Thread (final) implementations should have
    			dnl sched_yield instead of pthread yield.
    
    			dnl check for both, and thr_yield for Solaris
    			AC_CHECK_FUNCS(sched_yield pthread_yield thr_yield)
    
    
    			if test $ac_cv_func_sched_yield = no -a \
    
    				$ac_cv_func_pthread_yield = no -a \
    				$ac_cv_func_thr_yield = no ; then
    
    				dnl Digital UNIX has sched_yield() in -lrt
    				AC_CHECK_LIB(rt, sched_yield,
    					[LTHREAD_LIBS="$LTHREAD_LIBS -lrt"
    
    					AC_DEFINE(HAVE_SCHED_YIELD,1,
    						[Define if you have the sched_yield function.])
    
    					ac_cv_func_sched_yield=yes],
    					[ac_cv_func_sched_yield=no])
    			fi
    			if test $ac_cv_func_sched_yield = no -a \
    
    				$ac_cv_func_pthread_yield = no -a \
    				"$ac_cv_func_thr_yield" = no ; then
    
    				AC_MSG_WARN([could not locate sched_yield() or pthread_yield()])
    			fi
    
    			dnl Check functions for compatibility
    
    			AC_CHECK_FUNCS(pthread_kill pthread_rwlock_destroy)
    
    			dnl Check for pthread_detach with <pthread.h> inclusion
    			dnl as it's symbol may have been mangled.
    			AC_CACHE_CHECK([for pthread_detach with <pthread.h>],
    				[ol_cv_func_pthread_detach], [
    				dnl save the flags
    
    				AC_TRY_LINK([
    #include <pthread.h>
    #ifndef NULL
    #define NULL (void*)0
    #endif
    ],
    
    					[pthread_detach(NULL);],
    					[ol_cv_func_pthread_detach=yes],
    					[ol_cv_func_pthread_detach=no])
    			])
    
    			if test $ol_cv_func_pthread_detach = no ; then
    
    				AC_MSG_ERROR([could not locate pthread_detach()])
    			fi
    
    			AC_DEFINE(HAVE_PTHREAD_DETACH,1,
    				[define if you have pthread_detach function])
    
    
    			dnl Check for setconcurreny functions
    			AC_CHECK_FUNCS(	\
    				pthread_setconcurrency \
    
    				pthread_getconcurrency \
    
    				thr_setconcurrency \
    
    				thr_getconcurrency \
    
    			if test $ol_cv_linux_threads = error; then
    				AC_MSG_ERROR([LinuxThreads header/library mismatch]);
    
    			AC_CACHE_CHECK([if pthread_create() works],
    				ol_cv_pthread_create_works,[
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    			AC_TRY_RUN(OL_PTHREAD_TEST_PROGRAM,
    
    				[ol_cv_pthread_create_works=yes],
    				[ol_cv_pthread_create_works=no],
    				[dnl assume yes
    				ol_cv_pthread_create_works=yes])])
    
    			if test $ol_cv_pthread_create_works = no ; then
    
    				AC_MSG_ERROR([pthread_create is not usable, check environment settings])
    
    			dnl Check if select causes an yield
    			if test $ol_with_yielding_select = auto ; then
    
    				AC_CACHE_CHECK([if select yields when using pthreads],
    					ol_cv_pthread_select_yields,[
    
    				AC_TRY_RUN([
    #include <sys/types.h>
    #include <sys/time.h>
    #include <unistd.h>
    #include <pthread.h>
    #ifndef NULL
    
    #define NULL (void*) 0
    
    static int fildes[2];
    
    static void *task(p)
    	void *p;
    
    	struct timeval tv;
    
    
    	tv.tv_usec=0;
    
    
    	FD_ZERO(&rfds);
    	FD_SET(fildes[0], &rfds);
    
    
    	/* we're not interested in any fds */
    
    	i = select(FD_SETSIZE, &rfds, NULL, NULL, &tv);
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		exit(10);
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	exit(0); /* if we exit here, the select blocked the whole process */
    
    int main(argc, argv)
    	int argc;
    	char **argv;
    
    {
    	pthread_t t;
    
    	/* create a pipe to select */
    	if(pipe(&fildes[0])) {
    		perror("select");
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		exit(1);
    
    #ifdef HAVE_PTHREAD_SETCONCURRENCY
    	(void) pthread_setconcurrency(2);
    
    #else
    #ifdef HAVE_THR_SETCONCURRENCY
    
    	/* Set Solaris LWP concurrency to 2 */
    	thr_setconcurrency(2);
    
    	pthread_create(&t, pthread_attr_default, task, NULL);
    #else
    
    	pthread_create(&t, NULL, task, NULL);
    
    	/* make sure task runs first */
    #if HAVE_THR_YIELD
    	thr_yield();
    #elif defined( HAVE_SCHED_YIELD )
    	sched_yield();
    #elif defined( HAVE_PTHREAD_YIELD )
    	pthread_yield();
    
    #endif
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    
    	exit(2);
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    				[ol_cv_pthread_select_yields=no],
    
    				[ol_cv_pthread_select_yields=yes],
    				[ol_cv_pthread_select_yields=cross])])
    
    				if test $ol_cv_pthread_select_yields = cross ; then
    					AC_MSG_ERROR([crossing compiling: use --with-yielding_select=yes|no|manual])
    				fi
    
    				if test $ol_cv_pthread_select_yields = yes ; then
    
    			CPPFLAGS="$save_CPPFLAGS"
    			LIBS="$save_LIBS"
    		else
    
    			AC_MSG_ERROR([could not locate usable POSIX Threads])
    
    		fi
    	fi
    
    	if test $ol_with_threads = posix ; then
    		AC_MSG_ERROR([could not locate POSIX Threads])
    	fi
    fi
    
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    if test $ol_with_threads = auto -o $ol_with_threads = yes \
    	-o $ol_with_threads = mach ; then
    
    
    	dnl check for Mach CThreads
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	AC_CHECK_HEADERS(mach/cthreads.h cthreads.h)
    
    	if test $ac_cv_header_mach_cthreads_h = yes ; then
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		dnl check for cthreads support in current $LIBS
    
    		AC_CHECK_FUNC(cthread_fork,[ol_link_threads=yes])
    
    		if test $ol_link_threads = no ; then
    			dnl try -all_load
    			dnl this test needs work
    			AC_CACHE_CHECK([for cthread_fork with -all_load],
    				[ol_cv_cthread_all_load], [
    
    				save_LIBS="$LIBS"
    				LIBS="-all_load $LIBS"
    				AC_TRY_LINK([#include <mach/cthreads.h>],[
    					cthread_fork((void *)0, (void *)0);
    					], ol_cv_cthread_all_load=yes, ol_cv_cthread_all_load=no)
    				dnl restore the LIBS
    				LIBS="$save_LIBS"
    			])
    
    			if test $ol_cv_cthread_all_load = yes ; then
    				LTHREAD_LIBS="$LTHREAD_LIBS -all_load"
    				ol_link_threads=mach
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    				ol_with_threads=found
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	elif test $ac_cv_header_cthreads_h = yes ; then
    
    		dnl Hurd variant of Mach Cthreads
    		dnl uses <cthreads.h> and -lthreads
    
    		ol_with_threads=found
     
    		dnl save the flags
    		save_LIBS="$LIBS"
    		LIBS="$LIBS -lthreads"
    		AC_CHECK_FUNC(cthread_fork,[ol_link_threads=yes])
    		LIBS="$save_LIBS"
    
    		if test $ol_link_threads = yes ; then
    			LTHREAD_LIBS="-lthreads"
    			ol_link_threads=mach
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    			ol_with_threads=found
    
    		else
    			AC_MSG_ERROR([could not link with Mach CThreads])
    		fi
    
    
    	elif test $ol_with_threads = mach ; then
    
    		AC_MSG_ERROR([could not locate Mach CThreads])
    
    
    	if test $ol_link_threads = mach ; then
    		AC_DEFINE(HAVE_MACH_CTHREADS,1,
    			[define if you have Mach Cthreads])
    	elif test $ol_with_threads = found ; then
    		AC_MSG_ERROR([could not link with Mach CThreads])
    	fi
    
    if test $ol_with_threads = auto -o $ol_with_threads = yes \
    	-o $ol_with_threads = pth ; then
    
    	AC_CHECK_HEADERS(pth.h)
    
    	if test $ac_cv_header_pth_h = yes ; then
    		AC_CHECK_LIB(pth, pth_version, [have_pth=yes], [have_pth=no])
    
    		if test $have_pth = yes ; then
    			AC_DEFINE(HAVE_GNU_PTH,1,[if you have GNU Pth])
    			LTHREAD_LIBS="$LTHREAD_LIBS -lpth"
    			ol_link_threads=pth
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    			ol_with_threads=found
    
    
    			if test $ol_with_yielding_select = auto ; then
    				ol_with_yielding_select=yes
    			fi
    		fi
    	fi
    fi
    
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    if test $ol_with_threads = auto -o $ol_with_threads = yes \
    	-o $ol_with_threads = lwp ; then
    
    
    	dnl check for SunOS5 LWP
    	AC_CHECK_HEADERS(thread.h synch.h)
    
    	if test $ac_cv_header_thread_h = yes -a $ac_cv_header_synch_h = yes ; then
    
    		AC_CHECK_LIB(thread, thr_create, [have_thr=yes], [have_thr=no])
    
    		if test $have_thr = yes ; then
    
    			AC_DEFINE(HAVE_THR,1,
    				[if you have Solaris LWP (thr) package])
    
    			LTHREAD_LIBS="$LTHREAD_LIBS -lthread"
    
    			ol_link_threads=thr
    
    			if test $ol_with_yielding_select = auto ; then
    				ol_with_yielding_select=yes
    
    			dnl Check for setconcurreny functions
    			AC_CHECK_FUNCS(	\
    				thr_setconcurrency \
    				thr_getconcurrency \
    			)
    
    		fi
    	fi
    
    	dnl check for SunOS4 LWP
    	AC_CHECK_HEADERS(lwp/lwp.h)
    
    	if test $ac_cv_header_lwp_lwp_h = yes ; then
    
    		AC_CHECK_LIB(lwp, lwp_create, [have_lwp=yes], [have_lwp=no])
    
    		if test $have_lwp = yes ; then
    
    			AC_DEFINE(HAVE_LWP,1,
    				[if you have SunOS LWP package])
    
    			LTHREAD_LIBS="$LTHREAD_LIBS -llwp"
    
    			ol_link_threads=lwp
    
    			if test $ol_with_yielding_select = auto ; then
    				ol_with_yielding_select=no
    
    if test $ol_with_yielding_select = yes ; then
    
    	AC_DEFINE(HAVE_YIELDING_SELECT,1,
    		[define if select implicitly yields])
    
    fi
    
    if test $ol_with_threads = manual ; then
    	dnl User thinks he can manually configure threads.
    
    	ol_link_threads=yes
    
    
    	AC_MSG_WARN([thread defines and link options must be set manually])
    
    	AC_CHECK_HEADERS(pthread.h sched.h)
    	AC_CHECK_FUNCS(sched_yield pthread_yield)
    
    
    	AC_CHECK_HEADERS(mach/cthreads.h)
    	AC_CHECK_HEADERS(lwp/lwp.h)
    	AC_CHECK_HEADERS(thread.h synch.h)
    fi
    
    
    Howard Chu's avatar
    Howard Chu committed
    if test $ol_link_threads != no -a $ol_link_threads != nt ; then  
    
    	dnl needed to get reentrant/threadsafe versions
    	dnl
    
    	AC_DEFINE(REENTRANT,1)
    
    	AC_DEFINE(THREAD_SAFE,1)
    
    	AC_DEFINE(THREADSAFE,1)
    
    	AC_DEFINE(_THREADSAFE,1)
    
    	AC_DEFINE(_SGI_MP_SOURCE,1)
    
    	dnl The errno declaration may dependent upon _REENTRANT.
    	dnl If it does, we must link with thread support.
    
    	AC_CACHE_CHECK([for thread specific errno],
    		[ol_cv_errno_thread_specific], [
    
    		AC_TRY_LINK([#include <errno.h>], [errno = 0;],
    
    			[ol_cv_errno_thread_specific=yes],
    			[ol_cv_errno_thread_specific=no])
    	])
    
    
    	dnl The h_errno declaration may dependent upon _REENTRANT.
    	dnl If it does, we must link with thread support.
    	AC_CACHE_CHECK([for thread specific h_errno],
    		[ol_cv_h_errno_thread_specific], [
    		AC_TRY_LINK([#include <netdb.h>], [h_errno = 0;],
    			[ol_cv_h_errno_thread_specific=yes],
    			[ol_cv_h_errno_thread_specific=no])
    	])
    
    	if test $ol_cv_errno_thread_specific != yes \
    		-o $ol_cv_h_errno_thread_specific != yes ; then
    
    		LIBS="$LTHREAD_LIBS $LIBS"
    		LTHREAD_LIBS=""
    	fi
    
    dnl		#if defined( HAVE_REENTRANT_FUNCTIONS ) || defined( HAVE_FUNC_R )
    
    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		and is currently defined in <ldap_pvt_thread.h>
    
    dnl HAVE_THREADS is defined by <ldap_pvt_thread.h> iff -UNO_THREADS
    
    dnl libldap/*.c should only include <ldap_pvt_thread.h> iff
    
    dnl LDAP_R_COMPILE is defined.  ie:
    dnl		#ifdef LDAP_R_COMPILE
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    dnl LDAP_R_COMPILE 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
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    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		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"
    
    if test $ol_link_threads = no ; then
    	if test $ol_with_threads = yes ; then
    		AC_MSG_ERROR([no suitable thread support])
    	fi
    
    	if test $ol_with_threads = auto ; then
    		AC_MSG_WARN([no suitable thread support, disabling threads])
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		ol_with_threads=no
    
    	AC_DEFINE(NO_THREADS,1,
    		[define if you have (or want) no threads])
    
    	LTHREAD_LIBS=""
    fi
    
    
    if test $ol_link_threads != no ; then
    	AC_DEFINE(LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE,1)
    fi
    
    
    dnl ----------------------------------------------------------------
    dnl Tests for reentrant functions necessary to build -lldap_r
    AC_CHECK_FUNCS(		\
    	ctime_r			\
    	gethostbyname_r	gethostbyaddr_r \
    )
    
    if test "$ac_cv_func_ctime_r" = no ; then
    	ol_cv_func_ctime_r_nargs=0
    else
    	OL_FUNC_CTIME_R_NARGS
    dnl	OL_FUNC_CTIME_R_TYPE
    fi
    
    if test "$ac_cv_func_gethostbyname_r" = yes ; then
     	OL_FUNC_GETHOSTBYNAME_R_NARGS
    else
     	ol_cv_func_gethostbyname_r_nargs=0
    fi
     
    if test "$ac_cv_func_gethostbyaddr_r" = yes ; then
     	OL_FUNC_GETHOSTBYADDR_R_NARGS
    else
     	ol_cv_func_gethostbyaddr_r_nargs=0
    fi
    
    
    dnl ----------------------------------------------------------------
    
    ol_link_ldbm=no 
    
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    if test $ol_with_ldbm_api = auto \
    	-o $ol_with_ldbm_api = berkeley \
    	-o $ol_with_ldbm_api = bcompat ; then
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	if test $ol_with_ldbm_api = bcompat; then \
    		OL_BERKELEY_COMPAT_DB
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		OL_BERKELEY_DB
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	if test $ol_cv_berkeley_db != no ; then
    		AC_DEFINE(HAVE_BERKELEY_DB,1,
    			[define this if Berkeley DB is available])
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		ol_link_ldbm=berkeley
    
    
    		if test $ol_with_ldbm_type = hash ; then
    
    			AC_DEFINE(LDBM_USE_DBHASH,1,
    				[define this to use DBHASH w/ LDBM backend])
    
    			AC_DEFINE(LDBM_USE_DBBTREE,1,
    				[define this to use DBBTREE w/ LDBM backend])
    
    		fi
    
    		dnl $ol_cv_lib_db should be yes or -ldb
    		dnl (it could be no, but that would be an error
    		if test $ol_cv_lib_db != yes ; then
    			LDBM_LIBS="$LDBM_LIBS $ol_cv_lib_db"
    		fi
    	fi
    fi
    
    
    if test $ol_enable_bdb = yes -a $ol_link_ldbm != berkeley ; then
    
    	AC_MSG_ERROR(BDB: BerkeleyDB not available)
    elif test $ol_enable_bdb != no -a $ol_link_ldbm = berkeley ; then
    	OL_BDB_COMPAT
    
    	if test $ol_cv_bdb_compat = yes ; then
    		ol_enable_bdb=yes
    	elif test $ol_enable_bdb = yes ; then
    		AC_MSG_ERROR(BDB: BerkeleyDB version incompatible)
    	else
    		ol_enable_bdb=no
    	fi
    
    Howard Chu's avatar
    Howard Chu committed
    if test $ol_enable_hdb = yes -a $ol_link_ldbm != berkeley ; then
    	AC_MSG_ERROR(HDB: BerkeleyDB not available)
    fi
    
    if test $ol_link_ldbm = no -a $ol_with_ldbm_type = btree ; then
    
    	AC_MSG_WARN(Could not find LDBM with BTREE support)
    
    	ol_with_ldbm_api=none
    
    Juan Gomez's avatar
    Juan Gomez committed
    if test $ol_with_ldbm_api = auto -o $ol_with_ldbm_api = mdbm ; then
    	OL_MDBM
    
    	if test $ol_cv_mdbm = yes ; then
    		ol_link_ldbm=mdbm
    		ol_with_ldbm_api=mdbm
    		if test $ol_cv_lib_mdbm != yes ; then
    			LDBM_LIBS="$LDBM_LIBS $ol_cv_lib_mdbm"
    		fi
    	fi
    fi
    
    
    if test $ol_with_ldbm_api = auto -o $ol_with_ldbm_api = gdbm ; then