+###############################################################################
+#
+# Handle the --with-configdir option
+# Help for --with-x-app-defaults option added.
+#
+###############################################################################
+
+have_configdir=yes
+with_configdir_req=unspecified
+AC_ARG_WITH(configdir,
+[ --with-configdir=DIR Where to install the data files that describe each
+ of the display modes to the GUI.
+ Default: `PREFIX/share/xscreensaver/config/'
+ --with-x-app-defaults=DIR
+ Where to install xscreensaver configuration file.
+],
+ [with_configdir="$withval"; with_configdir_req="$withval"],
+ [with_configdir=yes])
+
+if test x"$with_configdir" = xyes; then
+ HACK_CONF_DIR='${datadir}/xscreensaver/config'
+elif test x"$with_configdir" = xno; then
+ echo "error: must be yes, or a pathname: --with-configdir=$with_configdir"
+ exit 1
+else
+ # there must be a better way than this...
+ if test -z "`echo $with_configdir | sed 's@^/.*@@'`" ; then
+ # absolute path
+ HACK_CONF_DIR=$with_configdir
+ else
+ # relative path
+ HACK_CONF_DIR="\${exec_prefix}$with_configdir"
+ fi
+fi
+
+
+
+
+###############################################################################
+#
+# Check for the SGI SCREEN_SAVER server extension.
+#
+###############################################################################
+
+#have_sgi=no
+#with_sgi_req=unspecified
+#AC_ARG_WITH(sgi-ext,
+#[Except where noted, all of the --with options below can also take a
+#directory argument: for example, `--with-motif=/opt/Motif'. That would
+#cause /opt/Motif/include/ to be added to the -I list, and /opt/Motif/lib/
+#to be added to the -L list, assuming those directories exist.
+#
+#By default, support for each of these options will be built in, if the
+#relevant library routines exist. At run time, they will then be used
+#only if the X server being used supports them. Each --with option has
+#a corresponding --without option, to override building support for them
+#at all.
+#
+#Screen blanking and idle-detection options:
+#
+# --with-sgi-ext Include support for the SGI SCREEN_SAVER extension.],
+# [with_sgi="$withval"; with_sgi_req="$withval"],[with_sgi=yes])
+#
+#HANDLE_X_PATH_ARG(with_sgi, --with-sgi-ext, SGI SCREEN_SAVER)
+#
+#if test "$with_sgi" = yes; then
+# AC_CHECK_X_HEADER(X11/extensions/XScreenSaver.h,
+# [have_sgi=yes
+# AC_DEFINE(HAVE_SGI_SAVER_EXTENSION)],,
+# [#include <X11/Xlib.h>])
+#
+#elif test "$with_sgi" != no; then
+# echo "error: must be yes or no: --with-sgi-ext=$with_sgi"
+# exit 1
+#fi
+
+
+###############################################################################
+#
+# Check for the XIDLE server extension.
+#
+###############################################################################
+
+#have_xidle=no
+#with_xidle_req=unspecified
+#AC_ARG_WITH(xidle-ext,
+#[ --with-xidle-ext Include support for the XIDLE extension.],
+# [with_xidle="$withval"; with_xidle_req="$withval"],[with_xidle=yes])
+#
+#HANDLE_X_PATH_ARG(with_xidle, --with-xidle-ext, XIDLE)
+#
+#if test "$with_xidle" = yes; then
+# AC_CHECK_X_HEADER(X11/extensions/xidle.h,
+# [have_xidle=yes
+# AC_DEFINE(HAVE_XIDLE_EXTENSION)],,
+# [#include <X11/Xlib.h>])
+#elif test "$with_xidle" != no; then
+# echo "error: must be yes or no: --with-xidle-ext=$with_xidle"
+# exit 1
+#fi
+
+
+###############################################################################
+#
+# Check for the SGI-VIDEO-CONTROL server extension.
+#
+###############################################################################
+
+#have_sgivc=no
+#with_sgivc_req=unspecified
+#AC_ARG_WITH(sgivc-ext,
+#[ --with-sgivc-ext Include support for the SGI-VIDEO-CONTROL extension.],
+# [with_sgivc="$withval"; with_sgivc_req="$withval"],[with_sgivc=yes])
+#
+#HANDLE_X_PATH_ARG(with_sgivc, --with-sgivc-ext, SGI-VIDEO-CONTROL)
+#
+#if test "$with_sgivc" = yes; then
+#
+# # first check for XSGIvc.h
+# AC_CHECK_X_HEADER(X11/extensions/XSGIvc.h, [have_sgivc=yes],,
+# [#include <X11/Xlib.h>])
+#
+# # if that succeeded, then check for the -lXsgivc
+# if test "$have_sgivc" = yes; then
+# have_sgivc=no
+# AC_CHECK_X_LIB(Xsgivc, XSGIvcQueryGammaMap,
+# [have_sgivc=yes; SAVER_LIBS="$SAVER_LIBS -lXsgivc"], [true],
+# -lXext -lX11)
+# fi
+#
+# # if that succeeded, then we've really got it.
+# if test "$have_sgivc" = yes; then
+# AC_DEFINE(HAVE_SGI_VC_EXTENSION)
+# fi
+#
+#elif test "$with_sgivc" != no; then
+# echo "error: must be yes or no: --with-sgivc-ext=$with_sgivc"
+# exit 1
+#fi
+
+
+###############################################################################
+#
+# Check for the DPMS server extension.
+#
+###############################################################################
+
+have_dpms=no
+with_dpms_req=unspecified
+AC_ARG_WITH(dpms-ext,
+[ --with-dpms-ext Include support for the DPMS extension.],
+ [with_dpms="$withval"; with_dpms_req="$withval"],[with_dpms=yes])
+
+HANDLE_X_PATH_ARG(with_dpms, --with-dpms-ext, DPMS)
+
+if test "$with_dpms" = yes; then
+
+ # first check for dpms.h
+ AC_CHECK_X_HEADER(X11/extensions/dpms.h, [have_dpms=yes],,
+ [#include <X11/Xlib.h>
+ #include <X11/Xmd.h>])
+
+ # if that succeeded, then check for the DPMS code in the libraries
+ if test "$have_dpms" = yes; then
+
+ # first look in -lXext (this is where it is with XFree86 4.0)
+ have_dpms=no
+ AC_CHECK_X_LIB(Xext, DPMSInfo, [have_dpms=yes], [true], -lXext -lX11)
+
+ # if that failed, look in -lXdpms (this is where it was in XFree86 3.x)
+ if test "$have_dpms" = no; then
+ AC_CHECK_X_LIB(Xdpms, DPMSInfo,
+ [have_dpms=yes; XDPMS_LIBS="-lXdpms"], [true],
+ -lXext -lX11)
+ fi
+ fi
+
+
+ # if that succeeded, then we've really got it.
+ if test "$have_dpms" = yes; then
+ AC_DEFINE(HAVE_DPMS_EXTENSION)
+ fi
+
+elif test "$with_dpms" != no; then
+ echo "error: must be yes or no: --with-dpms-ext=$with_dpms"
+ exit 1
+fi
+
+
+###############################################################################
+#
+# Check for the XINERAMA server extension.
+#
+###############################################################################
+
+have_xinerama=no
+with_xinerama_req=unspecified
+AC_ARG_WITH(xinerama-ext,
+[ --with-xinerama-ext Include support for the XINERAMA extension.],
+ [with_xinerama="$withval"; with_xinerama_req="$withval"],[with_xinerama=yes])
+
+HANDLE_X_PATH_ARG(with_xinerama, --with-xinerama-ext, XINERAMA)
+
+if test "$with_xinerama" = yes; then
+
+ # first check for Xinerama.h
+ AC_CHECK_X_HEADER(X11/extensions/Xinerama.h, [have_xinerama=yes],,
+ [#include <X11/Xlib.h>])
+
+ # if that succeeded, then check for the XINERAMA code in the libraries
+ if test "$have_xinerama" = yes; then
+
+ # first look in -lXext
+ have_xinerama=no
+ AC_CHECK_X_LIB(Xext, XineramaQueryScreens, [have_xinerama=yes], [true],
+ -lXext -lX11)
+
+ # if that failed, look in -lXinerama (this is where it is in XFree86 4.1.)
+ if test "$have_xinerama" = no; then
+ AC_CHECK_X_LIB(Xinerama, XineramaQueryScreens,
+ [have_xinerama=yes; XINERAMA_LIBS="-lXinerama"],
+ [true], -lXext -lX11)
+ fi
+ fi
+
+ # if that succeeded, then we've really got it.
+ if test "$have_xinerama" = yes; then
+ AC_DEFINE(HAVE_XINERAMA)
+ fi
+
+elif test "$with_xinerama" != no; then
+ echo "error: must be yes or no: --with-xinerama-ext=$with_xinerama"
+ exit 1
+fi
+
+
+###############################################################################
+#
+# Check for the XINPUT server extension.
+#
+###############################################################################
+
+have_xinput=no
+with_xinput_req=unspecified
+AC_ARG_WITH(xinput-ext,
+[ --with-xinput-ext Include support for the XInput extension.],
+ [with_xinput="$withval"; with_xinput_req="$withval"], [with_xinput=yes])
+
+HANDLE_X_PATH_ARG(with_xinput, --with-xinput-ext, XINPUT)
+
+if test "$with_xinput" = yes; then
+
+ # first check for Xinput.h
+ AC_CHECK_X_HEADER(X11/extensions/XInput.h, [have_xinput=yes],,
+ [#include <X11/Xlib.h>])
+
+ # if that succeeded, then check for libXi
+ if test "$have_xinput" = yes; then
+ have_xinput=no
+ AC_CHECK_X_LIB(Xi, XListInputDevices,
+ [have_xinput=yes; SAVER_LIBS="$SAVER_LIBS -lXi"],
+ [true], -lXext -lX11)
+ fi
+
+ # if that succeeded, then we've really got it.
+ if test "$have_xinput" = yes; then
+ AC_DEFINE(HAVE_XINPUT)
+ fi
+
+elif test "$with_xinput" != no; then
+ echo "error: must be yes or no: --with-xinput-ext=$with_xinput"
+ exit 1
+fi
+
+
+###############################################################################
+#
+# Check for the XF86VMODE server extension (for virtual screens.)
+#
+###############################################################################
+
+have_xf86vmode=no
+with_xf86vmode_req=unspecified
+AC_ARG_WITH(xf86vmode-ext,
+[ --with-xf86vmode-ext Include support for XFree86 virtual screens.],
+ [with_xf86vmode="$withval"; with_xf86vmode_req="$withval"],
+ [with_xf86vmode=yes])
+
+HANDLE_X_PATH_ARG(with_xf86vmode, --with-xf86vmode-ext, xf86vmode)
+
+VIDMODE_LIBS=""
+
+if test "$with_xf86vmode" = yes; then
+
+ # first check for xf86vmode.h
+ AC_CHECK_X_HEADER(X11/extensions/xf86vmode.h, [have_xf86vmode=yes],,
+ [#include <X11/Xlib.h>])
+
+ # if that succeeded, then check for the -lXxf86vm
+ if test "$have_xf86vmode" = yes; then
+ have_xf86vmode=no
+ AC_CHECK_X_LIB(Xxf86vm, XF86VidModeGetViewPort,
+ [have_xf86vmode=yes;
+ VIDMODE_LIBS="-lXxf86vm";
+ SAVER_LIBS="$SAVER_LIBS $VIDMODE_LIBS"],
+ [true], -lXext -lX11)
+ fi
+
+ # if that succeeded, then we've really got it.
+ if test "$have_xf86vmode" = yes; then
+ AC_DEFINE(HAVE_XF86VMODE)
+ fi
+
+elif test "$with_xf86vmode" != no; then
+ echo "error: must be yes or no: --with-xf86vmode-ext=$with_xf86vmode"
+ exit 1
+fi
+
+
+###############################################################################
+#
+# Check for the XF86VMODE server extension (for gamma fading.)
+#
+###############################################################################
+
+have_xf86gamma=no
+have_xf86gamma_ramp=no
+with_xf86gamma_req=unspecified
+AC_ARG_WITH(xf86gamma-ext,
+[ --with-xf86gamma-ext Include support for XFree86 gamma fading.],
+ [with_xf86gamma="$withval"; with_xf86gamma_req="$withval"],
+ [with_xf86gamma=yes])
+
+HANDLE_X_PATH_ARG(with_xf86gamma, --with-xf86gamma-ext, xf86gamma)
+
+if test "$with_xf86gamma" = yes; then
+
+ # first check for xf86vmode.h, if we haven't already
+ if test "$have_xf86vmode" = yes; then
+ have_xf86gamma=yes
+ else
+ AC_CHECK_X_HEADER(X11/extensions/xf86vmode.h, [have_xf86gamma=yes],,
+ [#include <X11/Xlib.h>])
+ fi
+
+ # if that succeeded, then check for the -lXxf86vm
+ if test "$have_xf86gamma" = yes; then
+ have_xf86gamma=no
+ AC_CHECK_X_LIB(Xxf86vm, XF86VidModeSetGamma,
+ [have_xf86gamma=yes],
+ [true], -lXext -lX11)
+ fi
+
+ # check for the Ramp versions of the functions too.
+ if test "$have_xf86gamma" = yes; then
+ have_xf86gamma_ramp=no
+ AC_CHECK_X_LIB(Xxf86vm, XF86VidModeSetGammaRamp,
+ [have_xf86gamma_ramp=yes],
+ [true], -lXext -lX11)
+ fi
+
+ # if those tests succeeded, then we've really got the functions.
+ if test "$have_xf86gamma" = yes; then
+ AC_DEFINE(HAVE_XF86VMODE_GAMMA)
+ fi
+
+ if test "$have_xf86gamma_ramp" = yes; then
+ AC_DEFINE(HAVE_XF86VMODE_GAMMA_RAMP)
+ fi
+
+ # pull in the lib, if we haven't already
+ if test "$have_xf86gamma" = yes -a "$have_xf86vmode" = no; then
+ SAVER_LIBS="$SAVER_LIBS -lXxf86vm"
+ fi
+
+elif test "$with_xf86gamma" != no; then
+ echo "error: must be yes or no: --with-xf86gamma-ext=$with_xf86vmode"
+ exit 1
+fi
+
+
+###############################################################################
+#
+# Check for the RANDR (Resize and Rotate) server extension.
+#
+# We need this to detect when the resolution of the desktop
+# has changed out from under us (this is a newer, different
+# mechanism than the XF86VMODE virtual viewports.)
+#
+###############################################################################
+
+have_randr=no
+with_randr_req=unspecified
+AC_ARG_WITH(randr-ext,
+[ --with-randr-ext Include support for the X Resize+Rotate extension.],
+ [with_randr="$withval"; with_randr_req="$withval"],[with_randr=yes])
+
+HANDLE_X_PATH_ARG(with_randr, --with-randr-ext, RANDR)
+
+if test "$with_randr" = yes; then
+
+ # first check for Xrandr.h
+ AC_CHECK_X_HEADER(X11/extensions/Xrandr.h, [have_randr=yes],,
+ [#include <X11/Xlib.h>])
+
+ # if that succeeded, then check for the XRR code in the libraries
+ if test "$have_randr" = yes; then
+
+ # RANDR probably needs -lXrender
+ xrender_libs=
+ AC_CHECK_X_LIB(Xrender, XRenderSetSubpixelOrder,
+ [xrender_libs="-lXrender"], [true], -lXext -lX11)
+
+ # first look for RANDR in -lXext
+ have_randr=no
+ AC_CHECK_X_LIB(Xext, XRRGetScreenInfo,
+ [have_randr=yes; SAVER_LIBS="$SAVER_LIBS $xrender_libs"],
+ [true], $xrender_libs -lXext -lX11)
+
+ # if that failed, look in -lXrandr
+ if test "$have_randr" = no; then
+ AC_CHECK_X_LIB(Xrandr, XRRGetScreenInfo,
+ [have_randr=yes; SAVER_LIBS="$SAVER_LIBS -lXrandr $xrender_libs"],
+ [true], $xrender_libs -lXext -lX11)
+ fi
+ fi
+
+ # if that succeeded, then we've really got it.
+ if test "$have_randr" = yes; then
+ AC_DEFINE(HAVE_RANDR)
+
+ # Now check for version 1.2 in the same libs.
+ # Try to compile, since on MacOS 10.5.7, headers are older than libs!
+ AC_CACHE_CHECK([for XRRGetScreenResources], ac_cv_randr_12,
+ [ac_cv_randr_12=no
+ AC_TRY_X_COMPILE([#include <stdlib.h>
+ #include <X11/Xlib.h>
+ #include <X11/extensions/Xrandr.h>],
+ [XRRScreenResources *res =
+ XRRGetScreenResources (0, 0);],
+ [ac_cv_randr_12=yes],
+ [ac_cv_randr_12=no])])
+ if test "$ac_cv_randr_12" = yes ; then
+ AC_DEFINE(HAVE_RANDR_12)
+ fi
+# AC_CHECK_X_LIB(c, XRRGetOutputInfo, [AC_DEFINE(HAVE_RANDR_12)],
+# [true], $SAVER_LIBS)
+ fi
+
+
+elif test "$with_randr" != no; then
+ echo "error: must be yes or no: --with-randr-ext=$with_randr"
+ exit 1
+fi
+
+
+###############################################################################
+#
+# Check for XF86MiscSetGrabKeysState (but only bother if we are already
+# using other XF86 stuff.)
+#
+###############################################################################
+
+have_xf86miscsetgrabkeysstate=no
+if test "$have_xf86gamma" = yes -o "$have_xf86vmode" = yes; then
+ AC_CHECK_X_LIB(Xxf86misc, XF86MiscSetGrabKeysState,
+ [have_xf86miscsetgrabkeysstate=yes],
+ [true], -lXext -lX11)
+ if test "$have_xf86miscsetgrabkeysstate" = yes ; then
+ SAVER_LIBS="$SAVER_LIBS -lXxf86misc"
+ AC_DEFINE(HAVE_XF86MISCSETGRABKEYSSTATE)
+ fi
+fi
+
+
+###############################################################################
+#
+# Check for HP XHPDisableReset and XHPEnableReset.
+#
+###############################################################################
+
+AC_MSG_CHECKING([for XHPDisableReset in X11/XHPlib.h])
+AC_EGREP_X_HEADER(XHPDisableReset, X11/XHPlib.h,
+ [AC_DEFINE(HAVE_XHPDISABLERESET)
+ SAVER_LIBS="-lXhp11 $SAVER_LIBS"
+ AC_MSG_RESULT(yes)],
+ [AC_MSG_RESULT(no)])
+
+
+###############################################################################
+#
+# Check for /proc/interrupts.
+#
+###############################################################################
+
+have_proc_interrupts=no
+with_proc_interrupts_req=unspecified
+AC_ARG_WITH(proc-interrupts,
+[ --with-proc-interrupts Include support for consulting the /proc/interrupts
+ file to notice keyboard activity.],
+ [with_proc_interrupts="$withval"; with_proc_interrupts_req="$withval"],
+ [with_proc_interrupts=yes])
+
+if test "$with_proc_interrupts" = yes; then
+
+ # Note that we may be building in an environment (e.g. Debian buildd chroot)
+ # without a proper /proc filesystem. If /proc/interrupts exists, then we'll
+ # check that it has the bits we need, but otherwise we'll just go on faith.
+ #
+ have_proc_interrupts=yes
+
+ if test -f /proc/interrupts; then
+ AC_CACHE_CHECK([whether /proc/interrupts contains keyboard data],
+ ac_cv_have_proc_interrupts,
+ [ac_cv_have_proc_interrupts=no
+ if grep 'keyboard\|i8042' /proc/interrupts >/dev/null 2>&1 ; then
+ ac_cv_have_proc_interrupts=yes
+ fi
+ ])
+ have_proc_interrupts=$ac_cv_have_proc_interrupts
+ fi
+
+ if test "$have_proc_interrupts" = yes; then
+ AC_DEFINE(HAVE_PROC_INTERRUPTS)
+ fi
+
+elif test "$with_proc_interrupts" != no; then
+ echo "error: must be yes or no: --with-proc-interrupts=$with_proc_interrupts"
+ exit 1
+fi
+
+
+###############################################################################
+#
+# The --enable-locking option
+#
+###############################################################################
+
+AC_ARG_ENABLE(locking,[Screen locking options:
+ --enable-locking Compile in support for locking the display.
+ --disable-locking Do not allow locking at all.],
+ [enable_locking="$enableval"],
+ [if test "$ac_macosx" = yes; then
+ # We can't lock on MacOS X, so default to not compiling in support for it.
+ # But allow --enable-locking to override that, so I can debug Linux locking
+ # under MacOS X11.
+ enable_locking=no
+ else
+ enable_locking=yes
+ fi])
+if test "$enable_locking" = yes; then
+ true
+elif test "$enable_locking" = no; then
+ AC_DEFINE(NO_LOCKING)
+else
+ echo "error: must be yes or no: --enable-locking=$enable_locking"
+ exit 1
+fi
+
+
+###############################################################################
+#
+# Whether to allow root password to unblank.
+#
+###############################################################################
+AC_ARG_ENABLE(root-passwd, [
+ --enable-root-passwd Allow root passwd to unlock screen.
+ --disable-root-passwd Do not allow that.],
+ [enable_root_passwd="$enableval"],[enable_root_passwd=yes])
+if test "$enable_root_passwd" = yes; then
+ AC_DEFINE(ALLOW_ROOT_PASSWD)
+ true
+elif test "$enable_root_passwd" != no; then
+ echo "error: must be yes or no: --enable-root-passwd=$enable_root_passwd"
+ exit 1
+fi
+
+###############################################################################
+#
+# Check for PAM.
+#
+###############################################################################
+
+case "$host" in
+ *-solaris*)
+ # Solaris systems tend to come with PAM misconfigured.
+ # Don't build it by default, even if the headers exist.
+ with_pam_default=no
+ ;;
+ *)
+ # Default to building PAM support on all other systems, if it exists.
+ with_pam_default=yes
+ ;;
+esac
+
+have_pam=no
+with_pam_req=unspecified
+
+AC_ARG_WITH(pam,
+[ --with-pam Include support for PAM (Pluggable Auth Modules.)],
+ [with_pam="$withval"; with_pam_req="$withval"],[with_pam=$with_pam_default])
+
+AC_ARG_WITH([pam_service_name],
+ AC_HELP_STRING([--with-pam-service-name],
+ [NAME arg is the name of the PAM service that
+ xscreensaver will authenticate as.]),
+ [pam_service_name="$withval"],[pam_service_name="xscreensaver"])
+
+AC_ARG_ENABLE(pam-check-account-type,
+ [AC_HELP_STRING([--enable-pam-check-account-type],
+ [Whether PAM should check the result of account
+ modules when authenticating. Only do this if you
+ have account configured properly on your system.])],
+ [enable_pam_check_account_type="$enableval"],[enable_pam_check_account_type=no])
+if test "$enable_pam_check_account_type" = yes ; then
+ AC_DEFINE(PAM_CHECK_ACCOUNT_TYPE)
+ true
+elif test "$enable_pam_check_account_type" != no ; then
+ echo "error: must be yes or no: --enable-pam-check-account-type=$enable_pam_check_account_type"
+ exit 1
+fi
+
+HANDLE_X_PATH_ARG(with_pam, --with-pam, PAM)
+
+if test "$enable_locking" = yes -a "$with_pam" = yes; then
+ AC_CACHE_CHECK([for PAM], ac_cv_pam,
+ [AC_TRY_X_COMPILE([#include <security/pam_appl.h>],,
+ [ac_cv_pam=yes],
+ [ac_cv_pam=no])])
+ if test "$ac_cv_pam" = yes ; then
+ have_pam=yes
+ AC_DEFINE(HAVE_PAM)
+ AC_DEFINE_UNQUOTED(PAM_SERVICE_NAME,"$pam_service_name")
+
+ PASSWD_LIBS="${PASSWD_LIBS} -lpam"
+
+ # libpam typically requires dlopen and dlsym. On FreeBSD,
+ # those are in libc. On Linux and Solaris, they're in libdl.
+ AC_CHECK_LIB(dl, dlopen, [PASSWD_LIBS="${PASSWD_LIBS} -ldl"])
+
+ # On Linux, sigtimedwait() is in libc; on Solaris, it's in librt.
+ have_timedwait=no
+ AC_CHECK_LIB(c, sigtimedwait,
+ [have_timedwait=yes
+ AC_DEFINE(HAVE_SIGTIMEDWAIT)])
+ if test "$have_timedwait" = no ; then
+ AC_CHECK_LIB(rt, sigtimedwait, [have_timedwait=yes
+ AC_DEFINE(HAVE_SIGTIMEDWAIT)
+ PASSWD_LIBS="${PASSWD_LIBS} -lrt"])
+ fi
+
+ AC_MSG_CHECKING(how to call pam_strerror)
+ AC_CACHE_VAL(ac_cv_pam_strerror_args,
+ [AC_TRY_X_COMPILE([#include <stdio.h>
+ #include <stdlib.h>
+ #include <security/pam_appl.h>],
+ [pam_handle_t *pamh = 0;
+ char *s = pam_strerror(pamh, PAM_SUCCESS);],
+ [ac_pam_strerror_args=2],
+ [AC_TRY_X_COMPILE([#include <stdio.h>
+ #include <stdlib.h>
+ #include <security/pam_appl.h>],
+ [char *s =
+ pam_strerror(PAM_SUCCESS);],
+ [ac_pam_strerror_args=1],
+ [ac_pam_strerror_args=0])])
+ ac_cv_pam_strerror_args=$ac_pam_strerror_args])
+ ac_pam_strerror_args=$ac_cv_pam_strerror_args
+ if test "$ac_pam_strerror_args" = 1 ; then
+ AC_MSG_RESULT(one argument)
+ elif test "$ac_pam_strerror_args" = 2 ; then
+ AC_DEFINE(PAM_STRERROR_TWO_ARGS)
+ AC_MSG_RESULT(two arguments)
+ else
+ AC_MSG_RESULT(unknown)
+ fi
+
+# Check pam_fail_delay
+ AC_MSG_CHECKING(pam_fail_delay in -lpam)
+ AC_CACHE_VAL(ac_cv_pam_fail_delay,
+ [ac_save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="-lpam"
+ AC_TRY_LINK([#include <security/pam_appl.h>],
+ [pam_handle_t *pamh = 0;
+ unsigned int usec = 1;
+ int status = pam_fail_delay (pamh, usec);],
+ [ac_pam_fail_delay=yes],
+ [ac_pam_fail_delay=no])
+ ac_cv_pam_fail_delay=$ac_pam_fail_delay,
+ LDFLAGS=$ac_save_LDFLAGS])
+
+ if test "$ac_pam_fail_delay" = yes ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_PAM_FAIL_DELAY)
+ else
+ AC_MSG_RESULT(no)
+ fi
+
+ fi
+fi
+
+
+###############################################################################
+#
+# Check for Kerberos.
+#
+###############################################################################
+
+have_kerberos=no
+have_kerberos5=no
+with_kerberos_req=unspecified
+
+AC_ARG_WITH(kerberos,
+[ --with-kerberos Include support for Kerberos authentication.],
+ [with_kerberos="$withval"; with_kerberos_req="$withval"],[with_kerberos=yes])
+
+HANDLE_X_PATH_ARG(with_kerberos, --with-kerberos, Kerberos)
+
+if test "$enable_locking" = yes -a "$with_kerberos" = yes; then
+ AC_CACHE_CHECK([for Kerberos 4], ac_cv_kerberos,
+ [AC_TRY_X_COMPILE([#include <krb.h>],,
+ [ac_cv_kerberos=yes],
+ [ac_cv_kerberos=no])])
+ AC_CACHE_CHECK([for Kerberos 5], ac_cv_kerberos5,
+ [AC_TRY_X_COMPILE([#include <kerberosIV/krb.h>],,
+ [ac_cv_kerberos5=yes],
+ [ac_cv_kerberos5=no])])
+
+ if test "$ac_cv_kerberos" = yes ; then
+ have_kerberos=yes
+ AC_DEFINE(HAVE_KERBEROS)
+ fi
+
+ if test "$ac_cv_kerberos5" = yes ; then
+
+ # Andrew Snare <ajs@pigpond.com> wrote:
+ #
+ # You were assuming that if kerberosV (krb5) was found, then kerberosIV
+ # (krb4) was also available. This turns out not to be the case with
+ # mit-krb-1.2.7; apparently backwards-compatibility with KerberosIV
+ # is optional.
+ #
+ # So, disable kerberosV support if libkrb4 can't be found.
+ # This is not the best solution, but it makes the compile not fail.
+ #
+ AC_CHECK_X_LIB(krb4, krb_get_tf_realm,
+ [have_kerberos=yes],
+ [have_kerberos=no])
+ if test "$have_kerberos" = yes ; then
+ have_kerberos5=yes
+ AC_DEFINE(HAVE_KERBEROS)
+ AC_DEFINE(HAVE_KERBEROS5)
+ else
+ have_kerberos5=no
+ AC_MSG_WARN([Cannot find compat lib (libkrb4) needed to use Kerberos 5])
+ fi
+
+ fi
+
+ if test "$have_kerberos5" = yes ; then
+ # from Matt Knopp <mhat@infocalypse.netlag.com>
+ # (who got it from amu@mit.edu)
+
+ PASSWD_LIBS="$PASSWD_LIBS -lkrb4 -ldes425 -lkrb5 -lk5crypto -lcom_err"
+
+ # jwz: MacOS X uses -lkrb5, but not -lcrypt
+ AC_CHECK_X_LIB(crypt, crypt, [PASSWD_LIBS="$PASSWD_LIBS -lcrypt"])
+
+ elif test "$have_kerberos" = yes ; then
+ # from Tim Showalter <tjs@psaux.com> for FreeBSD 4.2
+ PASSWD_LIBS="$PASSWD_LIBS -lkrb -ldes -lcom_err"
+ fi
+
+ if test "$have_kerberos" = yes ; then
+ AC_CHECK_FUNC(res_search,,
+ AC_CHECK_LIB(resolv,res_search,PASSWD_LIBS="${PASSWD_LIBS} -lresolv",
+ AC_MSG_WARN([Can't find DNS resolver libraries needed for Kerberos])
+ ))
+ fi
+fi
+
+
+###############################################################################
+#
+# Check for the nine billion variants of shadow passwords...
+#
+###############################################################################
+
+need_setuid=no
+
+have_shadow=no
+with_shadow_req=unspecified
+
+AC_ARG_WITH(shadow,
+[ --with-shadow Include support for shadow password authentication.],
+ [with_shadow="$withval"; with_shadow_req="$withval"],[with_shadow=yes])
+
+HANDLE_X_PATH_ARG(with_shadow, --with-shadow, shadow password)
+
+if test "$enable_locking" = no ; then
+ with_shadow_req=no
+ with_shadow=no
+fi
+
+
+###############################################################################
+#
+# Check for Sun "adjunct" passwords.
+#
+###############################################################################
+
+if test "$with_shadow" = yes ; then
+ AC_CACHE_CHECK([for Sun-style shadow passwords], ac_cv_sun_adjunct,
+ [AC_TRY_X_COMPILE([#include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <sys/label.h>
+ #include <sys/audit.h>
+ #include <pwdadj.h>],
+ [struct passwd_adjunct *p = getpwanam("nobody");
+ const char *pw = p->pwa_passwd;],
+ [ac_cv_sun_adjunct=yes],
+ [ac_cv_sun_adjunct=no])])
+ if test "$ac_cv_sun_adjunct" = yes; then
+ have_shadow_adjunct=yes
+ have_shadow=yes
+ need_setuid=yes
+ fi
+fi
+
+
+###############################################################################
+#
+# Check for DEC and SCO so-called "enhanced" security.
+#
+###############################################################################
+
+if test "$with_shadow" = yes ; then
+ AC_CACHE_CHECK([for DEC-style shadow passwords], ac_cv_enhanced_passwd,
+ [AC_TRY_X_COMPILE([#include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <pwd.h>
+ #include <sys/security.h>
+ #include <prot.h>],
+ [struct pr_passwd *p;
+ const char *pw;
+ set_auth_parameters(0, 0);
+ check_auth_parameters();
+ p = getprpwnam("nobody");
+ pw = p->ufld.fd_encrypt;],
+ [ac_cv_enhanced_passwd=yes],
+ [ac_cv_enhanced_passwd=no])])
+ if test $ac_cv_enhanced_passwd = yes; then
+ have_shadow_enhanced=yes
+ have_shadow=yes
+ need_setuid=yes
+
+ # On SCO, getprpwnam() is in -lprot (which uses nap() from -lx)
+ # (I'm told it needs -lcurses too, but I don't understand why.)
+ # But on DEC, it's in -lsecurity.
+ #
+ AC_CHECK_LIB(prot, getprpwnam,
+ [PASSWD_LIBS="$PASSWD_LIBS -lprot -lcurses -lx"],
+ [AC_CHECK_LIB(security, getprpwnam,
+ [PASSWD_LIBS="$PASSWD_LIBS -lsecurity"])],
+ [-lx])
+ fi
+fi
+
+###############################################################################
+#
+# Check for HP's entry in the "Not Invented Here" Sweepstakes.
+#
+###############################################################################
+
+if test "$with_shadow" = yes ; then
+ AC_CACHE_CHECK([for HP-style shadow passwords], ac_cv_hpux_passwd,
+ [AC_TRY_X_COMPILE([#include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <pwd.h>
+ #include <hpsecurity.h>
+ #include <prot.h>],
+ [struct s_passwd *p = getspwnam("nobody");
+ const char *pw = p->pw_passwd;],
+ [ac_cv_hpux_passwd=yes],
+ [ac_cv_hpux_passwd=no])])
+ if test "$ac_cv_hpux_passwd" = yes; then
+ have_shadow_hpux=yes
+ have_shadow=yes
+ need_setuid=yes
+
+ # on HPUX, bigcrypt is in -lsec
+ AC_CHECK_LIB(sec, bigcrypt, [PASSWD_LIBS="$PASSWD_LIBS -lsec"])
+ fi
+fi
+
+
+###############################################################################
+#
+# Check for FreeBSD-style shadow passwords.
+#
+# On FreeBSD, getpwnam() and friends work just like on non-shadow-
+# password systems -- except you only get stuff in the pw_passwd field
+# if the running program is setuid. So, guess that we've got this
+# lossage to contend with if /etc/master.passwd exists, and default to
+# a setuid installation.
+#
+###############################################################################
+
+if test "$with_shadow" = yes ; then
+ AC_CACHE_CHECK([for FreeBSD-style shadow passwords], ac_cv_master_passwd,
+ [if test -f /etc/master.passwd ; then
+ ac_cv_master_passwd=yes
+ else
+ ac_cv_master_passwd=no
+ fi])
+ if test "$ac_cv_master_passwd" = yes; then
+ need_setuid=yes
+ fi
+fi
+
+
+###############################################################################
+#
+# Check for traditional (ha!) shadow passwords.
+#
+###############################################################################
+
+if test "$with_shadow" = yes ; then
+ AC_CACHE_CHECK([for generic shadow passwords], ac_cv_shadow,
+ [AC_TRY_X_COMPILE([#include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <pwd.h>
+ #include <shadow.h>],
+ [struct spwd *p = getspnam("nobody");
+ const char *pw = p->sp_pwdp;],
+ [ac_cv_shadow=yes],
+ [ac_cv_shadow=no])])
+ if test "$ac_cv_shadow" = yes; then
+ have_shadow=yes
+ need_setuid=yes
+
+ # On some systems (UnixWare 2.1), getspnam() is in -lgen instead of -lc.
+ have_getspnam=no
+ AC_CHECK_LIB(c, getspnam, [have_getspnam=yes])
+ if test "$have_getspnam" = no ; then
+ AC_CHECK_LIB(gen, getspnam,
+ [have_getspnam=yes; PASSWD_LIBS="$PASSWD_LIBS -lgen"])
+ fi
+ fi
+fi
+
+
+###############################################################################
+#
+# Check for other libraries needed for non-shadow passwords.
+#
+###############################################################################
+
+if test "$enable_locking" = yes ; then
+
+ # On some systems (UnixWare 2.1), crypt() is in -lcrypt instead of -lc.
+ have_crypt=no
+ AC_CHECK_LIB(c, crypt, [have_crypt=yes])
+ if test "$have_crypt" = no ; then
+ AC_CHECK_LIB(crypt, crypt,
+ [have_crypt=yes; PASSWD_LIBS="$PASSWD_LIBS -lcrypt"])
+ fi
+fi
+
+
+# Most of the above shadow mechanisms will have set need_setuid to yes,
+# if they were found. But, on some systems, we need setuid even when
+# using plain old vanilla passwords.
+#
+if test "$enable_locking" = yes ; then
+ case "$host" in
+ *-hpux* | *-aix* | *-netbsd* | *-freebsd* | *-openbsd* )
+ need_setuid=yes
+ ;;
+ esac
+fi
+
+
+if test "$have_shadow_adjunct" = yes ; then
+ AC_DEFINE(HAVE_ADJUNCT_PASSWD)
+elif test "$have_shadow_enhanced" = yes ; then
+ AC_DEFINE(HAVE_ENHANCED_PASSWD)
+elif test "$have_shadow_hpux" = yes ; then
+ AC_DEFINE(HAVE_HPUX_PASSWD)
+elif test "$have_shadow" = yes ; then
+ AC_DEFINE(HAVE_SHADOW_PASSWD)
+fi
+
+
+###############################################################################
+#
+# Check for external password helper
+# On SuSE, instead of having xscreensaver be a setuid program, they
+# fork an external program that takes the password on stdin, and
+# returns true if that password is a valid one. Then only that
+# smaller program needs to be setuid.
+#
+# (Note that this external program is not a GUI: the GUI is still
+# all in xscreensaver itself; the external program just does auth.)
+#
+###############################################################################
+
+have_passwd_helper=no
+with_passwd_helper_req=unspecified
+
+AC_ARG_WITH(passwd-helper,
+[ --with-passwd-helper Include support for an external password
+ verification helper program.],
+ [with_passwd_helper="$withval"; with_passwd_helper_req="$withval"],[with_passwd_helper=no])
+# no HANDLE_X_PATH_ARG for this one
+
+if test "$enable_locking" = no ; then
+ with_passwd_helper_req=no
+ with_passwd_helper=no
+fi
+
+case "$with_passwd_helper" in
+ ""|no) : ;;
+ /*)
+ AC_DEFINE_UNQUOTED(PASSWD_HELPER_PROGRAM, "$with_passwd_helper")
+ have_passwd_helper=yes;;
+ *)
+ echo "error: --with-passwd-helper needs full pathname of helper (not '$with_passwd_helper')." >&2