]> code.citadel.org Git - citadel.git/blobdiff - citadel/configure.in
* First cut at Solaris fixes. There may still be some *printf("%s", NULL)
[citadel.git] / citadel / configure.in
index d90ad95eba3bc49ca03ff296f83848ba95caab14..61f80d1823385b3c70a9c4709048bab6552f854e 100644 (file)
@@ -11,6 +11,14 @@ fi
 
 AC_ARG_ENABLE(autologin, [  --disable-autologin     disable autologin (default is enabled if possible)])
 AC_ARG_ENABLE(chkpwd, [  --disable-chkpwd        don't build 'chkpwd'])
 
 AC_ARG_ENABLE(autologin, [  --disable-autologin     disable autologin (default is enabled if possible)])
 AC_ARG_ENABLE(chkpwd, [  --disable-chkpwd        don't build 'chkpwd'])
+
+AC_ARG_ENABLE(icq,             [  --enable-icq            include server ICQ support], [
+       if test "x$enableval" = xyes; then
+               SERV_ICQ='modules/serv_icq$(SO)'
+       fi])
+AC_ARG_ENABLE(threaded-client, [  --disable-threaded-client
+                         disable multithreaded client])
+
 AC_ARG_WITH(pam, [  --with-pam              use PAM if present (see PAM.txt before you try this)])
 AC_ARG_WITH(kthread, [  --with-kthread          use kernel threads (on FreeBSD) (not recommended yet)])
 
 AC_ARG_WITH(pam, [  --with-pam              use PAM if present (see PAM.txt before you try this)])
 AC_ARG_WITH(kthread, [  --with-kthread          use kernel threads (on FreeBSD) (not recommended yet)])
 
@@ -26,37 +34,40 @@ case "$host" in
        dnl BSDI 3.0 wants relocatable object modules instead of shared libs
        dnl for dlopen(), and has a wrapper script to link with shared libs.
        dnl Also has stupid non-reentrant gethostbyaddr() and friends.
        dnl BSDI 3.0 wants relocatable object modules instead of shared libs
        dnl for dlopen(), and has a wrapper script to link with shared libs.
        dnl Also has stupid non-reentrant gethostbyaddr() and friends.
-       i?86-*-bsdi*)
+       *-*-bsdi[123]*)
                test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
                SO=.mo
                AC_DEFINE(HAVE_NONREENTRANT_NETDB)
        ;;
                test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
                SO=.mo
                AC_DEFINE(HAVE_NONREENTRANT_NETDB)
        ;;
+       *-*-bsdi*)
+               AC_DEFINE(HAVE_NONREENTRANT_NETDB)
+       ;;
        dnl Digital Unix has an odd way to build for pthreads, and we can't
        dnl build pthreads programs with gcc due to header problems.
        alpha*-dec-osf*)
                test -z "$CC" && CC=cc
                PTHREAD_DEFS=-pthread
        dnl Digital Unix has an odd way to build for pthreads, and we can't
        dnl build pthreads programs with gcc due to header problems.
        alpha*-dec-osf*)
                test -z "$CC" && CC=cc
                PTHREAD_DEFS=-pthread
-               SERVER_LDFLAGS=-pthread
+               PTHREAD_LIBS=-pthread
                check_pthread=no
        ;;
        dnl FreeBSD is similar to Digital UNIX:
        *-*-freebsd*)
                if test "$with_kthread" = yes; then
                check_pthread=no
        ;;
        dnl FreeBSD is similar to Digital UNIX:
        *-*-freebsd*)
                if test "$with_kthread" = yes; then
-                       SERVER_LDFLAGS=-kthread
+                       PTHREAD_LIBS=-kthread
                else
                else
-                       SERVER_LDFLAGS=-pthread
+                       PTHREAD_LIBS=-pthread
                fi
                check_pthread=no
                PTHREAD_DEFS=-D_THREAD_SAFE
        ;;
        *-*-openbsd*)
                fi
                check_pthread=no
                PTHREAD_DEFS=-D_THREAD_SAFE
        ;;
        *-*-openbsd*)
-               SERVER_LDFLAGS=-pthread
+               PTHREAD_LIBS=-pthread
                check_pthread=no
                PTHREAD_DEFS=-pthread
                LINK_SHARED="ld -x -Bshareable"
        ;;
                check_pthread=no
                PTHREAD_DEFS=-pthread
                LINK_SHARED="ld -x -Bshareable"
        ;;
-       *-*-cygwin32)
-               SUFFIX=.exe
+       *-*-solaris*)
+               PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
        ;;
 esac
 
        ;;
 esac
 
@@ -65,14 +76,20 @@ AC_PROG_CC
 
 dnl Set up system-dependent compiler flags.
 if test "$GCC" = yes; then
 
 dnl Set up system-dependent compiler flags.
 if test "$GCC" = yes; then
-       CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
        case "$host" in
        case "$host" in
-               i?86-*-bsdi*)
+               *-*-bsdi[123]*)
+                       CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
                ;;
                mips*-sgi-irix*)
                ;;
                mips*-sgi-irix*)
+                       CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
+                       PICFLAGS=-fPIC
+               ;;
+               *-*-solaris*)
+                       CFLAGS="$CFLAGS -Wall -Wno-char-subscripts"
                        PICFLAGS=-fPIC
                ;;
                *)
                        PICFLAGS=-fPIC
                ;;
                *)
+                       CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
                        SERVER_LDFLAGS="$SERVER_LDFLAGS -rdynamic"
                        PICFLAGS=-fPIC
                ;;
                        SERVER_LDFLAGS="$SERVER_LDFLAGS -rdynamic"
                        PICFLAGS=-fPIC
                ;;
@@ -83,6 +100,9 @@ AC_PROG_INSTALL
 missing_dir=`cd $ac_aux_dir && pwd`
 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
 
 missing_dir=`cd $ac_aux_dir && pwd`
 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
 
+dnl Checks for system services.
+AC_EXEEXT
+
 dnl Checks for libraries.
 
 dnl libdl, libgdbm, and libcrypt are only used in the server, so the
 dnl Checks for libraries.
 
 dnl libdl, libgdbm, and libcrypt are only used in the server, so the
@@ -90,13 +110,22 @@ dnl Makefile only passes $(LIBS) to that target. If other programs start
 dnl requiring additional libraries, we'll have to use other variables, as is
 dnl done with curses.
 
 dnl requiring additional libraries, we'll have to use other variables, as is
 dnl done with curses.
 
-dnl We want to test for crypt() and dlopen() in libc before checking for
-dnl -lcrypt and -ldl, because some systems (like Irix) have both.
-AC_CHECK_FUNCS(crypt dlopen)
+dnl We want to test for the following in libc before checking for their
+dnl respective libraries, because some systems (like Irix) have both, and the
+dnl non-libc versions may be broken.
+AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
+
+if test "$ac_cv_func_gethostbyname" = no; then
+       AC_CHECK_LIB(nsl, gethostbyname, NETLIBS="-lnsl $NETLIBS")
+fi
+
+if test "$ac_cv_func_connect" = no; then
+       AC_CHECK_LIB(socket, connect, NETLIBS="-lsocket $NETLIBS",, $NETLIBS)
+fi
 
 if test "$ac_cv_func_dlopen" = no; then
         AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
 
 if test "$ac_cv_func_dlopen" = no; then
         AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
-               chkpwd_LIBS=-ldl])
+               test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
 fi
 
 dnl Determine the system's authentication capabilities, if autologin is
 fi
 
 dnl Determine the system's authentication capabilities, if autologin is
@@ -111,9 +140,15 @@ if test "$enable_autologin" != no; then
                test "$enable_chkpwd" != no && LIBS=$save_LIBS
        fi
        if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
                test "$enable_chkpwd" != no && LIBS=$save_LIBS
        fi
        if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
-               AC_CHECK_LIB(shadow, getspnam)
+               save_LIBS=$LIBS
+               AC_SEARCH_LIBS(getspnam, shadow, [
+                       if test "$ac_cv_search_getspnam" = -lshadow; then
+                               chkpwd_LIBS="-lshadow $chkpwd_LIBS"
+                       fi])
+               test "$enable_chkpwd" != no && LIBS=$save_LIBS
                if test "$ac_cv_func_crypt" = no; then
                if test "$ac_cv_func_crypt" = no; then
-                       AC_CHECK_LIB(crypt, crypt, [chkpwd_LIBS=-lcrypt
+                       AC_CHECK_LIB(crypt, crypt, [
+                               chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
                                test "$enable_chkpwd" = no && \
                                        LIBS="-lcrypt $LIBS"])
                fi
                                test "$enable_chkpwd" = no && \
                                        LIBS="-lcrypt $LIBS"])
                fi
@@ -130,20 +165,25 @@ if test "$enable_autologin" != no; then
 fi
 
 test -f /usr/local/lib/libgdbm.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
 fi
 
 test -f /usr/local/lib/libgdbm.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
-AC_CHECK_LIB(gdbm, gdbm_open)
+AC_CHECK_LIB(gdbm, gdbm_open, GDBM="$GDBM -lgdbm")
+
+test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
+AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
 
 save_LIBS=$LIBS
 
 save_LIBS=$LIBS
-AC_CHECK_LIB(termcap, tgetent, [LIBS="$LIBS -ltermcap"
-       CURSES=-ltermcap])
-AC_CHECK_LIB(curses, initscr, CURSES="-lcurses $CURSES", [
-       AC_CHECK_LIB(ncurses, initscr, CURSES="-lncurses")])
+LIBS=$CURSES
+AC_SEARCH_LIBS(tgetent, [curses termcap])
+AC_SEARCH_LIBS(initscr, [curses ncurses])
+CURSES=$LIBS
 LIBS=$save_LIBS
 
 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
 dnl which the -pthread flag takes care of this.)
 if test "$check_pthread" != no; then
 LIBS=$save_LIBS
 
 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
 dnl which the -pthread flag takes care of this.)
 if test "$check_pthread" != no; then
-       AC_CHECK_LIB(pthread, pthread_create)
-       AC_CHECK_LIB(pthreads, pthread_create)
+       AC_CHECK_LIB(pthread, pthread_create,
+               PTHREAD_LIBS="-lpthread $PTHREAD_LIBS")
+       AC_CHECK_LIB(pthreads, pthread_create,
+               PTHREAD_LIBS="-lpthreads $PTHREAD_LIBS")
 fi
 
 dnl Checks for header files.
 fi
 
 dnl Checks for header files.
@@ -151,7 +191,7 @@ AC_HEADER_DIRENT
 AC_HEADER_STDC
 AC_HEADER_SYS_WAIT
 test -f /usr/local/include/gdbm.h && CPPFLAGS="$CPPFLAGS -I/usr/local/include"
 AC_HEADER_STDC
 AC_HEADER_SYS_WAIT
 test -f /usr/local/include/gdbm.h && CPPFLAGS="$CPPFLAGS -I/usr/local/include"
-AC_CHECK_HEADERS(curses.h fcntl.h limits.h termios.h strings.h sys/ioctl.h sys/select.h sys/time.h syslog.h unistd.h gdbm.h utmp.h paths.h)
+AC_CHECK_HEADERS(curses.h fcntl.h limits.h termios.h strings.h sys/ioctl.h sys/select.h sys/time.h syslog.h unistd.h gdbm.h utmp.h utmpx.h paths.h)
 
 dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
 dnl include pthread.h:
 
 dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
 dnl include pthread.h:
@@ -168,14 +208,16 @@ AC_HEADER_TIME
 AC_STRUCT_TM
 
 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
 AC_STRUCT_TM
 
 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
-[AC_TRY_COMPILE([#include <utmp.h>], [struct utmp ut; ut.ut_type;],
+[AC_TRY_COMPILE([#include <sys/types.h>
+#include <utmp.h>], [struct utmp ut; ut.ut_type;],
 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
 if test $ac_cv_struct_ut_type = yes; then
        AC_DEFINE(HAVE_UT_TYPE)
 fi
 
 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
 if test $ac_cv_struct_ut_type = yes; then
        AC_DEFINE(HAVE_UT_TYPE)
 fi
 
 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
-[AC_TRY_COMPILE([#include <utmp.h>], [struct utmp ut; ut.ut_host;],
+[AC_TRY_COMPILE([#include <sys/types.h>
+#include <utmp.h>], [struct utmp ut; ut.ut_host;],
 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
 if test $ac_cv_struct_ut_host = yes; then
        AC_DEFINE(HAVE_UT_HOST)
 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
 if test $ac_cv_struct_ut_host = yes; then
        AC_DEFINE(HAVE_UT_HOST)
@@ -186,12 +228,14 @@ AC_FUNC_GETPGRP
 AC_PROG_GCC_TRADITIONAL
 AC_TYPE_SIGNAL
 AC_FUNC_VPRINTF
 AC_PROG_GCC_TRADITIONAL
 AC_TYPE_SIGNAL
 AC_FUNC_VPRINTF
-AC_CHECK_FUNCS(getspnam mkdir mkfifo mktime rmdir select socket strerror)
+AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror)
 
 dnl Now check for pthreads -- set up variables so that the compiler will be run
 dnl with proper flags for pthread programs
 save_LDFLAGS=$LDFLAGS
 LDFLAGS="$LDFLAGS $SERVER_LDFLAGS"
 
 dnl Now check for pthreads -- set up variables so that the compiler will be run
 dnl with proper flags for pthread programs
 save_LDFLAGS=$LDFLAGS
 LDFLAGS="$LDFLAGS $SERVER_LDFLAGS"
+save_LIBS=$LIBS
+LIBS="$PTHREAD_LIBS $LIBS"
 
 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
 dnl we need to include pthread.h
 
 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
 dnl we need to include pthread.h
@@ -229,10 +273,22 @@ AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
 if test "$ac_cv_func_pthread_create" = yes; then
        TARGETS="client server utils serv_modules"
 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
 if test "$ac_cv_func_pthread_create" = yes; then
        TARGETS="client server utils serv_modules"
+       if test "x$enable_threaded_client" != xno; then
+               AC_DEFINE(THREADED_CLIENT)
+               CLIENT_PTLIBS=$PTHREAD_LIBS
+               CL_LIBOBJS='$(LIBOBJS:.o=.ro)'
+               CX=.ro
+       fi
+fi
+
+if test "x$CX" != x.ro; then
+       CL_LIBOBJS='$(LIBOBJS)'
+       CX=.o
 fi
 
 dnl Now restore the old ldflags so we don't pass the wrong stuff to makefile
 LDFLAGS=$save_LDFLAGS
 fi
 
 dnl Now restore the old ldflags so we don't pass the wrong stuff to makefile
 LDFLAGS=$save_LDFLAGS
+LIBS=$save_LIBS
 
 AC_REPLACE_FUNCS(snprintf getutline)
 
 
 AC_REPLACE_FUNCS(snprintf getutline)
 
@@ -241,12 +297,19 @@ AC_SUBST(AUTH)
 AC_SUBST(SO)
 AC_SUBST(CHKPWD)
 AC_SUBST(CURSES)
 AC_SUBST(SO)
 AC_SUBST(CHKPWD)
 AC_SUBST(CURSES)
+AC_SUBST(GDBM)
+AC_SUBST(RESOLV)
+AC_SUBST(NETLIBS)
 AC_SUBST(chkpwd_LIBS)
 AC_SUBST(TARGETS)
 AC_SUBST(SERVER_LDFLAGS)
 AC_SUBST(chkpwd_LIBS)
 AC_SUBST(TARGETS)
 AC_SUBST(SERVER_LDFLAGS)
+AC_SUBST(SERV_ICQ)
 AC_SUBST(PICFLAGS)
 AC_SUBST(LINK_SHARED)
 AC_SUBST(PICFLAGS)
 AC_SUBST(LINK_SHARED)
-AC_SUBST(SUFFIX)
 AC_SUBST(PTHREAD_DEFS)
 AC_SUBST(PTHREAD_DEFS)
+AC_SUBST(PTHREAD_LIBS)
+AC_SUBST(CLIENT_PTLIBS)
+AC_SUBST(CL_LIBOBJS)
+AC_SUBST(CX)
 AC_CONFIG_HEADER(sysdep.h)
 AC_OUTPUT(Makefile weekly)
 AC_CONFIG_HEADER(sysdep.h)
 AC_OUTPUT(Makefile weekly)