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)])
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)
;;
+ *-*-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
- SERVER_LDFLAGS=-pthread
+ PTHREAD_LIBS=-pthread
check_pthread=no
;;
dnl FreeBSD is similar to Digital UNIX:
*-*-freebsd*)
if test "$with_kthread" = yes; then
- SERVER_LDFLAGS=-kthread
+ PTHREAD_LIBS=-kthread
else
- SERVER_LDFLAGS=-pthread
+ PTHREAD_LIBS=-pthread
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"
;;
- *-*-cygwin32)
- SUFFIX=.exe
+ *-*-solaris*)
+ PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
;;
esac
dnl Set up system-dependent compiler flags.
if test "$GCC" = yes; then
- CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
case "$host" in
- i?86-*-bsdi*)
+ *-*-bsdi[123]*)
+ CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
;;
mips*-sgi-irix*)
+ CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
+ PICFLAGS=-fPIC
+ ;;
+ *-*-solaris*)
+ CFLAGS="$CFLAGS -Wall -Wno-char-subscripts"
PICFLAGS=-fPIC
;;
*)
+ CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
SERVER_LDFLAGS="$SERVER_LDFLAGS -rdynamic"
PICFLAGS=-fPIC
;;
fi
AC_PROG_RANLIB
AC_PROG_INSTALL
+AC_PROG_YACC
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 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"
- chkpwd_LIBS=-ldl])
+ test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
fi
dnl Determine the system's authentication capabilities, if autologin is
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
- 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
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
-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
- 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.
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:
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_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_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"
+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
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
+LIBS=$save_LIBS
AC_REPLACE_FUNCS(snprintf getutline)
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(SERV_ICQ)
AC_SUBST(PICFLAGS)
AC_SUBST(LINK_SHARED)
-AC_SUBST(SUFFIX)
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)