From http://www.jwz.org/xscreensaver/xscreensaver-5.24.tar.gz
[xscreensaver] / configure.in
index 75a8fe321785428a76d7c25d05815aee43202f25..748879558d5ea3a0967201433bad0ee939cfc7e5 100644 (file)
-# configure.in --- xscreensaver, Copyright (c) 1997 Jamie Zawinski.
+# configure.in --- xscreensaver, Copyright (c) 1997-2005 Jamie Zawinski.
 #
 
+AC_PREREQ(2.52)
 AC_INIT(driver/subprocs.c)
+AC_CONFIG_HEADER(config.h)
 
 echo "current directory: `pwd`"
 echo "command line was: $0 $@"
 
-AC_CONFIG_HEADER(config.h)
-AC_CANONICAL_HOST
-
-AC_PROG_CC
+###############################################################################
+#
+#       Autoheader stuff
+#
+###############################################################################
+
+AH_TOP([
+/* config.h.in --- xscreensaver, Copyright (c) 1998-2000 Jamie Zawinski.
+ *
+ *  The best way to set these parameters is by running the included `configure'
+ *  script.  That examines your system, and generates `config.h' from 
+ *  `config.h.in'.
+ *
+ *  If something goes very wrong, you can edit `config.h' directly, but beware
+ *  that your changes will be lost if you ever run `configure' again.
+ */
+])
 
-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"
-    ;;
+AH_TEMPLATE([HAVE_READ_DISPLAY_EXTENSION],
+           [Define this if you have the XReadDisplay extension (I think
+             this is an SGI-only thing; it's in
+             <X11/extensions/readdisplay.h>.) A few of the screenhacks will
+             take advantage of this if it's available.])
+
+AH_TEMPLATE([HAVE_XHPDISABLERESET],
+           [Define this if you have the XHPDisableReset function (an HP only
+           thing which allows the Ctrl-Sh-Reset key sequence to be
+           temporarily disabled.)])
+
+# This only ever existed in X11R4 and X11R5.
+#AH_TEMPLATE([HAVE_XIDLE_EXTENSION],
+#          [Define this if you have the XIDLE extension installed. If you
+#          have the XIDLE extension, this is recommended.  (You have this
+#          extension if the file /usr/include/X11/extensions/xidle.h
+#          exists.) Turning on this flag lets XScreenSaver work better with
+#          servers which support this extension; but it will still work
+#          with servers which do not suport it, so it's a good idea to
+#          compile in support for it if you can.])
+
+# Using this extension will crash your X server and make fading not work.
+#AH_TEMPLATE([HAVE_MIT_SAVER_EXTENSION],
+#          [Define this if you have the MIT-SCREEN-SAVER extension
+#            installed.  See the caveats about this extension, above.
+#            (It's available if /usr/include/X11/extensions/scrnsaver.h
+#            exists.)])
+
+# This only ever existed on SGI hardware.
+#AH_TEMPLATE([HAVE_SGI_SAVER_EXTENSION],
+#          [Define this if you have the SGI SCREEN_SAVER extension.  This is
+#          standard on Irix systems, and not available elsewhere.])
+
+# This only ever existed on SGI hardware.
+#AH_TEMPLATE([HAVE_SGI_VC_EXTENSION],
+#          [Define this if you have the SGI-VIDEO-CONTROL extension.  This
+#          is standard on Irix systems, and not available elsewhere.])
+
+AH_TEMPLATE([HAVE_DPMS_EXTENSION],
+           [Define this if you have the XDPMS extension.  This is standard
+           on sufficiently-recent XFree86 systems, and possibly elsewhere. 
+           (It's available if the file /usr/include/X11/extensions/dpms.h
+           exists.)])
+
+AH_TEMPLATE([HAVE_XF86VMODE],
+           [Define this if you have the functions XF86VidModeGetModeLine()
+           and XF86VidModeGetViewPort(), in support of virtual desktops
+           where the X server's root window is bigger than the actual
+           screen.  This is an XFree86 thing, and probably doesn't exist
+           elsewhere.  (It's available if the file
+           /usr/include/X11/extensions/xf86vmode.h exists.)])
+
+AH_TEMPLATE([HAVE_XF86VMODE_GAMMA],
+           [Define this if you have the functions XF86VidModeGetGamma() and
+           XF86VidModeSetGamma(), which allow clients to change the gamma
+           response of the monitor.  This is an XFree86 4.0.x thing, and
+           probably doesn't exist elsewhere.  (It's available if the file
+           /usr/include/X11/extensions/xf86vmode.h exists and has stuff about
+           gamma in it.)])
+
+AH_TEMPLATE([HAVE_XF86VMODE_GAMMA_RAMP],
+           [Define this if you have the functions XF86VidModeGetGammaRamp()
+           and XF86VidModeSetGammaRamp(), which provide finer-grained
+           control than XF86VidMode[GS]etGamma().  These appeared in
+           XFree86 4.1.0.])
+
+AH_TEMPLATE([HAVE_XINERAMA],
+           [Define this if you have the Xinerama extension.  This is
+           standard on sufficiently-recent XFree86 systems, and possibly
+           elsewhere.  (It's available if the file
+           /usr/include/X11/extensions/Xinerama.h exists.)])
+
+AH_TEMPLATE([HAVE_XINPUT],
+           [Define this if you have the Xinput extension.  This is
+           standard since X11R5, and is thus almost everywhere.
+           (It's available if the file /usr/include/X11/extensions/XInput.h
+           exists.)])
+
+AH_TEMPLATE([HAVE_XF86MISCSETGRABKEYSSTATE],
+           [Define this if you have the XF86MiscSetGrabKeysState function
+           (which allows the Ctrl-Alt-KP_star and Ctrl-Alt-KP_slash key
+           sequences to be temporarily disabled.  Sadly, it doesn't affect
+           Ctrl-Alt-BS or Ctrl-Alt-F1.)])
+
+AH_TEMPLATE([HAVE_RANDR],
+           [Define this if you have the Resize and Rotate extension.
+           This is standard on sufficiently-recent XFree86 systems, and
+           possibly elsewhere.  (It's available if the file
+           /usr/include/X11/extensions/Xrandr.h exists.)])
+
+AH_TEMPLATE([HAVE_RANDR_12],
+           [Define this if the RANDR library is version 1.2 or newer.])
+
+AH_TEMPLATE([HAVE_PROC_INTERRUPTS],
+           [Define this if you have a Linux-like /proc/interrupts file which
+           can be examined to determine when keyboard activity has
+           occurred.])
+
+AH_TEMPLATE([HAVE_MOTIF],[Define this if you have Motif.])
+
+AH_TEMPLATE([HAVE_XMCOMBOBOX],
+           [Define this if you have the XmComboBox Motif widget (Motif 2.0.)])
+
+AH_TEMPLATE([HAVE_GTK],[Define this if you have Gtk (any version.)])
+AH_TEMPLATE([HAVE_GTK2],[Define this if you have Gtk 2.x.])
+
+AH_TEMPLATE([HAVE_CRAPPLET],
+           [Define this if you have Gnome and want to build support for the
+           xscreensaver control panel in the Gnome Control Center
+           (gnomecc).  (This is needed only with Gtk 1.x.)])
+
+AH_TEMPLATE([HAVE_CRAPPLET_IMMEDIATE],
+           [Define this if HAVE_CRAPPLET is defined, and the function
+           capplet_widget_changes_are_immediate() is available.])
+
+AH_TEMPLATE([HAVE_XML],[Define this if you have the XML library.])
+
+AH_TEMPLATE([HAVE_OLD_XML_HEADERS],
+           [Define this if you have the XML library headers in their old,
+           non-namespaced location (you lack the gnome-xml/libxml symlink)])
+
+AH_TEMPLATE([HAVE_XPM],
+           [Define this if you have the XPM library installed.  Some of the
+           demos can make use of this if it is available.])
+
+AH_TEMPLATE([HAVE_GDK_PIXBUF],
+           [Define this if you have the GDK_Pixbuf library installed.  Some
+           of the demos can make use of this if it is available.])
+
+AH_TEMPLATE([HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION],
+           [Define this if you have the gdk_pixbuf_apply_embedded_orientation
+           function (gdk-pixbuf 2.12).])
+
+AH_TEMPLATE([HAVE_JPEGLIB],
+           [Define this if you have the Independent JPEG Group's JPEG
+           library installed.  Some of the demos can make use of this if it
+           is available.])
+
+AH_TEMPLATE([HAVE_XMU],
+           [Define this if you have the Xmu library.  This is standard part
+           of X, and if your vendor doesn't ship it, you should report that
+           as a bug.])
+
+AH_TEMPLATE([HAVE_GL],
+           [Define this if you have OpenGL.  Some of the demos require it,
+           so if you don't have it, then those particular demos won't be
+           built.  (This won't affect the screen saver as a whole.)])
+
+AH_TEMPLATE([HAVE_MESA_GL],
+           [Define this if you have OpenGL, but it's the MesaGL variant. 
+           (The libraries have different names.) (HAVE_GL should be defined
+           too.)])
+
+AH_TEMPLATE([HAVE_GLBINDTEXTURE],
+           [Define this if your version of OpenGL has the glBindTexture()
+           routine.  This is the case for OpenGL 1.1, but not for OpenGL
+           1.0.])
+
+AH_TEMPLATE([HAVE_GLE],
+           [Define this if you have the -lgle and -lmatrix libraries (GL 
+           extrusion.)])
+
+AH_TEMPLATE([HAVE_GLE3],[Define this if you have the -lgle from GLE version 3])
+
+AH_TEMPLATE([HAVE_JWZGLES],[Define this to target the OpenGL ES 1.x API
+           instead of OpenGL 1.3.])
+
+AH_TEMPLATE([HAVE_GLBITMAP],[Define this if glBitmap exists.])
+
+AH_TEMPLATE([HAVE_XSHM_EXTENSION],
+           [Define this if you have the X Shared Memory Extension.])
+
+AH_TEMPLATE([HAVE_DOUBLE_BUFFER_EXTENSION],
+           [Define this if you have the X Double Buffer Extension.])
+
+AH_TEMPLATE([FORTUNE_PROGRAM],
+           [Some screenhacks like to run an external program to generate
+           random pieces of text; set this to the one you like.  Note that
+           this is just the default; X resources can be used to override
+           it.])
+
+AH_TEMPLATE([PASSWD_HELPER_PROGRAM],
+           [Set the name of the password helper program, if any])
+
+AH_TEMPLATE([NO_LOCKING],
+           [Define this to remove the option of locking the screen at all.])
+
+AH_TEMPLATE([ALLOW_ROOT_PASSWD],
+           [Define this to allow the root password to unlock the screen.])
+
+AH_TEMPLATE([HAVE_KERBEROS],
+           [Define this if you want to use Kerberos authentication to
+           lock/unlock the screen instead of your local password.  This
+           currently uses Kerberos V4, but a V5 server with V4
+           compatibility will work.  WARNING: DO NOT USE AFS string-to-key
+           passwords with this option. This option currently *only* works
+           with standard Kerberos des_string_to_key.  If your password is
+           an AFS password and not a kerberos password, it will not
+           authenticate properly. See the comments in driver/kpasswd.c for
+           more information if you need it.])
+
+AH_TEMPLATE([HAVE_KERBEROS5],
+           [Define this if you have Kerberos 5, meaning we need to use the
+           Kerberos 4 compatibility layer.])
+
+AH_TEMPLATE([HAVE_PAM],
+           [Define this if you want to use PAM (Pluggable Authentication
+           Modules) to lock/unlock the screen, instead of standard
+           /etc/passwd authentication.])
+
+AH_TEMPLATE([PAM_SERVICE_NAME],
+           [If PAM is being used, this is the name of the PAM service that
+           xscreensaver will authenticate as.  The default is
+           "xscreensaver", which means that the PAM library will look for
+           an "xscreensaver" line in /etc/pam.conf, or (on recent Linux
+           systems) will look for a file called /etc/pam.d/xscreensaver. 
+           Some systems might already have a PAM installation that is
+           configured for xlock, so setting this to "xlock" would also work
+           in that case.])
+
+AH_TEMPLATE([HAVE_PAM_FAIL_DELAY],
+           [Define this if you have pam_fail_delay function.
+           see driver/passwd-pam.c.])
+
+AH_TEMPLATE([PAM_CHECK_ACCOUNT_TYPE],
+            [Whether PAM should check the result of account modules
+           when authenticating.  Only do this if you have account
+           configured properly on your system.])
+
+AH_TEMPLATE([PAM_STRERROR_TWO_ARGS],
+           [Define if you have PAM and pam_strerror() requires two
+           arguments.])
+
+AH_TEMPLATE([HAVE_SIGTIMEDWAIT],
+           [Define to 1 if you have the `sigtimedwait' function.])
+
+AH_TEMPLATE([HAVE_SHADOW_PASSWD],
+           [Define this if your system uses 'shadow' passwords, that is, the
+           passwords live in /etc/shadow instead of /etc/passwd, and one
+           reads them with getspnam() instead of getpwnam().  (Note that
+           SCO systems do some random other thing; others might as well. 
+           See the ifdefs in driver/passwd-pwent.c if you're having trouble
+           related to reading passwords.)])
+
+AH_TEMPLATE([HAVE_ENHANCED_PASSWD],
+           [Define this if your system is Digital or SCO Unix with so-called
+           ``Enhanced Security'', that is, the passwords live in
+           /tcb/files/auth/<x>/<xyz> instead of in /etc/passwd, and one
+           reads them with getprpwnam() instead of getpwnam().])
+
+AH_TEMPLATE([HAVE_ADJUNCT_PASSWD],
+           [Define this if your system is Solaris with ``adjunct'' passwords
+           (this is the version where one gets at the passwords with
+           getpwanam() instead of getpwnam().) I haven't tested this one,
+           let me know if it works.])
+
+AH_TEMPLATE([HAVE_HPUX_PASSWD],
+           [Define this if you are running HPUX with so-called ``Secure
+           Passwords'' (if you have /usr/include/hpsecurity.h, you probably
+           have this.) I haven't tested this one, let me know if it works.])
+
+AH_TEMPLATE([HAVE_SYSLOG],
+           [Define this if you the openlog(), syslog(), and closelog()
+           functions.  This is used for logging failed login attempts.])
+
+AH_TEMPLATE([HAVE_ICMP],
+           [Define this if you do pings with a `struct icmp' and an
+            `icmp_id' slot.])
+
+AH_TEMPLATE([HAVE_ICMPHDR],
+           [Define this if you do pings with a `struct icmphdr' and an
+            `un.echo.id' slot.])
+
+AH_TEMPLATE([HAVE_GETIFADDRS],
+           [Define this if you have the getifaddrs() function.])
+
+AH_TEMPLATE([HAVE_FORKPTY],
+           [Define this if you have the 'forkpty' function:
+            This allows 'phosphor' and 'apple2' to run curses-based
+            programs, or be used as terminal windows.])
+
+AH_TEMPLATE([HAVE_GETTIMEOFDAY],
+           [Define this if you have the gettimeofday function.])
+
+AH_TEMPLATE([GETTIMEOFDAY_TWO_ARGS],
+           [Define this if gettimeofday() takes two arguments.])
+
+AH_TEMPLATE([XPointer],
+           [Define this to void* if you're using X11R4 or earlier.])
+
+# 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
 
-    *-dec-*)
-      AC_MSG_RESULT(DEC: adding -std1)
-      CC="$CC -std1"
-    ;;
+###############################################################################
+#
+#       Function to figure out how to run the compiler.
+#
+###############################################################################
 
-    *)
-      AC_MSG_RESULT(no idea)
-    ;;
-  esac
-fi
+AC_DEFUN(AC_PROG_CC_ANSI,
+ [AC_REQUIRE([AC_PROG_CC])
 
+  if test -z "$GCC"; then
+    # not using GCC
+    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 -ieee)
+        CC="$CC -std1"
+      ;;
+      *)
+        AC_MSG_RESULT(no idea)
+      ;;
+    esac
+  else
+    # using GCC
+    case "$host" in
+      *-solaris*)
+        AC_MSG_RESULT(Solaris: adding -D__EXTENSIONS__)
+        CC="$CC -D__EXTENSIONS__"
+      ;;
+    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.))
+  OBJCC="$CC"
 
-case "$host" in
-  *-irix5* |*-irix6.[0-3]* )
-    if test -n "$GCC"; then
-      AC_MSG_RESULT(Turning on gcc compiler warnings.)
-      CC="$CC -Wall -Wstrict-prototypes -Wnested-externs -Wno-format"
-    else
-      # not gcc
-      AC_MSG_RESULT(Turning on SGI compiler warnings.)
-      CC="$CC -fullwarn -use_readonly_const -rdata_shared -g3"
-    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.))
+
+  if test -n "$GCC"; then
+    AC_MSG_RESULT(Turning on gcc compiler warnings.)
+    CC="$CC -pedantic -Wall -Wstrict-prototypes -Wnested-externs -Wmissing-prototypes"
+    OBJCC="$OBJCC -Wall"
+    # As of gcc 3.4, we have "-Wdeclaration-after-statement"
+    # and so perhaps now we can do without -pedantic?
+  else
+    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
+])
 
-    *-linux-*)
-      AC_MSG_RESULT(Turning on gcc compiler warnings.)
-      CC="$CC -Wall -Wstrict-prototypes -Wnested-externs -Wno-format"
-  ;;
 
-#  *-dec-osf*)
-#    if test -z "$GCC"; then
-#      AC_MSG_RESULT(Turning on DEC C compiler warnings.)
-#      CC="$CC -migrate -w0 -verbose -warnprotos"
-#    fi
-#  ;;
+###############################################################################
+#
+#       Check for availability of various gcc command-line options.
+#
+###############################################################################
+
+AC_DEFUN(AC_CHECK_GCC_ARG,
+ [if test -n "$GCC"; then
+   AC_CACHE_CHECK([whether gcc accepts [$2]],
+     ac_cv_gcc_accepts_[$1],
+    [rm -rf conftest.$ac_ext
+     touch conftest.$ac_ext
+     if ( ( gcc -c [$2] conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \
+          grep unrecognized >/dev/null ); then
+       ac_cv_gcc_accepts_[$1]=no
+     else
+       ac_cv_gcc_accepts_[$1]=yes
+       CC="$CC [$2]"
+     fi])
+   ac_gcc_accepts_[$1]="$ac_cv_gcc_accepts_[$1]"
+  fi
+])
 
-esac
+AC_DEFUN(AC_NO_LONG_STRING_WARNINGS,
+         [AC_CHECK_GCC_ARG(no_overlength, -Wno-overlength-strings)])
 
+AC_DEFUN(AC_NO_MISPLACED_DECLARATIONS,
+         [AC_CHECK_GCC_ARG(no_decl_after, -Wdeclaration-after-statement)])
 
-# Try and determine whether ${INSTALL} can create intermediate directories,
-# and if not, whether "mkdir -p" works instead.  This sets ${INSTALL_DIRS}.
-# (But autoconf should earn its keep and do this for us!)
+# Need to disable Objective C extensions in ANSI C on MacOS X to work
+# around an Apple-specific gcc bug.
 #
-AC_DEFUN(AC_PROG_INSTALL_DIRS,
-  [INSTALL_DIRS='${INSTALL} -d'
-   AC_MSG_CHECKING(whether \"\${INSTALL} -d\" creates intermediate directories)
-   rm -rf conftestdir
-   if mkdir conftestdir; then
-      cd conftestdir >&-
-
-      ${INSTALL} -d `pwd`/dir1/dir2 >&- 2>&-
-      if test -d dir1/dir2 ; then
-        AC_MSG_RESULT(yes)
-      else
-        AC_MSG_RESULT(no)
-        AC_MSG_CHECKING(whether \"mkdir -p\" creates intermediate directories)
-        rm -rf dir1
-        mkdir -p dir1/dir2 >&- 2>&-
-        if test -d dir1/dir2/. ; then
-         AC_MSG_RESULT(yes)
-         INSTALL_DIRS='mkdir -p'
-        else
-         AC_MSG_RESULT(no)
-        fi
-      fi
-      cd .. >&-
-      rm -rf conftestdir
-   fi
-])
+AC_DEFUN(AC_NO_OBJECTIVE_C,
+         [AC_CHECK_GCC_ARG(no_cpp_precomp, -no-cpp-precomp)])
 
+###############################################################################
+#
+#       Function to figure out how to disable // comments in ANSI C code.
+#
+#       (With recent gcc, this is done with "-std=c89".  With older gcc, this
+#       is done by passing "-lang-c89" to cpp, by passing "-Wp,-lang-c89" to
+#       gcc.  Old gcc doesn't support -std, and new gcc doesn't support -lang.
+#       so much for compatibility!)
+#
+#       UPDATE: apparently there is NO WAY to tell gcc 3.2.2 to require that
+#       declarations preceed statements, without resorting to "-pedantic".
+#       This means that there is no way to get gcc3 to issue warnings that
+#       ensure that your code complies with the ANSI/ISO C89 standard, without
+#       also drowning in totally useless warnings.  Thank you master may I
+#       have another.
+#
+#       So, I give up, let's just use -pedantic.
+#
+###############################################################################
 
-AC_PROG_CPP
-AC_PROG_INSTALL
-AC_PROG_INSTALL_DIRS
-AC_PROG_MAKE_SET
+AC_DEFUN(AC_GCC_ACCEPTS_STD, [
+  case "$host" in
+    *-darwin* )
+      # Fucking Apple let // comments sneak into OpenGL headers, so
+      # we *must* allow // comments when compiling on Mac OS 10.6!  FUCK!
+    ;;
+   *)
+     AC_CHECK_GCC_ARG(std, -std=c89)
+   ;;
+  esac
+])
 
-AC_C_CONST
-AC_C_INLINE
+AC_DEFUN(AC_NO_CPLUSPLUS_COMMENTS_IN_C_CODE,
+ [if test -n "$GCC"; then
+   AC_GCC_ACCEPTS_STD
+   AC_MSG_RESULT(Disabling C++ comments in ANSI C code.)
+   #
+   # The reason that // comments are banned from xscreensaver is that gcc is
+   # basically the only compiler in the world that supports them in C code.
+   # All other vendors support them only in their C++ compilers, not in their
+   # ANSI C compilers.  This means that it's a portability problem: every time
+   # these comments have snuck into the xscreensaver source code, I've gotten
+   # complaints about it the next day.  So we turn off support for them in gcc
+   # as well to prevent them from accidentially slipping in.
+   #
+   if test "$ac_gcc_accepts_std" = yes ; then
+     #
+     # -std=c89 defines __STRICT_ANSI__, which we don't want.
+     # (That appears to be the only additional preprocessor symbol
+     # it defines, in addition to the syntax changes it makes.)
+     #
+     # -std=gnu89 is no good, because // comments were a GNU extension
+     # before they were in the ANSI C 99 spec...  (gcc 2.96 permits //
+     # with -std=gnu89 but not with -std=c89.)
+     #
+     # $CC already contains "-std=c89" via AC_GCC_ACCEPTS_STD
+     CC="$CC -U__STRICT_ANSI__"
+#   else
+#     # The old way:
+#     CC="$CC -Wp,-lang-c89"
+   fi
+  fi
+])
 
-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
+###############################################################################
+#
+#       Function to figure out how to create directory trees.
+#
+###############################################################################
 
-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_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 2>/dev/null
+       ${INSTALL} -d `pwd`/dir1/dir2 >/dev/null 2>&1
+       if test -d dir1/dir2/. ; then
+         ac_cv_install_d_creates_dirs=yes
+       fi
+       cd .. 2>/dev/null
+       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 2>/dev/null
+         mkdir -p dir1/dir2 >/dev/null 2>&1
+         if test -d dir1/dir2/. ; then
+           ac_cv_mkdir_p_creates_dirs=yes
+         fi
+         cd .. 2>/dev/null
+         rm -rf conftestdir
+       fi
+      ])
+  fi
 
-AC_CHECK_FUNCS(select fcntl uname nice setpriority getcwd getwd putenv)
-AC_CHECK_FUNCS(sigaction syslog)
+  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 crypt.h sys/select.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 --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.)
+# 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
-  # there must be a better way than this...
-  if test -z "`echo $enable_subdir | sed 's@^/.*@@'`" ; then
-    # absolute path
-    HACKDIR=$enable_subdir
+AC_DEFUN(AC_PROG_PERL,
+ [AC_PATH_PROGS(PERL, [perl5 perl],,)
+  if test -z "$PERL" ; then
+    PERL_VERSION=0
   else
-    # relative path
-    HACKDIR='${bindir}/'$enable_subdir
+    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
-fi
+ ])
 
-# canonicalize slashes.
-HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'`
 
+###############################################################################
+#
+#       Function to demand "bc".  Losers.
+#
+###############################################################################
 
-AC_PATH_XTRA
-
-if test "$have_x" != yes; then
-  AC_MSG_ERROR(Couldn't find X11 headers/libs.  Try \`$0 --help'.)
-fi
+AC_DEFUN(AC_DEMAND_BC,
+ [ac_bc_result=`echo 6+9 | bc 2>/dev/null`
+  AC_MSG_CHECKING([for bc])
+  if test "$ac_bc_result" = "15" ; then
+    AC_MSG_RESULT(yes)
+  else
+    AC_MSG_RESULT(no)
+    echo ''
+    AC_MSG_ERROR([Your system doesn't have \"bc\", which has been a standard
+                  part of Unix since the 1970s.  Come back when your vendor
+                  has grown a clue.])
+  fi
+ ])
 
+###############################################################################
+#
+#       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;
+                   #if defined(__DECC) || defined(_IP_VHL)
+                   ip.ip_vhl = 0;
+                   #else
+                   ip.ip_hl = 0;
+                   #endif
+                   ],
+                  [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.checksum = 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...
@@ -200,70 +730,81 @@ fi
 AC_DEFUN(AC_PATH_X_APP_DEFAULTS_XMKMF,[
   rm -fr conftestdir
   if mkdir conftestdir; then
-    cd conftestdir >&-
+    cd conftestdir 2>/dev/null
     # Make sure to not put "make" in the Imakefile rules, since we grep it out.
     cat > Imakefile <<'EOF'
 acfindx:
        @echo 'ac_x_app_defaults="${XAPPLOADDIR}"'
 EOF
-    if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
+    if (xmkmf) >/dev/null 2>&1 && test -f Makefile; then
       # GNU make sometimes prints "make[1]: Entering...", which'd confuse us.
       eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
     fi
-    cd .. >&-
+    cd .. 2>/dev/null
     rm -fr conftestdir
   fi])
 
+###############################################################################
+#
+#       Handle the --with-x-app-defaults option HERE
+#
+###############################################################################
+
+AC_ARG_WITH(x-app-defaults,[],
+       [ac_cv_x_app_defaults="$withval"],
+       [eval ac_x_app_defaults="$withval"])
+
+
 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
@@ -273,7 +814,6 @@ 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,
@@ -289,10 +829,175 @@ 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/include/$version || test -d /usr/contrib/$version/include
+        then
+           # if contrib exists, use it...
+           if test -d /usr/contrib/$version/include ; 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/include/$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/include/Motif2.1 ; then
+        X_CFLAGS="$X_CFLAGS -I/usr/include/Motif2.1"
+        X_LIBS="$X_LIBS -L/usr/lib/Motif2.1"
+      elif test -d /usr/include/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/include/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/graphics/OpenGL/include ; then
+        # HP-UX 10.20 puts it here
+        X_CFLAGS="-I/opt/graphics/OpenGL/include $X_CFLAGS"
+        X_LIBS="-L/opt/graphics/OpenGL/lib $X_LIBS"
+      elif 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"
+        MOTIF_LIBS="$MOTIF_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, [MOTIF_LIBS="$MOTIF_LIBS -lgen"])
+      fi
+
+    ;;
+    *-darwin*)
+
+      # On MacOS X (10.x with "fink"), many things are under /sw/.
+      #
+      if test -d /sw/include ; then
+        X_CFLAGS="-I/sw/include $X_CFLAGS"
+        X_LIBS="-L/sw/lib $X_LIBS"
+      fi
+    ;;
+  esac])
+
+AC_DEFUN(AC_CHECK_GETIFADDRS,
+ [AC_CACHE_CHECK([for getifaddrs], ac_cv_have_getifaddrs,
+  [AC_TRY_COMPILE([#include <stdlib.h>
+                   #include <unistd.h>
+                   #include <arpa/inet.h>
+                   #include <ifaddrs.h>],
+                  [struct ifaddrs *ifa;
+                   getifaddrs (&ifa);
+                   ifa->ifa_next = 0;
+                   ifa->ifa_addr->sa_family = 0;],
+                  [ac_cv_have_getifaddrs=yes],
+                  [ac_cv_have_getifaddrs=no])])
+ if test "$ac_cv_have_getifaddrs" = yes ; then
+   AC_DEFINE(HAVE_GETIFADDRS)
+ fi])
+
+
+###############################################################################
+#
+#       Some utility functions to make checking for X things easier.
+#
+###############################################################################
 
 # Like AC_CHECK_HEADER, but it uses the already-computed -I directories.
 #
@@ -302,7 +1007,8 @@ AC_DEFUN(AC_CHECK_X_HEADER, [
     CPPFLAGS="$CPPFLAGS -I$includedir"
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-  AC_CHECK_HEADER([$1], [$2])
+  CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+  AC_CHECK_HEADER([$1],[$2],[$3],[$4])
   CPPFLAGS="$ac_save_CPPFLAGS"])
 
 # Like AC_EGREP_HEADER, but it uses the already-computed -I directories.
@@ -313,6 +1019,7 @@ AC_DEFUN(AC_EGREP_X_HEADER, [
     CPPFLAGS="$CPPFLAGS -I$includedir"
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+  CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
   AC_EGREP_HEADER([$1], [$2], [$3], [$4])
   CPPFLAGS="$ac_save_CPPFLAGS"])
 
@@ -324,6 +1031,7 @@ AC_DEFUN(AC_TRY_X_COMPILE, [
     CPPFLAGS="$CPPFLAGS -I$includedir"
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+  CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
   AC_TRY_COMPILE([$1], [$2], [$3], [$4])
   CPPFLAGS="$ac_save_CPPFLAGS"])
 
@@ -334,6 +1042,7 @@ 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"
@@ -345,11 +1054,15 @@ AC_DEFUN(AC_CHECK_X_LIB, [
     LDFLAGS="$LDFLAGS -L$libdir"
   fi
   # note: $X_LIBS includes $x_libraries
-  LDFLAGS="$LDFLAGS $X_LIBS"
+  LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
+  CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+  LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
   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!)
@@ -360,14 +1073,15 @@ AC_DEFUN(AC_TRY_X_RUN, [
     CPPFLAGS="$CPPFLAGS -I$includedir"
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+  CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
   AC_TRY_RUN([$1], [$2], [$3], [$4])
   CPPFLAGS="$ac_save_CPPFLAGS"])
 
 
 
 # Usage: HANDLE_X_PATH_ARG([variable_name],
-#                         [--command-line-option],
-#                         [descriptive string])
+#                          [--command-line-option],
+#                          [descriptive string])
 #
 # All of the --with options take three forms:
 #
@@ -417,200 +1131,173 @@ AC_DEFUN(HANDLE_X_PATH_ARG, [
      exit 1
      ;;
    esac
-
-   # why is this necessary?
-   # if we don't do this, then "./configure --with-motif=/usr/local/lesstif"
-   # behaves as if "--with-zippy=/usr/local/lesstif" was also present!
-   withval=
   ])
 
 
 
-# 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"])
+#       End of function definitions.  Now start actually executing stuff.
+#
+###############################################################################
+###############################################################################
 
+# WTF!  autoconf emits this *way* too late.  Do it earlier.
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
 
-# 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
 
+# random compiler setup
+AC_CANONICAL_HOST
+AC_PROG_CC_ANSI
+AC_NO_LONG_STRING_WARNINGS
+AC_NO_MISPLACED_DECLARATIONS
+AC_NO_OBJECTIVE_C
+AC_NO_CPLUSPLUS_COMMENTS_IN_C_CODE
+AC_PROG_CPP
+AC_C_CONST
+AC_C_INLINE
+AC_EXEEXT
+AC_DEMAND_BC
+
+# stuff for Makefiles
+AC_PROG_INSTALL
+AC_PROG_INSTALL_DIRS
+AC_PROG_MAKE_SET
 
-# Random special-cases for certain pathological OSes.  You know who you are.
+# By default, autoconf sets INSTALL_SCRIPT to '${INSTALL_PROGRAM}'.
+# That's wrong: it should be set to '${INSTALL}', so that one can
+# implement the "install-strip" target properly (strip executables,
+# but do not try to strip scripts.)
 #
-case "$host" in
-  *-hpux*)
+INSTALL_SCRIPT='${INSTALL}'
 
-    # 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/.
-    # 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.
-    #
-    # Questions I still don't know the answers to: (do you?)
-    #
-    #   * Does HPUX 10.x come with /usr/contrib/X11R6/ standard?  
-    #     Or does that need to be installed separately?
-    #
-    #   * 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
+# 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_SYS_LARGEFILE
+AC_CHECK_FUNCS(select fcntl uname nice setpriority getcwd getwd putenv sbrk)
+AC_CHECK_FUNCS(sigaction syslog realpath setrlimit)
+AC_CHECK_FUNCS(setlocale)
+AC_CHECK_ICMP
+AC_CHECK_ICMPHDR
+AC_CHECK_GETIFADDRS
+AC_CHECK_HEADERS(crypt.h sys/select.h)
+AC_PROG_PERL
+
+if test -z "$PERL" ; then
+  # don't let it be blank...
+  PERL=/usr/bin/perl
+fi
 
-    # 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
+AC_PATH_XTRA
 
-    # 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 "$have_x" != yes; then
+  AC_MSG_ERROR(Couldn't find X11 headers/libs.  Try `$0 --help'.)
+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
+AC_PATH_X_APP_DEFAULTS
+AC_X_RANDOM_PATHS
+AC_XPOINTER
 
-    # 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
+AC_MSG_CHECKING(whether this is MacOS X)
+  ac_macosx=no
+  case "$host" in
+    *-apple-darwin* )
+      ac_macosx=yes
+    ;;
+  esac
+AC_MSG_RESULT($ac_macosx)
 
-  ;;
-  *-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"
+###############################################################################
+#
+#       Gettext support
+#
+###############################################################################
 
-      # Some versions of Slowlaris Motif require -lgen.  But not all.  Why?
-      AC_CHECK_LIB(gen, regcmp, [X_LIBS="$X_LIBS -lgen"])
-    fi
-  ;;
-esac
+AC_PROG_INTLTOOL
+GETTEXT_PACKAGE=xscreensaver
+AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
+                  [This is the name of the gettext package to use.])
+AC_DEFINE_UNQUOTED(PACKAGE, "$GETTEXT_PACKAGE",
+                  [This is the same as GETTEXT_PACKAGE, but for the glade
+                  generated code.])
+AC_SUBST(GETTEXT_PACKAGE)
 
+ALL_LINGUAS="ca da de es et fi fr hu it ja ko nb nl pl pt pt_BR ru sk sv vi wa zh_CN zh_TW"
+AM_GLIB_GNU_GETTEXT
+MKINSTALLDIRS="$INSTALL_DIRS"
 
 
-# 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])
+AC_CHECK_X_HEADER(X11/Xmu/Error.h, [have_xmu=yes],,
+                  [#include <stdlib.h>
+                   #include <stdio.h>
+                   #include <X11/Intrinsic.h>])
 if test "$have_xmu" = no ; then
   XMU_SRCS='$(UTILS_SRC)/xmu.c'
   XMU_OBJS='$(UTILS_BIN)/xmu.o'
+  XMU_LIBS=''
 else
   XMU_SRCS=''
   XMU_OBJS=''
-  SAVER_LIBS="-lXmu $SAVER_LIBS"
-  HACK_LIBS="-lXmu $HACK_LIBS"
-  TOOLKIT_LIBS="-lXmu $TOOLKIT_LIBS"
+  XMU_LIBS='-lXmu'
   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.
+###############################################################################
+#
+#       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"])
+                   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"])
+                     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
     ;;
@@ -618,285 +1305,569 @@ if test "$have_xmu" = yes ; then
 fi
 
 
-# Check for the SGI SCREEN_SAVER server extension header.
+###############################################################################
+#
+#       Handle the --with-hackdir option
 #
-have_sgi=no
-with_sgi_req=unspecified
-AC_ARG_WITH(sgi-ext,
-[Except where noted, all of the --with options below can also take a
-directory argument: for example, --with-motif=/opt/Motif.  That would
-cause /opt/Motif/include/ to be added to the -I list, and /opt/Motif/lib/
-to be added to the -L list, assuming those directories exist.
+###############################################################################
+
+have_hackdir=yes
+with_hackdir_req=unspecified
+AC_ARG_WITH(hackdir,[
+
+Installation options:
+  --with-hackdir=DIR      Where to install the hundreds of demo executables.
+                          Default: `PREFIX/libexec/xscreensaver/'],
+  [with_hackdir="$withval"; with_hackdir_req="$withval"],[with_hackdir=yes])
 
-X Server Extension options:
+if test x"$with_hackdir" = xyes; then
+  HACKDIR='${libexecdir}/xscreensaver'
+elif test x"$with_hackdir" = xno; then
+  HACKDIR='${bindir}'
+else
+  HACKDIR=$with_hackdir
+fi
 
-  --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.],
-  [with_sgi="$withval"; with_sgi_req="$withval"],[with_sgi=yes])
+# canonicalize slashes.
+HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'`
 
-HANDLE_X_PATH_ARG(with_sgi, --with-sgi-ext, SGI SCREEN_SAVER)
+# Expand HACKDIR as HACKDIR_FULL
+HACKDIR_FULL=`eval eval eval eval eval eval eval eval eval echo $HACKDIR`
 
-if test "$with_sgi" = yes; then
-  AC_CHECK_X_HEADER(X11/extensions/XScreenSaver.h,
-                   [have_sgi=yes
-                    AC_DEFINE(HAVE_SGI_SAVER_EXTENSION)])
+# This option used to be called --enable-subdir; make sure that is no longer
+# used, since configure brain-damagedly ignores unknown --enable options.
 
-elif test "$with_sgi" != no; then
-  echo "error: must be yes or no: --with-sgi-ext=$with_sgi"
+obsolete_enable=
+AC_ARG_ENABLE(subdir,,[obsolete_enable=yes])
+if test -n "$obsolete_enable"; then
+  echo "error: the --enable-subdir option has been replaced with"
+  echo "       the new --with-hackdir option; see \`configure --help'"
+  echo "       for more information."
   exit 1
 fi
 
-# Check for the MIT-SCREEN-SAVER server extension header,
-# unless the SGI extension has already been found.
-#
-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="$withval"; with_mit_req="$withval"],[with_mit=yes])
-
-HANDLE_X_PATH_ARG(with_mit, --with-mit-ext, MIT-SCREEN-SAVER)
 
-if test "$have_sgi" != yes; then
-  if test "$with_mit" = yes; then
-    AC_CHECK_X_HEADER(X11/extensions/scrnsaver.h, [have_mit=yes])
+###############################################################################
+#
+#       Handle the --with-configdir option
+#       Help for --with-x-app-defaults option added.
+#
+###############################################################################
+
+have_configdir=yes
+with_configdir_req=unspecified
+AC_ARG_WITH(configdir,
+[  --with-configdir=DIR    Where to install the data files that describe each
+                          of the display modes to the GUI.
+                          Default: `PREFIX/share/xscreensaver/config/'
+  --with-x-app-defaults=DIR
+                          Where to install xscreensaver configuration file.
+],
+  [with_configdir="$withval"; with_configdir_req="$withval"],
+  [with_configdir=yes])
 
-    # 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
+if test x"$with_configdir" = xyes; then
+  HACK_CONF_DIR='${datadir}/xscreensaver/config'
+elif test x"$with_configdir" = xno; then
+  echo "error: must be yes, or a pathname: --with-configdir=$with_configdir"
+  exit 1
+else
+  # there must be a better way than this...
+  if test -z "`echo $with_configdir | sed 's@^/.*@@'`" ; then
+    # absolute path
+    HACK_CONF_DIR=$with_configdir
+  else
+    # relative path
+    HACK_CONF_DIR="\${exec_prefix}$with_configdir"
+  fi
+fi
 
-      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 "$have_mit" = yes; then
-      AC_DEFINE(HAVE_MIT_SAVER_EXTENSION)
-    fi
 
+
+###############################################################################
+#
+#       Check for the SGI SCREEN_SAVER server extension.
+#
+###############################################################################
+
+#have_sgi=no
+#with_sgi_req=unspecified
+#AC_ARG_WITH(sgi-ext,
+#[Except where noted, all of the --with options below can also take a
+#directory argument: for example, `--with-motif=/opt/Motif'.  That would
+#cause /opt/Motif/include/ to be added to the -I list, and /opt/Motif/lib/
+#to be added to the -L list, assuming those directories exist.  
+#
+#By default, support for each of these options will be built in, if the
+#relevant library routines exist.  At run time, they will then be used
+#only if the X server being used supports them.  Each --with option has
+#a corresponding --without option, to override building support for them
+#at all.
+#
+#Screen blanking and idle-detection options:
+#
+#  --with-sgi-ext          Include support for the SGI SCREEN_SAVER extension.],
+#  [with_sgi="$withval"; with_sgi_req="$withval"],[with_sgi=yes])
+#
+#HANDLE_X_PATH_ARG(with_sgi, --with-sgi-ext, SGI SCREEN_SAVER)
+#
+#if test "$with_sgi" = yes; then
+#  AC_CHECK_X_HEADER(X11/extensions/XScreenSaver.h,
+#                    [have_sgi=yes
+#                     AC_DEFINE(HAVE_SGI_SAVER_EXTENSION)],,
+#                    [#include <X11/Xlib.h>])
+#
+#elif test "$with_sgi" != no; then
+#  echo "error: must be yes or no: --with-sgi-ext=$with_sgi"
+#  exit 1
+#fi
+
+
+###############################################################################
+#
+#       Check for the XIDLE server extension.
+#
+###############################################################################
+
+#have_xidle=no
+#with_xidle_req=unspecified
+#AC_ARG_WITH(xidle-ext,
+#[  --with-xidle-ext        Include support for the XIDLE extension.],
+#  [with_xidle="$withval"; with_xidle_req="$withval"],[with_xidle=yes])
+#
+#HANDLE_X_PATH_ARG(with_xidle, --with-xidle-ext, XIDLE)
+#
+#if test "$with_xidle" = yes; then
+#  AC_CHECK_X_HEADER(X11/extensions/xidle.h,
+#                    [have_xidle=yes
+#                     AC_DEFINE(HAVE_XIDLE_EXTENSION)],,
+#                    [#include <X11/Xlib.h>])
+#elif test "$with_xidle" != no; then
+#  echo "error: must be yes or no: --with-xidle-ext=$with_xidle"
+#  exit 1
+#fi
+
+
+###############################################################################
+#
+#       Check for the SGI-VIDEO-CONTROL server extension.
+#
+###############################################################################
+
+#have_sgivc=no
+#with_sgivc_req=unspecified
+#AC_ARG_WITH(sgivc-ext,
+#[  --with-sgivc-ext        Include support for the SGI-VIDEO-CONTROL extension.],
+#  [with_sgivc="$withval"; with_sgivc_req="$withval"],[with_sgivc=yes])
+#
+#HANDLE_X_PATH_ARG(with_sgivc, --with-sgivc-ext, SGI-VIDEO-CONTROL)
+#
+#if test "$with_sgivc" = yes; then
+#
+#  # first check for XSGIvc.h
+#  AC_CHECK_X_HEADER(X11/extensions/XSGIvc.h, [have_sgivc=yes],,
+#                    [#include <X11/Xlib.h>])
+#
+#  # if that succeeded, then check for the -lXsgivc
+#  if test "$have_sgivc" = yes; then
+#    have_sgivc=no
+#    AC_CHECK_X_LIB(Xsgivc, XSGIvcQueryGammaMap,
+#                  [have_sgivc=yes; SAVER_LIBS="$SAVER_LIBS -lXsgivc"], [true],
+#                  -lXext -lX11)
+#  fi
+#
+#  # if that succeeded, then we've really got it.
+#  if test "$have_sgivc" = yes; then
+#    AC_DEFINE(HAVE_SGI_VC_EXTENSION)
+#  fi
+#
+#elif test "$with_sgivc" != no; then
+#  echo "error: must be yes or no: --with-sgivc-ext=$with_sgivc"
+#  exit 1
+#fi
+
+
+###############################################################################
+#
+#       Check for the DPMS server extension.
+#
+###############################################################################
+
+have_dpms=no
+with_dpms_req=unspecified
+AC_ARG_WITH(dpms-ext,
+[  --with-dpms-ext         Include support for the DPMS extension.],
+  [with_dpms="$withval"; with_dpms_req="$withval"],[with_dpms=yes])
+
+HANDLE_X_PATH_ARG(with_dpms, --with-dpms-ext, DPMS)
+
+if test "$with_dpms" = yes; then
+
+  # first check for dpms.h
+  AC_CHECK_X_HEADER(X11/extensions/dpms.h, [have_dpms=yes],,
+                    [#include <X11/Xlib.h>
+                    #include <X11/Xmd.h>])
+
+  # if that succeeded, then check for the DPMS code in the libraries
+  if test "$have_dpms" = yes; then
+
+    # first look in -lXext (this is where it is with XFree86 4.0)
+    have_dpms=no
+    AC_CHECK_X_LIB(Xext, DPMSInfo, [have_dpms=yes], [true], -lXext -lX11)
+
+    # if that failed, look in -lXdpms (this is where it was in XFree86 3.x)
+    if test "$have_dpms" = no; then
+      AC_CHECK_X_LIB(Xdpms, DPMSInfo,
+                    [have_dpms=yes; XDPMS_LIBS="-lXdpms"], [true],
+                    -lXext -lX11)
     fi
+  fi
 
-  elif test "$with_mit" != no; then
-    echo "error: must be yes or no: --with-mit-ext=$with_mit"
-    exit 1
+
+  # if that succeeded, then we've really got it.
+  if test "$have_dpms" = yes; then
+    AC_DEFINE(HAVE_DPMS_EXTENSION)
   fi
+
+elif test "$with_dpms" != no; then
+  echo "error: must be yes or no: --with-dpms-ext=$with_dpms"
+  exit 1
 fi
 
 
-# Check for the XIDLE server extension header.
+###############################################################################
 #
-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="$withval"; with_xidle_req="$withval"],[with_xidle=yes])
+#       Check for the XINERAMA server extension.
+#
+###############################################################################
+
+have_xinerama=no
+with_xinerama_req=unspecified
+AC_ARG_WITH(xinerama-ext,
+[  --with-xinerama-ext     Include support for the XINERAMA extension.],
+  [with_xinerama="$withval"; with_xinerama_req="$withval"],[with_xinerama=yes])
+
+HANDLE_X_PATH_ARG(with_xinerama, --with-xinerama-ext, XINERAMA)
+
+if test "$with_xinerama" = yes; then
+
+  # first check for Xinerama.h
+  AC_CHECK_X_HEADER(X11/extensions/Xinerama.h, [have_xinerama=yes],,
+                    [#include <X11/Xlib.h>])
+
+  # if that succeeded, then check for the XINERAMA code in the libraries
+  if test "$have_xinerama" = yes; then
+
+    # first look in -lXext
+    have_xinerama=no
+    AC_CHECK_X_LIB(Xext, XineramaQueryScreens, [have_xinerama=yes], [true],
+                  -lXext -lX11)
+
+    # if that failed, look in -lXinerama (this is where it is in XFree86 4.1.)
+    if test "$have_xinerama" = no; then
+      AC_CHECK_X_LIB(Xinerama, XineramaQueryScreens,
+                     [have_xinerama=yes; XINERAMA_LIBS="-lXinerama"],
+                     [true], -lXext -lX11)
+    fi
+  fi
 
-HANDLE_X_PATH_ARG(with_xidle, --with-xidle-ext, XIDLE)
+  # if that succeeded, then we've really got it.
+  if test "$have_xinerama" = yes; then
+    AC_DEFINE(HAVE_XINERAMA)
+  fi
 
-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
-  echo "error: must be yes or no: --with-xidle-ext=$with_xidle"
+elif test "$with_xinerama" != no; then
+  echo "error: must be yes or no: --with-xinerama-ext=$with_xinerama"
   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])
+#       Check for the XINPUT server extension.
+#
+###############################################################################
 
-HANDLE_X_PATH_ARG(with_xshm, --with-xshm-ext, XSHM)
+have_xinput=no
+with_xinput_req=unspecified
+AC_ARG_WITH(xinput-ext,
+[  --with-xinput-ext       Include support for the XInput extension.],
+  [with_xinput="$withval"; with_xinput_req="$withval"], [with_xinput=yes])
 
-if test "$with_xshm" = yes; then
+HANDLE_X_PATH_ARG(with_xinput, --with-xinput-ext, XINPUT)
 
-  # first check for Xshm.h.
-  AC_CHECK_X_HEADER(X11/extensions/XShm.h, [have_xshm=yes])
+if test "$with_xinput" = yes; then
 
-  # 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
+  # first check for Xinput.h
+  AC_CHECK_X_HEADER(X11/extensions/XInput.h, [have_xinput=yes],,
+                    [#include <X11/Xlib.h>])
 
-  # if that succeeded, then check for sys/shm.h.
-  if test "$have_xshm" = yes; then
-    have_xshm=no
-    AC_CHECK_X_HEADER(sys/shm.h, [have_xshm=yes])
+  # if that succeeded, then check for libXi
+  if test "$have_xinput" = yes; then
+    have_xinput=no
+    AC_CHECK_X_LIB(Xi, XListInputDevices,
+                   [have_xinput=yes; SAVER_LIBS="$SAVER_LIBS -lXi"],
+                   [true], -lXext -lX11)
   fi
 
-  # 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
-
   # if that succeeded, then we've really got it.
-  if test "$have_xshm" = yes; then
-    AC_DEFINE(HAVE_XSHM_EXTENSION)
+  if test "$have_xinput" = yes; then
+    AC_DEFINE(HAVE_XINPUT)
   fi
 
-elif test "$with_xshm" != no; then
-  echo "error: must be yes or no: --with-xshm-ext=$with_xshm"
+elif test "$with_xinput" != no; then
+  echo "error: must be yes or no: --with-xinput-ext=$with_xinput"
   exit 1
 fi
 
 
-# Check for the DOUBLE-BUFFER server extension header.
+###############################################################################
 #
-have_xdbe=no
-with_xdbe_req=unspecified
-AC_ARG_WITH(xdbe-ext,
-[  --with-xdbe-ext         Include support for the DOUBLE-BUFFER server
-                          extension, if possible (this is the default).
-  --without-xdbe-ext      Do not compile in support for this extension.],
-  [with_xdbe="$withval"; with_xdbe_req="$withval"],[with_xdbe=yes])
+#       Check for the XF86VMODE server extension (for virtual screens.)
+#
+###############################################################################
 
-HANDLE_X_PATH_ARG(with_xdbe, --with-xdbe-ext, DOUBLE-BUFFER)
+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])
 
-if test "$with_xdbe" = yes; then
+HANDLE_X_PATH_ARG(with_xf86vmode, --with-xf86vmode-ext, xf86vmode)
 
-  AC_CHECK_X_HEADER(X11/extensions/Xdbe.h, [have_xdbe=yes])
-  if test "$have_xdbe" = yes; then
-    AC_DEFINE(HAVE_DOUBLE_BUFFER_EXTENSION)    
+VIDMODE_LIBS=""
+
+if test "$with_xf86vmode" = yes; then
+
+  # first check for xf86vmode.h
+  AC_CHECK_X_HEADER(X11/extensions/xf86vmode.h, [have_xf86vmode=yes],,
+                    [#include <X11/Xlib.h>])
+
+  # if that succeeded, then check for the -lXxf86vm
+  if test "$have_xf86vmode" = yes; then
+    have_xf86vmode=no
+    AC_CHECK_X_LIB(Xxf86vm, XF86VidModeGetViewPort,
+                  [have_xf86vmode=yes;
+                   VIDMODE_LIBS="-lXxf86vm";
+                   SAVER_LIBS="$SAVER_LIBS $VIDMODE_LIBS"],
+                   [true], -lXext -lX11)
   fi
 
-elif test "$with_xdbe" != no; then
-  echo "error: must be yes or no: --with-xdbe-ext=$with_xshm"
+  # if that succeeded, then we've really got it.
+  if test "$have_xf86vmode" = yes; then
+    AC_DEFINE(HAVE_XF86VMODE)
+  fi
+
+elif test "$with_xf86vmode" != no; then
+  echo "error: must be yes or no: --with-xf86vmode-ext=$with_xf86vmode"
   exit 1
 fi
 
 
-# Check for the SGI-VIDEO-CONTROL server extension header.
+###############################################################################
+#
+#       Check for the XF86VMODE server extension (for gamma fading.)
 #
-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])
+###############################################################################
 
-HANDLE_X_PATH_ARG(with_sgivc, --with-sgivc-ext, SGI-VIDEO-CONTROL)
+have_xf86gamma=no
+have_xf86gamma_ramp=no
+with_xf86gamma_req=unspecified
+AC_ARG_WITH(xf86gamma-ext,
+[  --with-xf86gamma-ext    Include support for XFree86 gamma fading.],
+  [with_xf86gamma="$withval"; with_xf86gamma_req="$withval"],
+  [with_xf86gamma=yes])
 
-if test "$with_sgivc" = yes; then
+HANDLE_X_PATH_ARG(with_xf86gamma, --with-xf86gamma-ext, xf86gamma)
 
-  # first check for XSGIvc.h
-  AC_CHECK_X_HEADER(X11/extensions/XSGIvc.h, [have_sgivc=yes])
+if test "$with_xf86gamma" = yes; then
 
-  # 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)
+  # first check for xf86vmode.h, if we haven't already
+  if test "$have_xf86vmode" = yes; then
+    have_xf86gamma=yes
+  else
+    AC_CHECK_X_HEADER(X11/extensions/xf86vmode.h, [have_xf86gamma=yes],,
+                      [#include <X11/Xlib.h>])
   fi
 
-  # if that succeeded, then we've really got it.
-  if test "$have_sgivc" = yes; then
-    AC_DEFINE(HAVE_SGI_VC_EXTENSION)
+  # if that succeeded, then check for the -lXxf86vm
+  if test "$have_xf86gamma" = yes; then
+    have_xf86gamma=no
+    AC_CHECK_X_LIB(Xxf86vm, XF86VidModeSetGamma,
+                  [have_xf86gamma=yes],
+                   [true], -lXext -lX11)
+  fi
+
+  # check for the Ramp versions of the functions too.
+  if test "$have_xf86gamma" = yes; then
+    have_xf86gamma_ramp=no
+    AC_CHECK_X_LIB(Xxf86vm, XF86VidModeSetGammaRamp,
+                  [have_xf86gamma_ramp=yes],
+                   [true], -lXext -lX11)
+  fi
+
+  # if those tests succeeded, then we've really got the functions.
+  if test "$have_xf86gamma" = yes; then
+    AC_DEFINE(HAVE_XF86VMODE_GAMMA)
   fi
 
-elif test "$with_sgivc" != no; then
-  echo "error: must be yes or no: --with-sgivc-ext=$with_sgivc"
+  if test "$have_xf86gamma_ramp" = yes; then
+    AC_DEFINE(HAVE_XF86VMODE_GAMMA_RAMP)
+  fi
+
+  # pull in the lib, if we haven't already
+  if test "$have_xf86gamma" = yes -a "$have_xf86vmode" = no; then
+    SAVER_LIBS="$SAVER_LIBS -lXxf86vm"
+  fi
+
+elif test "$with_xf86gamma" != no; then
+  echo "error: must be yes or no: --with-xf86gamma-ext=$with_xf86vmode"
   exit 1
 fi
 
 
-# Check for the DPMS server extension header.
+###############################################################################
 #
-have_dpms=no
-with_dpms_req=unspecified
-AC_ARG_WITH(dpms-ext,
-[  --with-dpms-ext         Include support for the DPMS server extension,
-                          if possible (this is the default).
-  --without-dpms-ext      Do not compile in support for this extension.],
-  [with_dpms="$withval"; with_dpms_req="$withval"],[with_dpms=yes])
+#       Check for the RANDR (Resize and Rotate) server extension.
+#
+#       We need this to detect when the resolution of the desktop
+#       has changed out from under us (this is a newer, different
+#       mechanism than the XF86VMODE virtual viewports.)
+#
+###############################################################################
 
-HANDLE_X_PATH_ARG(with_dpms, --with-dpms-ext, DPMS)
+have_randr=no
+with_randr_req=unspecified
+AC_ARG_WITH(randr-ext,
+[  --with-randr-ext        Include support for the X Resize+Rotate extension.],
+  [with_randr="$withval"; with_randr_req="$withval"],[with_randr=yes])
 
-if test "$with_dpms" = yes; then
+HANDLE_X_PATH_ARG(with_randr, --with-randr-ext, RANDR)
 
-  # first check for dpms.h
-  AC_CHECK_X_HEADER(X11/extensions/dpms.h, [have_dpms=yes])
+if test "$with_randr" = yes; then
 
-  # 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"], [],
-                 -lXext -lX11)
+  # first check for Xrandr.h
+  AC_CHECK_X_HEADER(X11/extensions/Xrandr.h, [have_randr=yes],,
+                    [#include <X11/Xlib.h>])
+
+  # if that succeeded, then check for the XRR code in the libraries
+  if test "$have_randr" = yes; then
+
+    # RANDR probably needs -lXrender
+    xrender_libs=
+    AC_CHECK_X_LIB(Xrender, XRenderSetSubpixelOrder,
+                   [xrender_libs="-lXrender"], [true], -lXext -lX11)
+
+    # first look for RANDR in -lXext
+    have_randr=no
+    AC_CHECK_X_LIB(Xext, XRRGetScreenInfo,
+                   [have_randr=yes; SAVER_LIBS="$SAVER_LIBS $xrender_libs"],
+                   [true], $xrender_libs -lXext -lX11)
+
+    # if that failed, look in -lXrandr
+    if test "$have_randr" = no; then
+      AC_CHECK_X_LIB(Xrandr, XRRGetScreenInfo,
+             [have_randr=yes; SAVER_LIBS="$SAVER_LIBS -lXrandr $xrender_libs"],
+                     [true], $xrender_libs -lXext -lX11)
+    fi
   fi
 
   # if that succeeded, then we've really got it.
-  if test "$have_dpms" = yes; then
-    AC_DEFINE(HAVE_DPMS_EXTENSION)
+  if test "$have_randr" = yes; then
+    AC_DEFINE(HAVE_RANDR)
+
+    # Now check for version 1.2 in the same libs.
+    # Try to compile, since on MacOS 10.5.7, headers are older than libs!
+    AC_CACHE_CHECK([for XRRGetScreenResources], ac_cv_randr_12,
+      [ac_cv_randr_12=no
+       AC_TRY_X_COMPILE([#include <stdlib.h>
+                         #include <X11/Xlib.h>
+                         #include <X11/extensions/Xrandr.h>],
+                        [XRRScreenResources *res = 
+                           XRRGetScreenResources (0, 0);],
+                        [ac_cv_randr_12=yes],
+                        [ac_cv_randr_12=no])])
+    if test "$ac_cv_randr_12" = yes ; then
+      AC_DEFINE(HAVE_RANDR_12)
+    fi
+#   AC_CHECK_X_LIB(c, XRRGetOutputInfo, [AC_DEFINE(HAVE_RANDR_12)],
+#                  [true], $SAVER_LIBS)
   fi
 
-elif test "$with_dpms" != no; then
-  echo "error: must be yes or no: --with-dpms-ext=$with_dpms"
+
+elif test "$with_randr" != no; then
+  echo "error: must be yes or no: --with-randr-ext=$with_randr"
   exit 1
 fi
 
 
-# Check for /proc/interrupts
+###############################################################################
+#
+#       Check for XF86MiscSetGrabKeysState (but only bother if we are already
+#      using other XF86 stuff.)
+#
+###############################################################################
+
+have_xf86miscsetgrabkeysstate=no
+if test "$have_xf86gamma" = yes -o "$have_xf86vmode" = yes; then
+  AC_CHECK_X_LIB(Xxf86misc, XF86MiscSetGrabKeysState,
+                [have_xf86miscsetgrabkeysstate=yes],
+                [true], -lXext -lX11)
+  if test "$have_xf86miscsetgrabkeysstate" = yes ; then
+    SAVER_LIBS="$SAVER_LIBS -lXxf86misc"
+    AC_DEFINE(HAVE_XF86MISCSETGRABKEYSSTATE)
+  fi
+fi
+
+
+###############################################################################
 #
+#       Check for HP XHPDisableReset and XHPEnableReset.
+#
+###############################################################################
+
+AC_MSG_CHECKING([for XHPDisableReset in X11/XHPlib.h])
+AC_EGREP_X_HEADER(XHPDisableReset, X11/XHPlib.h,
+                  [AC_DEFINE(HAVE_XHPDISABLERESET)
+                   SAVER_LIBS="-lXhp11 $SAVER_LIBS"
+                   AC_MSG_RESULT(yes)],
+                  [AC_MSG_RESULT(no)])
+
+
+###############################################################################
+#
+#       Check for /proc/interrupts.
+#
+###############################################################################
+
 have_proc_interrupts=no
 with_proc_interrupts_req=unspecified
 AC_ARG_WITH(proc-interrupts,
 [  --with-proc-interrupts  Include support for consulting the /proc/interrupts
-                          file to notice keyboard activity, if possible.
-  --without-proc-interrupts   Do not compile in support for this method.],
+                          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_MSG_CHECKING(whether /proc/interrupts contains keyboard data)
-   AC_CACHE_VAL(ac_cv_have_proc_interrupts,
+  # Note that we may be building in an environment (e.g. Debian buildd chroot)
+  # without a proper /proc filesystem. If /proc/interrupts exists, then we'll
+  # check that it has the bits we need, but otherwise we'll just go on faith.
+  #
+  have_proc_interrupts=yes
+
+  if test -f /proc/interrupts; then
+   AC_CACHE_CHECK([whether /proc/interrupts contains keyboard data],
+    ac_cv_have_proc_interrupts,
     [ac_cv_have_proc_interrupts=no
-     if grep keyboard /proc/interrupts >/dev/null 2>&1 ; then
+     if grep 'keyboard\|i8042' /proc/interrupts >/dev/null 2>&1 ; then
        ac_cv_have_proc_interrupts=yes
      fi
     ])
    have_proc_interrupts=$ac_cv_have_proc_interrupts
-
-  AC_MSG_RESULT($have_proc_interrupts)
+  fi
 
   if test "$have_proc_interrupts" = yes; then
     AC_DEFINE(HAVE_PROC_INTERRUPTS)
@@ -908,155 +1879,809 @@ elif test "$with_proc_interrupts" != no; then
 fi
 
 
-
-# Check for Motif and Athena --with and --without arguments.
+###############################################################################
 #
-have_motif=no
-have_athena=no
-have_athena3d=no
-with_motif_req=unspecified
-with_athena_req=unspecified
+#       The --enable-locking option
+#
+###############################################################################
+
+AC_ARG_ENABLE(locking,[Screen locking options:
+  --enable-locking        Compile in support for locking the display.
+  --disable-locking       Do not allow locking at all.],
+  [enable_locking="$enableval"],
+  [if test "$ac_macosx" = yes; then
+    # We can't lock on MacOS X, so default to not compiling in support for it.
+    # But allow --enable-locking to override that, so I can debug Linux locking
+    # under MacOS X11.
+    enable_locking=no
+   else
+    enable_locking=yes
+   fi])
+if test "$enable_locking" = yes; then
+  true
+elif test "$enable_locking" = no; then
+  AC_DEFINE(NO_LOCKING)
+else
+  echo "error: must be yes or no: --enable-locking=$enable_locking"
+  exit 1
+fi
 
-AC_ARG_WITH(motif,[
-X Client Toolkit 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])
+###############################################################################
+#
+#       Whether to allow root password to unblank.
+#
+###############################################################################
+AC_ARG_ENABLE(root-passwd, [
+  --enable-root-passwd       Allow root passwd to unlock screen.
+  --disable-root-passwd       Do not allow that.],
+  [enable_root_passwd="$enableval"],[enable_root_passwd=yes])
+if test "$enable_root_passwd" = yes; then
+  AC_DEFINE(ALLOW_ROOT_PASSWD)
+  true
+elif test "$enable_root_passwd" != no; then
+  echo "error: must be yes or no: --enable-root-passwd=$enable_root_passwd"
+  exit 1
+fi
 
-HANDLE_X_PATH_ARG(with_motif, --with-motif, Motif)
+###############################################################################
+#
+#       Check for PAM.
+#
+###############################################################################
 
-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])
+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
 
-HANDLE_X_PATH_ARG(with_athena, --with-athena, Athena)
+have_pam=no
+with_pam_req=unspecified
 
-if test "$with_motif" != yes -a "$with_motif" != no ; then
-  echo "error: must be yes or no: --with-motif=$with_motif"
+AC_ARG_WITH(pam,
+[  --with-pam              Include support for PAM (Pluggable Auth Modules.)],
+  [with_pam="$withval"; with_pam_req="$withval"],[with_pam=$with_pam_default])
+
+AC_ARG_WITH([pam_service_name],
+           AC_HELP_STRING([--with-pam-service-name],
+                          [NAME arg is the name of the PAM service that
+                          xscreensaver will authenticate as.]),
+           [pam_service_name="$withval"],[pam_service_name="xscreensaver"])
+
+AC_ARG_ENABLE(pam-check-account-type,
+  [AC_HELP_STRING([--enable-pam-check-account-type],
+                          [Whether PAM should check the result of account
+                          modules when authenticating.  Only do this if you
+                          have account configured properly on your system.])],
+  [enable_pam_check_account_type="$enableval"],[enable_pam_check_account_type=no])
+if test "$enable_pam_check_account_type" = yes ; then
+  AC_DEFINE(PAM_CHECK_ACCOUNT_TYPE)
+  true
+elif test "$enable_pam_check_account_type" != no ; then
+  echo "error: must be yes or no: --enable-pam-check-account-type=$enable_pam_check_account_type"
   exit 1
 fi
 
-if test "$with_athena" != yes -a "$with_athena" != no ; then
-  echo "error: must be yes or no: --with-athena=$with_athena"
-  exit 1
-fi
+HANDLE_X_PATH_ARG(with_pam, --with-pam, PAM)
+
+if test "$enable_locking" = yes -a "$with_pam" = yes; then
+  AC_CACHE_CHECK([for PAM], ac_cv_pam,
+                 [AC_TRY_X_COMPILE([#include <security/pam_appl.h>],,
+                                   [ac_cv_pam=yes],
+                                   [ac_cv_pam=no])])
+  if test "$ac_cv_pam" = yes ; then
+    have_pam=yes
+    AC_DEFINE(HAVE_PAM)
+    AC_DEFINE_UNQUOTED(PAM_SERVICE_NAME,"$pam_service_name")
+    
+    PASSWD_LIBS="${PASSWD_LIBS} -lpam"
+
+    # libpam typically requires dlopen and dlsym.  On FreeBSD,
+    # those are in libc.  On Linux and Solaris, they're in libdl.
+    AC_CHECK_LIB(dl, dlopen, [PASSWD_LIBS="${PASSWD_LIBS} -ldl"])
+
+    # On Linux, sigtimedwait() is in libc; on Solaris, it's in librt.
+    have_timedwait=no
+    AC_CHECK_LIB(c, sigtimedwait,
+                 [have_timedwait=yes
+                  AC_DEFINE(HAVE_SIGTIMEDWAIT)])
+    if test "$have_timedwait" = no ; then
+      AC_CHECK_LIB(rt, sigtimedwait, [have_timedwait=yes
+                                      AC_DEFINE(HAVE_SIGTIMEDWAIT)
+                                      PASSWD_LIBS="${PASSWD_LIBS} -lrt"])
+    fi
 
+    AC_MSG_CHECKING(how to call pam_strerror)
+    AC_CACHE_VAL(ac_cv_pam_strerror_args,
+     [AC_TRY_X_COMPILE([#include <stdio.h>
+                        #include <stdlib.h>
+                        #include <security/pam_appl.h>],
+                       [pam_handle_t *pamh = 0;
+                        char *s = pam_strerror(pamh, PAM_SUCCESS);],
+                       [ac_pam_strerror_args=2],
+                       [AC_TRY_X_COMPILE([#include <stdio.h>
+                                          #include <stdlib.h>
+                                          #include <security/pam_appl.h>],
+                                         [char *s =
+                                           pam_strerror(PAM_SUCCESS);],
+                                         [ac_pam_strerror_args=1],
+                                         [ac_pam_strerror_args=0])])
+      ac_cv_pam_strerror_args=$ac_pam_strerror_args])
+    ac_pam_strerror_args=$ac_cv_pam_strerror_args
+    if test "$ac_pam_strerror_args" = 1 ; then
+      AC_MSG_RESULT(one argument)
+    elif test "$ac_pam_strerror_args" = 2 ; then
+      AC_DEFINE(PAM_STRERROR_TWO_ARGS)
+      AC_MSG_RESULT(two arguments)
+    else
+      AC_MSG_RESULT(unknown)
+    fi
 
-# Saying --without-motif is the same as saying --with-athena.
-if test "$with_motif_req" = no ; then
-  with_athena_req=yes
-  with_athena=yes
-fi
+# Check pam_fail_delay
+    AC_MSG_CHECKING(pam_fail_delay in -lpam)
+    AC_CACHE_VAL(ac_cv_pam_fail_delay,
+     [ac_save_LDFLAGS="$LDFLAGS"
+      LDFLAGS="-lpam"
+      AC_TRY_LINK([#include <security/pam_appl.h>],
+                  [pam_handle_t *pamh = 0;
+                  unsigned int usec = 1;
+                  int status = pam_fail_delay (pamh, usec);],
+                  [ac_pam_fail_delay=yes],
+                  [ac_pam_fail_delay=no])
+      ac_cv_pam_fail_delay=$ac_pam_fail_delay,
+      LDFLAGS=$ac_save_LDFLAGS])
+
+      if test "$ac_pam_fail_delay" = yes ; then
+        AC_MSG_RESULT(yes)
+        AC_DEFINE(HAVE_PAM_FAIL_DELAY)
+      else
+        AC_MSG_RESULT(no)
+      fi
 
-# Saying --without-athena is the same as saying --with-motif.
-if test "$with_athena_req" = no ; then
-  with_motif_req=yes
-  with_motif=yes
+  fi
 fi
 
-# Check for Motif and Athena headers.
 
-check_motif() {
-  AC_CHECK_X_HEADER(Xm/Xm.h,
-                   [have_motif=yes
-                    AC_DEFINE(HAVE_MOTIF)
-                    TOOLKIT_LIBS="-lXm $TOOLKIT_LIBS"])
-}
+###############################################################################
+#
+#       Check for Kerberos.
+#
+###############################################################################
 
-check_athena() {
-  have_athena=no
-  have_athena3d=no
-  AC_CHECK_X_HEADER(X11/Xaw/Dialog.h, [have_athena=yes])
-  if test "$have_athena" = yes; then
-    AC_CHECK_X_LIB(Xaw3d, Xaw3dComputeTopShadowRGB,
-                  [have_athena=yes; have_athena3d=yes], [],
-                  -lXt -lXmu -lXext -lX11)
-  fi
+have_kerberos=no
+have_kerberos5=no
+with_kerberos_req=unspecified
+
+AC_ARG_WITH(kerberos, 
+[  --with-kerberos         Include support for Kerberos authentication.],
+  [with_kerberos="$withval"; with_kerberos_req="$withval"],[with_kerberos=yes])
 
-  if test "$have_athena3d" = yes; then
-    TOOLKIT_LIBS="-lXaw3d $TOOLKIT_LIBS"
-  elif test "$have_athena" = yes; then
-    TOOLKIT_LIBS="-lXaw $TOOLKIT_LIBS"
+HANDLE_X_PATH_ARG(with_kerberos, --with-kerberos, Kerberos)
+
+if test "$enable_locking" = yes -a "$with_kerberos" = yes; then
+  AC_CACHE_CHECK([for Kerberos 4], ac_cv_kerberos,
+                 [AC_TRY_X_COMPILE([#include <krb.h>],,
+                                   [ac_cv_kerberos=yes],
+                                   [ac_cv_kerberos=no])])
+  AC_CACHE_CHECK([for Kerberos 5], ac_cv_kerberos5,
+                 [AC_TRY_X_COMPILE([#include <kerberosIV/krb.h>],,
+                                   [ac_cv_kerberos5=yes],
+                                   [ac_cv_kerberos5=no])])
+
+  if test "$ac_cv_kerberos" = yes ; then
+    have_kerberos=yes
+    AC_DEFINE(HAVE_KERBEROS)
   fi
-}
 
+  if test "$ac_cv_kerberos5" = yes ; then
 
-# 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.
+    # Andrew Snare <ajs@pigpond.com> wrote:
+    #
+    # You were assuming that if kerberosV (krb5) was found, then kerberosIV
+    # (krb4) was also available.  This turns out not to be the case with
+    # mit-krb-1.2.7; apparently backwards-compatibility with KerberosIV
+    # is optional.
+    #
+    # So, disable kerberosV support if libkrb4 can't be found.
+    # This is not the best solution, but it makes the compile not fail.
+    #
+    AC_CHECK_X_LIB(krb4, krb_get_tf_realm,
+                   [have_kerberos=yes],
+                   [have_kerberos=no])
+    if test "$have_kerberos" = yes ; then
+      have_kerberos5=yes
+      AC_DEFINE(HAVE_KERBEROS)
+      AC_DEFINE(HAVE_KERBEROS5)
+    else
+      have_kerberos5=no
+      AC_MSG_WARN([Cannot find compat lib (libkrb4) needed to use Kerberos 5])
+    fi
 
-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
 
-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
-  fi
+  if test "$have_kerberos5" = yes ; then
+    # from Matt Knopp <mhat@infocalypse.netlag.com>
+    # (who got it from amu@mit.edu)
 
-else
-  # asked for neither
-  check_motif
-  if test "$have_motif" = yes; then
-    with_athena=no
-  else
-    check_athena
-  fi
+    PASSWD_LIBS="$PASSWD_LIBS -lkrb4 -ldes425 -lkrb5 -lk5crypto -lcom_err"
 
-fi
+    # jwz: MacOS X uses -lkrb5, but not -lcrypt
+    AC_CHECK_X_LIB(crypt, crypt, [PASSWD_LIBS="$PASSWD_LIBS -lcrypt"])
 
-if test "$have_motif" = yes; then
-  proselytize_motif=no
-fi
+  elif test "$have_kerberos" = yes ; then
+    # from Tim Showalter <tjs@psaux.com> for FreeBSD 4.2
+    PASSWD_LIBS="$PASSWD_LIBS -lkrb -ldes -lcom_err"
+  fi
 
-# If 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)
+  if test "$have_kerberos" = yes ; then
+    AC_CHECK_FUNC(res_search,,
+      AC_CHECK_LIB(resolv,res_search,PASSWD_LIBS="${PASSWD_LIBS} -lresolv",
+        AC_MSG_WARN([Can't find DNS resolver libraries needed for Kerberos])
+      ))
   fi
 fi
 
 
-# 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 nine billion variants of shadow passwords...
+#
+###############################################################################
+
+need_setuid=no
+
+have_shadow=no
+with_shadow_req=unspecified
+
+AC_ARG_WITH(shadow,
+[  --with-shadow           Include support for shadow password authentication.],
+  [with_shadow="$withval"; with_shadow_req="$withval"],[with_shadow=yes])
+
+HANDLE_X_PATH_ARG(with_shadow, --with-shadow, shadow password)
+
+if test "$enable_locking" = no ; then
+  with_shadow_req=no
+  with_shadow=no
+fi
+
+
+###############################################################################
+#
+#       Check for Sun "adjunct" passwords.
+#
+###############################################################################
+
+if test "$with_shadow" = yes ; then
+  AC_CACHE_CHECK([for Sun-style shadow passwords], ac_cv_sun_adjunct,
+                 [AC_TRY_X_COMPILE([#include <stdlib.h>
+                                    #include <unistd.h>
+                                    #include <sys/types.h>
+                                    #include <sys/label.h>
+                                    #include <sys/audit.h>
+                                    #include <pwdadj.h>],
+                      [struct passwd_adjunct *p = getpwanam("nobody");
+                       const char *pw = p->pwa_passwd;],
+                      [ac_cv_sun_adjunct=yes],
+                      [ac_cv_sun_adjunct=no])])
+  if test "$ac_cv_sun_adjunct" = yes; then
+    have_shadow_adjunct=yes
+    have_shadow=yes
+    need_setuid=yes
+  fi
+fi
+
+
+###############################################################################
+#
+#       Check for DEC and SCO so-called "enhanced" security.
+#
+###############################################################################
+
+if test "$with_shadow" = yes ; then
+  AC_CACHE_CHECK([for DEC-style shadow passwords], ac_cv_enhanced_passwd,
+                 [AC_TRY_X_COMPILE([#include <stdlib.h>
+                                    #include <unistd.h>
+                                    #include <sys/types.h>
+                                    #include <pwd.h>
+                                    #include <sys/security.h>
+                                    #include <prot.h>],
+                      [struct pr_passwd *p;
+                       const char *pw;
+                       set_auth_parameters(0, 0);
+                       check_auth_parameters();
+                       p = getprpwnam("nobody");
+                       pw = p->ufld.fd_encrypt;],
+                      [ac_cv_enhanced_passwd=yes],
+                      [ac_cv_enhanced_passwd=no])])
+  if test $ac_cv_enhanced_passwd = yes; then
+    have_shadow_enhanced=yes
+    have_shadow=yes
+    need_setuid=yes
+
+    # On SCO, getprpwnam() is in -lprot (which uses nap() from -lx)
+    # (I'm told it needs -lcurses too, but I don't understand why.)
+    # But on DEC, it's in -lsecurity.
+    #
+    AC_CHECK_LIB(prot, getprpwnam, 
+                 [PASSWD_LIBS="$PASSWD_LIBS -lprot -lcurses -lx"],
+                 [AC_CHECK_LIB(security, getprpwnam, 
+                               [PASSWD_LIBS="$PASSWD_LIBS -lsecurity"])],
+                 [-lx])
+  fi
+fi
+
+###############################################################################
+#
+#       Check for HP's entry in the "Not Invented Here" Sweepstakes.
+#
+###############################################################################
+
+if test "$with_shadow" = yes ; then
+  AC_CACHE_CHECK([for HP-style shadow passwords], ac_cv_hpux_passwd,
+                 [AC_TRY_X_COMPILE([#include <stdlib.h>
+                                    #include <unistd.h>
+                                    #include <sys/types.h>
+                                    #include <pwd.h>
+                                    #include <hpsecurity.h>
+                                    #include <prot.h>],
+                      [struct s_passwd *p = getspwnam("nobody");
+                       const char *pw = p->pw_passwd;],
+                      [ac_cv_hpux_passwd=yes],
+                      [ac_cv_hpux_passwd=no])])
+  if test "$ac_cv_hpux_passwd" = yes; then
+    have_shadow_hpux=yes
+    have_shadow=yes
+    need_setuid=yes
+
+    # on HPUX, bigcrypt is in -lsec
+    AC_CHECK_LIB(sec, bigcrypt, [PASSWD_LIBS="$PASSWD_LIBS -lsec"])
+  fi
+fi
+
+
+###############################################################################
+#
+#       Check for FreeBSD-style shadow passwords.
+#
+#       On FreeBSD, getpwnam() and friends work just like on non-shadow-
+#       password systems -- except you only get stuff in the pw_passwd field
+#       if the running program is setuid.  So, guess that we've got this
+#       lossage to contend with if /etc/master.passwd exists, and default to
+#       a setuid installation.
+#
+###############################################################################
+
+if test "$with_shadow" = yes ; then
+  AC_CACHE_CHECK([for FreeBSD-style shadow passwords], ac_cv_master_passwd,
+                 [if test -f /etc/master.passwd ; then
+                    ac_cv_master_passwd=yes
+                  else
+                    ac_cv_master_passwd=no
+                  fi])
+  if test "$ac_cv_master_passwd" = yes; then
+    need_setuid=yes
+  fi
+fi
+
+
+###############################################################################
+#
+#       Check for traditional (ha!) shadow passwords.
+#
+###############################################################################
+
+if test "$with_shadow" = yes ; then
+  AC_CACHE_CHECK([for generic shadow passwords], ac_cv_shadow,
+                 [AC_TRY_X_COMPILE([#include <stdlib.h>
+                                    #include <unistd.h>
+                                    #include <sys/types.h>
+                                    #include <pwd.h>
+                                    #include <shadow.h>],
+                      [struct spwd *p = getspnam("nobody");
+                       const char *pw = p->sp_pwdp;],
+                      [ac_cv_shadow=yes],
+                      [ac_cv_shadow=no])])
+  if test "$ac_cv_shadow" = yes; then
+    have_shadow=yes
+    need_setuid=yes
+
+    # On some systems (UnixWare 2.1), getspnam() is in -lgen instead of -lc.
+    have_getspnam=no
+    AC_CHECK_LIB(c, getspnam, [have_getspnam=yes])
+    if test "$have_getspnam" = no ; then
+      AC_CHECK_LIB(gen, getspnam,
+                   [have_getspnam=yes; PASSWD_LIBS="$PASSWD_LIBS -lgen"])
+    fi
+  fi
+fi
+
+
+###############################################################################
+#
+#       Check for other libraries needed for non-shadow passwords.
+#
+###############################################################################
+
+if test "$enable_locking" = yes ; then
+
+  # On some systems (UnixWare 2.1), crypt() is in -lcrypt instead of -lc.
+  have_crypt=no
+  AC_CHECK_LIB(c, crypt, [have_crypt=yes])
+  if test "$have_crypt" = no ; then
+    AC_CHECK_LIB(crypt, crypt,
+                 [have_crypt=yes; PASSWD_LIBS="$PASSWD_LIBS -lcrypt"])
+  fi
+fi
+
+
+# Most of the above shadow mechanisms will have set need_setuid to yes,
+# if they were found.  But, on some systems, we need setuid even when
+# using plain old vanilla passwords.
+#
+if test "$enable_locking" = yes ; then
+  case "$host" in
+    *-hpux* | *-aix* | *-netbsd* | *-freebsd* | *-openbsd* )
+      need_setuid=yes
+    ;;
+  esac
+fi
+
+
+if test "$have_shadow_adjunct" = yes ; then
+  AC_DEFINE(HAVE_ADJUNCT_PASSWD)
+elif test "$have_shadow_enhanced" = yes ; then
+  AC_DEFINE(HAVE_ENHANCED_PASSWD)
+elif test "$have_shadow_hpux" = yes ; then
+  AC_DEFINE(HAVE_HPUX_PASSWD)
+elif test "$have_shadow" = yes ; then
+  AC_DEFINE(HAVE_SHADOW_PASSWD)
+fi
+
+
+###############################################################################
+#
+#       Check for external password helper
+#      On SuSE, instead of having xscreensaver be a setuid program, they
+#      fork an external program that takes the password on stdin, and
+#      returns true if that password is a valid one.  Then only that
+#      smaller program needs to be setuid.
+#
+#       (Note that this external program is not a GUI: the GUI is still
+#      all in xscreensaver itself; the external program just does auth.)
+#
+###############################################################################
+
+have_passwd_helper=no
+with_passwd_helper_req=unspecified
+
+AC_ARG_WITH(passwd-helper,
+[  --with-passwd-helper    Include support for an external password
+                          verification helper program.],
+  [with_passwd_helper="$withval"; with_passwd_helper_req="$withval"],[with_passwd_helper=no])
+# no HANDLE_X_PATH_ARG for this one
+
+if test "$enable_locking" = no ; then
+  with_passwd_helper_req=no
+  with_passwd_helper=no
+fi
+
+case "$with_passwd_helper" in
+  ""|no) : ;;
+  /*)
+    AC_DEFINE_UNQUOTED(PASSWD_HELPER_PROGRAM, "$with_passwd_helper")
+    have_passwd_helper=yes;;
+  *)
+    echo "error: --with-passwd-helper needs full pathname of helper (not '$with_passwd_helper')." >&2
+    exit 1
+esac
+
+
+###############################################################################
+#
+#       Check for a login manager for a "New Login" button on the lock dialog.
+#      Usually this will be "/usr/bin/gdmflexiserver".
+#
+###############################################################################
+
+with_login_manager_req=unspecified
+default_login_manager_1='gdmflexiserver -ls'
+default_login_manager_2='kdmctl reserve'
+
+AC_ARG_WITH(login-manager,
+[  --with-login-manager    Put a "New Login" button on the unlock dialog that
+                          runs a login manager like gdmflexiserver or kdmctl.],
+  [with_login_manager="$withval"; with_login_manager_req="$withval"],
+  [with_login_manager=yes])
+# no HANDLE_X_PATH_ARG for this one
+
+if test "$enable_locking" = no ; then
+  with_login_manager_req=no
+  with_login_manager=no
+fi
+
+case "$with_login_manager_req" in
+  no)
+    with_login_manager=""
+  ;;
+
+  yes|unspecified)
+    # Try both defaults, use the one that exists.
+
+    set dummy $default_login_manager_1 ; login_manager_tmp=$2
+    unset ac_cv_path_login_manager_tmp  # don't cache
+    AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, [])
+    if test ! -z "$login_manager_tmp" ; then
+      with_login_manager="$default_login_manager_1"
+    else
+      set dummy $default_login_manager_2 ; login_manager_tmp=$2
+      unset ac_cv_path_login_manager_tmp  # don't cache
+      AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, [])
+      if test ! -z "$login_manager_tmp" ; then
+        with_login_manager="$default_login_manager_2"
+      else
+        with_login_manager=""
+      fi
+    fi
+  ;;
+
+  /*)
+    # absolute path specified on cmd line
+    set dummy $with_login_manager_req ; login_manager_tmp=$2
+    AC_MSG_CHECKING([for $login_manager_tmp])
+    if test -x "$login_manager_tmp" ; then
+      AC_MSG_RESULT(yes)
+    else
+      AC_MSG_RESULT(no)
+      with_login_manager=""
+    fi
+  ;;
+
+  *)
+    # relative path specified on cmd line
+    set dummy $with_login_manager_req ; login_manager_tmp=$2
+    unset ac_cv_path_login_manager_tmp    # don't cache
+    AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, [])
+    if test -z "$login_manager_tmp" ; then
+      with_login_manager=""
+    else
+      with_login_manager="$login_manager_tmp"
+    fi
+  ;;
+esac
+ac_cv_login_manager_program="$with_login_manager"
+
+NEW_LOGIN_COMMAND_P=''
+NEW_LOGIN_COMMAND="$ac_cv_login_manager_program"
+
+AC_MSG_CHECKING(for login manager)
+if test -z "$NEW_LOGIN_COMMAND" ; then
+  NEW_LOGIN_COMMAND="$default_login_manager_1"
+  NEW_LOGIN_COMMAND_P='! '
+  AC_MSG_RESULT($NEW_LOGIN_COMMAND (disabled))
+else
+  AC_MSG_RESULT($NEW_LOGIN_COMMAND)
+fi
+
+
+###############################################################################
+#
+#       Check for -lgtk (and Gnome stuff)
+#
+###############################################################################
+
+have_gtk=no
+with_gtk_req=unspecified
+AC_ARG_WITH(gtk,[
+User interface options:
+
+  --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
+
+
+parse_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
+}
+
+# Find pkg-config... (need this for both gtk and gdk_pixbuf.)
+# if the user specified --with-gtk=/foo/ then look there.
+#
+gtk_path="$PATH"
+if test ! -z "$gtk_dir"; then
+  # canonicalize slashes.
+  foo=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'`
+  gtk_path="$foo:$gtk_path"
+fi
+
+AC_PATH_PROGS(pkg_config, pkg-config,, $gtk_path)
+
+if test -z "$pkg_config" ; then
+  AC_MSG_WARN([pkg-config not found!])
+  pkg_config="false"
+fi
+
+
+# Utility function for running pkg-config-based tests...
+#
+pkgs=''
+pkg_check_version() {
+  if test "$ok" = yes ; then
+    req="$1"
+    min="$2"
+    AC_MSG_CHECKING(for $req)
+    if $pkg_config --exists "$req" ; then
+      vers=`$pkg_config --modversion "$req"`
+      if $pkg_config --exists "$req >= $min" ; then
+        AC_MSG_RESULT($vers)
+        pkgs="$pkgs $req"
+        return 1
+      else
+        AC_MSG_RESULT($vers (wanted >= $min))
+        ok=no
+        return 0
+      fi
+    else
+      AC_MSG_RESULT(no)
+      ok=no
+      return 0
+    fi
+  fi
+}
+
+
+jurassic_gtk=no
+gtk_halfassed=no
+
+if test "$with_gtk" = yes; then
+  have_gtk=no
+  
+  ok="yes"
+  pkg_check_version            gtk+-2.0  2.0.1  ; ac_gtk_version_string="$vers"
+  pkg_check_version         gmodule-2.0  2.0.0
+  pkg_check_version          libxml-2.0  2.4.6
+  pkg_check_version        libglade-2.0  1.99.0
+  pkg_check_version      gdk-pixbuf-2.0  2.0.0
+  pkg_check_version gdk-pixbuf-xlib-2.0  2.0.0
+  have_gtk="$ok"
+
+  if test "$have_gtk" = no; then
+    if test -n "$ac_gtk_version_string" ; then
+      gtk_halfassed="$ac_gtk_version_string"
+      gtk_halfassed_lib="$req"
+    fi
+  fi
+
+  if test "$have_gtk" = yes; then
+    parse_gtk_version_string
+    jurassic_gtk=no
+  fi
+
+  if test "$have_gtk" = yes; then
+    AC_CACHE_CHECK([for Gtk includes], ac_cv_gtk_config_cflags,
+                   [ac_cv_gtk_config_cflags=`$pkg_config --cflags $pkgs`])
+    AC_CACHE_CHECK([for Gtk libs], ac_cv_gtk_config_libs,
+                   [ac_cv_gtk_config_libs=`$pkg_config --libs $pkgs`])
+  fi
+
+  ac_gtk_config_cflags=$ac_cv_gtk_config_cflags
+  ac_gtk_config_libs=$ac_cv_gtk_config_libs
+
+  GTK_EXTRA_OBJS=""
+  GTK_DATADIR=""
+  if test "$have_gtk" = yes; then
+    GTK_DATADIR=`$pkg_config --variable=prefix gtk+-2.0`
+    GTK_DATADIR="$GTK_DATADIR/share"
+  fi
+
+  if test "$have_gtk" = yes; then
+    INCLUDES="$INCLUDES $ac_gtk_config_cflags"
+    GTK_LIBS="$GTK_LIBS $ac_gtk_config_libs"
+    AC_DEFINE(HAVE_GTK)
+    AC_DEFINE(HAVE_GTK2)
+    AC_DEFINE(HAVE_XML)
+  fi
+
+fi
+
+
+# Check for the various Gnome help and URL loading programs.
+#
+WITH_BROWSER=gnome-open
+if test "$have_gtk" = yes; then
+  AC_CHECK_PROGS(gnome_open_program,     gnome-open)
+  AC_CHECK_PROGS(gnome_url_show_program, gnome-url-show)
+fi
+
+
+###############################################################################
+#
+#       Check for -lXm.
+#
+###############################################################################
+
+have_motif=no
+with_motif_req=unspecified
+AC_ARG_WITH(motif,[  --with-motif            Use the Motif toolkit for the user interface
+                          (no longer supported.)],
+  [with_motif="$withval"; with_motif_req="$withval"],[with_motif=no])
+
+HANDLE_X_PATH_ARG(with_motif, --with-motif, Motif)
+
+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_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"],,
+                    [#include <stdlib.h>
+                     #include <stdio.h>
+                     #include <X11/Intrinsic.h>])
+fi
+
+
+if test "$have_motif" = yes; then
+  AC_CHECK_X_HEADER(Xm/ComboBox.h, [AC_DEFINE(HAVE_XMCOMBOBOX)],,
+                    [#include <stdlib.h>
+                     #include <stdio.h>
+                     #include <X11/Intrinsic.h>])
+fi
+
+
+###############################################################################
+#
+#       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
 
-# don't cache these
-unset ac_cv_lesstif_version
-unset ac_cv_lesstif_version_string
 
 lesstif_version=unknown
 lesstif_version_string=unknown
@@ -1065,24 +2690,24 @@ if test "$have_lesstif" = yes ; then
   ltv=unknown
   echo unknown > conftest-lt
   AC_CACHE_CHECK([LessTif version number],
-                ac_cv_lesstif_version_string,
+                 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])])
+                     #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
@@ -1094,24 +2719,24 @@ if test "$have_motif" = yes ; then
   mtv=unknown
   echo unknown > conftest-mt
   AC_CACHE_CHECK([Motif version number],
-                ac_cv_motif_version_string,
+                 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])])
+                     #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
@@ -1119,19 +2744,26 @@ if test "$have_motif" = yes ; then
 fi
 
 
-# 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.)
+###############################################################################
 #
+#       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" -ge 2000; then
+   if test "$motif_version" = "unknown" || test "$motif_version" -ge 2000
+   then
      motif_requires_xpm=yes
      AC_MSG_RESULT(maybe)
    else
@@ -1140,76 +2772,55 @@ if test "$have_motif" = yes ; then
 fi
 
 
-
-# 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.
+###############################################################################
+#
+#       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; TOOLKIT_LIBS="$TOOLKIT_LIBS -lXp"],
-                 [], -lX11 -lXext -lm)
+                  [have_xp_ext=yes; MOTIF_LIBS="$MOTIF_LIBS -lXp"],
+                  [true], -lX11 -lXext -lm)
 fi
 
 
-# Check for _Xsetlocale in -lXintl, since at least some recent versions
-# of Motif (on Linux) need it.
+###############################################################################
 #
+#       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
-    TOOLKIT_LIBS="$TOOLKIT_LIBS -lXintl"
+    MOTIF_LIBS="$MOTIF_LIBS -lXintl"
   fi
 fi
 
 
-# check for XPM header.
+###############################################################################
 #
-have_xpm=no
-with_xpm_req=unspecified
-AC_ARG_WITH(xpm,[
-Graphics Demo options:
-
-  --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])
-
-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
-
-# See comment near $motif_requires_xpm, above.
-# Need to do this here, after both Motif and XPM have been checked for.
+#       Check for -lGL or -lMesaGL.
 #
-if test "$have_motif" = yes -a "$have_xpm" = yes ; then
-  if test "$motif_requires_xpm" = yes ; then
-    TOOLKIT_LIBS="$TOOLKIT_LIBS $XPM_LIBS"
-  fi
-fi
-
+###############################################################################
 
-# check for the GL header
-#
 have_gl=no
 ac_have_mesa_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.],
+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)
@@ -1220,115 +2831,192 @@ 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)
+    AC_CHECK_X_HEADER(GL/glx.h, have_gl=yes, have_gl=no,
+                      [#include <GL/gl.h>])
   fi
 
   # If we have the headers, try and figure out which vendor it's from.
   #
   if test "$have_gl" = yes ; then
 
-    AC_DEFINE(HAVE_GL)
-
     # We need to know whether it's MesaGL so that we know which libraries
     # to link against.
     #
-    AC_MSG_CHECKING(whether GL is really MesaGL)
-    AC_CACHE_VAL(ac_cv_have_mesa_gl,
+    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])
-      ])
+       if test "$ac_macosx" = no; then
+         # WTF! MacOS 10.5.0 ships the Mesa GL headers!
+         # It's not really Mesa, is it?
+         AC_EGREP_X_HEADER(Mesa|MESA, GL/glx.h, [ac_cv_have_mesa_gl=yes])
+       fi])
     ac_have_mesa_gl=$ac_cv_have_mesa_gl
-    AC_MSG_RESULT($ac_have_mesa_gl)
 
-    if test "$ac_have_mesa_gl" = no ; then
-      gl_lib_1="GL"
-      GL_LIBS="-lGL -lGLU"
+    gl_lib_1=""
+    GL_LIBS=""
+
+    if test "$ac_macosx" = yes; then
+
+      # Without these, every link against libGL gets a bunch of useless
+      # warnings.
+      #
+      osx_crud="-bind_at_load -multiply_defined suppress"
+      AC_MSG_RESULT(adding "$osx_crud" to GL_LIBS)
+      GL_LIBS="$GL_LIBS $osx_crud"
+      unset osx_crud
+
+      # New lossage in 10.5.0: without this, we get:
+      #   ld: cycle in dylib re-exports with /usr/X11/lib/libGL.dylib
+      #
+      osx_crud="/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib"
+      osx_crud="-Wl,-dylib_file,${osx_crud}:${osx_crud}"
+
+      AC_MSG_RESULT(adding "$osx_crud" to GL_LIBS)
+      GL_LIBS="$GL_LIBS $osx_crud"
+      unset osx_crud
+
+      # New lossage in 10.6.8: we can't allow -L/opt/local/lib to be in the
+      # link line, or at runtime XQueryExtension gets a segv due to some kind
+      # of library version skew.  Libs must come from /usr/X11/lib even if
+      # $prefix and/or $exec_prefix are set to /opt/local/.
+      #
+      AC_MSG_RESULT(omitting "$libdir" from LDFLAGS)
+      libdir=''
+
+    fi
+
+
+    # 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 $VIDMODE_LIBS $GL_LIBS"],
+                     [], -lMesaGLU $GL_LIBS -lX11 -lXext $VIDMODE_LIBS -lm)
+    fi
+
+    if test "$gl_lib_1" = "" ; then
+      AC_CHECK_X_LIB(GL, glXCreateContext, 
+                     [gl_lib_1="GL"
+                      GL_LIBS="-lGL -lGLU $VIDMODE_LIBS $GL_LIBS"],
+                     [], -lGLU $GL_LIBS -lX11 -lXext $VIDMODE_LIBS -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
-      AC_DEFINE(HAVE_MESA_GL)
-      gl_lib_1="MesaGL"
-      GL_LIBS="-lMesaGL -lMesaGLU"
+      # 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
 
-      # don't cache these.
-      unset ac_cv_mesagl_version
-      unset ac_cv_mesagl_version_string
-
-      AC_MSG_CHECKING(MesaGL version number)
-      AC_CACHE_VAL(ac_cv_mesagl_version_string,
-       [cat > conftest.$ac_ext <<EOF
+      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>
+#ifndef MESA_MAJOR_VERSION
+# include <GL/xmesa.h>
+# ifdef XMESA_MAJOR_VERSION
+   /* Around Mesa 3.2, they took out the Mesa version number, so instead,
+      we have to check the XMesa version number (the number of the X protocol
+      support, which seems to be the same as the Mesa version number.)
+    */
+#  define MESA_MAJOR_VERSION XMESA_MAJOR_VERSION
+#  define MESA_MINOR_VERSION XMESA_MINOR_VERSION
+# else
+   /* Oh great.  Some time after 3.4, they took out the xmesa.h header file,
+      so we have no way of telling what version of Mesa this is at all.
+      So, we'll guess that the osmesa version (the "offscreen protocol")
+      is less than or equal to the real mesa version number.  Except that
+      if OSmesa is 3.3, assume at least Mesa 3.4, since OSmesa was 3.3 in
+      Mesa 3.4.  And Mesa 3.3 had xmesa.h.  What a complete load of shit!
+    */
+# include <GL/osmesa.h>
+#  define MESA_MAJOR_VERSION OSMESA_MAJOR_VERSION
+#  define MESA_MINOR_VERSION OSMESA_MINOR_VERSION or newer, probably?
+#  if OSMESA_MAJOR_VERSION == 3 && OSMESA_MINOR_VERSION == 3
+#   undef MESA_MINOR_VERSION
+#   define MESA_MINOR_VERSION 4 or newer, probably?
+#  endif
+# endif
+#endif
 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"
+         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([,])
+         mglv=`(eval "$ac_cpp conftest.$ac_ext") 2>&AC_FD_CC | grep configure:`
+
+         # M4 sucks!!
+         changequote(X,Y)
+          mglv=`echo "$mglv" | sed -n \
+             's/^configure: *\([0-9][0-9]*\)  *\([0-9].*\)$/\1.\2/p'`
+         changequote([,])
 
          rm -f conftest.$ac_ext
 
-        CPPFLAGS="$ac_save_CPPFLAGS"
+         CPPFLAGS="$ac_save_CPPFLAGS"
 
-        if test "$mglv" = ""; then
+         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_string="$mglv"
+           # M4 sucks!!
+           changequote(X,Y)
+           maj=`echo "$mglv" | sed -n 's/^\([0-9][0-9]*\)\..*$/\1/p'`
+           min=`echo "$mglv" | sed -n 's/^.*\.\([0-9][0-9]*\).*$/\1/p'`
+           changequote([,])
            ac_mesagl_version=`echo "$maj * 1000 + $min" | bc`
            if test -z "$ac_mesagl_version"; then
-            ac_mesagl_version=unknown
+             ac_mesagl_version=unknown
              ac_mesagl_version_string=unknown
-          fi
+           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
-      AC_MSG_RESULT($ac_cv_mesagl_version_string)
     fi
 
 
-    # If it's MesaGL, check to see if it requires -lpthread.
-    #
-    have_pthread=no
-    mesa_requires_pthread=no
-    if test "$ac_have_mesa_gl" = yes; then
-
-      AC_CHECK_LIB(pthread, pthread_create, [have_pthread=yes], [],)
-      if test "$have_pthread" = yes; then
-        AC_CHECK_X_LIB($gl_lib_1, gl_get_thread_context,
-                       [mesa_requires_pthread=yes], [],
-                      $GL_LIBS -lpthread -lX11 -lXext -lm)
-      fi
-
-      if test "$mesa_requires_pthread" = yes; then
-        GL_LIBS="$GL_LIBS -lpthread"
-      fi
-    fi
-
     # Check for OpenGL 1.1 features.
     #
     AC_CHECK_X_LIB($gl_lib_1, glBindTexture, [AC_DEFINE(HAVE_GLBINDTEXTURE)],
-                  [], $GL_LIBS -lX11 -lXext -lm)
-
+                   [true], $GL_LIBS -lX11 -lXext -lm)
   fi
 
 elif test "$with_gl" != no; then
@@ -1337,520 +3025,684 @@ elif test "$with_gl" != no; then
 fi
 
 
-# check for SGI XReadDisplay server extension header.
+###############################################################################
 #
-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="$withval"; with_readdisplay_req="$withval"],
-  [with_readdisplay=yes])
+#       Check for -lgle.
+#
+###############################################################################
 
-HANDLE_X_PATH_ARG(with_readdisplay, --with-readdisplay, XReadDisplay)
+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])
 
-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
-  echo "error: must be yes or no: --with-readdisplay=$with_readdisplay"
-  exit 1
-fi
+HANDLE_X_PATH_ARG(with_gle, --with-gle, GLE)
 
+GLE_LIBS=""
 
-# check for SGI's Iris Video Library header.
-#
-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="$withval"; with_sgivideo_req="$withval"],
-  [with_sgivideo=yes])
+if test "$have_gl" = no ; then
+ true
+elif test "$with_gle" = yes; then
+
+  AC_CHECK_X_HEADER(GL/gle.h, have_gle3=yes, have_gle3=no,
+                    [#include <GL/gl.h>])
+  if test "$have_gle3" = yes ; then
+    have_gle=yes;
+  else
+    AC_CHECK_X_HEADER(GL/gutil.h, have_gle=yes, have_gle=no,
+                    [#include <GL/gl.h>])
+    if test "$have_gle" = yes ; then
+      AC_CHECK_X_HEADER(GL/tube.h, have_gle=yes, have_gle=no,
+                        [#include <GL/gl.h>])
+    fi
+  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
 
-HANDLE_X_PATH_ARG(with_sgivideo, --with-sgivideo, Iris Video)
+    # 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)
+
+    # As of GLE 3 this is in libgle, and has changed name to uview_direction!
+    # *sigh*
+    if test "$have_gle3" = yes ; then
+      AC_CHECK_X_LIB(gle, uview_direction, 
+                     [have_gle=yes; gle_halfassed=no],
+                    [], $GL_LIBS -lX11 -lXext -lm)
+    fi
+    # 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 "$with_sgivideo" = yes; then
-  AC_CHECK_X_HEADER(dmedia/vl.h, have_sgivideo=yes)
-  if test "$have_sgivideo" = yes; then
-    have_sgivideo=no
-    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)
+  if test "$have_gle" = yes ; then
+    AC_DEFINE(HAVE_GLE)
+    if test "$have_gle3" = yes ; then
+      AC_DEFINE(HAVE_GLE3)
     fi
   fi
-elif test "$with_sgivideo" != no; then
-  echo "error: must be yes or no: --with-sgivideo=$with_sgivideo"
+
+elif test "$with_gle" != no; then
+  echo "error: must be yes or no: --with-gle=$with_gle"
   exit 1
-fi
 
+fi
 
 
-# Try to find 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.)
+###############################################################################
 #
-# If that doesn't work, see if fortune, zippy, or yow are on $PATH,
-# and if so, use them.
+#       Handle --with-gles
 #
-# 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
-                          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" ])
+###############################################################################
+
+with_gles_req=unspecified
+AC_ARG_WITH(gles,
+[  --with-gles             Target OpenGL ES 1.x API instead of OpenGL 1.3.],
+  [with_gles="$withval"; with_gles_req="$withval"],[with_gles=no])
+
+HANDLE_X_PATH_ARG(with_gles, --with-gles, JWZGLES)
+
+if test "$with_gles" = yes; then
+  have_gles=yes
+  AC_DEFINE(HAVE_JWZGLES)
+  JWZGLES_OBJS="jwzgles.o"
+  AC_MSG_RESULT(using OpenGL ES compatiblity shim)
+elif test "$with_gles" != no; then
+  echo "error: must be yes or no: --with-gles=$with_xpm"
+  exit 1
+fi
 
-if test "$with_zippy" = no || test "$with_zippy" = yes ; then
-  with_zippy=""
-  with_zippy_req=""
+# May want to phase out glBitmap even in a non-GLES world.
+#
+if test "$have_gles" = yes; then
+  GLFPS_OBJS="fps-gl.o glxfonts.o texfont.o"
+  GLFONT_OBJS=""
+else
+  AC_DEFINE(HAVE_GLBITMAP)
+  GLFPS_OBJS="fps-gl.o glxfonts.o"
+  GLFONT_OBJS="texfont.o"
 fi
 
-if test -n "$with_zippy_req" ; then
-  ac_cv_zippy_program=""
-  case "$with_zippy_req" in
-    /*)
-      AC_MSG_CHECKING([for $with_zippy_req])
-      if test -x "$with_zippy_req" ; then
-        AC_MSG_RESULT(yes)
-      else
-        AC_MSG_RESULT(no)
-        with_zippy=""
-      fi
+
+###############################################################################
+#
+#       Check for -lgdk_pixbuf.
+#       These tests are for gdk_pixbuf usage of the hacks, 
+#       not xscreensaver-demo (thus we have to test again to get
+#       the libraries right: don't want to pull in all of GTK
+#       for the hacks.)
+#
+###############################################################################
+
+have_gdk_pixbuf=no
+with_gdk_pixbuf_req=unspecified
+AC_ARG_WITH(pixbuf,
+[  --with-pixbuf           Include support for the GDK-Pixbuf library in some
+                          demos, which will make it possible for them to read
+                          GIF, JPEG, and PNG files as well.],
+  [with_gdk_pixbuf="$withval"; with_gdk_pixbuf_req="$withval"],
+  [with_gdk_pixbuf=yes])
+
+# if --with-pixbuf=/directory/ was specified, remember that directory so that
+# we can also look for the `gdk-pixbuf-config' program in that directory.
+case "$with_gdk_pixbuf" in
+  /*)
+    gdk_pixbuf_dir="$with_gdk_pixbuf"
     ;;
-    *)
-      # don't cache
-      unset ac_cv_path_zip2
-      AC_PATH_PROG(zip2, $with_zippy_req, [])
-      if test "$zip2" = ""; then
-        with_zippy=""
-      fi
+  *)
+    gdk_pixbuf_dir=""
     ;;
-  esac
-  ac_cv_zippy_program="$with_zippy"
+esac
 
-elif test -n "$ac_cv_zippy_program"; then
-  AC_MSG_RESULT([checking for zippy... (cached) $ac_cv_zippy_program])
+HANDLE_X_PATH_ARG(with_gdk_pixbuf, --with-pixbuf, GDK_PIXBUF)
+
+if test "$with_gdk_pixbuf" != yes -a "$with_gdk_pixbuf" != no ; then
+  echo "error: must be yes or no: --with-pixbuf=$with_gdk_pixbuf"
+  exit 1
 fi
 
-if test ! -n "$ac_cv_zippy_program"; then
+if test "$with_gdk_pixbuf" = yes; then
+  have_gdk_pixbuf=no
 
-  AC_CHECK_PROGS(emacs_exe, emacs)
-  AC_CHECK_PROGS(xemacs_exe, xemacs)
+  pkgs=''
+  ok="yes"
 
-  ac_cv_zippy_program=""
-  eargs='-batch -q -nw --eval'
+  pkg_check_version gdk-pixbuf-2.0      2.0.0
+  pkg_check_version gdk-pixbuf-xlib-2.0 2.0.0
+  have_gdk_pixbuf="$ok"
 
-  if test -n "$emacs_exe" ; then
-    AC_MSG_CHECKING([for emacs yow])
-    #
-    # get emacs to tell us where the libexec directory is.
-    #
-    dir=`$emacs_exe $eargs '(princ (concat exec-directory "\n"))' \
-        2>/dev/null | tail -1`
-    dir=`echo "$dir" | sed 's@///*@/@g;s@/$@@'`
+  if test "$have_gdk_pixbuf" = yes; then
+    AC_CACHE_CHECK([for gdk-pixbuf includes], ac_cv_gdk_pixbuf_config_cflags,
+               [ac_cv_gdk_pixbuf_config_cflags=`$pkg_config --cflags $pkgs`])
+    AC_CACHE_CHECK([for gdk-pixbuf libs], ac_cv_gdk_pixbuf_config_libs,
+               [ac_cv_gdk_pixbuf_config_libs=`$pkg_config --libs $pkgs`])
+  fi
+
+  ac_gdk_pixbuf_config_cflags=$ac_cv_gdk_pixbuf_config_cflags
+  ac_gdk_pixbuf_config_libs=$ac_cv_gdk_pixbuf_config_libs
+
+
+  if test "$have_gdk_pixbuf" = yes; then
     #
-    # try running libexec/yow and see if it exits without error.
+    # we appear to have pixbuf; check for headers/libs to be sure.
     #
-    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
-       AC_MSG_RESULT(no)
+    ac_save_gdk_pixbuf_CPPFLAGS="$CPPFLAGS"
+    CPPFLAGS="$CPPFLAGS $ac_gdk_pixbuf_config_cflags"
+
+    have_gdk_pixbuf=no
+
+    # check for header A...
+    AC_CHECK_X_HEADER(gdk-pixbuf/gdk-pixbuf.h, [have_gdk_pixbuf=yes])
+
+    # if that worked, check for header B...
+    if test "$have_gdk_pixbuf" = yes; then
+      have_gdk_pixbuf=no
+      gdk_pixbuf_halfassed=yes
+      AC_CHECK_X_HEADER(gdk-pixbuf/gdk-pixbuf-xlib.h,
+                        [have_gdk_pixbuf=yes
+                         gdk_pixbuf_halfassed=no])
+
+      # yay, it has a new name in Gtk 2.x...
+      if test "$have_gdk_pixbuf" = no; then
+        have_gdk_pixbuf=no
+        gdk_pixbuf_halfassed=yes
+        AC_CHECK_X_HEADER(gdk-pixbuf-xlib/gdk-pixbuf-xlib.h,
+                          [have_gdk_pixbuf=yes
+                           gdk_pixbuf_halfassed=no])
       fi
     fi
+    CPPFLAGS="$ac_save_gdk_pixbuf_CPPFLAGS"
   fi
 
-  if test -z "$ac_cv_zippy_program" ; then
-    AC_MSG_CHECKING([for xemacs yow])
-    if test -n "$xemacs_exe" ; 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`
-      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 $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([,])
-
-         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
+  if test "$have_gdk_pixbuf" = yes; then
+    # we have the headers, now check for the libraries
+    have_gdk_pixbuf=no
+    gdk_pixbuf_halfassed=yes
+
+    AC_MSG_RESULT(checking for gdk_pixbuf usability...)
+
+    # library A...
+    AC_CHECK_X_LIB(c, gdk_pixbuf_new_from_file, [have_gdk_pixbuf=yes],,
+                   $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm)
+    # library B...
+    if test "$have_gdk_pixbuf" = yes; then
+      have_gdk_pixbuf=no
+      AC_CHECK_X_LIB(c, gdk_pixbuf_xlib_init,
+                     [have_gdk_pixbuf=yes
+                      gdk_pixbuf_halfassed=no],,
+                     $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm)
     fi
   fi
 
-  # if that didn't work, try for some other programs...
-  if test -z "$ac_cv_zippy_program" ; then
-    fortune=''
-    AC_CHECK_PROGS(fortune, [fortune zippy yow])
-    # 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)
-    fi
+  if test "$have_gdk_pixbuf" = yes; then
+    INCLUDES="$INCLUDES $ac_gdk_pixbuf_config_cflags"
+    XPM_LIBS="$ac_gdk_pixbuf_config_libs"
+    AC_DEFINE(HAVE_GDK_PIXBUF)
+  else
+    AC_MSG_RESULT(checking for gdk_pixbuf usability... no)
   fi
-fi
 
-if test -z "$ac_cv_zippy_program" ; then
-  ac_cv_zippy_program=fortune
+  if test "$have_gdk_pixbuf" = yes; then
+    AC_CHECK_X_LIB(c, gdk_pixbuf_apply_embedded_orientation,
+                     [AC_DEFINE(HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION)],,
+                     $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm)
+  fi
 fi
 
-AC_DEFINE_UNQUOTED(ZIPPY_PROGRAM, "$ac_cv_zippy_program")
 
+###############################################################################
+#
+#       Check for -lXpm.
+#
+###############################################################################
 
+have_xpm=no
+with_xpm_req=unspecified
+AC_ARG_WITH(xpm,
+[  --with-xpm              Include support for XPM files in some demos.
+                          (Not needed if Pixbuf is used.)],
+  [with_xpm="$withval"; with_xpm_req="$withval"],[with_xpm=yes])
 
+HANDLE_X_PATH_ARG(with_xpm, --with-xpm, XPM)
 
-# Allow locking to be disabled at compile-time.
+if test "$with_xpm" = yes; then
+  AC_CHECK_X_HEADER(X11/xpm.h,
+                   [have_xpm=yes
+                    AC_DEFINE(HAVE_XPM)
+                    XPM_LIBS="-lXpm $XPM_LIBS"],,
+                    [#include <X11/Xlib.h>])
+elif test "$with_xpm" != no; then
+  echo "error: must be yes or no: --with-xpm=$with_xpm"
+  exit 1
+fi
+
+# See comment near $motif_requires_xpm, above.
+# Need to do this here, after both Motif and XPM have been checked for.
 #
-have_kerberos=no
-with_kerberos_req=unspecified
-have_shadow=no
-with_shadow_req=unspecified
-have_pam=no
-with_pam_req=unspecified
-need_setuid=no
+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
 
-AC_ARG_ENABLE(locking,[
-Screen Locking options:
+if test "$XPM_LIBS" = "" ; then
+  XPM_LIBS=$(MINIXPM)
+fi
 
-  --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
-  true
-elif test "$enable_locking" = no; then
-  AC_DEFINE(NO_LOCKING)
-else
-  echo "error: must be yes or no: --enable-locking=$enable_locking"
+
+###############################################################################
+#
+#       Check for -ljpeg
+#
+###############################################################################
+
+have_jpeg=no
+with_jpeg_req=unspecified
+jpeg_halfassed=no
+AC_ARG_WITH(jpeg,
+[  --with-jpeg             Include support for the JPEG library.],
+  [with_jpeg="$withval"; with_jpeg_req="$withval"],
+  [with_jpeg=yes])
+
+HANDLE_X_PATH_ARG(with_jpeg, --with-jpeg, JPEG)
+
+if test "$with_jpeg" != yes -a "$with_jpeg" != no ; then
+  echo "error: must be yes or no: --with-jpeg=$with_jpeg"
   exit 1
 fi
 
+if test "$with_jpeg" = yes; then
+
+  have_jpeg=no
+  AC_CHECK_X_HEADER(jpeglib.h, [have_jpeg=yes])
 
+  if test "$have_jpeg" = yes; then
+    # we have the header, now check for the library
+    have_jpeg=no
+    jpeg_halfassed=yes
+    AC_CHECK_X_LIB(jpeg, jpeg_start_compress,
+                   [have_jpeg=yes
+                    jpeg_halfassed=no
+                    JPEG_LIBS="-ljpeg"
+                    AC_DEFINE(HAVE_JPEGLIB)])
+  fi
+fi
 
-# Check to see if we can lock Virtual-Terminal switching, but allow that 
-# to be disabled at compile-time.
+
+###############################################################################
+#
+#       Check for pty support: this allows 'phosphor' and 'apple2'
+#      to run curses-based programs, or be used as terminal windows.
 #
-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
+###############################################################################
+
+PTY_LIBS=
+AC_CHECK_HEADERS(pty.h util.h)
+AC_CHECK_X_LIB(util, forkpty,
+               [PTY_LIBS="-lutil"
+                ac_have_forkpty=yes
+                AC_DEFINE(HAVE_FORKPTY)])
+
+if test "$ac_have_forkpty" != yes ; then
+  # we don't need (or have) -lutil on MacOS 10.4.2...
+  AC_CHECK_X_LIB(c, forkpty,
+                 [PTY_LIBS=""
+                  AC_DEFINE(HAVE_FORKPTY)])
+fi
 
-  AC_MSG_CHECKING(for the VT_LOCKSWITCH ioctl)
-  AC_CACHE_VAL(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
-  AC_MSG_RESULT($ac_vt_lockswitch)
+###############################################################################
+#
+#       Check for the XSHM server extension.
+#
+###############################################################################
 
-elif test "$enable_vt_locking" = no; then
-  true
-else
-  echo "error: must be yes or no: --enable-vt-locking=$enable_vt_locking"
+have_xshm=no
+with_xshm_req=unspecified
+AC_ARG_WITH(xshm-ext,
+[  --with-xshm-ext         Include support for the Shared Memory extension.],
+  [with_xshm="$withval"; with_xshm_req="$withval"],[with_xshm=yes])
+
+HANDLE_X_PATH_ARG(with_xshm, --with-xshm-ext, XSHM)
+
+if test "$with_xshm" = yes; then
+
+  # first check for Xshm.h.
+  AC_CHECK_X_HEADER(X11/extensions/XShm.h, [have_xshm=yes],,
+                    [#include <X11/Xlib.h>])
+
+  # 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
+
+  # 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
+
+  # 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
 
-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
+
+###############################################################################
+#
+#       Check for the DOUBLE-BUFFER server extension.
+#
+###############################################################################
+
+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])
+
+HANDLE_X_PATH_ARG(with_xdbe, --with-xdbe-ext, DOUBLE-BUFFER)
+
+if test "$with_xdbe" = yes; then
+
+  AC_CHECK_X_HEADER(X11/extensions/Xdbe.h, [have_xdbe=yes],,
+                    [#include <X11/Xlib.h>])
+  if test "$have_xdbe" = yes; then
+    AC_DEFINE(HAVE_DOUBLE_BUFFER_EXTENSION)    
+  fi
+
+elif test "$with_xdbe" != no; then
+  echo "error: must be yes or no: --with-xdbe-ext=$with_xshm"
+  exit 1
+fi
+
+
+###############################################################################
+#
+#       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 extension.],
+  [with_readdisplay="$withval"; with_readdisplay_req="$withval"],
+  [with_readdisplay=yes])
+
+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),,
+                    [#include <X11/Xlib.h>])
+elif test "$with_readdisplay" != no; then
+  echo "error: must be yes or no: --with-readdisplay=$with_readdisplay"
+  exit 1
 fi
 
 
+###############################################################################
+#
+#       Check for a directory full of images to use as the default value
+#      of the "imageDirectory" preference.
+#
+###############################################################################
+
+have_imagedir=no
+with_imagedir_req=unspecified
+
+AC_ARG_WITH(image-directory,
+[  --with-image-directory  Arg is the default directory from which some demos
+                          will choose random images to display.],
+  [with_imagedir="$withval"; with_imagedir_req="$withval"],
+  [with_imagedir=yes])
+# no HANDLE_X_PATH_ARG for this one
+
+case "$with_imagedir" in
+  /*)
+    # absolute path
+    AC_MSG_CHECKING([for image directory $with_imagedir])
+    if test -d "$with_imagedir" ; then
+      AC_MSG_RESULT(yes)
+    else
+      AC_MSG_RESULT(no)
+      with_imagedir=""
+    fi
+  ;;
+  yes)
+    with_imagedir=""
+
+    #### Could use some more defaults here...
+    for dd in \
+      "/usr/share/backgrounds/images/"          \
+      "/usr/share/wallpapers/"                  \
+      "/Library/Desktop Pictures/"              \
+    ; do
+      if test -z "$with_imagedir"; then
+        AC_MSG_CHECKING([for image directory $dd])
+        if test -d "$dd" ; then
+          AC_MSG_RESULT(yes)
+          with_imagedir="$dd"
+        else
+          AC_MSG_RESULT(no)
+        fi
+      fi
+    done
+
+  ;;
+  no)
+    with_imagedir=""
+  ;;
+
+  *)
+    echo "error: must be an absolute path: --with-image-directory=$with_imagedir_req"
+    exit 1
+  ;;
+esac
+ac_cv_imagedir="$with_imagedir"
+
+DEFAULT_IMAGES_P='True'
+DEFAULT_IMAGE_DIRECTORY="$ac_cv_imagedir"
 
-if test "$enable_locking" = yes; then
+if test -z "$DEFAULT_IMAGE_DIRECTORY" ; then
+  DEFAULT_IMAGES_P='False'
+fi
 
-  # 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])
 
-  HANDLE_X_PATH_ARG(with_kerberos, --with-kerberos, Kerberos)
+###############################################################################
+#
+#       Pick a text file to use as the default of the "textFile" preference.
+#      Any old file will do, but preferably one that will make interesting
+#      shapes when displayed by "starwars" and "fontglide".
+#
+###############################################################################
 
-  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)
+have_textfile=no
+with_textfile_req=unspecified
 
-      # 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])
-       ))
+AC_ARG_WITH(text-file,
+[  --with-text-file=FILE   By default, some demos may display this file.],
+  [with_textfile="$withval"; with_textfile_req="$withval"],
+  [with_textfile=yes])
+# no HANDLE_X_PATH_ARG for this one
 
+case "$with_textfile" in
+  /*)
+    # absolute path
+    AC_MSG_CHECKING([for text file $with_textfile])
+    if test -f "$with_textfile" ; then
+      AC_MSG_RESULT(yes)
+    else
+      AC_MSG_RESULT(no)
+      with_textfile=""
     fi
-  elif test "$with_kerberos" != no; then
-    echo "error: must be yes or no: --with-kerberos=$with_kerberos"
-    exit 1
-  fi
-  
-  # Check for PAM.
-  AC_ARG_WITH(pam,
-[  --with-pam              Include support for PAM (Pluggable Authentication
-                          Modules) if possible (this is the default.)
-  --without-pam           Do not compile in support for PAM.],
-  [with_pam="$withval"; with_pam_req="$withval"],[with_pam=no])
-#### Leave PAM off by default for now, since it's buggy on Solaris
-#### (and probably Linux, but it's so hard to tell...)
-
-  HANDLE_X_PATH_ARG(with_pam, --with-pam, PAM)
-
-  if test "$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 -ldl"
-    fi
-  elif test "$with_pam" != no; then
-       echo "error: must be yes or no: --with-pam=$with_pam"
-       exit 1
-  fi
+  ;;
+  yes)
+    with_textfile=""
+
+    #### Could use some more defaults here...
+    for f in \
+      "/usr/X11R6/lib/X11/doc/README"             \
+      "/usr/share/doc/xserver-common/copyright"           \
+      "/usr/share/doc/xserver-xorg-core/copyright" \
+      "/usr/X11R6/README"                         \
+      "/usr/share/doc/libX11*/COPYING"            \
+      "/usr/X11/share/X11/doc/README*"            \
+      "/usr/share/doc/debian/debian-manifesto"     \
+    ; do
+      if test -z "$with_textfile"; then
+        AC_MSG_CHECKING([for text file $f])
+       f=`/bin/ls $f 2>&- | head -1`
+        if test -f "$f" ; then
+          AC_MSG_RESULT(yes)
+          with_textfile="$f"
+        else
+          AC_MSG_RESULT(no)
+        fi
+      fi
+    done
 
-  # Next, check for the nine billion variants of shadow passwords...
+  ;;
+  no)
+    with_textfile=""
+  ;;
 
-  pwent_cruft_done=no
-  AC_ARG_WITH(shadow,
-[  --with-shadow           Include support for shadow password authentication,
-                          if possible (this is the default, if no Kerberos or
-                          PAM.)
-  --without-shadow        Do not compile in support for shadow passwords.
-],
-  [with_shadow="$withval"; with_shadow_req="$withval"],[with_shadow=yes])
+  *)
+    echo "error: must be an absolute path: --with-text-file=$with_textfile_req"
+    exit 1
+  ;;
+esac
+ac_cv_textfile="$with_textfile"
 
-  HANDLE_X_PATH_ARG(with_shadow, --with-shadow, shadow password)
+DEFAULT_TEXT_FILE="$ac_cv_textfile"
 
-  if test "$with_shadow" = no; then
-    pwent_cruft_done=yes
-  elif test "$with_shadow" != yes; then
-    echo "error: must be yes or no: --with-shadow=$with_shadow"
-    exit 1
-  fi
 
+###############################################################################
+#
+#       Check the browser to see help URL
+#
+###############################################################################
 
-  # Sun's "adjunct" passwords.
-  #
-  if test "$pwent_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
-      pwent_cruft_done=yes
-      AC_DEFINE(HAVE_ADJUNCT_PASSWD)
-    fi
-  fi
+have_browser=no
+with_browser_req=unspecified
 
-  # DEC and SCO so-called "enhanced" security.
-  #
-  if test "$pwent_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
-      pwent_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
+AC_ARG_WITH(browser,
+[  --with-browser=BROWSER  Specify the web browser used to show the help URL.],
+  [with_browser="$withval"; with_browser_req="$withval"],
+  [with_browser=no ])
+# no HANDLE_X_PATH_ARG for this one
 
-  # HP's entry in the "Not Invented Here" Sweepstakes.
-  #
-  if test "$pwent_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
-      pwent_cruft_done=yes
-      AC_DEFINE(HAVE_HPUX_PASSWD)
+case "$with_browser" in
+  no )
+  ;;
+  * )
+    WITH_BROWSER=$with_browser
+    gnome_open_program=$with_browser
+    AC_MSG_CHECKING([for browser $with_browser])
+    with_browser_fullpath=`which $with_browser 2>/dev/null`
+    case $with_browser_fullpath in
+        /* )
+               AC_MSG_RESULT(yes)
+                have_browser=yes
+                ;;
+       * )
+              AC_MSG_RESULT(no)
+# Only warning: we don't want to install all packages for the 
+# dependency of the browser in building stage...
+              echo "WARNING: browser not found: --with-browser=$with_browser"
+              ;;
+    esac
+  ;;
+esac
+ac_cv_browser="$with_browser"
 
-      # on HPUX, bigcrypt is in -lsec
-      AC_CHECK_LIB(sec, bigcrypt, [PASSWD_LIBS="$PASSWD_LIBS -lsec"])
-    fi
-  fi
+###############################################################################
+#
+#       Check whether it's ok to install some hacks as setuid (e.g., "sonar")
+#       This should be safe, but let's give people the option.
+#
+###############################################################################
 
-  # Traditional (ha!) shadow passwords.
-  #
-  if test "$pwent_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
-      pwent_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
+setuid_hacks_default=no
+setuid_hacks="$setuid_hacks_default"
+AC_ARG_WITH(setuid-hacks,
+[  --with-setuid-hacks     Allow some demos to be installed `setuid root'
+                          (which is needed in order to ping other hosts.)
+],
+  [setuid_hacks="$withval"], [setuid_hacks="$setuid_hacks_default"])
 
-  # 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 "$pwent_cruft_done" = no ; 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
-      pwent_cruft_done=yes
-    fi
-  fi
+HANDLE_X_PATH_ARG(setuid_hacks, --with-setuid-hacks, setuid hacks)
 
-  # 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
+if test "$setuid_hacks" = yes; then
+  true
+elif test "$setuid_hacks" != no; then
+  echo "error: must be yes or no: --with-setuid-hacks=$setuid_hacks"
+  exit 1
+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
+###############################################################################
+#
+#       Done testing.  Now, set up the various -I and -L variables,
+#       and decide which GUI program to build by default.
+#
+###############################################################################
 
-fi
+DEPEND=makedepend
+DEPEND_FLAGS=
+DEPEND_DEFINES=
 
 
 if test \! -z "$includedir" ; then 
-  INCLUDES="-I$includedir"
+  INCLUDES="$INCLUDES -I$includedir"
 fi
 
 if test \! -z "$libdir" ; then
@@ -1858,27 +3710,18 @@ if test \! -z "$libdir" ; then
 fi
 
 
-##### should have options to override the DEPEND crap, I guess...
-DEPEND=makedepend
-DEPEND_FLAGS=
-DEPEND_DEFINES=
-
-
-# Done testing things -- now substitute in some stuff for the Makefiles.
-#
+PREFERRED_DEMO_PROGRAM=''
+ALL_DEMO_PROGRAMS=
 if test "$have_motif" = yes; then
-  AC_DEFINE(HAVE_MOTIF)
-  TOOLKIT_SRCS='$(MOTIF_SRCS)'
-  TOOLKIT_OBJS='$(MOTIF_OBJS)'
-elif test "$have_athena" = yes; then
-  AC_DEFINE(HAVE_ATHENA)
-  TOOLKIT_SRCS='$(ATHENA_SRCS)'
-  TOOLKIT_OBJS='$(ATHENA_OBJS)'
-else
-  TOOLKIT_SRCS=''
-  TOOLKIT_OBJS=''
+  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
 
+
 if test "$have_kerberos" = yes; then
   PASSWD_SRCS="$PASSWD_SRCS \$(KERBEROS_SRCS)"
   PASSWD_OBJS="$PASSWD_OBJS \$(KERBEROS_OBJS)"
@@ -1887,6 +3730,15 @@ if test "$have_pam" = yes; then
   PASSWD_SRCS="$PASSWD_SRCS \$(PAM_SRCS)"
   PASSWD_OBJS="$PASSWD_OBJS \$(PAM_OBJS)"
   INSTALL_PAM="install-pam"
+fi
+if test "$enable_pam_check_account_type" = yes; then
+  COMMENT_PAM_CHECK_ACCOUNT=""
+else
+  COMMENT_PAM_CHECK_ACCOUNT="#"
+fi
+if test "$have_passwd_helper" = yes; then
+  PASSWD_SRCS="$PASSWD_SRCS \$(PWHELPER_SRCS)"
+  PASSWD_OBJS="$PASSWD_OBJS \$(PWHELPER_OBJS)"
 fi
   PASSWD_SRCS="$PASSWD_SRCS \$(PWENT_SRCS)"
   PASSWD_OBJS="$PASSWD_OBJS \$(PWENT_OBJS)"
@@ -1896,60 +3748,210 @@ 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 "$ac_macosx" = yes; then
+  EXES_OSX='$(EXES_OSX)'
+  SCRIPTS_OSX='$(SCRIPTS_OSX)'
+  MEN_OSX='$(MEN_OSX)'
+else
+  EXES_OSX=
+  SCRIPTS_OSX=
+  MEN_OSX=
+fi
+
+
+INSTALL_SETUID='$(INSTALL_PROGRAM) $(SUID_FLAGS)'
+
 if test "$need_setuid" = yes; then
   NEED_SETUID=yes
-  INSTALL_SETUID='$(INSTALL) $(SUID_FLAGS)'
 else
   NEED_SETUID=no
-  INSTALL_SETUID='$(INSTALL_PROGRAM)'
+fi
+
+if test "$setuid_hacks" = yes; then
+  SETUID_HACKS=yes
+else
+  SETUID_HACKS=no
 fi
 
 tab='  '
 if test "$have_gl" = yes; then
   GL_EXES='$(GL_EXES)'
-  GL_KLUDGE=${tab}
+  SUID_EXES='$(SUID_EXES)'
+  RETIRED_GL_EXES='$(RETIRED_GL_EXES)'
+  GL_UTIL_EXES='$(GL_UTIL_EXES)'
+  GL_MEN='$(GL_MEN)'
+  GL_KLUDGE=" "
+else
+  GL_KLUDGE="-"
+fi
+
+if test "$have_gle" = yes; then
+  GLE_EXES='$(GLE_EXES)'
+  GLE_KLUDGE=" "
+else
+  GLE_KLUDGE="-"
+fi
+
+if test "$have_jpeg" = yes -a "$have_gdk_pixbuf" = yes; then
+ JPEG_EXES='$(JPEG_EXES)'
+fi
+
+
+# Another substitution in the XScreenSaver.ad.in file:
+#
+if test "$gnome_open_program" != ''; then
+  GNOME24=''
+  GNOME22='!   '
+  NOGNOME='!   '
+elif test "$gnome_url_show_program" != ''; then
+  GNOME24='!   '
+  GNOME22=''
+  NOGNOME='!   '
 else
-  GL_KLUDGE='  -'${tab}
+  GNOME24='!   '
+  GNOME22='!   '
+  NOGNOME=''
+fi
+
+
+# Set PO_DATADIR to something sensible.
+#
+AC_MSG_CHECKING([for locale directory])
+if test -n "$GTK_DATADIR" ; then
+  PO_DATADIR="$GTK_DATADIR"
+elif test "$have_gtk" = yes; then
+  PO_DATADIR=`$pkg_config --variable=prefix gtk+-2.0`
+  PO_DATADIR="$PO_DATADIR/share"
+fi
+
+if test -z "$PO_DATADIR" ; then
+  #
+  # #### Total fucking kludge --
+  # Map /build/prefix/usr/X11R6/share/ to /build/prefix/usr/share/
+  # but of course we need to expand all the nested variables to do that...
+  #
+  dd=`eval eval eval eval eval eval eval eval eval eval eval echo $datadir`
+  PO_DATADIR=`echo $dd | sed 's@/X11R6/@/@'`
 fi
 
+AC_MSG_RESULT($PO_DATADIR/locale)
+
+
+# canonicalize slashes.
+HACK_CONF_DIR=`echo "${HACK_CONF_DIR}" | sed 's@/$@@;s@//*@/@g'`
+
+# gcc 3.0 likes to issue this warning for every file:
+#
+# cc1: warning: changing search order for system directory "/usr/local/include"
+# cc1: warning:   as it has already been specified as a non-system directory
+#
+# Yay.  We can only avoid that by deleting "-I${prefix}/include" from the list.
+# Which *should* be totally redundant, and thus an ok thing to delete?
+#
+INCLUDES=`echo "$INCLUDES" | sed 's@ -I${prefix}/include@@g;'`
+
+
+###############################################################################
+#
+#       Perform substitutions and write Makefiles.
+#
+###############################################################################
+
 AC_SUBST(INCLUDES)
 
+AC_SUBST(PREFERRED_DEMO_PROGRAM)
+AC_SUBST(ALL_DEMO_PROGRAMS)
 AC_SUBST(SAVER_LIBS)
-AC_SUBST(TOOLKIT_LIBS)
+AC_SUBST(MOTIF_LIBS)
+AC_SUBST(GTK_LIBS)
+AC_SUBST(XML_LIBS)
+AC_SUBST(JPEG_LIBS)
 AC_SUBST(HACK_LIBS)
 AC_SUBST(XPM_LIBS)
+AC_SUBST(PTY_LIBS)
 AC_SUBST(GL_LIBS)
+AC_SUBST(GLE_LIBS)
+AC_SUBST(XDPMS_LIBS)
+AC_SUBST(XINERAMA_LIBS)
 AC_SUBST(PASSWD_LIBS)
 AC_SUBST(INSTALL_SETUID)
+AC_SUBST(SETUID_HACKS)
 AC_SUBST(INSTALL_DIRS)
 AC_SUBST(NEED_SETUID)
 AC_SUBST(INSTALL_PAM)
-AC_SUBST(SGI_VIDEO_OBJS)
-AC_SUBST(SGI_VIDEO_LIBS)
+AC_SUBST(HAVE_PAM_FAIL_DELAY)
+AC_SUBST(COMMENT_PAM_CHECK_ACCOUNT)
+AC_SUBST(NEW_LOGIN_COMMAND)
+AC_SUBST(NEW_LOGIN_COMMAND_P)
+AC_SUBST(DEFAULT_IMAGES_P)
+AC_SUBST(DEFAULT_IMAGE_DIRECTORY)
+AC_SUBST(DEFAULT_TEXT_FILE)
+AC_SUBST(WITH_BROWSER)
+
+AC_SUBST(OBJCC)
+AC_SUBST(EXES_OSX)
+AC_SUBST(SCRIPTS_OSX)
+AC_SUBST(MEN_OSX)
 
-AC_SUBST(TOOLKIT_SRCS)
-AC_SUBST(TOOLKIT_OBJS)
 AC_SUBST(PASSWD_SRCS)
 AC_SUBST(PASSWD_OBJS)
 AC_SUBST(XMU_SRCS)
 AC_SUBST(XMU_OBJS)
+AC_SUBST(XMU_LIBS)
+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(JPEG_EXES)
 AC_SUBST(GL_EXES)
+AC_SUBST(RETIRED_GL_EXES)
+AC_SUBST(SUID_EXES)
+AC_SUBST(GL_UTIL_EXES)
+AC_SUBST(GL_MEN)
 AC_SUBST(GL_KLUDGE)
+AC_SUBST(GLE_EXES)
+AC_SUBST(GLE_KLUDGE)
+AC_SUBST(JWZGLES_OBJS)
+AC_SUBST(GLFPS_OBJS)
+AC_SUBST(GLFONT_OBJS)
+AC_SUBST(GNOME24)
+AC_SUBST(GNOME22)
+AC_SUBST(NOGNOME)
 AC_SUBST(HACKDIR)
+AC_SUBST(HACKDIR_FULL)
+AC_SUBST(GTK_DATADIR)
+AC_SUBST(PO_DATADIR)
+AC_SUBST(HACK_CONF_DIR)
+AC_SUBST(GTK_EXTRA_OBJS)
+
+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
+          driver/xscreensaver.pam
+          hacks/Makefile
+          hacks/glx/Makefile
+          po/Makefile.in
+          driver/XScreenSaver.ad)
+
+###############################################################################
+#
+#       Print some warnings at the end.
 #
+###############################################################################
+
 warn_prefix_1="    Warning:"
 warn_prefix_2="       Note:"
 warn_prefix="$warn_prefix_1"
@@ -1968,7 +3970,8 @@ warn() {
   warnpre
   if test "$warning" = long ; then echo '' ; fi
   warning=yes
-  echo "$warn_prefix $@"
+  rest="$@"
+  echo "$warn_prefix $rest"
 }
 
 warnL() {
@@ -1976,11 +3979,13 @@ warnL() {
   warnpre
   warning=yes
   if test "$was" != no ; then echo '' ; fi
-  echo "$warn_prefix $@"
+  rest="$@"
+  echo "$warn_prefix $rest"
 }
 
 warn2() {
-  echo "             $@"
+  rest="$@"
+  echo "             $rest"
   warning=long
 }
 
@@ -2001,10 +4006,6 @@ 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
-  warn 'The MIT saver extension was requested, but was not found.'
-fi
-
 if test "$with_xidle_req" = yes -a "$have_xidle" = no ; then
   warn 'The XIdle extension was requested, but was not found.'
 fi
@@ -2025,24 +4026,106 @@ if test "$with_dpms_req" = yes -a "$have_dpms" = no ; then
   warn 'The DPMS 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 "the \`xscreensaver-demo' program requires one or the"
-  warn2 "other."
-  proselytize_motif=no
+if test "$with_xinerama_req" = yes -a "$have_xinerama" = no ; then
+  warn 'The Xinerama 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_randr_req" = yes -a "$have_randr" = no ; then
+  warn 'The RANDR 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 "$pkg_config" = false ; then
+  warnL 'The "pkg-config" program was not found.  Without that,'
+  warn2 "detection of the various GTK libraries won't work."
+else
+  pkgerr=`$pkg_config --list-all 2>&1 >/dev/null`
+  if test "x$pkgerr" != "x" ; then
+    warnL 'The "pkg-config" program produces errors.  This often causes'
+    warn2 "detection of the various GTK libraries to malfunction."
+    warn2 "The errors are:"
+    echo ''
+    echo "$pkgerr" | sed 's/^/             > /g'
+  fi
+fi
+
+if test "$gtk_halfassed" != no ; then
+  warnL "GTK version $gtk_halfassed was found, but at least one supporting"
+  warn2 "library ($gtk_halfassed_lib) was not, so GTK can't be used."
+  warn2 "Perhaps some of the development packages are not installed?"
+  if test "$have_gtk" = yes ; then
+    v="$ac_gtk_version_string"
+    warn2 "GTK $v is also installed, so it will be used instead."
+    warn2 "Please read the above output and the \`config.log' file"
+    warn2 "for more details."
+  fi
+fi
+
+motif_warn2() {
+  warn2 'Though the Motif front-end to xscreensaver is still'
+  warn2 'maintained, it is no longer being updated with new'
+  warn2 'features: all new development on the xscreensaver-demo'
+  warn2 'program is happening in the GTK version, and not in the'
+  warn2 'Motif version.  It is recommended that you build against'
+  warn2 'GTK instead of Motif.  See <http://www.gtk.org/>.'
+}
+
+if test "$have_motif" = no -a "$have_gtk" = no; then
+
+  if test "$with_motif" = yes; then
+    warnL "Neither the GTK nor Motif libraries were found; the"
+    warn2 "\`xscreensaver-demo' program requires one of these."
+    echo ''
+    motif_warn2
+  else
+    warnL "The GTK libraries do not seem to be available; the"
+    warn2 "\`xscreensaver-demo' program requires them."
+#   echo ''
+#   warn2 'You can use Motif or Lesstif instead of GTK (use the'
+#   warn2 "\`--with-motif' option) but that is NOT recommended."
+#   motif_warn2
+  fi
 
 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 "$jurassic_gtk" = yes ; then
+
+  pref_gtk=2.0
+
+  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."
+
+elif test "$with_gtk_req" = yes -a "$have_gtk" = no ; then
+  warnL "Use of Gtk was requested, but it wasn't found."
+fi
+
 
-elif test "$with_athena_req" = yes -a "$have_athena" = no ; then
-  warnL "Use of Athena was requested, but it wasn't found;"
-  warn2 "Motif will be used instead."
+if test "$have_gtk" = yes -a "$have_gdk_pixbuf" = no ; then
+  warn  "GTK is being used, but the GDK-Pixbuf library and/or"
+  warn2 "headers were not found.  That can't be good.  Please"
+  warn2 "install the GDK-Pixbuf development kit and re-configure."
 fi
 
 if test "$have_motif" = yes -a "$have_lesstif" = yes ; then
 
-  preferred_lesstif=0.86
+  preferred_lesstif=0.92
 
   if test "$lesstif_version" = unknown; then
     warnL "Unable to determine the LessTif version number!"
@@ -2058,47 +4141,109 @@ if test "$have_motif" = yes -a "$have_lesstif" = yes ; then
   fi
 fi
 
-if test "$proselytize_motif" = yes ; then
-    warnL "Athena widgets are being used instead of Motif."
-    warn2 "The \`xscreensaver-demo' program looks much better"
-    warn2 "with Motif.  Wouldn't you rather be using Motif?"
-    warn2 "It is shipped by every commercial Unix vendor;"
-    warn2 "and there is a free implementation available as"
-    warn2 "well: see <http://www.lesstif.org/>."
-fi
 
+if test "$have_motif" = yes -a "$have_gtk" = no ; then
+  warn  'Motif is being used, and GTK is not.'
+  echo  ''
+  motif_warn2
+fi
 
-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."
+if test "$with_xpm_req" = yes -a "$have_xpm" = no; then
+  warnL 'Use of XPM was requested, but it was not found.'
+fi
 
-  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
+if test "$with_gdk_pixbuf_req" = yes  -a "$have_gdk_pixbuf" = no; then
+  warnL 'Use of GDK-Pixbuf was requested, but it was not found.'
 fi
 
+if test "$have_gdk_pixbuf" = no -o "$gdk_pixbuf_halfassed" = yes || \
+   test "$have_gdk_pixbuf" = no -a "$have_xpm" = no ; then
+
+  if test "$with_gdk_pixbuf_req" = yes ; then
+    true
+  elif test "$with_gdk_pixbuf_req" = no ; then
+    warnL 'The GDK-Pixbuf library is not being used.'
+  else
+    warnL 'The GDK-Pixbuf library was not found.'
+  fi
 
-if test "$have_xpm" = no ; then
-  if test "$with_xpm_req" = yes ; then
-    warnL 'Use of XPM was requested, but it was not found.'
+  if test "$with_xpm_req" = yes -o "$have_xpm" = yes ; then
+    true
   elif test "$with_xpm_req" = no ; then
-    noteL 'The XPM library is not being used.'
+    warnL 'The XPM library is not being used.'
   else
-    noteL 'The XPM library was not found.'
+    warnL 'The XPM library was not found.'
+  fi
+
+  if test "$have_gdk_pixbuf" = no -a "$have_xpm" = yes ; then
+    warn2 'The XPM library is being used instead.'
+  fi
+
+  if test "$gdk_pixbuf_halfassed" = yes ; then
+    echo ''
+    warn2 'More specifically, we found the headers, but not the'
+    warn2 'libraries; so either GDK-Pixbuf 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 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/>.'
+  warn2 'Some of the demos will not use images as much as they could.'
+  warn2 'You should consider installing GDK-Pixbuf and re-running'
+  warn2 'configure.  (GDK-Pixbuf is recommended over XPM, as it'
+  warn2 'provides support for more image formats.)'
+fi
+
+
+if test "$have_jpeg" = no ; then
+  if test "$with_jpeg_req" = yes ; then
+    warnL 'Use of libjpeg was requested, but it was not found.'
+  elif test "$with_jpeg_req" = no ; then
+    noteL 'The JPEG library is not being used.'
+  else
+    noteL 'The JPEG library was not found.'
+  fi
+
+  if test "$jpeg_halfassed" = yes ; then
+    echo ''
+    warn2 'More specifically, we found the headers, but not the'
+    warn2 'library; so either JPEG is half-installed on this'
+    warn2 "system, or something else went wrong.  The \`config.log'"
+    warn2 'file might contain some clues.'
+    echo ''
+  fi
+
+  if test "$have_gdk_pixbuf" = no ; then
+    warn2 "This means that it won't be possible for the image-manipulating"
+    warn2 "display modes to load files from disk; and it also means that"
+    warn2 "the \`webcollage' program will be much slower."
+  else
+    warn2 "This means the \`webcollage' program will be much slower."
+  fi
+fi
+
+
+if test "$have_gl" = yes -a "$ac_have_mesa_gl" = yes ; then
+  preferred_mesagl=3.4
+  mgv="$ac_mesagl_version_string"
+  pgl="$preferred_mesagl"
+
+  if test "$ac_mesagl_version" = unknown; then
+    true
+    # 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 number is $mgv --"
+    warn2 "MesaGL 2.6 and earlier have a security bug.  It is strongly"
+    warn2 "recommended that you upgrade to at least version $preferred_mesagl."
+
+  elif test \! "$ac_mesagl_version" -gt 3003; then
+    warnL "MesaGL version number is $mgv --"
+    warn2 "MesaGL 3.3 and earlier have some bugs; it is recommended"
+    warn2 "that you upgrade to $pgl or newer."
+  fi
 fi
 
 if test "$have_gl" = no ; then
@@ -2110,23 +4255,64 @@ if test "$have_gl" = no ; then
     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 "re-running configure.  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_readdisplay_req" = yes -a "$have_readdisplay" = no ; then
-  warn 'Use of XReadDisplay was requested, but it was not found.'
+
+if test "$have_gl" = yes -a "$have_gle" = no ; then
+
+ # nobody cares about this; don't print the warning unless it was
+ # requested and not found, or halfway-found.
+ if test "$with_gle_req" = yes -o "$gle_halfassed" = yes ; 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.  You can find the'
+  warn2 'GLE library at <http://www.linas.org/gle/>.  For general'
+  warn2 'OpenGL info, see <http://www.opengl.org/>.'
+
+ fi
 fi
 
-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.'
+
+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_kerberos_req" = yes -a "$have_kerberos" = no ; then
@@ -2141,51 +4327,32 @@ 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."
+if test "$ac_macosx" = yes ; then
+  if test "$enable_locking" = yes ; then
+    warn  "You have specified --enable-locking on MacOS X."
+    warn2 "THIS DOES NOT WORK!  Don't do this!"
   fi
 fi
 
-if test "$warning" != no; then
-  echo '' ; echo "$warnsep" ; echo ''
-fi
-
-
-AC_OUTPUT(Makefile
-         utils/Makefile
-         driver/Makefile
-         hacks/Makefile
-         hacks/glx/Makefile
-         driver/XScreenSaver.ad)
 
 # 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}
+bindir=`eval eval eval eval eval eval eval echo $bindir`
+HACKDIR=`eval eval eval eval eval eval eval echo $HACKDIR`
+HACK_CONF_DIR=`eval eval eval eval eval eval eval echo $HACK_CONF_DIR`
 
 # canonicalize slashes.
-bindir=`echo  "${bindir}"  | sed 's@/$@@;s@//*@/@g'`
-HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'`
+bindir=`echo  "${bindir}"              | sed 's@/$@@;s@//*@/@g'`
+HACKDIR=`echo "${HACKDIR}"             | sed 's@/$@@;s@//*@/@g'`
+HACK_CONF_DIR=`echo "${HACK_CONF_DIR}" | sed 's@/$@@;s@//*@/@g'`
 
 
-# Sanity check the subdir
+# Sanity check the hackdir
 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.
+    AC_MSG_ERROR([\"--with-hackdir=${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.])
@@ -2195,37 +4362,69 @@ done
 
 do_dir_warning=no
 
-# Now let's see if there's a previous RPM version already installed.  Blargh!
+# Now let's warn if there's a previous RPM version already installed.
+# But don't bother with this test if we are currently *building* an RPM.
 
-# 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 "$RPM_PACKAGE_VERSION" ; then
 
-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'`
+  rpmnames="xscreensaver xscreensaver-base xscreensaver-extras"
 
-  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 ""
+  # M4 sucks!!
+  changequote(X,Y)
+  rpmv=`(rpm -qv $rpmnames) 2>/dev/null | \
+        sed -n 's/^[-a-z]*-\([0-9][0-9]*[.][0-9][0-9a-z]*\)-.*$/\1/p' | \
+        head -1`
+  changequote([,])
 
-  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."
+  if test \! -z "$rpmv" ; then
+    rpmbdir=`rpm -ql $rpmnames | sed -n 's@^\(.*\)/xscreensaver-demo$@\1@p'`
+    rpmhdir=`rpm -ql $rpmnames | sed -n 's@^\(.*\)/popsquares$@\1@p'`
+
+    warning=no
+    warnL "There is already an installed RPM of xscreensaver $rpmv"
+    warn2 'on this system.  You might want to remove it ("rpm -ve")'
+    warn2 'before running "make install" in 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.  Try "rpmbuild -v -ba xscreensaver.spec".'
+    warn2 "See the RPM documentation for more info."
+    echo ""
+
+    if test "$rpmbdir" = "$rpmhdir" ; then
+      warn2 "The RPM version was installed in $rpmbdir/."
+      do_dir_warning=yes
+    else
+      warn2 "The RPM version was installed in $rpmbdir/,"
+      warn2 "with demos in $rpmhdir/."
+    fi
   fi
+fi
 
-  do_dir_warning=yes
+# Also warn if there's a Debian package installed.
+#
+debnames="xscreensaver xscreensaver-data xscreensaver-data-extra"
+debv=''
+for dpkg in $debnames ; do
+  if test -z "$debv"; then
+    debv=`dpkg -s $dpkg 2>/dev/null | sed -n 's/^Version: \(.*\)$/\1/p'`
+  fi
+done
+
+if test \! -z "$debv" ; then
+  debbdir=`dpkg -L $debnames 2>/dev/null | \
+            sed -n 's@^\(.*/bin/\)xscreensaver$@\1@p'`
+  debhdir=`dpkg -L $debnames 2>/dev/null | \
+            sed -n 's@^\(.*/\)popsquares$@\1@p'`
+  if test -z "$debbdir" ; then debbdir='???'; fi
+  if test -z "$debhdir" ; then debhdir='???'; fi
+
+  warning=no
+  warnL "There is already an installed dpkg of xscreensaver"
+  warn2 "version \"$debv\" on this system."
+  echo ""
+  warn2 "The dpkg was installed in $debbdir,"
+  warn2 "with demos in $debhdir."
 fi
 
 
@@ -2239,16 +4438,28 @@ if test "$do_dir_warning" = yes; then
   echo ""
   echo '      When you run "make install", the "xscreensaver",'
   echo '      "xscreensaver-demo", and "xscreensaver-command" executables'
-  echo "      will be installed in ${bindir}."
+  echo "      will be installed in ${bindir}/."
   echo ""
-  echo "      The various graphics demos (90+ 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."
-  echo ""
-  echo "$warnsep"
+  echo "      The various graphics demos (190+ different executables) will"
+  echo "      be installed in ${HACKDIR}/."
   echo ""
+  echo "      If you would prefer the demos to be installed elsewhere,"
+  echo "      you should re-run configure with the --with-hackdir=DIR"
+  echo "      option.  For more information, run \`./configure --help'."
+  warning=yes
+fi
+
+if test "$warning" != no; then
+  echo '' ; echo "$warnsep" ; echo ''
+fi
+
+if test "$do_dir_warning" = no; then
+  if test "$warning" = no; then
+    echo ''
+  fi
+  echo "User programs will be installed in ${bindir}/"
+  echo "Screen savers will be installed in ${HACKDIR}/"
+  echo "Configuration dialogs will be installed in ${HACK_CONF_DIR}/"
+  echo "System-wide default settings will be installed in ${APPDEFAULTS}/"
+  echo ''
 fi