]> granicus.if.org Git - shadow/blobdiff - configure.in
[svn-upgrade] Integrating new upstream version, shadow (4.0.14)
[shadow] / configure.in
index aea7d55736264b4436f46a4a25ffcf969c9d05c4..de9b27e38c3280206760e36d62fcb969b19e6241 100644 (file)
@@ -1,24 +1,24 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT(lib/dialchk.c)
-AM_INIT_AUTOMAKE(shadow, 20000826)
-AM_CONFIG_HEADER(config.h)
+AC_INIT
+AM_INIT_AUTOMAKE(shadow, 4.0.14)
+AC_CONFIG_HEADERS([config.h])
 
 dnl Some hacks...
 test "$prefix" = "NONE" && prefix="/usr"
 test "$prefix" = "/usr" && exec_prefix=""
-test "$CFLAGS" = "" && CFLAGS="-O2 -Wall"
-test "$LDFLAGS" = "" && LDFLAGS="-s"
 
-ALL_LINGUAS="el fr pl sv"
+AC_GNU_SOURCE
+
+AM_DISABLE_SHARED
+AM_ENABLE_STATIC
+
+AM_MAINTAINER_MODE
 
 dnl Checks for programs.
 AC_PROG_CC
 AC_ISC_POSIX
-dnl AC_PROG_INSTALL
 AC_PROG_LN_S
-dnl AC_PROG_MAKE_SET
 AC_PROG_YACC
-dnl AC_ARG_PROGRAM
 AM_C_PROTOTYPES
 AM_PROG_LIBTOOL
 
@@ -28,10 +28,16 @@ dnl Checks for header files.
 AC_HEADER_DIRENT
 AC_HEADER_STDC
 AC_HEADER_SYS_WAIT
-AC_CHECK_HEADERS(fcntl.h limits.h unistd.h sys/time.h utmp.h utmpx.h)
-AC_CHECK_HEADERS(termios.h termio.h sgtty.h sys/ioctl.h syslog.h)
-AC_CHECK_HEADERS(paths.h usersec.h utime.h ulimit.h sys/resource.h)
-AC_CHECK_HEADERS(gshadow.h shadow.h lastlog.h rpc/key_prot.h)
+
+AC_CHECK_HEADERS(errno.h fcntl.h limits.h unistd.h sys/time.h utmp.h \
+       utmpx.h termios.h termio.h sgtty.h sys/ioctl.h syslog.h paths.h \
+       utime.h ulimit.h sys/resource.h gshadow.h shadow.h lastlog.h \
+       locale.h rpc/key_prot.h)
+
+AC_CHECK_FUNCS(a64l fchmod fchown fsync getgroups gethostname getspnam \
+       gettimeofday getusershell getutent initgroups lchown lckpwdf lstat \
+       memcpy memset setgroups sigaction strchr updwtmp updwtmpx)
+AC_SYS_LARGEFILE
 
 dnl Checks for typedefs, structures, and compiler characteristics.
 AC_C_CONST
@@ -39,81 +45,65 @@ AC_TYPE_UID_T
 AC_TYPE_OFF_T
 AC_TYPE_PID_T
 AC_TYPE_MODE_T
-AC_STRUCT_ST_RDEV
 AC_HEADER_STAT
+AC_CHECK_MEMBERS([struct stat.st_rdev])
 AC_HEADER_TIME
 AC_STRUCT_TM
 
-AC_CACHE_CHECK(for pw_age in struct passwd,
-ac_cv_struct_passwd_pw_age, AC_TRY_COMPILE([#include <pwd.h>],
-[ struct passwd pw;  pw.pw_age = ""; ],
-ac_cv_struct_passwd_pw_age=yes, ac_cv_struct_passwd_pw_age=no))
-
-if test "$ac_cv_struct_passwd_pw_age" = "yes"; then
-       AC_DEFINE(ATT_AGE)
-fi
-
-AC_CACHE_CHECK(for pw_comment in struct passwd,
-ac_cv_struct_passwd_pw_comment, AC_TRY_COMPILE([#include <pwd.h>],
-[ struct passwd pw;  pw.pw_comment = ""; ],
-ac_cv_struct_passwd_pw_comment=yes, ac_cv_struct_passwd_pw_comment=no))
-
-if test "$ac_cv_struct_passwd_pw_comment" = "yes"; then
-       AC_DEFINE(ATT_COMMENT)
-fi
-
-AC_CACHE_CHECK(for pw_quota in struct passwd,
-ac_cv_struct_passwd_pw_quota, AC_TRY_COMPILE([#include <pwd.h>],
-[ struct passwd pw;  pw.pw_quota = ""; ],
-ac_cv_struct_passwd_pw_quota=yes, ac_cv_struct_passwd_pw_quota=no))
-
-if test "$ac_cv_struct_passwd_pw_quota" = "yes"; then
-       AC_DEFINE(BSD_QUOTA)
-fi
-
 if test "$ac_cv_header_utmp_h" = "yes"; then
        AC_CACHE_CHECK(for ut_host in struct utmp,
-       ac_cv_struct_utmp_ut_host, AC_TRY_COMPILE([#include <utmp.h>],
-       [ struct utmp ut;  char *cp = ut.ut_host; ],
-       ac_cv_struct_utmp_ut_host=yes, ac_cv_struct_utmp_ut_host=no))
+               ac_cv_struct_utmp_ut_host,
+               AC_COMPILE_IFELSE(
+                       [AC_LANG_PROGRAM([#include <utmp.h>],
+                               [struct utmp ut; char *cp = ut.ut_host;]
+                       )],
+                       [ac_cv_struct_utmp_ut_host=yes],
+                       [ac_cv_struct_utmp_ut_host=no]
+               )
+       )
 
        if test "$ac_cv_struct_utmp_ut_host" = "yes"; then
-               AC_DEFINE(UT_HOST)
+               AC_DEFINE(UT_HOST, 1, [Define if you have ut_host in struct utmp.])
        fi
 
        AC_CACHE_CHECK(for ut_user in struct utmp,
-       ac_cv_struct_utmp_ut_user, AC_TRY_COMPILE([#include <utmp.h>],
-       [ struct utmp ut;  char *cp = ut.ut_user; ],
-       ac_cv_struct_utmp_ut_user=yes, ac_cv_struct_utmp_ut_user=no))
+               ac_cv_struct_utmp_ut_user,
+               AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <utmp.h>],
+                               [struct utmp ut; char *cp = ut.ut_user;]
+                       )],
+                       [ac_cv_struct_utmp_ut_user=yes],
+                       [ac_cv_struct_utmp_ut_user=no]
+               )
+       )
 
        if test "$ac_cv_struct_utmp_ut_user" = "no"; then
-               AC_DEFINE(ut_user, ut_name)
+               AC_DEFINE(ut_user, ut_name,
+                       [Define to ut_name if struct utmp has ut_name (not ut_user).])
        fi
 fi
 
 if test "$ac_cv_header_lastlog_h" = "yes"; then
        AC_CACHE_CHECK(for ll_host in struct lastlog,
-       ac_cv_struct_lastlog_ll_host, AC_TRY_COMPILE([#include <lastlog.h>],
-       [ struct lastlog ll;  char *cp = ll.ll_host; ],
-       ac_cv_struct_lastlog_ll_host=yes, ac_cv_struct_lastlog_ll_host=no))
+               ac_cv_struct_lastlog_ll_host,
+               AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <lastlog.h>],
+                                       [struct lastlog ll; char *cp = ll.ll_host;]
+                               )],
+                       [ac_cv_struct_lastlog_ll_host=yes],
+                       [ac_cv_struct_lastlog_ll_host=no]
+               )
+       )
 
        if test "$ac_cv_struct_lastlog_ll_host" = "yes"; then
-               AC_DEFINE(HAVE_LL_HOST)
+               AC_DEFINE(HAVE_LL_HOST, 1,
+                       [Define if struct lastlog has ll_host])
        fi
 fi
 
 dnl Checks for library functions.
 AC_TYPE_GETGROUPS
-AC_PROG_GCC_TRADITIONAL
 AC_TYPE_SIGNAL
 AC_FUNC_UTIME_NULL
 AC_FUNC_STRFTIME
-dnl Disabled for now, strtoday.c has problems with year 2000 or later
-dnl AC_CHECK_FUNCS(strptime)
-AC_CHECK_FUNCS(a64l fchmod fchown fsync getgroups gethostname getspnam)
-AC_CHECK_FUNCS(gettimeofday getusershell getutent initgroups lchown lckpwdf)
-AC_CHECK_FUNCS(lstat memcpy memset setgroups sigaction strchr updwtmp updwtmpx)
-
 AC_REPLACE_FUNCS(mkdir putgrent putpwent putspent rename rmdir)
 AC_REPLACE_FUNCS(sgetgrent sgetpwent sgetspent)
 AC_REPLACE_FUNCS(snprintf strcasecmp strdup strerror strstr)
@@ -122,190 +112,261 @@ AC_CHECK_FUNC(setpgrp)
 AC_FUNC_SETPGRP
 
 if test "$ac_cv_header_shadow_h" = "yes"; then
-AC_CACHE_CHECK(for working shadow group support,
-ac_cv_libc_shadowgrp, AC_TRY_RUN(
-[
-#include <shadow.h>
-main()
-{
-       struct sgrp *sg = sgetsgent("test:x::");
-       /* NYS libc on Red Hat 3.0.3 has broken shadow group support */
-       return !sg || !sg->sg_adm || !sg->sg_mem;
-}
-],
-ac_cv_libc_shadowgrp=yes,ac_cv_libc_shadowgrp=no,ac_cv_libc_shadowgrp=no))
-
-if test "$ac_cv_libc_shadowgrp" = "yes"; then
-       AC_DEFINE(HAVE_SHADOWGRP)
-fi
+       AC_CACHE_CHECK(for working shadow group support,
+               ac_cv_libc_shadowgrp,
+               AC_RUN_IFELSE([AC_LANG_SOURCE([
+                               #include <shadow.h>
+                               main()
+                               {
+                                       struct sgrp *sg = sgetsgent("test:x::");
+                                       /* NYS libc on Red Hat 3.0.3 has broken shadow group support */
+                                       return !sg || !sg->sg_adm || !sg->sg_mem;
+                               }]
+                       )],
+                       [ac_cv_libc_shadowgrp=yes],
+                       [ac_cv_libc_shadowgrp=no],
+                       [ac_cv_libc_shadowgrp=no]
+               )
+       )
+
+       if test "$ac_cv_libc_shadowgrp" = "yes"; then
+               AC_DEFINE(HAVE_SHADOWGRP, 1, [Have working shadow group support in libc])
+       fi
 fi
 
-AC_MSG_CHECKING(location of shared mail directory)
-for maildir in /var/spool/mail /var/mail /usr/spool/mail /usr/mail NONE; do
-       if test "$maildir" = "NONE"; then
-               AC_MSG_RESULT(None)
-       elif test -d $maildir; then
-               AC_DEFINE_UNQUOTED(MAIL_SPOOL_DIR, "$maildir")
-               AC_MSG_RESULT($maildir)
+AC_CACHE_CHECK([location of shared mail directory], shadow_cv_maildir,
+[for shadow_cv_maildir in /var/mail /var/spool/mail /usr/spool/mail /usr/mail none; do
+       if test -d $shadow_cv_maildir; then
                break
        fi
-done
-
-AC_MSG_CHECKING(location of user mail file)
-for mailfile in Mailbox mailbox Mail mail .mail NONE; do
-       if test "$mailfile" = "NONE"; then
-               AC_MSG_RESULT(None)
-       elif test -f $HOME/$mailfile; then
-               AC_DEFINE_UNQUOTED(MAIL_SPOOL_FILE, "$mailfile")
-               AC_MSG_RESULT($mailfile)
+done])
+if test $shadow_cv_maildir != none; then
+       AC_DEFINE_UNQUOTED(MAIL_SPOOL_DIR, "$shadow_cv_maildir",
+               [Location of system mail spool directory.])
+fi
+
+AC_CACHE_CHECK([location of user mail file], shadow_cv_mailfile,
+[for shadow_cv_mailfile in Mailbox mailbox Mail mail .mail none; do
+       if test -f $HOME/$shadow_cv_mailfile; then
                break
        fi
-done
-
-AC_MSG_CHECKING(location of utmp)
-for utmpdir in /var/run /var/adm /usr/adm /etc NONE; do
-       if test "$utmpdir" = "NONE"; then
-               AC_MSG_WARN(utmp file not found)
-       elif test -f $utmpdir/utmp; then
-               AC_DEFINE_UNQUOTED(_UTMP_FILE, "$utmpdir/utmp")
-               AC_MSG_RESULT($utmpdir)
+done])
+if test $shadow_cv_mailfile != none; then
+       AC_DEFINE_UNQUOTED(MAIL_SPOOL_FILE, "$shadow_cv_mailfile",
+               [Name of user's mail spool file if stored in user's home directory.])
+fi
+
+AC_CACHE_CHECK([location of utmp], shadow_cv_utmpdir,
+[for shadow_cv_utmpdir in /var/run /var/adm /usr/adm /etc none; do
+       if test -f $shadow_cv_utmpdir/utmp; then
                break
        fi
-done
-
-AC_MSG_CHECKING(location of faillog/lastlog/wtmp)
-for logdir in /var/log /var/adm /usr/adm /etc; do
-       if test -d $logdir; then
-               AC_DEFINE_UNQUOTED(_WTMP_FILE, "$logdir/wtmp")
-               AC_DEFINE_UNQUOTED(LASTLOG_FILE, "$logdir/lastlog")
-               AC_DEFINE_UNQUOTED(FAILLOG_FILE, "$logdir/faillog")
-               AC_MSG_RESULT($logdir)
+done])
+if test "$shadow_cv_utmpdir" = "none"; then
+       AC_MSG_WARN(utmp file not found)
+fi
+AC_DEFINE_UNQUOTED(_UTMP_FILE, "$shadow_cv_utmpdir/utmp",
+       [Path for utmp file.])
+
+AC_CACHE_CHECK([location of faillog/lastlog/wtmp], shadow_cv_logdir,
+[for shadow_cv_logdir in /var/log /var/adm /usr/adm /etc; do
+       if test -d $shadow_cv_logdir; then
                break
        fi
-done
-
-AC_MSG_CHECKING(location of the passwd program)
-if test -f /usr/bin/passwd; then
-       passwd_dir=/usr/bin
+done])
+AC_DEFINE_UNQUOTED(_WTMP_FILE, "$shadow_cv_logdir/wtmp",
+       [Path for wtmp file.])
+AC_DEFINE_UNQUOTED(LASTLOG_FILE, "$shadow_cv_logdir/lastlog",
+       [Path for lastlog file.])
+AC_DEFINE_UNQUOTED(FAILLOG_FILE, "$shadow_cv_logdir/faillog",
+       [Path for faillog file.])
+
+AC_CACHE_CHECK([location of the passwd program], shadow_cv_passwd_dir,
+[if test -f /usr/bin/passwd; then
+       shadow_cv_passwd_dir=/usr/bin
 else
-       passwd_dir=/bin
-fi
-AC_DEFINE_UNQUOTED(PASSWD_PROGRAM, "$passwd_dir/passwd")
-AC_MSG_RESULT($passwd_dir)
+       shadow_cv_passwd_dir=/bin
+fi])
+AC_DEFINE_UNQUOTED(PASSWD_PROGRAM, "$shadow_cv_passwd_dir/passwd",
+       [Path to passwd program.])
 
 dnl XXX - quick hack, should disappear before anyone notices :).
-AC_DEFINE(SHADOWPWD)
-AC_DEFINE(USG)
-AC_DEFINE(AGING)
-AC_DEFINE(USE_SYSLOG)
-AC_DEFINE(RLOGIN)
-AC_DEFINE(RUSEROK, 0)
-AC_DEFINE(LOGIN_ACCESS)
-AC_DEFINE(SU_ACCESS)
+AC_DEFINE(USE_SYSLOG, 1, [Define to use syslog().])
+AC_DEFINE(RLOGIN, 1, [Define if login should support the -r flag for rlogind.])
+AC_DEFINE(RUSEROK, 0, [Define to the ruserok() "success" return value (0 or 1).])
 
 dnl Use our own version of getpass(), which handles long passwords
 dnl (unlike many systems which have a limit of 8 characters), and can
 dnl be interrupted with Ctrl-C (unlike Linux libc).
-AC_DEFINE(getpass, libshadow_getpass)
-
-AC_ARG_ENABLE(desrpc, [  --enable-desrpc         try to use secure RPC in login (default if found)])
-dnl AC_ARG_ENABLE(md5crypt, [  --enable-md5crypt       include MD5-compatible crypt function])
-AC_ARG_ENABLE(shadowgrp, [  --enable-shadowgrp      enable shadow group support [default=yes]])
-
-AC_ARG_WITH(libcrack, [  --with-libcrack         try to use libcrack (default if found)])
-AC_ARG_WITH(libcrypt, [  --with-libcrypt         try to use libcrypt (default if found)])
-AC_ARG_WITH(libopie, [  --with-libopie          use libopie for OPIE support])
-AC_ARG_WITH(libpam, [  --with-libpam           use libpam for PAM support])
-AC_ARG_WITH(libskey, [  --with-libskey          use libskey for S/Key support])
-AC_ARG_WITH(libtcfs, [  --with-libtcfs          use libtcfs for TCFS support])
+AC_DEFINE(getpass, libshadow_getpass,
+       [Define to libshadow_getpass to use our own version of getpass().])
+
+AC_ARG_ENABLE(shadowgrp,
+       [AC_HELP_STRING([--enable-shadowgrp], [enable shadow group support @<:@default=yes@:>@])],
+       [case "${enableval}" in
+        yes) enable_shadowgrp="yes" ;;
+         no) enable_shadowgrp="no" ;;
+          *) AC_MSG_ERROR(bad value ${enableval} for --enable-shadowgrp) ;;
+        esac],
+       [enable_shadowgrp="yes"]
+)
+
+AC_ARG_ENABLE(man,
+       [AC_HELP_STRING([--enable-man],
+               [regenerate roff man pages from Docbook @<:@default=no@:>@])],
+       [enable_man=yes],
+        [enable_man=no]
+)
+
+AC_ARG_WITH(audit, 
+       [AC_HELP_STRING([--with-audit], [use auditing support @<:@default=yes if found@:>@])],
+       [with_audit=$withval], [with_audit=yes])
+AC_ARG_WITH(libpam,
+       [AC_HELP_STRING([--with-libpam], [use libpam for PAM support @<:@default=yes if found@:>@])],
+       [with_libpam=$withval], [with_libpam=yes])
+AC_ARG_WITH(selinux,
+       [AC_HELP_STRING([--with-selinux], [use SELinux support @<:@default=autodetect@:>@])],
+       [with_selinux=$withval], [with_selinux=yes])
+AC_ARG_WITH(skey,
+       [AC_HELP_STRING([--with-skey], [use S/Key support @<:@default=no@:>@])],
+       [with_skey=$withval], [with_skey=no])
+AC_ARG_WITH(libcrack,
+       [AC_HELP_STRING([--with-libcrack], [use libcrack @<:@default=yes if found and if PAM not enabled@:>@])],
+       [with_libcrack=$withval], [with_libcrack=no])
 
 dnl Check for some functions in libc first, only if not found check for
 dnl other libraries.  This should prevent linking libnsl if not really
 dnl needed (Linux glibc, Irix), but still link it if needed (Solaris).
 
-AC_CHECK_FUNC(inet_ntoa, [], AC_CHECK_LIB(inet, inet_ntoa))
-AC_CHECK_FUNC(socket, [], AC_CHECK_LIB(socket, socket))
-AC_CHECK_FUNC(gethostbyname, [], AC_CHECK_LIB(nsl, gethostbyname))
-
-dnl XXX - getsecretkey() causes login to hang for 5 minutes on at least
-dnl one RH 4.0 system.  Use --disable-desrpc if you have this problem.
-dnl Reported by Mohan Khurana <mohan@stealth.net>.
+AC_SEARCH_LIBS(inet_ntoa, inet)
+AC_SEARCH_LIBS(socket, socket)
+AC_SEARCH_LIBS(gethostbyname, nsl)
 
-if test "$enable_desrpc" != "no" -a "$ac_cv_header_rpc_key_prot_h" = "yes" ; then
-       AC_CHECK_FUNC(getsecretkey, AC_DEFINE(DES_RPC),
-               AC_CHECK_LIB(rpcsvc, getsecretkey, AC_DEFINE(DES_RPC)))
+if test "$enable_shadowgrp" = "yes"; then
+       AC_DEFINE(SHADOWGRP, 1, [Define to support the shadow group file.])
 fi
 
-if test "$enable_shadowgrp" != "no"; then
-       AC_DEFINE(SHADOWGRP)
-fi
+if test "$enable_man" = "yes"; then
+       dnl
+       dnl Check for xsltproc
+       dnl
+       AC_PATH_PROG([XSLTPROC], [xsltproc])
+       if test -z "$XSLTPROC"; then
+               enable_man=no
+       fi
 
-AC_SUBST(LIBCRYPT)
-if test "$with_libcrypt" != "no"; then
-       AC_CHECK_LIB(crypt, crypt, [AC_DEFINE(HAVE_LIBCRYPT) LIBCRYPT=-lcrypt])
+       dnl check for DocBook DTD and stylesheets in the local catalog.
+       JH_CHECK_XML_CATALOG([-//OASIS//DTD DocBook XML V4.1.2//EN],
+               [DocBook XML DTD V4.1.2], [], enable_man=no)
+       JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
+               [DocBook XSL Stylesheets], [], enable_man=no)
 fi
+AM_CONDITIONAL(ENABLE_REGENERATE_MAN, test x$enable_man != xno)
 
-if test "$enable_md5crypt" = "yes"; then
-       LIBOBJS="$LIBOBJS md5.o md5crypt.o"
-       AC_DEFINE(MD5_CRYPT)
+AC_SUBST(LIBCRYPT)
+AC_CHECK_LIB(crypt, crypt, [LIBCRYPT=-lcrypt],
+       [AC_MSG_ERROR([crypt() not found])])
+
+AC_SUBST(LIBAUDIT)
+if test "$with_audit" = "yes"; then
+       AC_CHECK_HEADER(libaudit.h, [audit_header="yes"], [audit_header="no"])
+       if test "$audit_header" = "yes"; then
+               AC_CHECK_LIB(audit, audit_log_acct_message,
+                       [AC_DEFINE(WITH_AUDIT, 1, [Define if you want to enable Audit messages])
+                       LIBAUDIT="-laudit"])
+       fi
 fi
 
 AC_SUBST(LIBCRACK)
-if test "$with_libcrack" != "no"; then
+if test "$with_libcrack" = "yes"; then
        echo "checking cracklib flavour, don't be surprised by the results"
-       AC_CHECK_LIB(crack, FascistCheck, AC_DEFINE(HAVE_LIBCRACK) LIBCRACK=-lcrack)
-       AC_CHECK_LIB(crack, FascistHistory, AC_DEFINE(HAVE_LIBCRACK_HIST))
-       AC_CHECK_LIB(crack, FascistHistoryPw, AC_DEFINE(HAVE_LIBCRACK_PW))
+       AC_CHECK_LIB(crack, FascistCheck,
+               [LIBCRACK=-lcrack AC_DEFINE(HAVE_LIBCRACK, 1, [Defined if you have libcrack.])])
+       AC_CHECK_LIB(crack, FascistHistory,
+               AC_DEFINE(HAVE_LIBCRACK_HIST, 1, [Defined if you have the ts&szs cracklib.]))
+       AC_CHECK_LIB(crack, FascistHistoryPw,
+               AC_DEFINE(HAVE_LIBCRACK_PW, 1, [Defined if it includes *Pw functions.]))
 fi
 
-AC_SUBST(LIBSKEY)
-AC_SUBST(LIBMD)
-if test "$with_libskey" = "yes"; then
-       AC_CHECK_LIB(md, MD5Init, LIBMD=-lmd)
-       AC_CHECK_LIB(skey, skeychallenge, AC_DEFINE(SKEY) LIBSKEY=-lskey, , $LIBMD $LIBCRYPT)
-elif test "$with_libopie" = "yes"; then
-       AC_CHECK_LIB(opie, opiechallenge, AC_DEFINE(OPIE) LIBSKEY=-lopie, , $LIBCRYPT)
-fi
-
-AC_SUBST(LIBTCFS)
-if test "$with_libtcfs" = "yes"; then
-       AC_CHECK_LIB(tcfs, tcfs_encrypt_key, AC_DEFINE(HAVE_TCFS) AC_DEFINE(TCFS_GDBM_SUPPORT) LIBTCFS="-ltcfs -lgdbm", , -lgdbm)
+if test "$with_selinux" = "yes"; then
+       AC_CHECK_LIB(selinux, is_selinux_enabled,
+               [LIBSELINUX="-lselinux"],
+               [AC_MSG_ERROR([libselinux not found])])
+       AC_SUBST(LIBSELINUX)
+       AC_CHECK_HEADERS(selinux/selinux.h, [], [selinux/selinux.h is missing])
+       AC_DEFINE(WITH_SELINUX, 1, [Build shadow with SELinux support])
 fi
 
 AC_SUBST(LIBPAM)
 if test "$with_libpam" = "yes"; then
-       dnl AC_CHECK_LIB(pam, pam_start, AC_DEFINE(USE_PAM) LIBPAM=-lpam)
-       dnl the above doesn't work as there is no libpam.a (only .so)
-       dnl XXX - libpam_misc is probably Linux-PAM specific
-       LIBPAM="-lpam -lpam_misc -ldl"
-       AC_DEFINE(USE_PAM)
-       AC_CACHE_CHECK(whether pam_strerror needs two arguments,
-               ac_cv_pam_strerror_needs_two_args,
-               AC_TRY_COMPILE(
-                       [#include <security/pam_appl.h>],
-                       [ pam_handle_t *pamh; pam_strerror(pamh, PAM_SUCCESS); ],
-                       ac_cv_pam_strerror_needs_two_args=yes,
-                       ac_cv_pam_strerror_needs_two_args=no
-               )
+       AC_CHECK_LIB(pam, pam_start,
+               [AC_DEFINE(USE_PAM, 1, [Define to support Pluggable Authentication Modules])
+               LIBPAM="-lpam"
+               AC_CHECK_LIB(pam_misc, main,
+                       [LIBPAM="$LIBPAM -lpam_misc"],
+                       AC_MSG_ERROR(libpam_misc is missing for enable PAM support)
+               )],
+               [AC_MSG_CHECKING(use login access checking if PAM not used)
+               AC_MSG_RESULT(yes)]
        )
-       if test "$ac_cv_pam_strerror_needs_two_args" = "yes"; then
-               AC_DEFINE(PAM_STRERROR_NEEDS_TWO_ARGS)
-       fi
+       AC_MSG_CHECKING(use login and su access checking if PAM not used)
+       AC_MSG_RESULT(no)
+else
+       AC_MSG_CHECKING(use login and su access checking if PAM not used)
+       AC_DEFINE(SU_ACCESS, 1, [Define to support /etc/suauth su access control.])
+       AC_MSG_RESULT(yes)
 fi
 
-LTLIBOBJS=`echo "$LIBOBJS" | sed 's/\.o/.lo/g'`
-AC_SUBST(LTLIBOBJS)
-dnl LTALLOCA=`echo "$ALLOCA" | sed 's/\.o/.lo/g'`
-dnl AC_SUBST(LTALLOCA)
-
-AM_GNU_GETTEXT
-dnl AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl)
-
-AC_OUTPUT(libmisc/Makefile man/Makefile man/pl/Makefile
-       lib/Makefile src/Makefile Makefile
-       contrib/Makefile debian/Makefile doc/Makefile etc/Makefile
-       intl/Makefile intl/po2tbl.sed po/Makefile.in
-       etc/pam.d/Makefile old/Makefile
-       redhat/Makefile redhat/shadow-utils.spec,
-       echo timestamp > stamp-h)
+AC_SUBST(LIBSKEY)
+AC_SUBST(LIBMD)
+if test "$with_skey" = "yes"; then
+       AC_CHECK_LIB(md, MD5Init, [LIBMD=-lmd])
+       AC_CHECK_LIB(skey, skeychallenge, [LIBSKEY=-lskey],
+               [AC_MSG_ERROR([liskey missing. You can download S/Key source code from http://rsync1.it.gentoo.org/gentoo/distfiles/skey-1.1.5.tar.bz2])])
+       AC_DEFINE(SKEY, 1, [Define to support S/Key logins.])
+fi
 
+AM_GNU_GETTEXT_VERSION(0.12.1)
+AM_GNU_GETTEXT([external], [need-ngettext])
+
+AC_CONFIG_FILES([
+       Makefile
+       po/Makefile.in
+       doc/Makefile
+       man/Makefile
+       man/cs/Makefile
+       man/de/Makefile
+       man/es/Makefile
+       man/fi/Makefile
+       man/fr/Makefile
+       man/hu/Makefile
+       man/id/Makefile
+       man/it/Makefile
+       man/ja/Makefile
+       man/ko/Makefile
+       man/pl/Makefile
+       man/pt_BR/Makefile
+       man/ru/Makefile
+       man/tr/Makefile
+       man/zh_CN/Makefile
+       man/zh_TW/Makefile
+       libmisc/Makefile
+       lib/Makefile
+       src/Makefile
+       contrib/Makefile
+       etc/Makefile
+       etc/pam.d/Makefile
+       shadow.spec
+])
+AC_OUTPUT
+
+echo
+echo "shadow will be compiled with the followig feactures:"
+echo
+echo " auditing support:               $with_audit"
+echo " CrackLib support:               $with_libcrack"
+echo " PAM support:                    $with_libpam"
+echo " SELinux support:                $with_selinux"
+echo " shadow group support:           $enable_shadowgrp"
+echo " S/Key support:                  $with_skey"
+echo