http://ftp.x.org/contrib/applications/xscreensaver-3.22.tar.gz
[xscreensaver] / configure.in
index 145ea610bf11167d6aad2f1b4928f2f49b669587..878757cb6c70a0c87da043c6f6e8d3fdf853fff9 100644 (file)
 
 AC_INIT(driver/subprocs.c)
 AC_CONFIG_HEADER(config.h)
-AC_CANONICAL_HOST
 
-AC_PROG_CC
+echo "current directory: `pwd`"
+echo "command line was: $0 $@"
 
-if test -z "$GCC"; then
-  AC_MSG_CHECKING(how to request ANSI compilation)
-  case "$host" in
-    *-hpux*)
-      AC_MSG_RESULT(HPUX: adding -Ae)
-      CC="$CC -Ae"
-    ;;
-    *-aix*)
-      AC_MSG_RESULT(AIX: adding -qlanglvl=ansi -qhalt=e)
-      CC="$CC -qlanglvl=ansi -qhalt=e"
-    ;;
 
-# NOTE:   for Digital, need to add -std1 to get ANSI, but I'm not sure
-#         yet what $host pattern we should be testing for...
+# After checking to see that --srcdir is correct (which AC_INIT does)
+# check for some random other files that come later in the tar file,
+# to make sure everything is here.
+#
+for d in driver utils hacks hacks/glx ; do
+  f=$srcdir/$d/Makefile.in
+  if test \! -r $f ; then
+    echo ""
+    echo "ERROR: The package is incomplete: $f does not exist."
+    echo "       This probably means that your download was truncated."
+    echo ""
+    exit 1
+  fi
+done
 
-    *)
-      AC_MSG_RESULT(no idea)
-    ;;
-  esac
-fi
 
+###############################################################################
+#
+#       Function to figure out how to run the compiler.
+#
+###############################################################################
 
-AC_MSG_CHECKING([whether the compiler works on ANSI C])
-AC_TRY_RUN([ main(int ac, char **av) { return 0; } ],
-   AC_MSG_RESULT(yes),
-   AC_MSG_RESULT(no)
-   AC_MSG_ERROR(Couldn't build even a trivial ANSI C program: check CC.),
-   AC_MSG_ERROR(Couldn't build even a trivial ANSI C program: check CC.))
+AC_DEFUN(AC_PROG_CC_ANSI,
+ [AC_PROG_CC
+
+  if test -z "$GCC"; then
+    AC_MSG_CHECKING(how to request ANSI compilation)
+    case "$host" in
+      *-hpux* )
+        AC_MSG_RESULT(HPUX: adding -Ae)
+        CC="$CC -Ae"
+      ;;
+      *-aix* )
+        AC_MSG_RESULT(AIX: adding -qlanglvl=ansi -qhalt=e)
+        CC="$CC -qlanglvl=ansi -qhalt=e"
+      ;;
+
+      *-dec-* )
+        AC_MSG_RESULT(DEC: adding -std1)
+        CC="$CC -std1"
+      ;;
+
+      *)
+        AC_MSG_RESULT(no idea)
+      ;;
+    esac
+  fi
+
+  AC_MSG_CHECKING([whether the compiler works on ANSI C])
+  AC_TRY_RUN([ main(int ac, char **av) { return 0; } ],
+     AC_MSG_RESULT(yes),
+     AC_MSG_RESULT(no)
+     AC_MSG_ERROR(Couldn't build even a trivial ANSI C program: check CC.),
+     AC_MSG_ERROR(Couldn't build even a trivial ANSI C program: check CC.))
 
-case "$host" in
-  *-irix*)
   if test -n "$GCC"; then
     AC_MSG_RESULT(Turning on gcc compiler warnings.)
     CC="$CC -Wall -Wstrict-prototypes -Wnested-externs -Wno-format"
+    AC_MSG_RESULT(Disabling C++ comments in ANSI C code.)
+    CC="$CC -Wp,-lang-c89"
   else
-    # not gcc
-    AC_MSG_RESULT(Turning on SGI compiler warnings.)
-    CC="$CC -fullwarn -use_readonly_const -rdata_shared -g3"
+    case "$host" in
+      *-irix5* |*-irix6.[0-3]* )
+        AC_MSG_RESULT(Turning on SGI compiler warnings.)
+        CC="$CC -fullwarn -use_readonly_const -rdata_shared -g3"
+      ;;
+#     *-dec-osf* )
+#       if test -z "$GCC"; then
+#         AC_MSG_RESULT(Turning on DEC C compiler warnings.)
+#         CC="$CC -migrate -w0 -verbose -warnprotos"
+#       fi
+#     ;;
+    esac
   fi
-  ;;
-esac
-
-
-AC_PROG_CPP
-AC_PROG_INSTALL
-AC_PROG_MAKE_SET
-
-AC_C_CONST
-AC_C_INLINE
-
-AC_HEADER_STDC
-AC_HEADER_TIME
-AC_HEADER_SYS_WAIT
-AC_HEADER_DIRENT
-
-AC_TYPE_MODE_T
-AC_TYPE_PID_T
-AC_TYPE_SIZE_T
-AC_TYPE_SIGNAL
+])
 
-AC_MSG_CHECKING(how to call gettimeofday)
-AC_CACHE_VAL(ac_cv_gettimeofday_args,
- [AC_TRY_COMPILE([#include <stdlib.h>
-                 #include <sys/time.h>],
-                [struct timeval tv; gettimeofday(&tv);],
-                [ac_gettimeofday_args=1],
-                [AC_TRY_COMPILE([#include <stdlib.h>
-                                 #include <sys/time.h>],
-                                [struct timeval tv; struct timezone tzp;
-                                 gettimeofday(&tv, &tzp);],
-                                [ac_gettimeofday_args=2],
-                                [ac_gettimeofday_args=0])])
-  ac_cv_gettimeofday_args=$ac_gettimeofday_args])
-ac_gettimeofday_args=$ac_cv_gettimeofday_args
-if test $ac_gettimeofday_args = 1 ; then
-  AC_DEFINE(HAVE_GETTIMEOFDAY)
-  AC_MSG_RESULT(one argument)
-elif test $ac_gettimeofday_args = 2 ; then
-  AC_DEFINE(HAVE_GETTIMEOFDAY)
-  AC_DEFINE(GETTIMEOFDAY_TWO_ARGS)
-  AC_MSG_RESULT(two arguments)
-else
-  AC_MSG_RESULT(unknown)
-fi
 
+###############################################################################
+#
+#       Function to figure out how to create directory trees.
+#
+###############################################################################
+
+AC_DEFUN(AC_PROG_INSTALL_DIRS,
+ [AC_CACHE_CHECK([whether \"\${INSTALL} -d\" creates intermediate directories],
+    ac_cv_install_d_creates_dirs,
+    [ac_cv_install_d_creates_dirs=no
+     rm -rf conftestdir
+     if mkdir conftestdir; then
+       cd conftestdir >&-
+       ${INSTALL} -d `pwd`/dir1/dir2 >&- 2>&-
+       if test -d dir1/dir2/. ; then
+         ac_cv_install_d_creates_dirs=yes
+       fi
+       cd .. >&-
+       rm -rf conftestdir
+     fi
+    ])
+
+  if test "$ac_cv_install_d_creates_dirs" = no ; then
+    AC_CACHE_CHECK([whether \"mkdir -p\" creates intermediate directories],
+      ac_cv_mkdir_p_creates_dirs,
+      [ac_cv_mkdir_p_creates_dirs=no
+       rm -rf conftestdir
+       if mkdir conftestdir; then
+         cd conftestdir >&-
+         mkdir -p dir1/dir2 >&- 2>&-
+         if test -d dir1/dir2/. ; then
+           ac_cv_mkdir_p_creates_dirs=yes
+         fi
+         cd .. >&-
+         rm -rf conftestdir
+       fi
+      ])
+  fi
 
-AC_CHECK_FUNCS(select fcntl uname nice setpriority getcwd getwd putenv)
-AC_CHECK_FUNCS(sigaction)
+  if test "$ac_cv_install_d_creates_dirs" = yes ; then
+    INSTALL_DIRS='${INSTALL} -d'
+  elif test "$ac_cv_mkdir_p_creates_dirs" = yes ; then
+    INSTALL_DIRS='mkdir -p'
+  else
+    # any other ideas?
+    INSTALL_DIRS='${INSTALL} -d'
+  fi
+])
 
-AC_CHECK_HEADERS(unistd.h)
 
-dnl    /usr/local/src/ssh-1.2.17/putenv.c -- AC_REPLACE_FUNCS(putenv)
+###############################################################################
+#
+#       Function to check whether gettimeofday() exists, and how to call it.
+#      This may define HAVE_GETTIMEOFDAY and GETTIMEOFDAY_TWO_ARGS.
+#
+###############################################################################
+
+AC_DEFUN(AC_GETTIMEOFDAY_ARGS,
+ [AC_MSG_CHECKING(how to call gettimeofday)
+  AC_CACHE_VAL(ac_cv_gettimeofday_args,
+   [AC_TRY_COMPILE([#include <stdlib.h>
+                    #include <sys/time.h>],
+                   [struct timeval tv; struct timezone tzp;
+                    gettimeofday(&tv, &tzp);],
+                   [ac_gettimeofday_args=2],
+                   [AC_TRY_COMPILE([#include <stdlib.h>
+                                    #include <sys/time.h>],
+                                   [struct timeval tv; gettimeofday(&tv);],
+                                   [ac_gettimeofday_args=1],
+                                   [ac_gettimeofday_args=0])])
+    ac_cv_gettimeofday_args=$ac_gettimeofday_args])
+  ac_gettimeofday_args=$ac_cv_gettimeofday_args
+  if test "$ac_gettimeofday_args" = 1 ; then
+    AC_DEFINE(HAVE_GETTIMEOFDAY)
+    AC_MSG_RESULT(one argument)
+  elif test "$ac_gettimeofday_args" = 2 ; then
+    AC_DEFINE(HAVE_GETTIMEOFDAY)
+    AC_DEFINE(GETTIMEOFDAY_TWO_ARGS)
+    AC_MSG_RESULT(two arguments)
+  else
+    AC_MSG_RESULT(unknown)
+  fi
+])
 
 
-AC_ARG_ENABLE(subdir,[
-Installation options:
+###############################################################################
+#
+#       Function to find perl5 (defines PERL and PERL_VERSION.)
+#
+###############################################################################
 
-  --enable-subdir=DIR     Put the demo programs in a subdirectory of \`bindir',
-                          instead of putting them in bindir itself.  You can
-                          specify the name of the subdirectory.  For example,
-                          --exec-prefix=/usr/local/bin --enable-subdir=demos
-                          would put xscreensaver in /usr/local/bin/, and would
-                          put the demos in /usr/local/bin/demos/.  Note that if
-                          you do this, you must make sure that the directory
-                          is on your \$PATH before xscreensaver is started: the
-                          directory name is not hardcoded into the program.
-                          This merely sets the default installation location.
+# M4 sucks!!  perl sucks too!!
+changequote(X,Y)
+perl_version_cmd='print $]'
+changequote([,])
 
-  --disable-subdir        Just put the demos in \`bindir' (this is the default.)
-],
-  [enable_subdir="$enableval"],[enable_subdir=no])
-if test x"$enable_subdir" = xno; then
-  HACKDIR='$(bindir)'
-elif test x"$enable_subdir" = xyes -o x"$enable_subdir" = x ; then
-  echo "error: must be a subdirectory name: --enable-subdir=$enable_subdir"
-  exit 1
-else
-  HACKDIR='$(bindir)/'$enable_subdir
-fi
+AC_DEFUN(AC_PROG_PERL,
+ [AC_PATH_PROGS(PERL, [perl5 perl],,)
+  if test -z "$PERL" ; then
+    PERL_VERSION=0
+  else
+    AC_CACHE_CHECK([perl version], ac_cv_perl_version,
+                   [ac_cv_perl_version=`$PERL -e "$perl_version_cmd"`])
+    PERL_VERSION=$ac_cv_perl_version
+  fi
+ ])
 
 
-AC_PATH_XTRA
+###############################################################################
+#
+#       Functions to check how to do ICMP PING requests.
+#
+###############################################################################
+
+AC_DEFUN(AC_CHECK_ICMP,
+ [AC_CACHE_CHECK([for struct icmp], ac_cv_have_icmp,
+  [AC_TRY_COMPILE([#include <stdlib.h>
+                   #include <stdio.h>
+                   #include <math.h>
+                   #include <unistd.h>
+                   #include <limits.h>
+                   #include <signal.h>
+                   #include <fcntl.h>
+                   #include <sys/types.h>
+                   #include <sys/time.h>
+                   #include <sys/ipc.h>
+                   #include <sys/shm.h>
+                   #include <sys/socket.h>
+                   #include <netinet/in_systm.h>
+                   #include <netinet/in.h>
+                   #include <netinet/ip.h>
+                   #include <netinet/ip_icmp.h>
+                   #include <netinet/udp.h>
+                   #include <arpa/inet.h>
+                   #include <netdb.h>],
+                  [struct icmp i;
+                   struct sockaddr s;
+                   struct sockaddr_in si;
+                   struct ip ip;
+                   i.icmp_type = ICMP_ECHO;
+                   i.icmp_code = 0;
+                   i.icmp_cksum = 0;
+                   i.icmp_id = 0;
+                   i.icmp_seq = 0;
+                   si.sin_family = AF_INET;
+                   ip.ip_hl = 0;],
+                  [ac_cv_have_icmp=yes],
+                  [ac_cv_have_icmp=no])])
+ if test "$ac_cv_have_icmp" = yes ; then
+   AC_DEFINE(HAVE_ICMP)
+ fi])
+
+AC_DEFUN(AC_CHECK_ICMPHDR,
+ [AC_CACHE_CHECK([for struct icmphdr], ac_cv_have_icmphdr,
+  [AC_TRY_COMPILE([#include <stdlib.h>
+                   #include <stdio.h>
+                   #include <math.h>
+                   #include <unistd.h>
+                   #include <limits.h>
+                   #include <signal.h>
+                   #include <fcntl.h>
+                   #include <sys/types.h>
+                   #include <sys/time.h>
+                   #include <sys/ipc.h>
+                   #include <sys/shm.h>
+                   #include <sys/socket.h>
+                   #include <netinet/in_systm.h>
+                   #include <netinet/in.h>
+                   #include <netinet/ip.h>
+                   #include <netinet/ip_icmp.h>
+                   #include <netinet/udp.h>
+                   #include <arpa/inet.h>
+                   #include <netdb.h>],
+                  [struct icmphdr i;
+                   struct sockaddr s;
+                   struct sockaddr_in si;
+                   struct ip ip;
+                   i.type = ICMP_ECHO;
+                   i.code = 0;
+                   i.cksum = 0;
+                   i.un.echo.id = 0;
+                   i.un.echo.sequence = 0;
+                   si.sin_family = AF_INET;
+                   ip.ip_hl = 0;],
+                  [ac_cv_have_icmphdr=yes],
+                  [ac_cv_have_icmphdr=no])])
+ if test "$ac_cv_have_icmphdr" = yes ; then
+   AC_DEFINE(HAVE_ICMPHDR)
+ fi])
+
+
+###############################################################################
+#
+#       Functions to check for various X11 crap.
+#
+###############################################################################
 
 # Try and find the app-defaults directory.
 # It sucks that autoconf doesn't do this already...
 #
-AC_DEFUN(AC_PATH_X_APP_DEFAULTS_XMKMF,
-  [
+AC_DEFUN(AC_PATH_X_APP_DEFAULTS_XMKMF,[
   rm -fr conftestdir
   if mkdir conftestdir; then
-    cd conftestdir
+    cd conftestdir >&-
     # Make sure to not put "make" in the Imakefile rules, since we grep it out.
     cat > Imakefile <<'EOF'
 acfindx:
@@ -147,60 +298,60 @@ EOF
       # GNU make sometimes prints "make[1]: Entering...", which'd confuse us.
       eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
     fi
-    cd ..
+    cd .. >&-
     rm -fr conftestdir
   fi])
 
-AC_DEFUN(AC_PATH_X_APP_DEFAULTS_DIRECT,
-[  # Look for the directory under a standard set of common directories.
+AC_DEFUN(AC_PATH_X_APP_DEFAULTS_DIRECT,[
+  # Look for the directory under a standard set of common directories.
   # Check X11 before X11Rn because it's often a symlink to the current release.
-  for ac_dir in                                        \
-    /usr/X11/lib/app-defaults                  \
-    /usr/X11R6/lib/app-defaults                        \
-    /usr/X11R6/lib/X11/app-defaults            \
-    /usr/X11R5/lib/app-defaults                        \
-    /usr/X11R5/lib/X11/app-defaults            \
-    /usr/X11R4/lib/app-defaults                        \
-    /usr/X11R4/lib/X11/app-defaults            \
-                                               \
-    /usr/lib/X11/app-defaults                  \
-    /usr/lib/X11R6/app-defaults                        \
-    /usr/lib/X11R5/app-defaults                        \
-    /usr/lib/X11R4/app-defaults                        \
-                                               \
-    /usr/local/X11/lib/app-defaults            \
-    /usr/local/X11R6/lib/app-defaults          \
-    /usr/local/X11R5/lib/app-defaults          \
-    /usr/local/X11R4/lib/app-defaults          \
-                                               \
-    /usr/local/lib/X11/app-defaults            \
-    /usr/local/lib/X11R6/app-defaults          \
-    /usr/local/lib/X11R6/X11/app-defaults      \
-    /usr/local/lib/X11R5/app-defaults          \
-    /usr/local/lib/X11R5/X11/app-defaults      \
-    /usr/local/lib/X11R4/app-defaults          \
-    /usr/local/lib/X11R4/X11/app-defaults      \
-                                               \
-    /usr/X386/lib/X11/app-defaults             \
-    /usr/x386/lib/X11/app-defaults             \
-    /usr/XFree86/lib/X11/app-defaults          \
-                                               \
-    /usr/lib/X11/app-defaults                  \
-    /usr/local/lib/X11/app-defaults            \
-    /usr/unsupported/lib/X11/app-defaults      \
-    /usr/athena/lib/X11/app-defaults           \
-    /usr/local/x11r5/lib/X11/app-defaults      \
-    /usr/lpp/Xamples/lib/X11/app-defaults      \
-    /lib/usr/lib/X11/app-defaults              \
-                                               \
-    /usr/openwin/lib/app-defaults              \
-    /usr/openwin/lib/X11/app-defaults          \
-    /usr/openwin/share/lib/app-defaults                \
-    /usr/openwin/share/lib/X11/app-defaults    \
-                                               \
-    /X11R6/lib/app-defaults                    \
-    /X11R5/lib/app-defaults                    \
-    /X11R4/lib/app-defaults                    \
+  for ac_dir in                                 \
+    /usr/X11/lib/app-defaults                   \
+    /usr/X11R6/lib/app-defaults                 \
+    /usr/X11R6/lib/X11/app-defaults             \
+    /usr/X11R5/lib/app-defaults                 \
+    /usr/X11R5/lib/X11/app-defaults             \
+    /usr/X11R4/lib/app-defaults                 \
+    /usr/X11R4/lib/X11/app-defaults             \
+                                                \
+    /usr/lib/X11/app-defaults                   \
+    /usr/lib/X11R6/app-defaults                 \
+    /usr/lib/X11R5/app-defaults                 \
+    /usr/lib/X11R4/app-defaults                 \
+                                                \
+    /usr/local/X11/lib/app-defaults             \
+    /usr/local/X11R6/lib/app-defaults           \
+    /usr/local/X11R5/lib/app-defaults           \
+    /usr/local/X11R4/lib/app-defaults           \
+                                                \
+    /usr/local/lib/X11/app-defaults             \
+    /usr/local/lib/X11R6/app-defaults           \
+    /usr/local/lib/X11R6/X11/app-defaults       \
+    /usr/local/lib/X11R5/app-defaults           \
+    /usr/local/lib/X11R5/X11/app-defaults       \
+    /usr/local/lib/X11R4/app-defaults           \
+    /usr/local/lib/X11R4/X11/app-defaults       \
+                                                \
+    /usr/X386/lib/X11/app-defaults              \
+    /usr/x386/lib/X11/app-defaults              \
+    /usr/XFree86/lib/X11/app-defaults           \
+                                                \
+    /usr/lib/X11/app-defaults                   \
+    /usr/local/lib/X11/app-defaults             \
+    /usr/unsupported/lib/X11/app-defaults       \
+    /usr/athena/lib/X11/app-defaults            \
+    /usr/local/x11r5/lib/X11/app-defaults       \
+    /usr/lpp/Xamples/lib/X11/app-defaults       \
+    /lib/usr/lib/X11/app-defaults               \
+                                                \
+    /usr/openwin/lib/app-defaults               \
+    /usr/openwin/lib/X11/app-defaults           \
+    /usr/openwin/share/lib/app-defaults         \
+    /usr/openwin/share/lib/X11/app-defaults     \
+                                                \
+    /X11R6/lib/app-defaults                     \
+    /X11R5/lib/app-defaults                     \
+    /X11R4/lib/app-defaults                     \
     ; \
   do
     if test -d "$ac_dir"; then
@@ -210,12 +361,13 @@ AC_DEFUN(AC_PATH_X_APP_DEFAULTS_DIRECT,
   done
 ])
 
-
 AC_DEFUN(AC_PATH_X_APP_DEFAULTS,
   [AC_REQUIRE_CPP()
     AC_CACHE_CHECK([for X app-defaults directory], ac_cv_x_app_defaults,
      [AC_PATH_X_APP_DEFAULTS_XMKMF
-      AC_PATH_X_APP_DEFAULTS_DIRECT
+      if test x"$ac_x_app_defaults" = x; then
+        AC_PATH_X_APP_DEFAULTS_DIRECT
+      fi
       if test x"$ac_x_app_defaults" = x; then
         ac_cv_x_app_defaults="/usr/lib/X11/app-defaults"
       else
@@ -224,11 +376,143 @@ AC_DEFUN(AC_PATH_X_APP_DEFAULTS,
       fi])
     eval ac_x_app_defaults="$ac_cv_x_app_defaults"])
 
-AC_PATH_X_APP_DEFAULTS
 
-APPDEFAULTS=$ac_x_app_defaults
+AC_DEFUN(AC_XPOINTER,
+ [AC_CACHE_CHECK([for XPointer], ac_cv_xpointer,
+                 [AC_TRY_X_COMPILE([#include <X11/Xlib.h>],
+                                   [XPointer foo = (XPointer) 0;],
+                                   [ac_cv_xpointer=yes],
+                                   [ac_cv_xpointer=no])])
+  if test "$ac_cv_xpointer" != yes; then
+   AC_DEFINE(XPointer,[char*])
+  fi])
+
+
+# Random special-cases for X on certain pathological OSes.
+# You know who you are.
+#
+AC_DEFUN(AC_X_RANDOM_PATHS,
+ [case "$host" in
+    *-hpux*)
+
+      # The following arcana was gleaned from conversations with
+      # Eric Schwartz <erics@col.hp.com>:
+      #
+      # On HPUX 10.x, the parts of X that HP considers "standard" live in
+      # /usr/{include,lib}/X11R6/.  The parts that HP doesn't consider
+      # "standard", notably, Xaw and Xmu, live in /usr/contrib/X11R6/.
+      # Yet /usr/contrib/X11R6/ comes preinstalled on all HPUX systems.
+      # Also, there are symlinks from /usr/include/ and /usr/lib/ into
+      # /usr/{include,lib}/X11R6/, so that (if you don't use Xmu at all)
+      # you don't need any -I or -L arguments.
+      #
+      # On HPUX 9.x, /usr/{include,lib}/X11R5/ and /usr/contrib/X11R5/
+      # are the same division as 10.x.  However, there are no symlinks to
+      # the X stuff from /usr/include/ and /usr/lib/, so -I and -L
+      # arguments are always necessary.
+      #
+      # However, X11R6 was available on HPUX 9.x as a patch: if that
+      # patch was installed, then all of X11R6 went in to
+      # /usr/contrib/X11R6/ (there was no /usr/{include,lib}/X11R6/.)
+      #
+      # HPUX 8.x was the same as 9.x, but was X11R4 instead (I don't know
+      # whether R5 was available as a patch; R6 undoubtedly was not.)
+      #
+      # So.  We try and use the highest numbered pair of
+      # /usr/{include,lib}/X11R?/ and /usr/contrib/X11R?/{include,lib}/
+      # that are available.  We do not mix and match different versions
+      # of X.
+      #
+      # Question I still don't know the answer to: (do you?)
+      #
+      #   * On HPUX 9.x, where /usr/include/X11R5/ was standard, and
+      #     /usr/contrib/X11R6/ could be installed as a patch, what was in
+      #     that contrib directory?  Did it contain so-called "standard"
+      #     X11R6, or did it include Xaw and Xmu as well?  If the former,
+      #     where did one find Xaw and Xmu on 9.x R6 systems?  Would this
+      #     be a situation where one had to reach into the R5 headers and
+      #     libs to find Xmu?  That is, must both R6 and R5 directories
+      #     be on the -I and -L lists in that case?
+      #
+      for version in X11R6 X11R5 X11R4 ; do
+        # if either pair of directories exists...
+        if test -d /usr/lib/$version || test -d /usr/contrib/$version/lib
+        then
+           # if contrib exists, use it...
+           if test -d /usr/contrib/$version/lib ; then
+             X_CFLAGS="$X_CFLAGS -I/usr/contrib/$version/include"
+             X_LIBS="$X_LIBS -L/usr/contrib/$version/lib"
+           fi
+           # if the "standard" one exists, use it.
+           if test -d /usr/lib/$version ; then
+             X_CFLAGS="$X_CFLAGS -I/usr/include/$version"
+             X_LIBS="$X_LIBS -L/usr/lib/$version"
+           fi
+           # since at least one of the pair exists, go no farther.
+           break
+        fi
+      done
+
+      # Now find Motif.  Thanks for not making xmkmf find this by
+      # default, you losers.
+      #
+      if test -d /usr/lib/Motif1.2 ; then
+        X_CFLAGS="$X_CFLAGS -I/usr/include/Motif1.2"
+        X_LIBS="$X_LIBS -L/usr/lib/Motif1.2"
+      elif test -d /usr/lib/Motif1.1 ; then
+        X_CFLAGS="$X_CFLAGS -I/usr/include/Motif1.1"
+        X_LIBS="$X_LIBS -L/usr/lib/Motif1.1"
+      fi
+
+      # Now let's check for the pseudo-standard locations for OpenGL and XPM.
+      #
+      if test -d /opt/Mesa/lib ; then
+        X_CFLAGS="-I/opt/Mesa/include $X_CFLAGS"
+        X_LIBS="-L/opt/Mesa/lib $X_LIBS"
+      fi
+
+      if test -d /opt/xpm/lib/X11 ; then
+        X_CFLAGS="-I/opt/xpm/include $X_CFLAGS"
+        X_LIBS="-L/opt/xpm/lib/X11 $X_LIBS"
+      fi
+
+      # On HPUX, default to installing in /opt/xscreensaver/ instead of
+      # in /usr/local/, unless there is already an xscreensaver in
+      # /usr/local/bin/.  This can be overridden with the --prefix arg
+      # to configure.  I'm not sure this is the right thing to do, but
+      # Richard Lloyd says so...
+      #
+      if test \! -x /usr/local/bin/xscreensaver ; then
+        ac_default_prefix=/opt/xscreensaver
+      fi
+
+    ;;
+    *-solaris*)
+
+      # Thanks for not making xmkmf find this by default, pinheads.
+      # And thanks for moving things around again, too.  Is this
+      # really the standard location now?  What happened to the
+      # joke that this kind of thing went in /opt?
+      # cthomp says "answer: CDE (Common Disorganized Environment)"
+      #
+      if test -f /usr/dt/include/Xm/Xm.h ; then
+        X_CFLAGS="$X_CFLAGS -I/usr/dt/include"
+        X_LIBS="$X_LIBS -L/usr/dt/lib -R:/usr/dt/lib"
+
+        # Some versions of Slowlaris Motif require -lgen.  But not all.  Why?
+        AC_CHECK_LIB(gen, regcmp, [X_LIBS="$X_LIBS -lgen"])
+      fi
+    ;;
+  esac])
 
 
+
+###############################################################################
+#
+#       Some utility functions to make checking for X things easier.
+#
+###############################################################################
+
 # Like AC_CHECK_HEADER, but it uses the already-computed -I directories.
 #
 AC_DEFUN(AC_CHECK_X_HEADER, [
@@ -269,22 +553,25 @@ AC_DEFUN(AC_TRY_X_COMPILE, [
 AC_DEFUN(AC_CHECK_X_LIB, [
   ac_save_CPPFLAGS="$CPPFLAGS"
   ac_save_LDFLAGS="$LDFLAGS"
+#  ac_save_LIBS="$LIBS"
+
   if test \! -z "$includedir" ; then 
     CPPFLAGS="$CPPFLAGS -I$includedir"
   fi
-  if test \! -z "$includedir" ; then 
-    CPPFLAGS="$CPPFLAGS -I$includedir"
-  fi
+  # note: $X_CFLAGS includes $x_includes
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
   if test \! -z "$libdir" ; then
     LDFLAGS="$LDFLAGS -L$libdir"
   fi
-  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-  if test \! -z "$x_libraries" ; then
-    LDFLAGS="$LDFLAGS -L$x_libraries"
-  fi
+  # note: $X_LIBS includes $x_libraries
+  LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
+
   AC_CHECK_LIB([$1], [$2], [$3], [$4], [$5])
   CPPFLAGS="$ac_save_CPPFLAGS"
-  LDFLAGS="$ac_save_LDFLAGS"])
+  LDFLAGS="$ac_save_LDFLAGS"
+#  LIBS="$ac_save_LIBS"
+  ])
 
 # Like AC_TRY_RUN, but it uses the already-computed -I directories.
 # (But not the -L directories!)
@@ -300,75 +587,127 @@ AC_DEFUN(AC_TRY_X_RUN, [
 
 
 
+# Usage: HANDLE_X_PATH_ARG([variable_name],
+#                          [--command-line-option],
+#                          [descriptive string])
+#
+# All of the --with options take three forms:
+#
+#   --with-foo (or --with-foo=yes)
+#   --without-foo (or --with-foo=no)
+#   --with-foo=/DIR
+#
+# This function, HANDLE_X_PATH_ARG, deals with the /DIR case.  When it sees
+# a directory (string beginning with a slash) it checks to see whether
+# /DIR/include and /DIR/lib exist, and adds them to $X_CFLAGS and $X_LIBS
+# as appropriate.
+#
+AC_DEFUN(HANDLE_X_PATH_ARG, [
+   case "$[$1]" in
+    yes) ;;
+    no)  ;;
+
+    /*)
+     AC_MSG_CHECKING([for [$3] headers])
+     d=$[$1]/include
+     if test -d $d; then
+       X_CFLAGS="-I$d $X_CFLAGS"
+       AC_MSG_RESULT($d)
+     else
+       AC_MSG_RESULT(not found ($d: no such directory))
+     fi
+
+     AC_MSG_CHECKING([for [$3] libs])
+     d=$[$1]/lib
+     if test -d $d; then
+       X_LIBS="-L$d $X_LIBS"
+       AC_MSG_RESULT($d)
+     else
+       AC_MSG_RESULT(not found ($d: no such directory))
+     fi
+
+     # replace the directory string with "yes".
+     [$1]_req="yes"
+     [$1]=$[$1]_req
+     ;;
 
+    *)
+     echo ""
+     echo "error: argument to [$2] must be \"yes\", \"no\", or a directory."
+     echo "       If it is a directory, then \`DIR/include' will be added to"
+     echo "       the -I list, and \`DIR/lib' will be added to the -L list."
+     exit 1
+     ;;
+   esac
+  ])
 
-# check for the HP XHPDisableReset server extension headers.
-#
-AC_EGREP_X_HEADER(XHPDisableReset, X11/XHPlib.h,
-                 [AC_DEFINE(HAVE_XHPDISABLERESET)
-                  SAVER_LIBS="-lXhp11 $SAVER_LIBS"])
 
 
-# Check for the availability of the XPointer typedef, and define it otherwise.
+###############################################################################
+###############################################################################
 #
-AC_CACHE_CHECK([for XPointer], ac_cv_xpointer,
-               [AC_TRY_X_COMPILE([#include <X11/Xlib.h>],
-                                 [XPointer foo = (XPointer) 0;],
-                                 [ac_cv_xpointer=yes],
-                                 [ac_cv_xpointer=no])])
-if test $ac_cv_xpointer != yes; then
-  AC_DEFINE(XPointer,[char*])
-fi
+#       End of function definitions.  Now start actually executing stuff.
+#
+###############################################################################
+###############################################################################
 
+# random compiler setup
+AC_CANONICAL_HOST
+AC_PROG_CC_ANSI
+AC_PROG_CPP
+AC_C_CONST
+AC_C_INLINE
 
-case "$host" in
-  *-hpux*)
-    # Thanks for not making xmkmf find this by default, you losers.
-    if test -d /usr/lib/Motif1.2 ; then
-      X_CFLAGS="-I/usr/include/Motif1.2 $X_CFLAGS"
-      X_LIBS="-L/usr/lib/Motif1.2 $X_LIBS"
-    elif test -d /usr/lib/Motif1.1 ; then
-      X_CFLAGS="-I/usr/include/Motif1.1 $X_CFLAGS"
-      X_LIBS="-L/usr/lib/Motif1.1 $X_LIBS"
-    fi
+# stuff for Makefiles
+AC_PROG_INSTALL
+AC_PROG_INSTALL_DIRS
+AC_PROG_MAKE_SET
 
-    # This too.  You losers.
-    if test -d /usr/contrib/X11R6/include ; then
-      X_CFLAGS="-I/usr/contrib/X11R6/include $X_CFLAGS"
-      X_LIBS="-L/usr/contrib/X11R6/lib $X_LIBS"
-    elif test -d /usr/X11R6/include ; then
-      X_CFLAGS="-I/usr/X11R6/include $X_CFLAGS"
-      X_LIBS="-L/usr/X11R6/lib $X_LIBS"
-    elif test -d /usr/contrib/X11R5/include ; then
-      X_CFLAGS="-I/usr/contrib/X11R5/include $X_CFLAGS"
-      X_LIBS="-L/usr/contrib/X11R5/lib $X_LIBS"
-    elif test -d /usr/X11R5/include ; then
-      X_CFLAGS="-I/usr/X11R5/include $X_CFLAGS"
-      X_LIBS="-L/usr/X11R5/lib $X_LIBS"
-    fi
+# random libc stuff
+AC_HEADER_STDC
+AC_CHECK_HEADERS(unistd.h)
+AC_TYPE_MODE_T
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+AC_TYPE_SIGNAL
+AC_HEADER_TIME
+AC_HEADER_SYS_WAIT
+AC_HEADER_DIRENT
+AC_GETTIMEOFDAY_ARGS
+AC_CHECK_FUNCS(select fcntl uname nice setpriority getcwd getwd putenv)
 
-  ;;
-  *-solaris*)
-    # Same to you, pinheads.  (Is this really the standard location now?
-    # What happened to the joke that this kind of thing went in /opt?)
-    # cthomp says "answer: CDE (Common Disorganized Environment)"
-    if test -f /usr/dt/include/Xm/Xm.h ; then
-      X_CFLAGS="$X_CFLAGS -I/usr/dt/include"
-      X_LIBS="$X_LIBS -L/usr/dt/lib -R:/usr/dt/lib"
-
-      # Some versions of Slowlaris Motif require -lgen.  But not all.  Why?
-      AC_CHECK_LIB(gen, regcmp, [X_LIBS="$X_LIBS -lgen"])
-    fi
-  ;;
-esac
+AC_CHECK_FUNCS(sigaction syslog realpath)
+AC_CHECK_ICMP
+AC_CHECK_ICMPHDR
+AC_CHECK_HEADERS(crypt.h sys/select.h)
+AC_PROG_PERL
+
+if test -z "$PERL" ; then
+  # don't let it be blank...
+  PERL=/usr/local/bin/perl5
+fi
+
+AC_PATH_XTRA
+
+if test "$have_x" != yes; then
+  AC_MSG_ERROR(Couldn't find X11 headers/libs.  Try \`$0 --help'.)
+fi
+
+AC_PATH_X_APP_DEFAULTS
+AC_X_RANDOM_PATHS
+AC_XPOINTER
 
 
 
-# Check for Xmu (some fucked up vendors don't ship it...)
+###############################################################################
 #
+#       Check for -lXmu (some fucked up vendors don't ship it...)
+#
+###############################################################################
+
 have_xmu=no
 AC_CHECK_X_HEADER(X11/Xmu/Error.h, [have_xmu=yes])
-if test $have_xmu = no ; then
+if test "$have_xmu" = no ; then
   XMU_SRCS='$(UTILS_SRC)/xmu.c'
   XMU_OBJS='$(UTILS_BIN)/xmu.o'
 else
@@ -376,41 +715,48 @@ else
   XMU_OBJS=''
   SAVER_LIBS="-lXmu $SAVER_LIBS"
   HACK_LIBS="-lXmu $HACK_LIBS"
+  MOTIF_LIBS="-lXmu $MOTIF_LIBS"
+  GTK_LIBS="-lXmu $GTK_LIBS"
   AC_DEFINE(HAVE_XMU)
 fi
 
 
-# See comp.windows.x FAQ question 124 about _get_wmShellWidgetClass on 4.1.x.
-# The right fix is to get OpenWindows 3.0 patches 100512-02 and 100573-03.
+###############################################################################
 #
-if test $have_xmu = yes ; then
+#       Check for the SunOS 4.1.x _get_wmShellWidgetClass bug.
+#       See comp.windows.x FAQ question 124.  The right fix is to
+#       get OpenWindows 3.0 patches 100512-02 and 100573-03.
+#
+###############################################################################
+
+if test "$have_xmu" = yes ; then
   case "$host" in
     *-sunos4*)
     AC_CACHE_CHECK([for the SunOS 4.1.x _get_wmShellWidgetClass bug],
-                  ac_cv_sunos_xmu_bug,
-                  [ac_save_LDFLAGS="$LDFLAGS"
-                   if test \! -z "$x_libraries" ; then
-                     LDFLAGS="$LDFLAGS -L$x_libraries"
-                   fi
-                   # Note: this trick never works!  (Generally.)
-                   # We're only getting away with using AC_TRY_LINK
-                   # with X libraries because we know it's SunOS.
-                   LDFLAGS="$LDFLAGS -lXmu -lXt -lX11 -lXext -lm"
-                   AC_TRY_LINK(,,
-                               [ac_cv_sunos_xmu_bug=no],
-                               [ac_cv_sunos_xmu_bug=yes])
-                   LDFLAGS="$ac_save_LDFLAGS"])
-    if test $ac_cv_sunos_xmu_bug = yes ; then
+                   ac_cv_sunos_xmu_bug,
+                   [ac_save_LDFLAGS="$LDFLAGS"
+                    if test \! -z "$x_libraries" ; then
+                      LDFLAGS="$LDFLAGS -L$x_libraries"
+                    fi
+                    # Note: this trick never works!  (Generally.)
+                    # We're only getting away with using AC_TRY_LINK
+                    # with X libraries because we know it's SunOS.
+                    LDFLAGS="$LDFLAGS -lXmu -lXt -lX11 -lXext -lm"
+                    AC_TRY_LINK(,,
+                                [ac_cv_sunos_xmu_bug=no],
+                                [ac_cv_sunos_xmu_bug=yes])
+                    LDFLAGS="$ac_save_LDFLAGS"])
+    if test "$ac_cv_sunos_xmu_bug" = yes ; then
       AC_CACHE_CHECK([whether the compiler understands -static], 
-                    ac_cv_ld_static,
-                    [ac_save_LDFLAGS="$LDFLAGS"
-                     LDFLAGS="$LDFLAGS -static"
-                     AC_TRY_LINK(,,[ac_cv_ld_static=yes],[ac_cv_ld_static=no])
-                   LDFLAGS="$ac_save_LDFLAGS"])
-      if test $ac_cv_ld_static = yes ; then
+                     ac_cv_ld_static,
+                     [ac_save_LDFLAGS="$LDFLAGS"
+                      LDFLAGS="$LDFLAGS -static"
+                      AC_TRY_LINK(,,[ac_cv_ld_static=yes],[ac_cv_ld_static=no])
+                    LDFLAGS="$ac_save_LDFLAGS"])
+      if test "$ac_cv_ld_static" = yes ; then
         LDFLAGS="$LDFLAGS -static"
       else
-       LDFLAGS="$LDFLAGS -Bstatic"
+        LDFLAGS="$LDFLAGS -Bstatic"
       fi
     fi
     ;;
@@ -418,477 +764,1417 @@ if test $have_xmu = yes ; then
 fi
 
 
-# Check for the SGI SCREEN_SAVER server extension header.
+###############################################################################
+#
+#       Handle the --enable-subdir option
+#
+###############################################################################
+
+AC_ARG_ENABLE(subdir,[
+Installation options:
+
+  --enable-subdir=DIR     Put the demo programs in a subdirectory of \`bindir',
+                          instead of putting them in bindir itself.  You can
+                          specify the name of the subdirectory.  For example,
+                          \`--exec-prefix=/usr/local --enable-subdir=demos'
+                          would put xscreensaver in /usr/local/bin/, and would
+                          put the demos in /usr/local/bin/demos/.  (If DIR
+                          begins with /, then bindir will not be prepended.)
+
+  --disable-subdir        Just put the demos in \`bindir' (this is the default.)
+],
+  [enable_subdir="$enableval"],[enable_subdir=no])
+if test x"$enable_subdir" = xno; then
+  HACKDIR='${bindir}'
+elif test x"$enable_subdir" = xyes -o x"$enable_subdir" = x ; then
+  echo "error: must be a subdirectory name: --enable-subdir=$enable_subdir"
+  exit 1
+else
+  # there must be a better way than this...
+  if test -z "`echo $enable_subdir | sed 's@^/.*@@'`" ; then
+    # absolute path
+    HACKDIR=$enable_subdir
+  else
+    # relative path
+    HACKDIR='${bindir}/'$enable_subdir
+  fi
+fi
+
+# canonicalize slashes.
+HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'`
+
+
+###############################################################################
+#
+#       Check for the SGI SCREEN_SAVER server extension.
 #
+###############################################################################
+
 have_sgi=no
 with_sgi_req=unspecified
-AC_ARG_WITH(sgi-ext,[
-Server options:
+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.
 
-  --with-sgi-ext          Include support for the SGI SCREEN_SAVER
-                          server extension, if possible (this is the default).
-  --without-sgi-ext       Do not compile in support for this extension.],
+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])
-if test $with_sgi = yes; then
+
+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)])
+                    [have_sgi=yes
+                     AC_DEFINE(HAVE_SGI_SAVER_EXTENSION)])
 
-elif test $with_sgi != no; then
+elif test "$with_sgi" != no; then
   echo "error: must be yes or no: --with-sgi-ext=$with_sgi"
   exit 1
 fi
 
-# Check for the MIT-SCREEN-SAVER server extension header,
-# unless the SGI extension has already been found.
+
+###############################################################################
 #
+#       Check for the MIT-SCREEN-SAVER server extension.
+#
+###############################################################################
+
 have_mit=no
 with_mit_req=unspecified
 AC_ARG_WITH(mit-ext,
-[  --with-mit-ext          Include support for the MIT-SCREEN-SAVER
-                          server extension, if possible (this is the default).
-  --without-mit-ext       Do not compile in support for this extension.],
+[  --with-mit-ext          Include support for the MIT-SCREEN-SAVER extension.],
   [with_mit="$withval"; with_mit_req="$withval"],[with_mit=yes])
-if test $have_sgi != yes; then
-  if test $with_mit = yes; then
-    AC_CHECK_X_HEADER(X11/extensions/scrnsaver.h, [have_mit=yes])
 
-    # Now check to see if it's really in the library; XF86Free-3.3 ships
-    # scrnsaver.h, but doesn't include the code in libXext.a, the idiots!
-    #
-    if test $have_mit = yes; then
-      AC_CHECK_X_LIB(Xext, XScreenSaverRegister, [], [have_mit=no], -lm)
-
-      if test $have_mit = no; then
-       # Fuck!  Looks like XF86Free-3.3 actually puts it in XExExt instead
-       # of in Xext.  Thank you master, may I have another.
-        AC_CHECK_X_LIB(XExExt, XScreenSaverRegister,
-                      [have_mit=yes; SAVER_LIBS="$SAVER_LIBS -lXExExt"],
-                      [], -lX11 -lXext -lm)
-      fi
+HANDLE_X_PATH_ARG(with_mit, --with-mit-ext, MIT-SCREEN-SAVER)
 
-      if test $have_mit = no; then
-       # Double fuck!  Looks like some versions of XFree86 (whichever version
-       # it is that comes with RedHat Linux 2.0 -- I can't find a version 
-       # number) put this garbage in Xss instead of Xext.  Thank you master,
-       #  may I have another.
-        AC_CHECK_X_LIB(Xss, XScreenSaverRegister,
-                      [have_mit=yes; SAVER_LIBS="$SAVER_LIBS -lXss"],
-                      [], -lX11 -lXext -lm)
-      fi
+if test "$with_mit" = yes; then
+  AC_CHECK_X_HEADER(X11/extensions/scrnsaver.h, [have_mit=yes])
 
-    if test $have_mit = yes; then
-      AC_DEFINE(HAVE_MIT_SAVER_EXTENSION)
+  # Now check to see if it's really in the library; XF86Free-3.3 ships
+  # scrnsaver.h, but doesn't include the code in libXext.a, the idiots!
+  #
+  if test "$have_mit" = yes; then
+    AC_CHECK_X_LIB(Xext, XScreenSaverRegister, [true], [have_mit=no], -lm)
+
+    if test "$have_mit" = no; then
+      # Fuck!  Looks like XF86Free-3.3 actually puts it in XExExt instead
+      # of in Xext.  Thank you master, may I have another.
+      AC_CHECK_X_LIB(XExExt, XScreenSaverRegister,
+                     [have_mit=yes; SAVER_LIBS="$SAVER_LIBS -lXExExt"],
+                     [true], -lX11 -lXext -lm)
     fi
 
+    if test "$have_mit" = no; then
+      # Double fuck!  Looks like some versions of XFree86 (whichever version
+      # it is that comes with RedHat Linux 2.0 -- I can't find a version 
+      # number) put this garbage in Xss instead of Xext.  Thank you master,
+      #  may I have another.
+      AC_CHECK_X_LIB(Xss, XScreenSaverRegister,
+                     [have_mit=yes; SAVER_LIBS="$SAVER_LIBS -lXss"],
+                     [true], -lX11 -lXext -lm)
     fi
 
-  elif test $with_mit != no; then
-    echo "error: must be yes or no: --with-mit-ext=$with_mit"
-    exit 1
+  if test "$have_mit" = yes; then
+    AC_DEFINE(HAVE_MIT_SAVER_EXTENSION)
+  fi
+
   fi
+
+elif test "$with_mit" != no; then
+  echo "error: must be yes or no: --with-mit-ext=$with_mit"
+  exit 1
 fi
 
 
-# Check for the XIDLE server extension header.
+###############################################################################
+#
+#       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 server extension,
-                          if possible (this is the default).
-  --without-xidle-ext     Do not compile in support for this extension.],
+[  --with-xidle-ext        Include support for the XIDLE extension.],
   [with_xidle="$withval"; with_xidle_req="$withval"],[with_xidle=yes])
-if test $with_xidle = yes; then
+
+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)])
-elif test $with_xidle != no; then
+                    [have_xidle=yes
+                     AC_DEFINE(HAVE_XIDLE_EXTENSION)])
+elif test "$with_xidle" != no; then
   echo "error: must be yes or no: --with-xidle-ext=$with_xidle"
   exit 1
 fi
 
 
-# Check for the XSHM server extension header.
+###############################################################################
 #
-have_xshm=no
-with_xshm_req=unspecified
-AC_ARG_WITH(xshm-ext,
-[  --with-xshm-ext         Include support for the XSHM (Shared Memory) server
-                          extension, if possible (this is the default).
-  --without-xshm-ext      Do not compile in support for this extension.],
-  [with_xshm="$withval"; with_xshm_req="$withval"],[with_xshm=yes])
-if test $with_xshm = yes; then
+#       Check for the SGI-VIDEO-CONTROL server extension.
+#
+###############################################################################
 
-  # first check for Xshm.h.
-  AC_CHECK_X_HEADER(X11/extensions/XShm.h, [have_xshm=yes])
+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])
 
-  # if that succeeded, then check for sys/ipc.h.
-  if test $have_xshm = yes; then
-    have_xshm=no
-    AC_CHECK_X_HEADER(sys/ipc.h, [have_xshm=yes])
-  fi
+HANDLE_X_PATH_ARG(with_sgivc, --with-sgivc-ext, SGI-VIDEO-CONTROL)
 
-  # if that succeeded, then check for sys/shm.h.
-  if test $have_xshm = yes; then
-    have_xshm=no
-    AC_CHECK_X_HEADER(sys/shm.h, [have_xshm=yes])
-  fi
+if test "$with_sgivc" = yes; then
 
-  # AIX is pathological, as usual: apparently it's normal for the Xshm headers
-  # to exist, but the library code to not exist.  And even better, the library
-  # code is in its own library: libXextSam.a.  So, if we're on AIX, and that
-  # lib doesn't exist, give up.
-  #
-  case "$host" in
-    *-aix*)
-      have_xshm=no
-      AC_CHECK_X_LIB(XextSam, XShmQueryExtension,
-                    [have_xshm=yes; SAVER_LIBS="$SAVER_LIBS -lXextSam"],
-                      [], -lX11 -lXext -lm)
-    ;;
-  esac
+  # first check for XSGIvc.h
+  AC_CHECK_X_HEADER(X11/extensions/XSGIvc.h, [have_sgivc=yes])
+
+  # 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_xshm = yes; then
-    AC_DEFINE(HAVE_XSHM_EXTENSION)
+  if test "$have_sgivc" = yes; then
+    AC_DEFINE(HAVE_SGI_VC_EXTENSION)
   fi
 
-elif test $with_xshm != no; then
-  echo "error: must be yes or no: --with-xshm-ext=$with_xshm"
+elif test "$with_sgivc" != no; then
+  echo "error: must be yes or no: --with-sgivc-ext=$with_sgivc"
   exit 1
 fi
 
 
-# Check for the SGI-VIDEO-CONTROL server extension header.
+###############################################################################
 #
-have_sgivc=no
-with_sgivc_req=unspecified
-AC_ARG_WITH(sgivc-ext,
-[  --with-sgivc-ext        Include support for the SGI-VIDEO-CONTROL server
-                          extension, if possible (this is the default).
-  --without-sgivc-ext     Do not compile in support for this extension.],
-  [with_sgivc="$withval"; with_sgivc_req="$withval"],[with_sgivc=yes])
-if test $with_sgivc = yes; then
+#       Check for the DPMS server extension.
+#
+###############################################################################
 
-  # first check for XSGIvc.h
-  AC_CHECK_X_HEADER(X11/extensions/XSGIvc.h, [have_sgivc=yes])
+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])
 
-  # 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"], [],
-                 -lXext -lX11)
+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])
+
+  # if that succeeded, then check for the -lXdpms
+  if test "$have_dpms" = yes; then
+    have_dpms=no
+    AC_CHECK_X_LIB(Xdpms, DPMSInfo,
+                  [have_dpms=yes; SAVER_LIBS="$SAVER_LIBS -lXdpms"], [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)
+  if test "$have_dpms" = yes; then
+    AC_DEFINE(HAVE_DPMS_EXTENSION)
   fi
 
-elif test $with_sgivc != no; then
-  echo "error: must be yes or no: --with-sgivc-ext=$with_sgivc"
+elif test "$with_dpms" != no; then
+  echo "error: must be yes or no: --with-dpms-ext=$with_dpms"
   exit 1
 fi
 
 
+###############################################################################
+#
+#       Check for the XF86VMODE server extension.
+#
+###############################################################################
+
+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)
+
+if test "$with_xf86vmode" = yes; then
+
+  # first check for xf86vmode.h
+  AC_CHECK_X_HEADER(X11/extensions/xf86vmode.h, [have_xf86vmode=yes])
+
+  # 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; SAVER_LIBS="$SAVER_LIBS -lXxf86vm"],
+                   [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 HP XHPDisableReset and XHPEnableReset.
+#
+###############################################################################
+
+AC_EGREP_X_HEADER(XHPDisableReset, X11/XHPlib.h,
+                  [AC_DEFINE(HAVE_XHPDISABLERESET)
+                   SAVER_LIBS="-lXhp11 $SAVER_LIBS"])
+
+
+###############################################################################
+#
+#       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
+
+   AC_CACHE_CHECK([whether /proc/interrupts contains keyboard data],
+    ac_cv_have_proc_interrupts,
+    [ac_cv_have_proc_interrupts=no
+     if grep keyboard /proc/interrupts >/dev/null 2>&1 ; then
+       ac_cv_have_proc_interrupts=yes
+     fi
+    ])
+   have_proc_interrupts=$ac_cv_have_proc_interrupts
+
+  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"],[enable_locking=yes])
+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
+
+
+
+###############################################################################
+#
+#       The --enable-vt-locking option
+#
+###############################################################################
+
+#ac_vt_lockswitch=no
+#AC_ARG_ENABLE(vt-locking,[
+#  --enable-vt-locking     Compile in support for locking Virtual Terminals.
+#                          This is the default if the system supports it, and
+#                          if locking support is included (--enable-locking.)
+#  --disable-vt-locking    Do not allow locking of VTs, even if locking is
+#                          enabled.],
+#  [enable_vt_locking="$enableval"],[enable_vt_locking=yes])
+#if test "$enable_vt_locking" = yes; then
+#
+#  AC_CACHE_CHECK([for the VT_LOCKSWITCH ioctl], ac_cv_vt_lockswitch,
+#   [AC_TRY_COMPILE([#include <fcntl.h>
+#                   #include <sys/ioctl.h>
+#                   #include <sys/vt.h>],
+#                  [int x = VT_LOCKSWITCH; int y = VT_UNLOCKSWITCH;],
+#                  [ac_cv_vt_lockswitch=yes],
+#                  [ac_cv_vt_lockswitch=no])])
+#  ac_vt_lockswitch=$ac_cv_vt_lockswitch
+#
+#elif test "$enable_vt_locking" = no; then
+#  true
+#else
+#  echo "error: must be yes or no: --enable-vt-locking=$enable_vt_locking"
+#  exit 1
+#fi
+#
+#if test "$ac_vt_lockswitch" = yes; then
+#  AC_DEFINE(HAVE_VT_LOCKSWITCH)
+#  # the VT_LOCKSWITCH ioctl can only be used when running as root.
+#  # #### but it doesn't work yet, so don't worry about that for now.
+##  need_setuid=yes
+#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])
+
+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)
+    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"])
+
+    AC_MSG_CHECKING(how to call pam_strerror)
+    AC_CACHE_VAL(ac_cv_pam_strerror_args,
+     [AC_TRY_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_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
+  fi
+fi
+
+
+###############################################################################
+#
+#       Check for Kerberos.
+#
+###############################################################################
+
+have_kerberos=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], ac_cv_kerberos,
+                 [AC_TRY_X_COMPILE([#include <krb.h>],,
+                                   [ac_cv_kerberos=yes],
+                                   [ac_cv_kerberos=no])])
+  if test "$ac_cv_kerberos" = yes ; then
+    have_kerberos=yes
+    AC_DEFINE(HAVE_KERBEROS)
+
+    # from Tim Showalter <tjs+@andrew.cmu.edu>
+    PASSWD_LIBS="$PASSWD_LIBS -lkrb -ldes"
+    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 Motif and Athena --with and --without arguments.
+###############################################################################
+#
+#       Check for -lXm.
 #
+###############################################################################
+
 have_motif=no
-have_athena=no
 with_motif_req=unspecified
-with_athena_req=unspecified
-
 AC_ARG_WITH(motif,[
-Toolkit options:
+User interface options:
 
-  --with-motif            Use the Motif toolkit for the user interface,
-                          if possible (this is the default).
-  --without-motif         Do not use Motif.],
-  [with_motif="$withval"; with_motif_req="$withval"],[with_motif=no])
+  --with-motif            Use the Motif toolkit for the user interface.],
+  [with_motif="$withval"; with_motif_req="$withval"],[with_motif=yes])
 
-AC_ARG_WITH(athena,
-[  --with-athena           Use the Athena toolkit for the user interface, if
-                          possible (this is the default if Motif isn't used.)
-  --without-athena        Do not use Athena.],
-  [with_athena="$withval"; with_athena_req="$withval"],[with_athena=no])
+HANDLE_X_PATH_ARG(with_motif, --with-motif, Motif)
 
-if test $with_motif != yes -a $with_motif != no ; then
+if test "$with_motif" != yes -a "$with_motif" != no ; then
   echo "error: must be yes or no: --with-motif=$with_motif"
   exit 1
 fi
 
-if test $with_athena != yes -a $with_athena != no ; then
-  echo "error: must be yes or no: --with-athena=$with_athena"
+if test "$with_motif" = yes; then
+  have_motif=no
+  AC_CHECK_X_HEADER(Xm/Xm.h,
+                    [have_motif=yes
+                     AC_DEFINE(HAVE_MOTIF)
+                     MOTIF_LIBS="$MOTIF_LIBS -lXm"])
+fi
+
+
+if test "$have_motif" = yes; then
+  AC_CHECK_X_HEADER(Xm/ComboBox.h, [AC_DEFINE(HAVE_XMCOMBOBOX)])
+fi
+
+
+###############################################################################
+#
+#       Check for -lgtk.
+#
+###############################################################################
+
+have_gtk=no
+with_gtk_req=unspecified
+AC_ARG_WITH(gtk,
+[  --with-gtk              Use the Gtk toolkit for the user interface.],
+  [with_gtk="$withval"; with_gtk_req="$withval"],[with_gtk=yes])
+
+# if --with-gtk=/directory/ was specified, remember that directory so that
+# we can also look for the `gtk-config' program in that directory.
+case "$with_gtk" in
+  /*)
+    gtk_dir="$with_gtk"
+    ;;
+  *)
+    gtk_dir=""
+    ;;
+esac
+
+HANDLE_X_PATH_ARG(with_gtk, --with-gtk, Gtk)
+
+if test "$with_gtk" != yes -a "$with_gtk" != no ; then
+  echo "error: must be yes or no: --with-gtk=$with_gtk"
   exit 1
 fi
 
+jurassic_gtk=no
+if test "$with_gtk" = yes; then
+  have_gtk=no
+  
+  # if the user specified --with-gtk=/foo/ then look in /foo/bin/
+  # for glib-config and gtk-config.
+  #
+  gtk_path="$PATH"
+
+  if test ! -z "$gtk_dir"; then
+    # canonicalize slashes.
+    gtk_dir=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'`
+    gtk_path="$gtk_dir:$gtk_dir:$gtk_path"
+  fi
 
-# Saying --without-motif is the same as saying --with-athena.
-if test $with_motif_req = no ; then
-  with_athena_req=yes
-  with_athena=yes
+  AC_PATH_PROGS(glib_config, glib-config,, $gtk_path)
+  AC_PATH_PROGS(gtk_config,  gtk-config,,  $gtk_path)
+
+  if test -n "$glib_config" -a  -n "gtk_config" ; then
+    have_gtk=yes
+  fi
+  if test "$have_gtk" = yes; then
+    AC_CACHE_CHECK([Gtk version number], ac_cv_gtk_version_string,
+                   [ac_cv_gtk_version_string=`$glib_config --version`])
+    ac_gtk_version_string=$ac_cv_gtk_version_string
+    # M4 sucks!!
+    changequote(X,Y)
+    maj=`echo $ac_gtk_version_string | sed -n 's/\..*//p'`
+    min=`echo $ac_gtk_version_string | sed -n 's/[^.]*\.\([^.]*\).*/\1/p'`
+    changequote([,])
+    ac_gtk_version=`echo "$maj * 1000 + $min" | bc`
+    if test -z "$ac_gtk_version"; then
+      ac_gtk_version=unknown
+      ac_gtk_version_string=unknown
+    fi
+    if test "$ac_gtk_version" = "unknown" || test "$ac_gtk_version" -lt 1002
+    then
+      have_gtk=no
+      jurassic_gtk=yes
+    fi
+  fi
+  if test "$have_gtk" = yes; then
+    AC_CACHE_CHECK([for Gtk includes], ac_cv_gtk_config_cflags,
+                   [ac_cv_gtk_config_cflags=`$gtk_config --cflags`])
+    AC_CACHE_CHECK([for Gtk libs], ac_cv_gtk_config_libs,
+                   [ac_cv_gtk_config_libs=`$gtk_config --libs`])
+    INCLUDES="$INCLUDES $ac_cv_gtk_config_cflags"
+    GTK_LIBS="$GTK_LIBS $ac_cv_gtk_config_libs"
+    AC_DEFINE(HAVE_GTK)
+  fi
 fi
 
-# Saying --without-athena is the same as saying --with-motif.
-if test $with_athena_req = no ; then
-  with_motif_req=yes
-  with_motif=yes
+
+###############################################################################
+#
+#       Checking whether Motif is really Lesstif.
+#
+###############################################################################
+
+have_lesstif=no
+if test "$have_motif" = yes ; then
+  AC_CACHE_CHECK([whether Motif is really LessTif], 
+                 ac_cv_have_lesstif,
+                 [AC_TRY_X_COMPILE([#include <Xm/Xm.h>],
+                                   [long vers = LesstifVersion;],
+                                   [ac_cv_have_lesstif=yes],
+                                   [ac_cv_have_lesstif=no])])
+  have_lesstif=$ac_cv_have_lesstif
 fi
 
-# Check for Motif and Athena headers.
 
-check_motif() {
-  AC_CHECK_X_HEADER(Xm/Xm.h,
-                   [have_motif=yes
-                    AC_DEFINE(HAVE_MOTIF)
-                    SAVER_LIBS="-lXm $SAVER_LIBS"])
-}
+lesstif_version=unknown
+lesstif_version_string=unknown
+
+if test "$have_lesstif" = yes ; then
+  ltv=unknown
+  echo unknown > conftest-lt
+  AC_CACHE_CHECK([LessTif version number],
+                 ac_cv_lesstif_version_string,
+      [AC_TRY_X_RUN([#include <stdio.h>
+                     #include <Xm/Xm.h>
+                     int main() {
+                       FILE *f = fopen("conftest-lt", "w");
+                       if (!f) exit(1);
+                       fprintf(f, "%d %d.%d\n", LesstifVersion,
+                          LESSTIF_VERSION, LESSTIF_REVISION);
+                       fclose(f);
+                       exit(0);
+                     }],
+                    [ltv=`cat conftest-lt`
+                     ac_cv_lesstif_version=`echo $ltv | sed 's/ .*//'`
+                     ac_cv_lesstif_version_string=`echo $ltv | sed 's/.* //'`],
+                    [ac_cv_lesstif_version=unknown
+                     ac_cv_lesstif_version_string=unknown],
+                    [ac_cv_lesstif_version=unknown
+                     ac_cv_lesstif_version_string=unknown])])
+  rm -f conftest-lt
+  lesstif_version=$ac_cv_lesstif_version
+  lesstif_version_string=$ac_cv_lesstif_version_string
 
-check_athena() {
-  AC_CHECK_X_HEADER(X11/Xaw/Dialog.h,
-                  [have_athena=yes
-                   AC_DEFINE(HAVE_ATHENA)
-                   SAVER_LIBS="-lXaw $SAVER_LIBS"])
-}
+fi
 
 
-# If they asked for both motif and athena, check motif then athena.
-# If they asked for only motif, check motif then athena.
-# If they asked for only athena, check athena then motif.
-# If they asked for neither, check motif then athena.
+if test "$have_motif" = yes ; then
+  mtv=unknown
+  echo unknown > conftest-mt
+  AC_CACHE_CHECK([Motif version number],
+                 ac_cv_motif_version_string,
+      [AC_TRY_X_RUN([#include <stdio.h>
+                     #include <Xm/Xm.h>
+                     int main() {
+                       FILE *f = fopen("conftest-mt", "w");
+                       if (!f) exit(1);
+                       fprintf(f, "%d %d.%d\n", XmVersion,
+                          XmVERSION, XmREVISION);
+                       fclose(f);
+                       exit(0);
+                     }],
+                    [mtv=`cat conftest-mt`
+                     ac_cv_motif_version=`echo $mtv | sed 's/ .*//'`
+                     ac_cv_motif_version_string=`echo $mtv | sed 's/.* //'`],
+                    [ac_cv_motif_version=unknown
+                     ac_cv_motif_version_string=unknown],
+                    [ac_cv_motif_version=unknown
+                     ac_cv_motif_version_string=unknown])])
+  rm -f conftest-mt
+  motif_version=$ac_cv_motif_version
+  motif_version_string=$ac_cv_motif_version_string
 
-proselytize_motif=yes
-if test $with_motif = yes; then
-  # asked for both, or for motif only
-  check_motif
-  if test $have_motif = yes; then
-    with_athena=no
-    with_athena_req=no
-  else
-    check_athena
+fi
+
+
+###############################################################################
+#
+#       Checking whether Motif requires -lXpm.
+#
+#       If this is Motif 2.x, and we have XPM, then link against XPM as well.
+#       The deal is, Motif 2.x requires XPM -- but it's a compilation option
+#       of the library whether to build the XPM code into libXm, or whether
+#       to rely on an external libXm.  So the only way to tell whether XPM is
+#       a link-time requirement is to examine libXm.a, which is very
+#       difficult to do in an autoconf script.  So... if it's Motif 2.x, we
+#       always link against XPM if the XPM lib exists (and this will be a
+#       no-op if libXm happens to already have the XPM code in it.)
+#
+###############################################################################
+
+motif_requires_xpm=no
+if test "$have_motif" = yes ; then
+   AC_MSG_CHECKING(whether Motif requires XPM)
+   if test "$motif_version" = "unknown" || test "$motif_version" -ge 2000
+   then
+     motif_requires_xpm=yes
+     AC_MSG_RESULT(maybe)
+   else
+     AC_MSG_RESULT(no)
+   fi
+fi
+
+
+###############################################################################
+#
+#       Checking whether Motif requires -lXp.
+#
+#       Some versions of Motif (2.1.0, at least) require -lXp, the "X Printing
+#       Extension".   Why this extension isn't in -lXext with all the others,
+#       I have no idea.
+#
+###############################################################################
+
+have_xp_ext=no
+if test "$have_motif" = yes ; then
+   have_xp_ext=no
+   AC_CHECK_X_LIB(Xp, XpQueryExtension,
+                  [have_xp_ext=yes; MOTIF_LIBS="$MOTIF_LIBS -lXp"],
+                  [true], -lX11 -lXext -lm)
+fi
+
+
+###############################################################################
+#
+#       Checking whether Motif requires -lXintl (for _Xsetlocale.)
+#
+###############################################################################
+
+have_xintl=no
+if test "$have_motif" = yes ; then
+  AC_CHECK_X_LIB(Xintl, _Xsetlocale, [have_xintl=yes], [have_xintl=no],
+                 -lX11 -lXext -lm)
+  if test "$have_xintl" = yes; then
+    MOTIF_LIBS="$MOTIF_LIBS -lXintl"
   fi
+fi
 
-elif test $with_athena = yes; then
-  # asked for athena only
-  check_athena
-  if test $have_athena = yes; then
-    with_motif=no
-    proselytize_motif=no
-  else
-    check_motif
+
+###############################################################################
+#
+#       Check for -lGL or -lMesaGL.
+#
+###############################################################################
+
+have_gl=no
+ac_have_mesa_gl=no
+with_gl_req=unspecified
+gl_halfassed=no
+AC_ARG_WITH(gl,[
+Graphics options:
+
+  --with-gl               Build those demos which depend on OpenGL.],
+  [with_gl="$withval"; with_gl_req="$withval"],[with_gl=yes])
+
+HANDLE_X_PATH_ARG(with_gl, --with-gl, GL)
+
+ac_mesagl_version=unknown
+ac_mesagl_version_string=unknown
+
+if test "$with_gl" = yes; then
+  AC_CHECK_X_HEADER(GL/gl.h, have_gl=yes, have_gl=no)
+  if test "$have_gl" = yes ; then
+    AC_CHECK_X_HEADER(GL/glx.h, have_gl=yes, have_gl=no)
   fi
 
-else
-  # asked for neither
-  check_motif
-  if test $have_motif = yes; then
-    with_athena=no
-  else
-    check_athena
+  # If we have the headers, try and figure out which vendor it's from.
+  #
+  if test "$have_gl" = yes ; then
+
+    # We need to know whether it's MesaGL so that we know which libraries
+    # to link against.
+    #
+    AC_CACHE_CHECK([whether GL is really MesaGL], ac_cv_have_mesa_gl,
+      [ac_cv_have_mesa_gl=no
+       AC_EGREP_X_HEADER(Mesa, GL/glx.h, [ac_cv_have_mesa_gl=yes])
+      ])
+    ac_have_mesa_gl=$ac_cv_have_mesa_gl
+
+    gl_lib_1=""
+    GL_LIBS=""
+
+
+    # Some versions of MesaGL are compiled to require -lpthread.
+    # So if the Mesa headers exist, and -lpthread exists, then always
+    # link -lpthread after the Mesa libs (be they named -lGL or -lMesaGL.)
+    #
+    if test "$ac_have_mesa_gl" = yes; then
+      AC_CHECK_LIB(pthread, pthread_create, [GL_LIBS="-lpthread"], [],)
+    fi
+
+
+    # If we have Mesa headers, check to see if we can link against -lMesaGL.
+    # If we don't have Mesa headers, or we don't have -lMesaGL, try -lGL.
+    # Else, warn that GL is busted.  (We have the headers, but no libs.)
+    #
+
+    if test "$ac_have_mesa_gl" = yes ; then
+      AC_CHECK_X_LIB(MesaGL, glXCreateContext, 
+                     [gl_lib_1="MesaGL"
+                      GL_LIBS="-lMesaGL -lMesaGLU $GL_LIBS"],
+                     [], -lMesaGLU $GL_LIBS -lX11 -lXext -lm)
+    fi
+
+    if test "$gl_lib_1" = "" ; then
+      AC_CHECK_X_LIB(GL, glXCreateContext, 
+                     [gl_lib_1="GL"
+                      GL_LIBS="-lGL -lGLU $GL_LIBS"],
+                     [], -lGLU $GL_LIBS -lX11 -lXext -lm)
+    fi
+
+    if test "$gl_lib_1" = "" ; then
+      # we have headers, but no libs -- bail.
+      have_gl=no
+      ac_have_mesa_gl=no
+      gl_halfassed=yes
+    else
+      # linking works -- we can build the GL hacks.
+      AC_DEFINE(HAVE_GL)
+      if test "$ac_have_mesa_gl" = yes ; then
+        AC_DEFINE(HAVE_MESA_GL)
+      fi
+    fi
+  fi
+
+
+  # Now that we know we have GL headers and libs, do some more GL testing.
+  #
+
+  if test "$have_gl" = yes ; then
+    # If it's MesaGL, we'd like to issue a warning if the version number
+    # is less than or equal to 2.6, because that version had a security bug.
+    #
+    if test "$ac_have_mesa_gl" = yes; then
+
+      AC_CACHE_CHECK([MesaGL version number], ac_cv_mesagl_version_string,
+        [cat > conftest.$ac_ext <<EOF
+#line __oline__ "configure"
+#include "confdefs.h"
+#include <GL/gl.h>
+configure: MESA_MAJOR_VERSION MESA_MINOR_VERSION
+EOF
+
+         ac_save_CPPFLAGS="$CPPFLAGS"
+         if test \! -z "$includedir" ; then 
+           CPPFLAGS="$CPPFLAGS -I$includedir"
+         fi
+         CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+          # M4 sucks!!
+         changequote(X,Y)
+         mglv=`(eval "$ac_cpp conftest.$ac_ext") 2>&AC_FD_CC | sed -n \
+              's/^configure:.*\([0-9][0-9]*\).*\([0-9][0-9]*\).*$/\1.\2/p'`
+         changequote([,])
+
+         rm -f conftest.$ac_ext
+
+         CPPFLAGS="$ac_save_CPPFLAGS"
+
+         if test "$mglv" = ""; then
+           ac_mesagl_version=unknown
+           ac_mesagl_version_string=unknown
+         else
+           ac_mesagl_version_string=$mglv
+           maj=`echo $mglv | sed -n 's/\..*//p'`
+           min=`echo $mglv | sed -n 's/.*\.//p'`
+           ac_mesagl_version=`echo "$maj * 1000 + $min" | bc`
+           if test -z "$ac_mesagl_version"; then
+             ac_mesagl_version=unknown
+             ac_mesagl_version_string=unknown
+           fi
+         fi
+         ac_cv_mesagl_version=$ac_mesagl_version
+         ac_cv_mesagl_version_string=$ac_mesagl_version_string
+      ])
+      ac_mesagl_version=$ac_cv_mesagl_version
+      ac_mesagl_version_string=$ac_cv_mesagl_version_string
+    fi
+
+
+    # Check for OpenGL 1.1 features.
+    #
+    AC_CHECK_X_LIB($gl_lib_1, glBindTexture, [AC_DEFINE(HAVE_GLBINDTEXTURE)],
+                   [true], $GL_LIBS -lX11 -lXext -lm)
+
+
+    # Check whether the `xscreensaver' executable should link against GL.
+    # See comments in utils/visual-gl.c for why this is sometimes necessary.
+    #
+    AC_MSG_CHECKING(whether drastic GL measures must be taken)
+    case "$host" in
+      *-sgi*)
+        AC_MSG_RESULT([yes -- hello, SGI.])
+        AC_DEFINE(DAEMON_USE_GL)
+        SAVER_GL_SRCS='$(UTILS_SRC)/visual-gl.c'
+        SAVER_GL_OBJS='$(UTILS_BIN)/visual-gl.o'
+        SAVER_GL_LIBS="$GL_LIBS"
+      ;;
+      *)
+        AC_MSG_RESULT([no -- non-SGI.])
+        SAVER_GL_SRCS=''
+        SAVER_GL_OBJS=''
+        SAVER_GL_LIBS=''
+      ;;
+    esac
+
   fi
 
+elif test "$with_gl" != no; then
+  echo "error: must be yes or no: --with-gl=$with_gl"
+  exit 1
 fi
 
-if test $have_motif = yes; then
-  proselytize_motif=no
+
+###############################################################################
+#
+#       Check for -lgle.
+#
+###############################################################################
+
+have_gle=no
+with_gle_req=unspecified
+gle_halfassed=no
+AC_ARG_WITH(gle,
+[  --with-gle              Build those demos which depend on GLE
+                          (the OpenGL "extrusion" library.)],
+  [with_gle="$withval"; with_gle_req="$withval"],[with_gle=yes])
+
+HANDLE_X_PATH_ARG(with_gle, --with-gle, GLE)
+
+GLE_LIBS=""
+
+if test "$with_gle" = yes; then
+
+  AC_CHECK_X_HEADER(GL/gutil.h, have_gle=yes, have_gle=no)
+  if test "$have_gle" = yes ; then
+    AC_CHECK_X_HEADER(GL/tube.h, have_gle=yes, have_gle=no)
+  fi
+
+  if test "$have_gle" = yes ; then
+    have_gle=no
+    gle_halfassed=yes
+    AC_CHECK_X_LIB(gle, gleCreateGC, 
+                   [have_gle=yes; gle_halfassed=no; GLE_LIBS="-lgle"],
+                   [], $GL_LIBS -lX11 -lXext -lm)
+  fi
+  if test "$have_gle" = yes ; then
+    have_gle=no
+    gle_halfassed=yes
+
+    # sometimes the libmatrix stuff is included in libgle.  look there first.
+#
+# I don't get it.  For some reason, this test passes on SGI, as if
+# uview_direction_d() was in libgle -- but it's not, it's in libmatrix.
+# Yet the link is succeeding.  Why???
+#
+#    AC_CHECK_X_LIB(gle, uview_direction_d, 
+#                   [have_gle=yes; gle_halfassed=no],
+#                   [], $GL_LIBS -lX11 -lXext -lm)
+
+    # if it wasn't in libgle, then look in libmatrix.
+    if test "$have_gle" = no ; then
+      AC_CHECK_X_LIB(matrix, uview_direction_d, 
+                     [have_gle=yes; gle_halfassed=no;
+                      GLE_LIBS="$GLE_LIBS -lmatrix"],
+                    [], $GL_LIBS -lX11 -lXext -lm)
+    fi
+  fi
+
+  if test "$have_gle" = yes ; then
+    AC_DEFINE(HAVE_GLE)
+  fi
+
+elif test "$with_gle" != no; then
+  echo "error: must be yes or no: --with-gle=$with_gle"
+  exit 1
+
+fi
+
+
+
+###############################################################################
+#
+#       Check for -lXpm.
+#
+###############################################################################
+
+have_xpm=no
+with_xpm_req=unspecified
+AC_ARG_WITH(xpm,
+[  --with-xpm              Include support for XPM files in some demos.],
+  [with_xpm="$withval"; with_xpm_req="$withval"],[with_xpm=yes])
+
+HANDLE_X_PATH_ARG(with_xpm, --with-xpm, XPM)
+
+if test "$with_xpm" = yes; then
+  AC_CHECK_X_HEADER(X11/xpm.h,
+                   [have_xpm=yes
+                    AC_DEFINE(HAVE_XPM)
+                    XPM_LIBS="-lXpm"])
+elif test "$with_xpm" != no; then
+  echo "error: must be yes or no: --with-xpm=$with_xpm"
+  exit 1
 fi
 
-# If we have Athena, check whether it's a version that includes
-# XawViewportSetCoordinates in Viewport.h (R3 (or R4?) don't.)
-if test $have_athena = yes ; then
-  AC_CACHE_CHECK([for XawViewportSetCoordinates in Viewport.h], 
-                ac_cv_have_XawViewportSetCoordinates,
-                [ac_cv_have_XawViewportSetCoordinates=no
-                 AC_EGREP_X_HEADER(XawViewportSetCoordinates, 
-                                   X11/Xaw/Viewport.h,
-                                   ac_cv_have_XawViewportSetCoordinates=yes)])
-  if test $ac_cv_have_XawViewportSetCoordinates = yes ; then
-    AC_DEFINE(HAVE_XawViewportSetCoordinates)
+# See comment near $motif_requires_xpm, above.
+# Need to do this here, after both Motif and XPM have been checked for.
+#
+if test "$have_motif" = yes -a "$have_xpm" = yes ; then
+  if test "$motif_requires_xpm" = yes ; then
+    MOTIF_LIBS="$MOTIF_LIBS $XPM_LIBS"
   fi
 fi
 
 
-# If we have Motif, check whether it's really LessTif.
+###############################################################################
 #
-have_lesstif=no
-if test $have_motif = yes ; then
-  AC_CACHE_CHECK([whether Motif is really LessTif], 
-                ac_cv_have_lesstif,
-                [AC_TRY_X_COMPILE([#include <Xm/Xm.h>],
-                                  [long vers = LesstifVersion;],
-                                  [ac_cv_have_lesstif=yes],
-                                  [ac_cv_have_lesstif=no])])
-  have_lesstif=$ac_cv_have_lesstif
-fi
+#       Check for the XSHM server extension.
+#
+###############################################################################
 
-# don't cache this
-unset ac_cv_good_lesstif
+have_xshm=no
+with_xshm_req=unspecified
+AC_ARG_WITH(xshm-ext,
+[  --with-xshm-ext         Include support for the XSHM extension.],
+  [with_xshm="$withval"; with_xshm_req="$withval"],[with_xshm=yes])
 
-good_lesstif=no
-if test $have_lesstif = yes ; then
-  # It must be at least "GNU Lesstif 0.82".
-  # #### If you change this, also sync the warning message lower down.
-  AC_CACHE_CHECK([whether LessTif is of a recent enough vintage],
-                ac_cv_good_lesstif,
-                [AC_TRY_X_RUN([#include <Xm/Xm.h>
-                               int main() { exit(LesstifVersion < 82); }],
-                              [ac_cv_good_lesstif=yes],
-                              [ac_cv_good_lesstif=no],
-                              # cross compiling?  Make an ass out of umption.
-                              [ac_cv_good_lesstif=yes])])
-  good_lesstif=$ac_cv_good_lesstif
-fi
+HANDLE_X_PATH_ARG(with_xshm, --with-xshm-ext, XSHM)
 
+if test "$with_xshm" = yes; then
 
-# Some versions of Motif (2.1.0, at least) require -lXp, the "X Printing
-# Extension".   Why this extension isn't in -lXext with all the others,
-# I have no idea.
-#
-have_xp_ext=no
-if test $have_motif = yes ; then
-   have_xp_ext=no
-   AC_CHECK_X_LIB(Xp, XpQueryExtension,
-                 [have_xp_ext=yes; SAVER_LIBS="$SAVER_LIBS -lXp"],
-                 [], -lX11 -lXext -lm)
-fi
+  # first check for Xshm.h.
+  AC_CHECK_X_HEADER(X11/extensions/XShm.h, [have_xshm=yes])
 
+  # if that succeeded, then check for sys/ipc.h.
+  if test "$have_xshm" = yes; then
+    have_xshm=no
+    AC_CHECK_X_HEADER(sys/ipc.h, [have_xshm=yes])
+  fi
 
-# check for XPM header.
-#
-have_xpm=no
-with_xpm_req=unspecified
-AC_ARG_WITH(xpm,[
-Demo options:
+  # if that succeeded, then check for sys/shm.h.
+  if test "$have_xshm" = yes; then
+    have_xshm=no
+    AC_CHECK_X_HEADER(sys/shm.h, [have_xshm=yes])
+  fi
 
-  --with-xpm              Include support for XPM files in some demos,
-                          if possible (this is the default).
-  --without-xpm           Do not compile in support for XPM files.],
-  [with_xpm="$withval"; with_xpm_req="$withval"],[with_xpm=yes])
-if test $with_xpm = yes; then
-  AC_CHECK_X_HEADER(X11/xpm.h,
-                  [have_xpm=yes
-                   AC_DEFINE(HAVE_XPM)
-                   XPM_LIBS="-lXpm"])
-elif test $with_xpm != no; then
-  echo "error: must be yes or no: --with-xpm=$with_xpm"
+  # AIX is pathological, as usual: apparently it's normal for the Xshm headers
+  # to exist, but the library code to not exist.  And even better, the library
+  # code is in its own library: libXextSam.a.  So, if we're on AIX, and that
+  # lib doesn't exist, give up.  (This lib gets added to X_EXTRA_LIBS, and
+  # that's not quite right, but close enough.)
+  #
+  case "$host" in
+    *-aix*)
+      if [ `uname -v` -eq 3 ]; then
+        have_xshm=no
+        AC_CHECK_X_LIB(XextSam, XShmQueryExtension,
+                       [have_xshm=yes; X_EXTRA_LIBS="$X_EXTRA_LIBS -lXextSam"],
+                       [true], -lX11 -lXext -lm)
+      fi
+    ;;
+  esac
+
+  # if that succeeded, then we've really got it.
+  if test "$have_xshm" = yes; then
+    AC_DEFINE(HAVE_XSHM_EXTENSION)
+  fi
+
+elif test "$with_xshm" != no; then
+  echo "error: must be yes or no: --with-xshm-ext=$with_xshm"
   exit 1
 fi
 
 
-# check for the GL header
+###############################################################################
 #
-have_gl=no
-with_gl_req=unspecified
-AC_ARG_WITH(gl,
-[  --with-gl               Build those demos which depend on OpenGL,
-                          if possible (this is the default).
-  --without-gl            Do not build the OpenGL demos.],
-  [with_gl="$withval"; with_gl_req="$withval"],[with_gl=yes])
+#       Check for the DOUBLE-BUFFER server extension.
+#
+###############################################################################
 
-if test $with_gl = yes; then
-  AC_CHECK_X_HEADER(GL/gl.h, have_gl=yes, have_gl=no)
-  if test $have_gl = yes ; then
-    AC_CHECK_X_HEADER(GL/glx.h, have_gl=yes, have_gl=no)
-  fi
+have_xdbe=no
+with_xdbe_req=unspecified
+AC_ARG_WITH(xdbe-ext,
+[  --with-xdbe-ext         Include support for the DOUBLE-BUFFER extension.],
+  [with_xdbe="$withval"; with_xdbe_req="$withval"],[with_xdbe=yes])
 
-  # If we have the headers, try and figure out which vendor it's from.
-  #
-  if test $have_gl = yes ; then
+HANDLE_X_PATH_ARG(with_xdbe, --with-xdbe-ext, DOUBLE-BUFFER)
 
-    AC_DEFINE(HAVE_GL)
-    have_mesa_gl=no
-    AC_EGREP_X_HEADER(Mesa, GL/glx.h, [have_mesa_gl=yes])
-    if test $have_mesa_gl = no ; then
-      GL_LIBS="-lGL -lGLU"
-    else
-      AC_DEFINE(HAVE_MESA_GL)
-      GL_LIBS="-lMesaGL -lMesaGLU"
-    fi
+if test "$with_xdbe" = yes; then
+
+  AC_CHECK_X_HEADER(X11/extensions/Xdbe.h, [have_xdbe=yes])
+  if test "$have_xdbe" = yes; then
+    AC_DEFINE(HAVE_DOUBLE_BUFFER_EXTENSION)    
   fi
 
-elif test $with_gl != no; then
-  echo "error: must be yes or no: --with-gl=$with_gl"
+elif test "$with_xdbe" != no; then
+  echo "error: must be yes or no: --with-xdbe-ext=$with_xshm"
   exit 1
 fi
 
 
-# check for SGI XReadDisplay server extension header.
+###############################################################################
+#
+#       Check for the SGI XReadDisplay server extension.
 #
+#       Note: this has to be down here, rather than up with the other server
+#       extension tests, so that the output of `configure --help' is in the
+#       right order.  Arrgh!
+#
+###############################################################################
+
 have_readdisplay=no
 with_readdisplay_req=unspecified
 AC_ARG_WITH(readdisplay,
-[  --with-readdisplay      Include support for the XReadDisplay server
-                          extension if possible (this is the default).
-  --without-readdisplay   Do not compile in support for this extension.],
+[  --with-readdisplay      Include support for the XReadDisplay extension.],
   [with_readdisplay="$withval"; with_readdisplay_req="$withval"],
   [with_readdisplay=yes])
-if test $with_readdisplay = yes; then
+
+HANDLE_X_PATH_ARG(with_readdisplay, --with-readdisplay, XReadDisplay)
+
+if test "$with_readdisplay" = yes; then
   AC_CHECK_X_HEADER(X11/extensions/readdisplay.h,
-                   AC_DEFINE(HAVE_READ_DISPLAY_EXTENSION))
-elif test $with_readdisplay != no; then
+                    AC_DEFINE(HAVE_READ_DISPLAY_EXTENSION))
+elif test "$with_readdisplay" != no; then
   echo "error: must be yes or no: --with-readdisplay=$with_readdisplay"
   exit 1
 fi
 
 
-# check for SGI's Iris Video Library header.
+###############################################################################
 #
+#       Check for the SGI Iris Video Library.
+#
+###############################################################################
+
 have_sgivideo=no
 with_sgivideo_req=unspecified
 AC_ARG_WITH(sgivideo,
-[  --with-sgivideo         Include support for SGI's Iris Video Library
-                          if possible (this is the default).
-  --without-sgivideo       Do not compile in support for this library.],
+[  --with-sgivideo         Include support for SGI's Iris Video Library.],
   [with_sgivideo="$withval"; with_sgivideo_req="$withval"],
   [with_sgivideo=yes])
-if test $with_sgivideo = yes; then
+
+HANDLE_X_PATH_ARG(with_sgivideo, --with-sgivideo, Iris Video)
+
+if test "$with_sgivideo" = yes; then
   AC_CHECK_X_HEADER(dmedia/vl.h, have_sgivideo=yes)
-  if test $have_sgivideo = yes; then
+  if test "$have_sgivideo" = yes; then
     have_sgivideo=no
-    AC_CHECK_LIB(vl, vlOpenVideo, have_sgivideo=yes)
-    if test $have_sgivideo = yes; then
+    AC_CHECK_LIB(vl, vlOpenVideo, [have_sgivideo=yes])
+    if test "$have_sgivideo" = yes; then
       SGI_VIDEO_OBJS="$(UTILS_BIN)/sgivideo.o"
       SGI_VIDEO_LIBS="-lvl"
       AC_DEFINE(HAVE_SGI_VIDEO)
     fi
   fi
-elif test $with_sgivideo != no; then
+elif test "$with_sgivideo" != no; then
   echo "error: must be yes or no: --with-sgivideo=$with_sgivideo"
   exit 1
 fi
 
 
-
-# Try to find a program to generate random text.
+###############################################################################
+#
+#       Check for a program to generate random text.
 #
-# Zippy is funnier than the idiocy generally spat out by `fortune',
-# so try to find that, by invoking Emacs and asking it where its 
-# libexec directory is ("yow" lives in there.)
+#       Zippy is funnier than the idiocy generally spat out by `fortune',
+#       so try to find that, by invoking Emacs and asking it where its 
+#       libexec directory is ("yow" lives in there.)
 #
-# If that doesn't work, see if fortune, zippy, or yow are on $PATH,
-# and if so, use them.
+#       If that doesn't work, see if fortune, zippy, or yow are on $PATH,
+#       and if so, use them.
 #
-# If that doesn't work, look in /usr/games, and if it's there, use
-# the full pathname.
+#       If that doesn't work, look in /usr/games, and if it's there, use
+#       the full pathname.
 #
+###############################################################################
+
 with_zippy_req=""
-AC_ARG_WITH(zippy,
-[  --with-zippy=PROGRAM    Some demos are able to run an external program and
+AC_ARG_WITH(zippy,[
+  --with-zippy=PROGRAM    Some demos are able to run an external program and
                           display its text; this names the program to use by
                           default (though it can be overridden with X
                           resources.)  If you don't specify this, the default
                           is to use \"yow\" from the Emacs distribution (if you
-                          have it) or else to use \"fortune\".],
-  [ with_zippy_req="$withval"; with_zippy="$withval" ],
-  [ with_zippy_req="$withval"; with_zippy="$withval" ])
+                          have it) or else to use \"fortune\".
+],
+  [with_zippy_req="$withval"; with_zippy="$withval"],[with_zippy=yes])
 
 if test "$with_zippy" = no || test "$with_zippy" = yes ; then
   with_zippy=""
@@ -936,17 +2222,17 @@ if test ! -n "$ac_cv_zippy_program"; then
     # get emacs to tell us where the libexec directory is.
     #
     dir=`$emacs_exe $eargs '(princ (concat exec-directory "\n"))' \
-        2>/dev/null | tail -1`
+         2>/dev/null | tail -1`
     dir=`echo "$dir" | sed 's@///*@/@g;s@/$@@'`
     #
     # try running libexec/yow and see if it exits without error.
     #
-    if test x"$dir" != x -a -x $dir/yow ; then
+    if test x"$dir" != x -a -x "$dir/yow" ; then
       if $dir/yow >&- 2>&- ; then
-       ac_cv_zippy_program="$dir/yow"
-       AC_MSG_RESULT($ac_cv_zippy_program)
+        ac_cv_zippy_program="$dir/yow"
+        AC_MSG_RESULT($ac_cv_zippy_program)
       else
-       AC_MSG_RESULT(no)
+        AC_MSG_RESULT(no)
       fi
     fi
   fi
@@ -958,33 +2244,46 @@ if test ! -n "$ac_cv_zippy_program"; then
       # get xemacs to tell us where the libexec directory is.
       #
       dir=`$xemacs_exe $eargs '(princ (concat exec-directory "\n"))' \
-          2>/dev/null | tail -1`
+           2>/dev/null | tail -1`
       dir=`echo "$dir" | sed 's@///*@/@g;s@/$@@'`
       #
       # try running libexec/yow and see if it exits without error.
       #
-      if test x"$dir" != x -a -x $dir/yow ; then
+      if test x"$dir" != x -a -x "$dir/yow" ; then
         if $dir/yow >&- 2>&- ; then
-         ac_cv_zippy_program="$dir/yow"
-         AC_MSG_RESULT($ac_cv_zippy_program)
-       else
-         #
-         # in some xemacs installations, the pathname of the yow.lines file
-         # isn't hardcoded into the yow executable, and must be passed on 
-         # the command line.  See if it's in libexec/../etc/.
-
-         # M4 sucks!!
-         changequote(X,Y)
-         dir_up=`echo "$dir" | sed 's@/[^/]*$@@'`
-         changequote([,])
-
-          yow="yow -f $dir_up/etc/yow.lines"
-         if $dir/$yow >&- 2>&- ; then
-           ac_cv_zippy_program="$dir/$yow"
-           AC_MSG_RESULT($ac_cv_zippy_program)
-         else
-           AC_MSG_RESULT(no)
-         fi
+          ac_cv_zippy_program="$dir/yow"
+          AC_MSG_RESULT($ac_cv_zippy_program)
+        else
+          #
+          # in some xemacs installations, the pathname of the yow.lines file
+          # isn't hardcoded into the yow executable, and must be passed on 
+          # the command line.  See if it's in libexec/../etc/.
+
+          # M4 sucks!!
+          changequote(X,Y)
+          dir_up=`echo "$dir" | sed 's@/[^/]*$@@'`
+          changequote([,])
+
+          yowlines="$dir_up/etc/yow.lines"
+          if $dir/yow -f $yowlines >&- 2>&- ; then
+            ac_cv_zippy_program="$dir/yow -f $yowlines"
+            AC_MSG_RESULT($ac_cv_zippy_program)
+          else
+            #
+            # In newer XEmacs releases, yow.lines is in a different place,
+            # and the easiest way to get it is by calling the new function
+            # `locate-data-file'.
+            #
+            yowlines=`$xemacs_exe $eargs \
+              '(princ (concat (locate-data-file "yow.lines") "\n"))' \
+              2>/dev/null | tail -1`
+            if $dir/yow -f $yowlines >&- 2>&- ; then
+              ac_cv_zippy_program="$dir/yow -f $yowlines"
+              AC_MSG_RESULT($ac_cv_zippy_program)
+            else
+              AC_MSG_RESULT(no)
+            fi
+          fi
         fi
       fi
     fi
@@ -997,7 +2296,7 @@ if test ! -n "$ac_cv_zippy_program"; then
     # if that didn't work, try for those programs in /usr/games...
     if test -z "$fortune" ; then
       AC_PATH_PROGS(fortune, [fortune zippy yow], fortune,
-                   /usr/games:/usr/local/games)
+                    /usr/games:/usr/local/games:$PATH)
     fi
   fi
 fi
 AC_DEFINE_UNQUOTED(ZIPPY_PROGRAM, "$ac_cv_zippy_program")
 
 
-
-
-# Allow locking to be disabled at compile-time.
+###############################################################################
 #
-have_locking=yes
-have_kerberos=no
-with_kerberos_req=unspecified
-have_shadow=no
-with_shadow_req=unspecified
-need_setuid=no
-
-AC_ARG_ENABLE(locking,[
-Locking options:
-
-  --enable-locking        Compile in support for locking the display
-                          (this is the default.)
-  --disable-locking       Do not allow locking at all.],
-  [enable_locking="$enableval"],[enable_locking=yes])
-if test $enable_locking = yes; then
-
-  # Check for Kerberos.
-  #
-  AC_ARG_WITH(kerberos, [
-  --with-kerberos         Include support for Kerberos authentication,
-                          if possible (this is the default.)
-  --without-kerberos      Do not compile in support for Kerberos.],
-  [with_kerberos="$withval"; with_kerberos_req="$withval"],[with_kerberos=yes])
-  if test $with_kerberos = yes; then
-    AC_CACHE_CHECK([for Kerberos], ac_cv_kerberos,
-                  [AC_TRY_X_COMPILE([#include <krb.h>],,
-                                    [ac_cv_kerberos=yes],
-                                    [ac_cv_kerberos=no])])
-    if test $ac_cv_kerberos = yes ; then
-      have_kerberos=yes
-      AC_DEFINE(HAVE_KERBEROS)
-      PASSWD_LIBS="$PASSWD_LIBS -lkrb -ldes -lnsl -lsocket"
-    fi
-  elif test $with_kerberos != no; then
-    echo "error: must be yes or no: --with-kerberos=$with_kerberos"
-    exit 1
-  fi
-
-  # Next, check for the nine billion variants of shadow passwords...
-
-  passwd_cruft_done=no
-  AC_ARG_WITH(shadow,
-[  --with-shadow           Include support for shadow password authentication,
-                          if possible (this is the default, if no Kerberos.)
-  --without-shadow        Do not compile in support for shadow passwords.
-],
-  [with_shadow="$withval"; with_shadow_req="$withval"],[with_shadow=yes])
-  if test $with_shadow = no; then
-    passwd_cruft_done=yes
-  elif test $with_shadow != yes; then
-    echo "error: must be yes or no: --with-shadow=$with_shadow"
-    exit 1
-  fi
-
-
-  # Sun's "adjunct" passwords.
-  #
-  if test $passwd_cruft_done = no ; 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=yes
-      need_setuid=yes
-      passwd_cruft_done=yes
-      AC_DEFINE(HAVE_ADJUNCT_PASSWD)
-    fi
-  fi
-
-  # DEC and SCO so-called "enhanced" security.
-  #
-  if test $passwd_cruft_done = no ; 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=yes
-      need_setuid=yes
-      passwd_cruft_done=yes
-      AC_DEFINE(HAVE_ENHANCED_PASSWD)
-
-      # On SCO, getprpwnam() is in -lprot (which uses nap() from -lx)
-      # (I'm told it needs -lcurses too, but I don't understand why.)
-      AC_CHECK_LIB(prot, getprpwnam, 
-                  [PASSWD_LIBS="$PASSWD_LIBS -lprot -lcurses -lx"],
-                  [# On DEC, getprpwnam() is in -lsecurity
-                   AC_CHECK_LIB(security, getprpwnam, 
-                                [PASSWD_LIBS="$PASSWD_LIBS -lsecurity"])],
-                  [-lx])
-    fi
-  fi
-
-  # HP's entry in the "Not Invented Here" Sweepstakes.
-  #
-  if test $passwd_cruft_done = no ; 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=yes
-      need_setuid=yes
-      passwd_cruft_done=yes
-      AC_DEFINE(HAVE_HPUX_PASSWD)
-
-      # on HPUX, bigcrypt is in -lsec
-      AC_CHECK_LIB(sec, bigcrypt, [PASSWD_LIBS="$PASSWD_LIBS -lsec"])
-    fi
-  fi
-
-  # Traditional (ha!) shadow passwords.
-  #
-  if test $passwd_cruft_done = no ; 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
-      passwd_cruft_done=yes
-      AC_DEFINE(HAVE_SHADOW_PASSWD)
-
-      # 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
-
-  # 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
-
-
-  # 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 $need_setuid = no ; then
-    case "$host" in
-      *-hpux* | *-aix* | *-netbsd* | *-freebsd* | *-openbsd* )
-        need_setuid=yes
-      ;;
-    esac
-  fi
-
-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
+#       Done testing.  Now, set up the various -I and -L variables,
+#       and decide which GUI program to build by default.
+#
+###############################################################################
 
+DEPEND=makedepend
+DEPEND_FLAGS=
+DEPEND_DEFINES=
 
 
 if test \! -z "$includedir" ; then 
-  INCLUDES="-I$includedir"
+  INCLUDES="$INCLUDES -I$includedir"
 fi
 
 if test \! -z "$libdir" ; then
@@ -1218,45 +2329,39 @@ if test \! -z "$libdir" ; then
 fi
 
 
-##### should have options to override the DEPEND crap, I guess...
-DEPEND=makedepend
-DEPEND_FLAGS=
-DEPEND_DEFINES=
-
+ALL_DEMO_PROGRAMS=
+if test "$have_motif" = yes; then
+  PREFERRED_DEMO_PROGRAM=xscreensaver-demo-Xm
+  ALL_DEMO_PROGRAMS="$PREFERRED_DEMO_PROGRAM $ALL_DEMO_PROGRAMS"
+fi
+if test "$have_gtk" = yes; then
+  PREFERRED_DEMO_PROGRAM=xscreensaver-demo-Gtk
+  ALL_DEMO_PROGRAMS="$PREFERRED_DEMO_PROGRAM $ALL_DEMO_PROGRAMS"
+fi
 
 
-# Done testing things -- now substitute in some stuff for the Makefiles.
-#
-if test $have_motif = yes; then
-  AC_DEFINE(HAVE_MOTIF)
-  DIALOG_SRCS='$(MOTIF_SRCS)'
-  DIALOG_OBJS='$(MOTIF_OBJS)'
-elif test $have_athena = yes; then
-  AC_DEFINE(HAVE_ATHENA)
-  DIALOG_SRCS='$(ATHENA_SRCS)'
-  DIALOG_OBJS='$(ATHENA_OBJS)'
-else
-  DIALOG_SRCS=''
-  DIALOG_OBJS=''
+if test "$have_kerberos" = yes; then
+  PASSWD_SRCS="$PASSWD_SRCS \$(KERBEROS_SRCS)"
+  PASSWD_OBJS="$PASSWD_OBJS \$(KERBEROS_OBJS)"
 fi
-
-if test $have_kerberos = yes; then
-  PASSWD_SRCS='$(KERBEROS_SRCS)'
-  PASSWD_OBJS='$(KERBEROS_OBJS)'
-else
-  PASSWD_SRCS='$(PWENT_SRCS)'
-  PASSWD_OBJS='$(PWENT_OBJS)'
+if test "$have_pam" = yes; then
+  PASSWD_SRCS="$PASSWD_SRCS \$(PAM_SRCS)"
+  PASSWD_OBJS="$PASSWD_OBJS \$(PAM_OBJS)"
+  INSTALL_PAM="install-pam"
 fi
+  PASSWD_SRCS="$PASSWD_SRCS \$(PWENT_SRCS)"
+  PASSWD_OBJS="$PASSWD_OBJS \$(PWENT_OBJS)"
 
-if test $enable_locking = yes; then
+
+if test "$enable_locking" = yes; then
   LOCK_SRCS='$(LOCK_SRCS_1) $(PASSWD_SRCS)'
   LOCK_OBJS='$(LOCK_OBJS_1) $(PASSWD_OBJS)'
 else
-  LOCK_SRCS=''
-  LOCK_OBJS=''
+  LOCK_SRCS='$(NOLOCK_SRCS_1)'
+  LOCK_OBJS='$(NOLOCK_OBJS_1)'
 fi
 
-if test $need_setuid = yes; then
+if test "$need_setuid" = yes; then
   NEED_SETUID=yes
   INSTALL_SETUID='$(INSTALL) $(SUID_FLAGS)'
 else
@@ -1265,51 +2370,95 @@ else
 fi
 
 tab='  '
-if test $have_gl = yes; then
+if test "$have_gl" = yes; then
   GL_EXES='$(GL_EXES)'
-  GL_KLUDGE_1=${tab}${tab}${tab}${tab}${tab}${tab}${tab}${tab}${tab}'  \'
-  GL_KLUDGE_2=${tab}
+  GL_MEN='$(GL_MEN)'
+  GL_KLUDGE="${tab}  "
+else
+  GL_KLUDGE="-${tab}  "
+fi
+
+if test "$have_gle" = yes; then
+  GLE_EXES='$(GLE_EXES)'
+  GLE_MEN='$(GLE_MEN)'
+  GLE_KLUDGE="${tab}   "
 else
-  GL_KLUDGE_1=${tab}${tab}${tab}${tab}${tab}${tab}${tab}${tab}${tab}'\n'
-  GL_KLUDGE_2='!'${tab}
+  GLE_KLUDGE="-${tab}   "
 fi
 
+
+###############################################################################
+#
+#       Perform substitutions and write Makefiles.
+#
+###############################################################################
+
 AC_SUBST(INCLUDES)
 
+AC_SUBST(PREFERRED_DEMO_PROGRAM)
+AC_SUBST(ALL_DEMO_PROGRAMS)
 AC_SUBST(SAVER_LIBS)
+AC_SUBST(MOTIF_LIBS)
+AC_SUBST(GTK_LIBS)
 AC_SUBST(HACK_LIBS)
 AC_SUBST(XPM_LIBS)
 AC_SUBST(GL_LIBS)
+AC_SUBST(GLE_LIBS)
 AC_SUBST(PASSWD_LIBS)
 AC_SUBST(INSTALL_SETUID)
+AC_SUBST(INSTALL_DIRS)
 AC_SUBST(NEED_SETUID)
+AC_SUBST(INSTALL_PAM)
 AC_SUBST(SGI_VIDEO_OBJS)
 AC_SUBST(SGI_VIDEO_LIBS)
 
-AC_SUBST(DIALOG_SRCS)
-AC_SUBST(DIALOG_OBJS)
 AC_SUBST(PASSWD_SRCS)
 AC_SUBST(PASSWD_OBJS)
 AC_SUBST(XMU_SRCS)
 AC_SUBST(XMU_OBJS)
+AC_SUBST(SAVER_GL_SRCS)
+AC_SUBST(SAVER_GL_OBJS)
+AC_SUBST(SAVER_GL_LIBS)
 AC_SUBST(LOCK_SRCS)
 AC_SUBST(LOCK_OBJS)
 AC_SUBST(GL_EXES)
-AC_SUBST(GL_KLUDGE_1)
-AC_SUBST(GL_KLUDGE_2)
+AC_SUBST(GL_MEN)
+AC_SUBST(GL_KLUDGE)
+AC_SUBST(GLE_EXES)
+AC_SUBST(GLE_MEN)
+AC_SUBST(GLE_KLUDGE)
 AC_SUBST(HACKDIR)
+
+APPDEFAULTS=$ac_x_app_defaults
 AC_SUBST(APPDEFAULTS)
 
 AC_SUBST(DEPEND)
 AC_SUBST(DEPEND_FLAGS)
 AC_SUBST(DEPEND_DEFINES)
+AC_SUBST(PERL)
 
-# Print some warnings before emitting the Makefiles.
+AC_OUTPUT(Makefile
+          utils/Makefile
+          driver/Makefile
+          hacks/Makefile
+          hacks/glx/Makefile
+          driver/XScreenSaver.ad)
+
+###############################################################################
 #
+#       Print some warnings at the end.
+#
+###############################################################################
+
+warn_prefix_1="    Warning:"
+warn_prefix_2="       Note:"
+warn_prefix="$warn_prefix_1"
+
 warning=no
 warnsep='    #################################################################'
+
 warnpre() {
-  if test $warning = no ; then
+  if test "$warning" = no ; then
     echo '' ; echo "$warnsep" ; echo ''
     warning=yes
   fi
@@ -1317,17 +2466,17 @@ warnpre() {
 
 warn() {
   warnpre
-  if test $warning = long ; then echo '' ; fi
+  if test "$warning" = long ; then echo '' ; fi
   warning=yes
-  echo "    Warning: $@"
+  echo "$warn_prefix $@"
 }
 
 warnL() {
   was=$warning
   warnpre
   warning=yes
-  if test $was != no ; then echo '' ; fi
-  echo "    Warning: $@"
+  if test "$was" != no ; then echo '' ; fi
+  echo "$warn_prefix $@"
 }
 
 warn2() {
@@ -1335,98 +2484,332 @@ warn2() {
   warning=long
 }
 
-if test $with_sgi_req = yes -a $have_sgi = no ; then
+note() {
+  warn_prefix="$warn_prefix_2"
+  warn $@
+  warn_prefix="$warn_prefix_1"
+}
+
+noteL() {
+  warn_prefix="$warn_prefix_2"
+  warnL $@
+  warn_prefix="$warn_prefix_1"
+}
+
+
+if test "$with_sgi_req" = yes -a "$have_sgi" = no ; then
   warn 'The SGI saver extension was requested, but was not found.'
 fi
 
-if test $with_mit_req = yes -a $have_mit = no ; then
+if test "$with_mit_req" = yes -a "$have_mit" = no ; then
   warn 'The MIT saver extension was requested, but was not found.'
 fi
 
-if test $with_xidle_req = yes -a $have_xidle = no ; then
+if test "$with_xidle_req" = yes -a "$have_xidle" = no ; then
   warn 'The XIdle extension was requested, but was not found.'
 fi
 
-if test $with_xshm_req = yes -a $have_xshm = no ; then
+if test "$with_xshm_req" = yes -a "$have_xshm" = no ; then
   warn 'The XSHM extension was requested, but was not found.'
 fi
 
-if test $with_sgivc_req = yes -a $have_sgivc = no ; then
+if test "$with_xdbe_req" = yes -a "$have_xdbe" = no ; then
+  warn 'The DOUBLE-BUFFER extension was requested, but was not found.'
+fi
+
+if test "$with_sgivc_req" = yes -a "$have_sgivc" = no ; then
   warn 'The SGI-VIDEO-CONTROL extension was requested, but was not found.'
 fi
 
-if test $have_motif = no -a $have_athena = no ; then
-  warnL "Neither Motif nor Athena widgets seem to be available;"
-  warn2 "one or the other is required."
-  proselytize_motif=no
+if test "$with_dpms_req" = yes -a "$have_dpms" = no ; then
+  warn 'The DPMS extension was requested, but was not found.'
+fi
+
+if test "$with_xf86vmode_req" = yes -a "$have_xf86vmode" = no ; then
+  warn 'The XF86VMODE extension was requested, but was not found.'
+fi
+
+if test "$with_proc_interrupts_req" = yes -a "$have_proc_interrupts" = no; then
+  warn "Checking of /proc/interrupts was requested, but it's bogus."
+fi
+
+
+if test "$have_motif" = no -a "$have_gtk" = no; then
+  warnL "Neither Motif nor Gtk seem to be available;"
+  warn2 "the \`xscreensaver-demo' program requires one of these."
 
-elif test $with_motif_req = yes -a $have_motif = no ; then
+elif test "$with_motif_req" = yes -a "$have_motif" = no ; then
   warnL "Use of Motif was requested, but it wasn't found;"
-  warn2 "Athena will be used instead."
+  warn2 "Gtk will be used instead."
 
-elif test $with_athena_req = yes -a $have_athena = no ; then
-  warnL "Use of Athena was requested, but it wasn't found;"
+elif test "$jurassic_gtk" = yes ; then
+
+  pref_gtk=1.2
+
+  v="$ac_gtk_version_string"
+  if test "$with_gtk_req" = yes -a "$ac_gtk_version" = "unknown" ; then
+    warnL "Use of Gtk was requested, but its version number is unknown;"
+  elif test "$with_gtk_req" = yes ; then
+    warnL "Use of Gtk was requested, but it is version $v;"
+  else
+    warnL "Gtk was found on this system, but it is version $v;"
+  fi
+
+  warn2 "Gtk $pref_gtk or newer is required.  Motif will be used instead."
+
+elif test "$with_gtk_req" = yes -a "$have_gtk" = no ; then
+  warnL "Use of Gtk was requested, but it wasn't found;"
   warn2 "Motif will be used instead."
+
+fi
+
+
+if test "$have_motif" = yes -a "$have_lesstif" = yes ; then
+
+  preferred_lesstif=0.86
+
+  if test "$lesstif_version" = unknown; then
+    warnL "Unable to determine the LessTif version number!"
+    warn2 "Make sure you are using version $preferred_lesstif or newer."
+    warn2 "See <http://www.lesstif.org/>."
+
+  elif test \! $lesstif_version -gt 82; then
+    warnL "LessTif version $lesstif_version_string is being used."
+    warn2 "LessTif versions 0.82 and earlier are too buggy to"
+    warn2 "use with XScreenSaver; it is strongly recommended"
+    warn2 "that you upgrade to at least version $preferred_lesstif!"
+    warn2 "See <http://www.lesstif.org/>."
+  fi
 fi
 
-if test $have_motif = yes -a $have_lesstif = yes ; then
-  if test $good_lesstif != yes ; then
-    warnL "Motif is being used, but it appears to actually be"
-    warn2 "LessTif, and the version number is less than 0.82!"
-    warn2 "Such old versions of LessTif are too buggy to use"
-    warn2 "with XScreenSaver; it is strongly recommended that"
-    warn2 "you upgrade!  See <http://www.lesstif.org/>."
+
+
+if test "$have_xpm" = no ; then
+  if test "$with_xpm_req" = yes ; then
+    warnL 'Use of XPM was requested, but it was not found.'
+  elif test "$with_xpm_req" = no ; then
+    noteL 'The XPM library is not being used.'
+  else
+    noteL 'The XPM library was not found.'
   fi
+
+  echo ''
+  warn2 'Some of the demos will not be as colorful as they'
+  warn2 'could be.  You might want to consider installing XPM'
+  warn2 'and re-running configure.  (Remember to delete the'
+  warn2 'config.cache file first.)  You can find XPM at most'
+  warn2 'X11 archive sites, such as <http://sunsite.unc.edu/>.'
 fi
 
-if test $proselytize_motif = yes ; then
-    warnL "Athena widgets are being used instead of Motif."
-    warn2 "XScreenSaver looks much better with Motif, and has"
-    warn2 "a few extra features as well.  Wouldn't you rather"
-    warn2 "be using Motif?  It is shipped by every commercial"
-    warn2 "Unix vendor; and there is a free implementation"
-    warn2 "available as well: see <http://www.lesstif.org/>."
+
+if test "$have_gl" = yes -a "$ac_have_mesa_gl" = yes ; then
+  preferred_mesagl=3.0
+
+  if test "$ac_mesagl_version" = unknown; then
+    warnL "Unable to determine the MesaGL version number!"
+    warn2 "Make sure you are using version $preferred_mesagl or newer."
+
+  elif test \! "$ac_mesagl_version" -gt 2006; then
+    warnL "MesaGL version $ac_mesagl_version_string is being used."
+    warn2 "MesaGL versions 2.6 and earlier have a security bug."
+    warn2 "It is strongly recommended that you upgrade to at"
+    warn2 "least version $preferred_mesagl."
+  fi
 fi
 
-if test $with_xpm_req = yes -a $have_xpm = no ; then
-  warn 'Use of XPM was requested, but it was not found.'
+if test "$have_gl" = no ; then
+  if test "$with_gl_req" = yes ; then
+    warnL 'Use of GL was requested, but it was not found.'
+  elif test "$with_gl_req" = no ; then
+    noteL 'The OpenGL 3D library is not being used.'
+  else
+    noteL 'The OpenGL 3D library was not found.'
+  fi
+
+  if test "$gl_halfassed" = yes ; then
+    echo ''
+    warn2 'More specifically, we found the headers, but not the'
+    warn2 'libraries; so either GL is half-installed on this'
+    warn2 "system, or something else went wrong.  The \`config.log'"
+    warn2 'file might contain some clues.'
+  fi
+
+  echo ''
+  warn2 'Those demos which use 3D will not be built or installed.'
+  warn2 'You might want to consider installing OpenGL and'
+  warn2 're-running configure.  (Remember to delete the'
+  warn2 "config.cache file first.)  If your vendor doesn't ship"
+  warn2 'their own implementation of OpenGL, you can get a free'
+  warn2 'version at <http://www.mesa3d.org/>.  For general OpenGL'
+  warn2 'info, see <http://www.opengl.org/>.'
+
 fi
 
-if test $with_gl_req = yes -a $have_gl = no ; then
-  warn 'Use of GL was requested, but it was not found.'
+
+if test "$have_gl" = yes -a "$have_gle" = no ; then
+  if test "$with_gle_req" = yes ; then
+    noteL 'Use of the GLE (GL Extrusion) library was requested, but'
+    warn2 'it was not found (though the OpenGL library was found, and'
+    warn2 'is being used.)'
+  elif test "$with_gle_req" = no ; then
+    noteL 'The OpenGL Library is being used, but the GLE (GL Extrusion)'
+    warn2 'library is not.'
+  else
+    noteL 'The OpenGL Library was found, but the GLE (GL Extrusion)'
+    warn2 'was not.'
+  fi
+
+  if test "$gle_halfassed" = yes ; then
+    echo ''
+    warn2 'More specifically, we found the headers, but not the'
+    warn2 'libraries; so either GLE is half-installed on this'
+    warn2 "system, or something else went wrong.  The \`config.log'"
+    warn2 'file might contain some clues.'
+  fi
+
+  echo ''
+  warn2 'Some of the OpenGL (3D) demos (those that depend on GLE)'
+  warn2 'will not be built or installed.  You might want to consider'
+  warn2 'installing GLE and re-running configure.  (Remember to delete'
+  warn2 'the config.cache file first.)  You can find the GLE library'
+  warn2 'at <http://www.linas.org/gle/>.  For general OpenGL info,'
+  warn2 'see <http://www.opengl.org/>.'
+
 fi
 
-if test $with_readdisplay_req = yes -a $have_readdisplay = no ; then
+
+if test "$with_readdisplay_req" = yes -a "$have_readdisplay" = no ; then
   warn 'Use of XReadDisplay was requested, but it was not found.'
 fi
 
-if test $with_sgivideo_req = yes -a $have_sgivideo = no ; then
+if test "$with_sgivideo_req" = yes -a "$have_sgivideo" = no ; then
   warn 'Use of the Iris Video Library was requested, but it was not found.'
 fi
 
-if test $with_kerberos_req = yes -a $have_kerberos = no ; then
+if test -n "$with_zippy_req"; then
+  if test "$with_zippy_req" != "$ac_cv_zippy_program" ; then
+    warnL "$with_zippy_req was requested as the Zippy program,"
+    warn2 "but was not found.  The default will be used instead."
+  fi
+fi
+
+if test "$with_kerberos_req" = yes -a "$have_kerberos" = no ; then
   warn 'Use of Kerberos was requested, but it was not found.'
 fi
 
-if test $with_shadow_req = yes -a $have_shadow = no ; then
+if test "$with_pam_req" = yes -a "$have_pam" = no ; then
+  warn 'Use of PAM was requested, but it was not found.'
+fi
+
+if test "$with_shadow_req" = yes -a "$have_shadow" = no ; then
   warn 'Use of shadow passwords was requested, but they were not found.'
 fi
 
-if test -n "$with_zippy_req"; then
-  if test "$with_zippy_req" != "$ac_cv_zippy_program" ; then
-    warnL "$with_zippy_req was requested as the Zippy program,"
-    warn2 "but was not found.  The default will be used instead."
+
+# You are in a twisty maze of namespaces and syntaxes, all alike.
+# Fuck the skull of Unix.
+#
+eval bindir=${bindir}
+eval bindir=${bindir}
+eval bindir=${bindir}
+eval bindir=${bindir}
+eval bindir=${bindir}
+eval bindir=${bindir}
+eval HACKDIR=${HACKDIR}
+eval HACKDIR=${HACKDIR}
+eval HACKDIR=${HACKDIR}
+eval HACKDIR=${HACKDIR}
+eval HACKDIR=${HACKDIR}
+eval HACKDIR=${HACKDIR}
+
+# canonicalize slashes.
+bindir=`echo  "${bindir}"  | sed 's@/$@@;s@//*@/@g'`
+HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'`
+
+
+# Sanity check the subdir
+for bad_choice in xscreensaver xscreensaver-demo xscreensaver-command ; do
+  if test "${HACKDIR}" = "${bindir}/${bad_choice}" ; then
+    echo ""
+    AC_MSG_ERROR([\"--enable-subdir=${bindir}/${bad_choice}\" won't work.
+                   There will be an executable installed with that name, so
+                   that can't be the name of a directory as well.  Please
+                   re-configure with a different directory name.])
+  fi
+done
+
+
+do_dir_warning=no
+
+# Now let's see if there's a previous RPM version already installed.  Blargh!
+
+# M4 sucks!!
+changequote(X,Y)
+rpmv=`(rpm -qv xscreensaver) 2>&- | \
+      sed 's/^xscreensaver-\([0-9][0-9]*[.][0-9][0-9]*\)-[0-9][0-9]*$/\1/'`
+changequote([,])
+
+if test \! -z "$rpmv" ; then
+  rpmbdir=`rpm -ql xscreensaver | sed -n 's@^\(.*\)/xscreensaver-demo$@\1@p'`
+  rpmhdir=`rpm -ql xscreensaver | sed -n 's@^\(.*\)/attraction$@\1@p'`
+
+  warning=no
+  warnL "There is already an installed RPM of xscreensaver $rpmv"
+  warn2 "on this system.  You might want to remove it (with"
+  warn2 '"rpm -ve xscreensaver") before running "make install"'
+  warn2 "from this directory."
+  echo ""
+  warn2 "Alternately, you could build this version of xscreensaver"
+  warn2 'as an RPM, and then install that.  An "xscreensaver.spec"'
+  warn2 "file is included.  See the RPM documentation for more info."
+  echo ""
+
+  if test "$rpmbdir" = "$rpmhdir" ; then
+    warn2 "The RPM version was installed in $rpmbdir."
+  else
+    warn2 "The RPM version was installed in $rpmbdir,"
+    warn2 "with demos in $rpmhdir."
   fi
+
+  do_dir_warning=yes
 fi
 
-if test $warning != no; then
-  echo '' ; echo "$warnsep" ; echo ''
+
+# Warn about egregious GNOME bogosity.
+#
+if (rpm -qv control-center) >&- 2>&- ; then
+  warning=no
+  warnL "The Gnome Control Center seems to be installed."
+  echo  ""
+  warn2 "Note that simply installing this version of xscreensaver"
+  warn2 "will not cause GNOME to know about the newly-added display"
+  warn2 "modes -- GNOME is just lame that way.  Instead of using the"
+  warn2 "Control Center, try using the \`xscreensaver-demo' command."
 fi
 
 
-AC_OUTPUT(Makefile
-         utils/Makefile
-         driver/Makefile
-         hacks/Makefile
-         hacks/glx/Makefile
-         driver/XScreenSaver.ad)
+if test "${bindir}" = "${HACKDIR}" ; then
+  do_dir_warning=yes
+fi
+
+if test "$do_dir_warning" = yes; then
+  echo ""
+  echo "$warnsep"
+  echo ""
+  echo '      When you run "make install", the "xscreensaver",'
+  echo '      "xscreensaver-demo", and "xscreensaver-command" executables'
+  echo "      will be installed in ${bindir}."
+  echo ""
+  echo "      The various graphics demos (100+ different executables) will"
+  echo "      also be installed in ${HACKDIR}."
+  echo ""
+  echo "      If you would prefer the demos to be installed elsewhere"
+  echo "      (for example, in a dedicated directory) you should re-run"
+  echo "      configure with the --enable-subdir=DIR option.  For more"
+  echo "      information, run $0 --help."
+  warning=yes
+fi
+
+if test "$warning" != no; then
+  echo '' ; echo "$warnsep" ; echo ''
+fi