Skip to content
Snippets Groups Projects
configure.in 55.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • 		OL_PTHREAD_TRY_LINK([-lpthread -Wl,-woff,85],
    			[ol_cv_pthread_lib_lpthread_woff])
    
    		OL_PTHREAD_TRY_LINK([-lpthread],[ol_cv_pthread_lpthread])
    		OL_PTHREAD_TRY_LINK([-lc_r],	[ol_cv_pthread_lc_r])
    
    		OL_PTHREAD_TRY_LINK([-threads],	[ol_cv_pthread_threads])
    
    		OL_PTHREAD_TRY_LINK([-lpthreads -lmach -lexc -lc_r],
    			[ol_cv_pthread_lpthreads_lmach_lexc_lc_r])
    		OL_PTHREAD_TRY_LINK([-lpthreads -lmach -lexc],
    			[ol_cv_pthread_lpthreads_lmach_lexc])
    		OL_PTHREAD_TRY_LINK([-lpthreads -lexc],
    			[ol_cv_pthread_lpthreads_lexc])
    
    		OL_PTHREAD_TRY_LINK([-lpthreads],	[ol_cv_pthread_lib_lpthreads])
    
    		if test $ol_link_threads != no ; then
    
    			AC_DEFINE(HAVE_PTHREADS,1,
    				[define if you have POSIX Threads])
    
    			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
    			AC_CHECK_FUNCS(sched_yield pthread_yield)
    
    			if test $ac_cv_func_sched_yield = no -a \
    				$ac_cv_func_pthread_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 ; then
    
    				dnl Solaris has sched_yield() stub in -lposix4
    
    				dnl but we'll use thr_yield instead.
    				AC_CHECK_FUNCS(thr_yield)
    
    			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
    
    			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,[
    
    			AC_TRY_RUN([
    #include <pthread.h>
    
    #ifndef NULL
    #define NULL (void*)0
    #endif
    
    static void *task(p)
    	void *p;
    {
    	return (void *) (p == NULL);
    
    }
    
    int main(argc, argv)
    	int argc;
    	char **argv;
    {
    	pthread_t t;
    
    #if HAVE_PTHREADS_D4
    	exit(pthread_create(&t, pthread_attr_default, task, NULL));
    #else
    
    	exit(pthread_create(&t, NULL, task, NULL));
    
    				[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);
    
    #if HAVE_PTHREADS_D4
    	pthread_create(&t, pthread_attr_default, task, NULL);
    #else
    
    	pthread_create(&t, NULL, task, NULL);
    
    
    #if HAVE_SCHED_YIELD
    	sched_yield();	/* make sure task runs first */
    #else
    
    #ifdef HAVE_PTHREAD_YIELD
    
    	pthread_yield();	/* make sure task runs first */
    #endif
    #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 link with 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
    	AC_CHECK_HEADERS(mach/cthreads.h)
    
    	if test $ac_cv_header_mach_cthreads_h = yes ; then
    		ol_with_threads=found
    
    		dnl check for cthread 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
    			fi
    
    
    		if test $ol_link_threads != no ; then
    			: check for cthread specific functionality here
    
    			AC_DEFINE(HAVE_MACH_CTHREADS,1,
    				[define if you have Mach Cthreads])
    
    		else
    			AC_MSG_ERROR([could not link with Mach CThreads])
    		fi
    	fi
    
    	if test $ol_with_threads = mach ; then
    		AC_MSG_ERROR([could not locate Mach CThreads])
    
    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
    
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    if test $ol_link_threads != no ; 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 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
    
    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
    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 ----------------------------------------------------------------
    
    
    ol_link_ldbm=no 
    if test $ol_with_ldbm_api = auto -o $ol_with_ldbm_api = db2 ; then
    	OL_BERKELEY_DB2
    
    	if test $ol_cv_berkeley_db2 = yes ; then
    		ol_link_ldbm=db2
    		ol_with_ldbm_api=db2
    
    		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_db2 should be yes or -ldb
    		dnl (it could be no, but that would be an error
    		if test $ol_cv_lib_db2 != yes ; then
    			LDBM_LIBS="$LDBM_LIBS $ol_cv_lib_db2"
    		fi
    	fi
    fi
    
    
    ol_link_bdb2=no
    if test $ol_link_ldbm = db2 -a $ol_enable_bdb2 != no ; then
    	ol_link_bdb2=yes
    fi
    
    
    if test $ol_with_ldbm_api = auto -o $ol_with_ldbm_api = db ; then
    	OL_BERKELEY_DB
    
    	if test $ol_cv_berkeley_db = yes ; then
    		ol_link_ldbm=db
    		ol_with_ldbm_api=db
    
    		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_with_ldbm_api = manual ; then
    	dnl User thinks he can manually configure LDBM api.
    
    	ol_link_ldbm=yes
    
    
    	AC_MSG_WARN([LDBM defines and link options must be set manually])
    
    
    	AC_CHECK_HEADERS(db.h db_185.h gdbm.h ndbm.h)
    
    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
    	OL_GDBM
    
    	if test $ol_cv_gdbm = yes ; then
    		ol_link_ldbm=gdbm
    		ol_with_ldbm_api=gdbm
    
    		if test $ol_cv_lib_gdbm != yes ; then
    			LDBM_LIBS="$LDBM_LIBS $ol_cv_lib_gdbm"
    		fi
    	fi
    fi
    
    
    if test $ol_with_ldbm_api = auto ; then
    	AC_MSG_WARN([skipping automatic checking for NDBM, must be manually enabled.])
    elif test $ol_with_ldbm_api = ndbm ; then
    
    	OL_NDBM
    
    	if test $ol_cv_ndbm = yes ; then
    
    		ol_link_ldbm=ndbm
    		ol_with_ldbm_api=ndbm
    
    
    		if test $ol_cv_lib_ndbm != yes ; then
    			LDBM_LIBS="$LDBM_LIBS $ol_cv_lib_ndbm"
    		fi
    	fi
    fi
    
    if test $ol_link_ldbm = no -a $ol_enable_ldbm != no ; then
    	AC_MSG_WARN(could not find suitable LDBM backend)
    	if test $ol_enable_ldbm = yes ; then
    		AC_MSG_ERROR(select appropriate LDBM options or disable)
    	fi
    
    	AC_MSG_WARN(disabling LDBM)
    
    	ol_enable_ldbm=no
    
    if test $ol_enable_wrappers != no ; then
    
    	AC_CHECK_HEADERS(tcpd.h)
    
    	if test $ac_cv_header_tcpd_h != yes ; then
    		have_wrappers=no
    	else
    		AC_CHECK_LIB(wrap, main,
    			[have_wrappers=yes], [have_wrappers=no])
    	fi
    
    
    	if test $have_wrappers = yes ; then
    
    		AC_DEFINE(HAVE_TCPD,1, [define if you have -lwrap])
    
    		SLAPD_LIBS="$SLAPD_LIBS -lwrap"
    
    
    		dnl We add another check for -lnsl since some libwrap's
    		dnl need it, but it isn't always included from above
    		AC_CHECK_LIB(nsl, main)
    
    	else
    		AC_MSG_WARN(could not find -lwrap)
    		if test $ol_enable_wrappers = yes ; then
    			AC_MSG_ERROR(could not find wrappers, select appropriate options or disable)
    		fi
    
    		AC_MSG_WARN(disabling wrappers support)
    		ol_enable_wrappers=no
    	fi
    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
    
    
    if test $ol_enable_tcl != no ; then
    	AC_CHECK_HEADERS(tcl.h)
    
    	if test $ac_cv_header_tcl_h != yes ; then
    		have_tcl=no
    	else
    		AC_CHECK_LIB(tcl,main,
    			[have_tcl=yes; SLAPD_LIBS="$SLAPD_LIBS -ltcl"],
    			[have_tcl=no])
    
    		if test $have_tcl != yes; then
    			AC_CHECK_LIB(tcl7.6,main,
    				[have_tcl=yes; SLAPD_LIBS="$SLAPD_LIBS -ltcl7.6"],
    				[have_tcl=no])
    		fi
    
    		if test $have_tcl != yes; then
    			AC_CHECK_LIB(tcl8.0,main,
    				[have_tcl=yes; SLAPD_LIBS="$SLAPD_LIBS -ltcl8.0"],
    				[have_tcl=no])
    		fi
    	fi
    
    	if test $have_tcl != yes ; then
    		AC_MSG_WARN([could not find -ltcl])
    		if test $ol_enable_tcl = yes ; then
    			AC_MSG_ERROR([could not find tcl, select appropriate options or disable])
    		fi
    
    		ol_enable_tcl=no
    	fi
    fi
    
    
    # ud needs termcap (should insert check here)
    ol_link_termcap=no
    AC_CHECK_HEADERS(termcap.h ncurses.h)
    
    if test $ol_link_termcap = no ; then
    	AC_CHECK_LIB(termcap, tputs, [have_termcap=yes], [have_termcap=no])
    	if test $have_termcap = yes ; then
    
    		AC_DEFINE(HAVE_TERMCAP, 1, [define if you have -ltermcap])
    
    		ol_link_termcap=yes
    		TERMCAP_LIBS=-ltermcap
    	fi
    fi
    
    if test $ol_link_termcap = no ; then
    	AC_CHECK_LIB(ncurses, initscr, [have_ncurses=yes], [have_ncurses=no])
    	if test $have_ncurses = yes ; then
    
    		AC_DEFINE(HAVE_NCURSES, 1, [define if you have -lncurses])
    
    		ol_link_termcap=yes
    		TERMCAP_LIBS=-lncurses
    	fi
    fi
    
    if test $ol_link_termcap = no ; then
    
    	AC_DEFINE(NO_TERMCAP,1, [define if you have no termcap support])
    
    	TERMCAP_LIBS=
    fi
    
    
    dnl
    dnl Check for fetch URL support
    dnl		should be extended to support other fetch URL APIs
    dnl
    ol_link_sasl=no
    if test $ol_with_cyrus_sasl != no ; then
    	AC_CHECK_HEADER(sasl.h)
    
    	if test $ac_cv_header_sasl_h = yes ; then
    		AC_CHECK_LIB(sasl, sasl_client_init,
    			[have_cyrus_sasl=yes], [have_cyrus_sasl=no])
    
    		if test $have_cyrus_sasl != no ; then
    
    			SASL_LIBS="-lsasl"
    
    			AC_DEFINE(HAVE_CYRUS_SASL,1,[define if you have Cyrus SASL])
    
    			ol_link_sasl=yes
    		fi
    	fi
    
    	if test $ol_link_sasl = no -a $ol_with_cyrus_sasl = yes ; then
    		AC_MSG_ERROR(no suitable API for --with-cyrus-sasl=$ol_with_cyrus_sasl)
    	fi
    fi
    
    dnl
    dnl Check for fetch URL support
    dnl		should be extended to support other fetch URL APIs
    dnl
    ol_link_fetch=no
    if test $ol_with_fetch != no ; then
    	OL_LIB_FETCH
    
    	if test $ol_cv_lib_fetch != no ; then
    		LDIF_LIBS="$LDIF_LIBS $ol_link_fetch"
    		ol_link_fetch=freebsd
    
    	elif test $ol_with_fetch != auto ; then
    		AC_MSG_ERROR(no suitable API for --with-fetch=$ol_with_fetch)
    	fi 
    fi
    
    
    dnl
    dnl Check for GNU readline
    dnl
    ol_link_readline=no
    if test $ol_with_readline != no ; then
    	AC_CHECK_HEADERS(readline/readline.h readline/history.h)
    
    	if test $ac_cv_header_readline_readline_h = yes ; then
    		save_LIBS="$LIBS"
    		LIBS="$TERMCAP_LIBS $LIBS"
    		AC_CHECK_LIB(readline, readline, 
    			[have_readline=yes], [have_readline=no])
    		LIBS="$save_LIBS"
    			
    		if test $have_readline = yes ; then
    			ol_with_readline=found
    			ol_link_readline=yes
    
    			READLINE_LIBS="-lreadline"
    		fi
    	fi
    fi
    
    if test $ol_link_readline = yes ; then
    	AC_DEFINE(HAVE_READLINE, 1, [define if you have -lreadline])
    fi
    
    
    
    # FreeBSD (and others) have crypt(3) in -lcrypt
    if test $ol_enable_crypt != no ; then
    	AC_CHECK_FUNC(crypt, [have_crypt=yes], [
    		AC_CHECK_LIB(crypt, crypt, [LUTIL_LIBS="$LUTIL_LIBS -lcrypt"
    			have_crypt=yes], [have_crypt=no])])
    
    	if test $have_crypt = yes ; then
    
    		AC_DEFINE(HAVE_CRYPT,1, [define if crypt(3) is available])
    
    	else
    		AC_MSG_WARN(could not find crypt)
    		if test $ol_enable_crypt = yes ; then
    			AC_MSG_ERROR(could not find crypt, select appropriate options or disable)
    		fi
    
    		AC_MSG_WARN(disabling crypt support)
    		ol_enable_crypt=no
    	fi
    fi
    
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    # FreeBSD (and others) have setproctitle(3) in -lutil
    if test $ol_enable_proctitle != no ; then
    	AC_CHECK_FUNC(setproctitle,	[have_setproctitle=yes], [
    		AC_CHECK_LIB(util, setproctitle,
    			[have_setproctitle=yes
    			LUTIL_LIBS="$LUTIL_LIBS -lutil"],
    			[have_setproctitle=no
    			LIBOBJS="$LIBOBJS setproctitle.o"])])
    
    	if test $have_setproctitle = yes ; then
    
    		AC_DEFINE(HAVE_SETPROCTITLE,1,
    			[define if setproctitle(3) is available])
    
    dnl ----------------------------------------------------------------
    dnl Checks for typedefs, structures, and compiler characteristics.
    
    AC_TYPE_GETGROUPS dnl requires AC_TYPE_UID_T
    
    AC_TYPE_MODE_T
    AC_TYPE_OFF_T
    AC_TYPE_PID_T
    
    AC_TYPE_SIGNAL
    
    AC_TYPE_SIZE_T
    
    AC_STRUCT_ST_BLKSIZE
    AC_HEADER_TIME
    AC_STRUCT_TM
    
    
    OL_C_UPPER_LOWER
    AC_C_CONST
    
    if test $cross_compiling = yes ; then
    
    	AC_DEFINE(CROSS_COMPILING, 1, [define if cross compiling])
    
    
    	AC_DEFINE(LBER_INT_T,long)
    	AC_DEFINE(LBER_TAG_T,long)
    	AC_DEFINE(LBER_SOCKET_T,int)
    
    
    	AC_CHECK_SIZEOF(short) 
    	AC_CHECK_SIZEOF(int) 
    	AC_CHECK_SIZEOF(long)
    
    
    	if test "$ac_cv_sizeof_int" -lt 4 ; then
    		AC_MSG_WARN([OpenLDAP requires 'int' to be 32 bits or greater.])
    
    
    		AC_DEFINE(LBER_INT_T,long)
    		AC_DEFINE(LBER_TAG_T,long)
    		AC_DEFINE(LBER_SOCKET_T,int)
    	else
    		AC_DEFINE(LBER_INT_T,int)
    		AC_DEFINE(LBER_TAG_T,long)
    		AC_DEFINE(LBER_SOCKET_T,int)
    
    AC_DEFINE(LBER_LEN_T,long)
    
    
    dnl ----------------------------------------------------------------
    dnl Checks for library functions.
    AC_FUNC_MEMCMP
    
    dnl AM_FUNC_MKTIME dnl checks for sys/time.h and unistd.h
    
    AC_FUNC_STRFTIME
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    
    
    OL_FUNC_INET_ATON
    
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    dnl we should use vfork instead of fork in a number of places...
    
    dnl AC_FUNC_VFORK
    
    AC_FUNC_VPRINTF
    
    
    if test $ac_cv_func_vprintf = yes ; then
    	dnl check for vsnprintf
    
    	AC_CHECK_FUNCS(vsnprintf vsprintf)
    
    AC_CHECK_FUNCS(		\
    	bcopy			\
    
    	closesocket		\
    
    	flock			\
    
    	gethostname		\
    
    	lockf			\
    	memcpy			\
    	memmove			\
    	mkstemp			\
    
    	recv			\
    	recvfrom		\
    
    	setpwfile		\
    
    	setsid			\
    
    	signal			\
    	sigset			\
    
    	strerror		\
    
    	strrchr			\
    	strsep			\
    
    	strtol			\
    	strtoul			\
    
    Bart Hartgers's avatar
     
    Bart Hartgers committed
    	strspn			\
    
    	sysconf			\
    	waitpid			\
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	wait4			\
    
    dnl We actually may need to replace more than this.
    
    AC_REPLACE_FUNCS(getopt tempnam)
    
    
    dnl ----------------------------------------------------------------
    # Check Configuration
    OL_SYS_ERRLIST
    
    
    dnl ----------------------------------------------------------------
    
    dnl Sort out defines
    
    
    if test "$ol_enable_debug" != no ; then
    
    	AC_DEFINE(LDAP_DEBUG,1,
    		[define this to add debugging code])
    
    if test "$ol_enable_syslog" = yes ; then
    
    	AC_DEFINE(LDAP_SYSLOG,1,
    		[define this to add syslog code])
    
    if test "$ol_enable_libui" = yes ; then
    
    	AC_DEFINE(LDAP_LIBUI,1,
    		[define this for LDAP User Interface support])
    
    if test "$ol_enable_cache" = no ; then
    
    	AC_DEFINE(LDAP_NOCACHE,1,
    		[define this to remove -lldap cache support])
    
    if test "$ol_enable_dns" != no ; then
    
    	AC_DEFINE(LDAP_API_FEATURE_X_OPENLDAP_V2_DNS,LDAP_VENDOR_VERSION)
    
    if test "$ol_enable_proctitle" != no ; then
    
    	AC_DEFINE(LDAP_PROCTITLE,1,
    		[define this for LDAP process title support])
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    fi
    
    if test "$ol_enable_referrals" != no ; then
    
    	AC_DEFINE(LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS,LDAP_VENDOR_VERSION)
    
    if test "$ol_enable_cldap" != no ; then
    
    	AC_DEFINE(LDAP_CONNECTIONLESS,1,[define to support CLDAP])
    
    if test "$ol_enable_crypt" != no ; then
    
    	AC_DEFINE(SLAPD_CRYPT,1,[define to support crypt(3) passwords])
    
    if test "$ol_enable_cleartext" != no ; then
    
    	AC_DEFINE(SLAPD_CLEARTEXT,1,[define to support cleartext passwords])
    
    if test "$ol_enable_multimaster" != no ; then
    	AC_DEFINE(SLAPD_MULTIMASTER,1,[define to support multimaster replication])
    fi
    
    if test "$ol_enable_phonetic" != no ; then
    
    	AC_DEFINE(SLAPD_PHONETIC,1,[define to support phonetic])
    
    if test "$ol_enable_rlookups" != no ; then
    
    	AC_DEFINE(SLAPD_RLOOKUPS,1,[define to support reverse lookups])
    
    if test "$ol_link_modules" != no ; then
    
    	AC_DEFINE(SLAPD_MODULES,1,[define to support modules])
    
    if test "$ol_link_bdb2" != no ; then
    
    	AC_DEFINE(SLAPD_BDB2,1,[define to support BDB2 backend])
    
    	if test "$ol_with_bdb2_module" != static ; then
    
    		AC_DEFINE(SLAPD_BDB2_DYNAMIC,1,
    			[define to support dynamic BDB2 backend])
    
    if test "$ol_enable_ldap" != no ; then
    
    	AC_DEFINE(SLAPD_LDAP,1,[define to support LDAP backend])
    
    	if test "$ol_with_ldap_module" != static ; then
    
    		AC_DEFINE(SLAPD_LDAP_DYNAMIC,1,
    			[define to support dynamic LDAP backend])
    
    if test "$ol_link_ldbm" != no ; then
    
    	AC_DEFINE(SLAPD_LDBM,1,[define to support LDBM backend])
    
    	BUILD_SLAPD=yes
    	BUILD_LDBM=yes
    
    	if test "$ol_with_ldbm_module" != static ; then
    
    		AC_DEFINE(SLAPD_LDBM_DYNAMIC,1,
    			[define to support dynamic LDBM backend])
    
    if test "$ol_enable_passwd" != no ; then
    
    	AC_DEFINE(SLAPD_PASSWD,1,[define to support PASSWD backend])
    
    	BUILD_SLAPD=yes
    	BUILD_PASSWD=yes
    
    	if test "$ol_with_passwd_module" != static ; then
    
    		AC_DEFINE(SLAPD_PASSWD_DYNAMIC,1,
    			[define to support dynamic PASSWD backend])
    
    if test "$ol_link_perl" != no ; then
    
    	AC_DEFINE(SLAPD_PERL,1,[define to support PERL backend])
    
    	BUILD_SLAPD=yes
    	BUILD_PERL=yes
    
    	if test "$ol_with_perl_module" != static ; then
    
    		AC_DEFINE(SLAPD_PERL_DYNAMIC,1,
    			[define to support dynamic PERL backend])